Astro 5 (SSG)
Content collections + glob loaders. Pages are `.astro` with islands when truly needed.
Colophon
This site is hand-written, on purpose. No CMS, no theme — just Astro, a typography stack I actually like, and a small content collection per surface so additions stay cheap.
Astro 5 (SSG)
Content collections + glob loaders. Pages are `.astro` with islands when truly needed.
Tailwind CSS v4 (Vite plugin)
Custom palette: ink, paper, rust, moss, skyline, plum. No prebuilt component kit.
Space Grotesk + Inter
Space Grotesk for display headings, Inter for body. Both self-hosted as variable WOFF2; the display face is preloaded.
astro:content + MDX
Posts, projects, talks, research, books, movies, and traces — each its own zod-typed collection.
Cloudflare Pages
Static export via `astro build`, deployed with Wrangler. Fast TTFB everywhere.
PostHog (EU)
Self-hosted snippet, only public token in the bundle. No third-party fingerprinters.
GitHub + Hardcover + Medium
Contribution graph, reading shelf, and Medium feed are fetched at build, not at request time.
Claude Code + Codex
Most refactors and these new pages were paired with Claude Code; Codex used for a second opinion on tricky regex/SQL.
JS shipped
~0KB on most pages
Only Mermaid (lazy) and the PostHog snippet load JS.
Images
Resized WebP at build
Talk, run, press, and post photos live in `src/assets/` and go through Astro Image. The rest are pre-compressed.
Critical CSS
Single global stylesheet
Tailwind v4 keeps it small; no per-component CSS-in-JS.
Source is open at github.com/PuvaanRaaj. Patches and PRs welcome.