How this site was built.
Built by AI coding agents, directed by Ashwin. The words in his voice are his: any line an agent drafted stays out of production until he signs it off.
Budgets
Default page budgets, with route-specific limits where needed. The lab profile is: 390 by 844 pixels, 4x CPU slowdown, 150 ms round trips, 1.6 Mbps down, cold cache, median of 3 runs. Sizes are compressed transfer.
| Metric | Budget | Target |
|---|---|---|
| Largest contentful paint | 1.5 s | 1000 ms |
| Cumulative layout shift | 0.02 | 0.01 |
| Total blocking time | 250 ms | 50 ms |
| First-load JavaScript | 148 KB | – |
| CSS | 18 KB | 12 KB |
| HTML document | 45 KB | – |
| Total first load | 270 KB | 300 KB |
| Prefetched before interaction | 5 KB | 20 KB |
Stack
- Framework
- Next.js 16 and React 19, every page prerendered to static HTML.
- Language
- TypeScript, checked by the native compiler on every build.
- Styling
- Tailwind CSS 4 over a small set of design tokens: an exercise-book sheet, ink, the visitor’s blue pen, the teacher’s red pen, a margin and a twelve-column grid.
- Type
- Newsreader for reading, Atkinson Hyperlegible Next for the interface and numbers, Kalam for the teacher’s notes, and the system monospace for code.
- Words
- Essays and poems in MDX; everything else in typed content files. Keystatic edits both in development only.
- Hosting
- A Docker image on a small VPS behind Caddy, deployed by GitHub Actions with a key that can run one command.
Every page carries one note in its source: a line from a poem, a small programming puzzle, a credit, or a nod to the 2011 blog. View source to find it.