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.