import z from "astro/zod"; import { glob } from "astro/loaders"; import { defineCollection } from "astro:content"; const writingTags = z.enum([ 'emacs', 'neovim', 'keyboards', 'triathlon', 'dev', 'design', 'linux', 'nixos', 'ghostty', 'niri', ]); const projectTags = z.enum([ 'work', 'open source', 'typescript', 'golang', 'emacs lisp', 'react', 'react native', ]); const writingSchema = z.object({ title: z.string(), tags: z.array(writingTags), author: z.string().default('Dennis'), publishedAt: z.coerce.date(), lastUpdatedAt: z.coerce.date().optional(), isPublic: z.boolean(), }); export type JournalData = z.infer; const projectSchema = z.object({ title: z.string(), tags: z.array(projectTags), isWork: z.boolean(), isLeisure: z.boolean(), year: z.number().gte(2012), isPublic: z.boolean(), }); export type ProjectData = z.infer; const blog = defineCollection({ loader: glob({ pattern: '**/*.md', base: 'src/content/blog' }), schema: writingSchema }); const projects = defineCollection({ loader: glob({ pattern: '**/*.md', base: 'src/content/projects' }), schema: projectSchema }); export const collections = { blog, projects };