Colophon

How this was made.

A colophon is a publishing tradition — a note about the tools and craft behind the work. This is ours.

Framework

Astro
Static site generator. Pages are rendered to HTML at build time; interactive components hydrate only where needed. No JavaScript is shipped to the browser for purely content pages.
Svelte
Powering all interactive calculator widgets. Chosen for its minimal runtime footprint and the fact that it compiles away rather than shipping a virtual DOM.
TypeScript
Strict mode throughout. Calculator math and data types are fully typed to catch unit errors at compile time rather than in the browser.

Typography

Inter Variable
Body text, headings, UI. The variable font means a single file covers every weight from 100 to 900 with no layout shift.
JetBrains Mono Variable
Code snippets, numerical outputs in calculators. Tabular figures are enabled so that numbers align in columns without extra CSS.

Design

Design tokens
All colours, spacing, radii, and type scales live in a single tokens.json file that feeds both the CSS custom properties and any component-level code. Change one number, it propagates everywhere.
CSS custom properties
No CSS-in-JS, no utility classes framework. Plain CSS with custom properties threaded through the design token system. Responsive type uses clamp(); colours use oklch and color-mix().
Charts
Pure SVG — no charting library. The growth charts in the calculators are hand-drawn with <path> and <linearGradient> elements computed in Svelte reactive statements. Smaller bundle, full control over every pixel.

Infrastructure

Cloudflare Pages + Workers
Static pages served from Cloudflare's edge. The planned visitor chat feature will run as a Cloudflare Worker using the Workers AI binding — staying in the same infrastructure keeps latency low and cost predictable.
GitHub
Source code and version history. Every meaningful change is a commit.

Built with AI assistance

This site was built collaboratively with GitHub Copilot Chat. The architecture decisions, content, and direction are human — the AI assists with implementation: writing component code, checking math, generating boilerplate. The wiki directory in the repository acts as a persistent memory for the agent across sessions.

This is an honest disclosure, not a disclaimer. AI assistance is a tool like any other; what matters is whether the output is correct, useful, and maintainable. I believe it is. If you find otherwise, write to me.

Last updated · site changelog