Colophon
How this site is built, and why it looks like this.
the stack#
- Generator —
build.py, about 1853 lines of Python. Standard library only. - Content — plain Python dicts with markdown bodies, under
content/. - Markdown — a small block parser in the generator. Headings, lists, code fences, quotes, links. That is all this site needs.
- CSS — one hand-written stylesheet. No preprocessor, no utility framework, no reset library beyond a dozen lines at the top.
- JavaScript — one file. Theme toggle, mono toggle, client-side search, keyboard shortcuts. It is optional; every page works without it.
- Hosting — static files on GitHub Pages behind the
readme.newsdomain.
by the numbers#
- 200 pieces published
- 129,965 words
- 592 minutes of reading, give or take
- 42 tags
- 0 third-party scripts, 0 cookies, 0 trackers
type#
Body text uses whatever grotesque your system already has, so nothing is downloaded. Headings, navigation, and code use your system monospace: SF Mono on macOS, Cascadia or Consolas on Windows, whatever ui-monospace resolves to elsewhere. Zero webfont requests. Zero layout shift.
There is a mono toggle in the header that switches body copy to monospace too, for people who want the full terminal experience. The setting persists.
color#
The whole palette is gray, plus one warm accent that only appears on links and focus rings. Light mode is paper. Dark mode is charcoal, not black, because pure black on an OLED panel with white text produces halation that makes long-form reading worse.
keyboard#
| key | does |
|---|---|
/ | open search |
j k | move down / up the current list |
enter | open the highlighted item |
g h | go home |
g a | go to archive |
esc | close search |
principles#
- The page should render before you notice it loading.
- Text is the interface.
- Nothing moves unless the reader moved it.
- Every URL is permanent.
- If a feature needs a tooltip to explain it, cut the feature.