Colophon
How this site is built, and the checks that keep it fast and usable.
Quality gate
Every change goes through a pull request. A GitHub Action builds the site and runs Lighthouse on six pages; if performance, accessibility, best practices or SEO drops below 90 on any of them, the check fails. Scores when the gate was added, on 25 September 2026:
| Page | Performance | Accessibility | Best practices | SEO |
|---|---|---|---|---|
| Home | 100 | 100 | 100 | 100 |
| Work | 99 | 100 | 100 | 100 |
| Projects | 100 | 100 | 100 | 100 |
| Writing | 100 | 100 | 100 | 100 |
| Speaking | 100 | 100 | 100 | 100 |
| CV | 100 | 100 | 100 | 100 |
Current results are on the workflow runs page.
Built with
- Astro, static output, with a few small scripts and no framework runtime
- Schibsted Grotesk for text and B612 Mono for the console, both self-hosted
- GitHub Pages, deployed by a GitHub Action on every merge to main
- Every page works without JavaScript and respects reduced-motion settings
Live numbers
The figures under the headline come from the GitHub and PyPI APIs at build time, and the site rebuilds every night. If a source fails, that number is left out rather than shown stale.
Privacy
Visits are counted with Cloudflare Web Analytics, which sets no cookies and collects no personal data. There is nothing to accept and no banner.
For agents
My profile is available as llms.txt, llms-full.txt and resume.json (JSON Resume format), all generated from the same data as these pages. A public MCP server is planned next.
Pip
Pip is the site's plumber droid, drawn in SVG. It stays out of the way until you call it from the footer or type pip in the console.