colophon
What this is
A zuihitsu (“following the brush”) after Sei Shōnagon, who kept lists in a drawer of her writing desk around the year 1000 and was embarrassed when they circulated. Hers were merciless and exact: elegant things, hateful things, things that quicken the heart. This site borrows the form with one amendment a Heian court lady never needed: every checkable claim is wired to primary evidence, and what cannot be checked is written as plain observation.
How it is made
Next.js, App Router, React Server Components; pages are static first and assembled on the server. The lists are not a database and not markdown — they are typed TypeScript data, reviewed like code, and the type checker is the CMS. The CSS is written by hand: one file of tokens, a module per component, no framework. Two faces do all the work: Newsreader for everything you read, iA Writer Quattro for dates, counts, and chrome. The tokens are named for what they are — ink for the ground, lamplight for the text, murasaki for headings and links, celadon for evidence and dates.
- Newsreader
- Things that quicken the heart
- iA Writer Quattro
- 2026-08-09 · 250ms · 68ch
- --ink
- the page ground
- --lamplight
- body text
- --murasaki
- headings and links
- --celadon
- evidence marks, dates, counts, lessons
- --rule
- hairlines
- --faded
- secondary text; the ink-age floor
iA Writer Quattro is vendored in the repository under the SIL Open Font License, alongside the Newsreader files the OG card is set in; the reading face itself is fetched once at build time and self-hosted. The chips above are painted with the live custom properties, so the theme toggle repaints them. Motion is budgeted at one animation, a 250ms ink-reveal when a disclosure opens; nothing else on the site moves.
The canon grid
Every leaf renders on one CSS grid, four tracks, fixed once in globals.css: a 2.5rem inner gutter; the text column at --measure, 68ch, unchanged since the first draft; an outer margin at round(0.4 × --measure), 27ch — exactly one Quattro gloss line, since an entry carries at most one; and a spare 1fr track that takes whatever width is left. Below 76rem the grid collapses to a single block column, and the outer margin folds into each entry’s own disclosure.
The hour
The index reads the San Francisco clock, server-side. src/lib/hour.ts maps the current instant to one of six America/Los_Angeles wall-clock bands; src/content/hours.ts pairs each band with a corpus entry to quote as the epigraph, and a list to hold open, referenced by (list, index) rather than retyped — so the quote is byte-identical to its source by construction. The page revalidates hourly; the band is computed from the server clock at every render.
| Band | Hour, SF | Epigraph | Opens |
|---|---|---|---|
| small-hours | 00:00–05:00 | “Sleep, with the diff still open.”Things that are distant though near | Things that are distant though near |
| dawn | 05:00–08:00 | “The bar's first millimeter off the floor, which tells you everything the next three seconds will confirm.”Things that quicken the heart | Things that quicken the heart |
| morning | 08:00–12:00 | “Levin mowing, at the moment the scythe begins to swing itself.”Things that quicken the heart | Things I have built |
| afternoon | 12:00–17:00 | “The blast radius of a deploy. If you cannot draw it, it is not small.”Things that should be small | Things that should be small |
| dusk | 17:00–20:00 | “The net, in a shootout. Four feet by six, receding as you skate in.”Things that are distant though near | Things now in decline |
| evening | 20:00–24:00 | “War and Peace, third shelf, eye level. I have meant to reread it for ten years and can touch it from this chair.”Things that are distant though near | Elegant things |
The ledger’s ink-age
The log dries with age. src/lib/ledger/inkAge.ts steps a row’s age in days against AGE_STEPS (0, 90, 180, 365, 730) and maps the step to one of five tokens, --age-0 through --age-4, each interpolated from --lamplight toward --faded and checked AA on its own ground. A struck failure’s age is multiplied by FAILURE_FACTOR (2) before that lookup, so it dries twice as fast as an on-time neighbor. Its lesson is exempt: full celadon at any age, because the lesson is the part meant to survive. prefers-contrast: more collapses every step back to full ink.
- --age-0
- 0–89 days
- --age-1
- 90–179 days
- --age-2
- 180–364 days
- --age-3
- 365–729 days
- --age-4
- 730 days or older
The theme flip
Light is canonical now (the client’s word: “paper,” 2026-09-05); dark is not its inversion. On wide viewports the dark theme paints the text column a second, flatter tone against the deep ground — two flat colors and grid geometry, no gradient. theme.ts’s default flipped to match; the toggle and its storage key are unchanged.
The confession
Two client components run on this site: the theme toggle, and the sampling playground in the lab, which rolls its dice in your browser or not at all. Everything else is markup sent finished from the server. Evidence discloses as details elements; they open without JavaScript, in reader mode, and under curl. If a sentence does not exist in the initial HTML, it does not exist.
Evidence
Entries that make a checkable claim carry a small celadon mark. Open it and you get a label and a link to the primary source — a repository, a checkpoint, a live system, a page of working notes. Entries without proof ship unmarked; there are no placeholders, and a dead evidence link fails the build. The lifting numbers are the deliberate exception: they appear as written observation only, the way a diary would have them.
Homunculus, forthcoming
Version two of this site will contain the Homunculus: a small language model trained on my own writing, answering questions as the site rather than about it. Pessoa kept heteronyms; I intend to keep one made of matrices. It is not built, and this paragraph is currently its entire implementation.
Provenance
Designed and written by Niels-Erik Nandal, built in collaboration with Claude, Anthropic’s model, working as a pair programmer. The git history records who did what, commit by commit; nothing here pretends otherwise.
Nandal faciebat, San Francisco.