How this blog is built


The whole site is Astro with content collections. Every post is a Markdown file whose frontmatter is type-checked against a Zod schema, so a typo’d category or a missing pubDate fails the build instead of shipping broken.

Categories for free

The schema pins category to a known set of values. A helper walks every published post, counts categories, and feeds both the navigation and the /categories/[category] pages. Adding a post in a new category means editing one list and writing the file — nothing else.

Drafts

Set draft: true in frontmatter and the post stays visible in astro dev but is stripped from production builds. Good enough for work-in-progress without a separate branch.

Deploy

Pushing to main triggers a Forgejo Action that runs astro build and ships the static output to Cloudflare Pages with Wrangler. No servers to babysit.

#astro#cloudflare#ci