import { defineCollection, z } from "astro:content";import { glob } from "astro/loaders";// Blog posts authored as Markdown under src/content/blog. The glob loader// turns each file into a collection entry whose `id` is the slug used in the// /blog/[...slug] route (filename without extension).const blog = defineCollection({ loader: glob({ pattern: "**/*.md", base: "./src/content/blog" }), schema: z.object({ title: z.string(), description: z.string(), date: z.coerce.date(), author: z.string().default("Rhys Sullivan"), // X/Twitter handle (without the leading @), a one-line role, and a round // avatar image, used by the author card at the top of each post. The // avatar path is served from public/ (e.g. /authors/rhys-sullivan.png). authorHandle: z.string().default("RhysSullivan"), authorRole: z.string().default("Founder of Executor"), authorAvatar: z.string().default("/authors/rhys-sullivan.png"), draft: z.boolean().default(false), }),});export const collections = { blog };
import { defineCollection, z } from "astro:content";
import { glob } from "astro/loaders";
// Blog posts authored as Markdown under src/content/blog. The glob loader
// turns each file into a collection entry whose `id` is the slug used in the
// /blog/[...slug] route (filename without extension).
const blog = defineCollection({
loader: glob({ pattern: "**/*.md", base: "./src/content/blog" }),
schema: z.object({
title: z.string(),
description: z.string(),
date: z.coerce.date(),
author: z.string().default("Rhys Sullivan"),
// X/Twitter handle (without the leading @), a one-line role, and a round
// avatar image, used by the author card at the top of each post. The
// avatar path is served from public/ (e.g. /authors/rhys-sullivan.png).
authorHandle: z.string().default("RhysSullivan"),
authorRole: z.string().default("Founder of Executor"),
authorAvatar: z.string().default("/authors/rhys-sullivan.png"),
draft: z.boolean().default(false),
}),
});
export const collections = { blog };