This site is intentionally boring in the ways that matter and hand-made in the ways that are fun. The colophon at the bottom of every page says “view source; it’s readable”. This post is the longer version of that sentence.
The stack
Astro, static output. Every page is plain HTML rendered at build time. There’s no client-side framework, no hydration, no JavaScript required to read anything. A page here is competing with a decade of my browser tabs; it should win on weight.
Charts are build-time SVG. The activity chart, the language bar, and the benchmark bars are Astro components that take arrays and emit <svg> at compile time. No chart library ships to you; the only chart JavaScript is a ~20-line hover tooltip. The numbers behind them are computed from real sources (git history across my local repos, my benchmark run logs) and stamped with the date they were computed.
~6 KB of vanilla JS, total. That covers the ⌘K palette and site search, the light/dark toggle, the sun-and-moon hero that tracks your local time of day, count-up animations on stats, and the show-more expander. Everything is written to survive Astro’s view transitions, and everything respects prefers-reduced-motion.
Search is a build artifact. The ⌘K palette fetches a JSON index that’s generated at compile time from the same markdown the pages are built from. It loads lazily on first open, never on the critical path.
Writing is markdown files in the repo. Each post is one file with frontmatter; the archive pages, homepage list, and RSS feed are all generated from the same collection. Publishing is git push.
The design choices
Light and dark are one token set. Every component reads CSS custom properties; dark mode is a swap of about twenty tokens on :root, plus a 500 ms cross-fade so the flip feels like dusk instead of a light switch.
Serif on purpose. Fraunces for the headlines and wordmark, Times for everything else. Most engineering blogs reach for the same grotesque sans; this one would rather read like a notebook.
No trackers, no analytics, no cookies. I genuinely don’t know how many people read this, and that’s fine. The like button and subscribe box are the only interactive-ish things, and they’re honest about what they are.
Security headers in vercel.json, immutable caching for hashed assets, RSS at /rss.xml. Deploys are just pushes; Vercel rebuilds the static output.
If any of this is useful to steal, steal it.