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.
Display serif + body sans pairing
A single distinctive display face for headings, refined sans for body. No Inter, no Roboto.
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.
Largest image
Hero avatar
Astro Image handles `src/assets/img/*` at build time.
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.