Colophon

Colophon

How this site is built, and why.

Stack

This site is plain static HTML, CSS and JavaScript. No framework, no bundler, no build step — the files are the source, and they run exactly as written. Shared markup like the header and footer is duplicated by hand on every page, so each page still loads and reads correctly with JavaScript turned off.

Type

Two typefaces do all the work: Newsreader for display and headlines, Inter for body text. Both are served from Google Fonts.

Theme

Light and dark themes are driven by CSS custom properties. A small inline script reads localStorage and prefers-color-scheme before the first paint, so the page never flashes the wrong theme.

Caching

The stylesheet and scripts carry content-hashed ?v= query strings — the first eight characters of the file's SHA-256. The URL only changes when the file changes, so a returning visitor always gets the new file without a cache-busting number to bump by hand.

Hosting

Static files, deployed by git push to Cloudflare. Cloudflare Access sits in front of the private apps.

Philosophy

Accessible by default: a skip link, visible focus rings, and reduced-motion support. A print stylesheet means the page doubles as a CV. Icons are inline SVG, and the header is real markup — never injected by JavaScript.