Colophon
How this notebook is made.
How this notebook is built, hosted and kept light. Written for anyone who looks at a site and wonders what's underneath.
Built with
- Next.js 16 and React 19 in TypeScript, exported as plain static files: there is no server rendering pages on request.
- One hand-written stylesheet, with no CSS framework. The light and dark themes are the same rules with different colour tokens.
- Two typefaces, Instrument Serif and DM Sans, served from this site rather than a font service.
- Notes are Markdown files turned into HTML at build time, so the Markdown library never reaches your browser.
Kept light
- A first visit to the home page downloads about 300 KB in all, fonts and photo included. Most of that is the React runtime.
- Every game in the Lab is its own small file, downloaded only when you press Play. The command palette (⌘K or Ctrl K) loads the first time you open it.
- The photo is a 16 KB WebP.
Hosted on
- Cloudflare Workers serves the static files, and a few lines of Worker code handle the parts that need a server: game stats, the Question of the Day link previews and the CV link.
- Scores and answer counts live in Cloudflare D1, a small SQLite database. Running costs: nothing, on the free plan.
- A copy also runs on Vercel as a plain static site. Without the Worker, the games still work and simply don't show stats.
Your data
- No cookies and no ad trackers. Game progress, your streak and your theme are kept in your own browser's storage.
- When you finish a game, only the score, or whether an answer was right, is sent, to show how you compare. Nothing identifies you.
Small details
- The figure walking along the bottom of the screen is your scroll progress. It's a nod to the gait research, and it turns around when you scroll up.
- The Question of the Day preview cards are drawn once at build time, one per question, and never show the answer.
- Motion is reduced if your system asks for it, and every game can be played with a keyboard.