Problem
I wanted one place to think in public: short research notes and longer project write-ups, in a design that stays out of the way. It had to be fast, own its own content (plain Markdown files, no CMS), and cost nothing to run.
Architecture
A fully static Astro site. Content lives in two type-checked collections —
research and projects — validated by Zod schemas at build time. Pages are
zero-JS by default; the only client-side JavaScript is a small tag filter and
one React island (the animated agent-loop diagram on the home page).
src/content/{research,projects}/*.{md,mdx}
│ (glob loader + Zod schema)
▼
content collections ──▶ Astro pages ──▶ static HTML (dist/)
│
Pagefind indexes dist/ (postbuild)
│
Cloudflare Pages (CDN)
Stack
- Astro — static site generator, islands architecture
- MDX — rich content in the collections when plain Markdown isn’t enough
- Pagefind — fully static search, indexed as a postbuild step
- Cloudflare Pages — free global CDN hosting on a custom domain
Outcome
Shipped. The site builds to static HTML, searches without a server, and targets
a Lighthouse score of 95+ across the board. Adding a note is one Markdown file;
adding a project is one MDX file — then git push, and Cloudflare rebuilds.
Read how it’s built and how to add content in the repository’s README.md and
CONTENT_GUIDE.md.