Colophon
How this site is built and why. Everything on this page can be checked with your browser's developer tools.
Stack
- Framework
- Astro, static output
- Interactivity
- React islands
- Styling
- Tailwind CSS and CSS custom properties
- Type
- IBM Plex Sans, self-hosted
- Content
- Markdown and YAML with Zod schemas
- Editing
- Keystatic, local only
- Quality
- Vitest, Playwright, axe, Lighthouse CI
- Hosting
- Cloudflare Workers static assets (Vercel as alternative)
Decisions
Each decision is recorded as an architecture decision record (ADR).
- Static output
- Git-based content, Keystatic in development only
- Host-agnostic hosting
- Content Security Policy
- Zero secrets
- Custom SVG stack map
- Tooling versions
- Command palette on demand
- Motion without a library
How content is edited
Content lives as Markdown and YAML files next to the code. I edit it in Keystatic while running the site locally, or directly in a text editor, then commit and push. The host rebuilds the site from Git. Drafts never reach the published site, and clients are described rather than named unless they have agreed.
Security headers
Sent with every response. Scripts and styles are also restricted by a per-page policy of exact hashes.
Strict-Transport-Security- Browsers only ever connect over HTTPS for the next two years, including subdomains.
max-age=63072000; includeSubDomains Content-Security-Policy- Forbids framing, plugins, foreign form targets and <base> hijacking. Script and style hashes live in a per-page meta policy generated by Astro.
frame-ancestors 'none'; base-uri 'self'; form-action 'self'; object-src 'none'; upgrade-insecure-requests X-Content-Type-Options- Stops browsers guessing file types, so a file is never executed as something it is not.
nosniff Referrer-Policy- Other sites only learn the origin a visitor came from, never the full path.
strict-origin-when-cross-origin Permissions-Policy- Turns off browser features this site never uses: camera, microphone, location, payment, USB and more.
accelerometer=(), autoplay=(), camera=(), display-capture=(), encrypted-media=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), magnetometer=(), microphone=(), midi=(), payment=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), usb=(), xr-spatial-tracking=() Cross-Origin-Opener-Policy- Isolates the browsing context from pages opened in other tabs or pop-ups.
same-origin X-Frame-Options- Legacy clickjacking protection for browsers that ignore frame-ancestors.
DENY

Next step
Let's talk
Interested in a case study, how I approach full-stack development, software architecture, AI-enabled applications or something I've built?