Colophon

How this site is built.

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.

Framework

Astro 5 (SSG)

Content collections + glob loaders. Pages are `.astro` with islands when truly needed.

Styling

Tailwind CSS v4 (Vite plugin)

Custom palette: ink, paper, rust, moss, skyline, plum. No prebuilt component kit.

Type

Display serif + body sans pairing

A single distinctive display face for headings, refined sans for body. No Inter, no Roboto.

MDX & content

astro:content + MDX

Posts, projects, talks, research, books, movies, and traces — each its own zod-typed collection.

Hosting

Cloudflare Pages

Static export via `astro build`, deployed with Wrangler. Fast TTFB everywhere.

Analytics

PostHog (EU)

Self-hosted snippet, only public token in the bundle. No third-party fingerprinters.

Build-time data

GitHub + Hardcover + Medium

Contribution graph, reading shelf, and Medium feed are fetched at build, not at request time.

AI co-pilots

Claude Code + Codex

Most refactors and these new pages were paired with Claude Code; Codex used for a second opinion on tricky regex/SQL.

Performance budget

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.

Editorial decisions

Source is open at github.com/PuvaanRaaj. Patches and PRs welcome.