ยท 719b838
Colophon
This site is a headless Umbraco build: content lives in Umbraco Cloud, and Astro turns it into static pages that Cloudflare serves from the edge.
Content
Everything you read here is written and edited in Umbraco 17, hosted on Umbraco Cloud. The site never talks to a database. At build time it pulls every page from Umbraco's Delivery API through a TypeScript client generated from the API's OpenAPI spec. I wrote up how that client is generated if you want to do the same.
Posts are built from Umbraco's Block Grid, and the backoffice previews those blocks with BlockPreview, styled from this site's own CSS so a preview looks like the page it's going on.
Publishing in Umbraco fires a webhook that kicks off a new build, so a post goes live about a minute after I hit publish. I sometimes have Claude draft posts into Umbraco through the hosted Umbraco MCP, but those only ever land as drafts. Publishing is always me.
Frontend
The frontend is Astro, and every page is prerendered to plain HTML. The only part that runs on request is the activity panel on my now page, which is an Astro server island. Code samples are highlighted at build time by Expressive Code, social images are drawn by astro-og-canvas, and there's an RSS feed if you'd rather read along that way.
Styles are hand-written Sass, organised with ITCSS layers and BEM-style class names. The type and spacing scales are fluid, worked out with Utopia.
Hosting
The built site is served by Cloudflare Workers static assets, and built by Workers Builds straight from the GitHub repo. It moved over from Cloudflare Pages in October 2026; keeping Astro's image cache between builds roughly halved the build time.
Type
- Hanken Grotesk for headings, from Google Fonts
- Inter for body text, by Rasmus Andersson
- IBM Plex Mono for code, from IBM Plex
All three are self-hosted as WOFF2 files, so no font loads from a third party.
Colour
A warm, papery palette of stone and forest green, with a faint amber wash and a grain texture drawn by an SVG noise filter in the page background. Every colour has a dark-mode pair, and the swatches below follow whichever theme you're using.
- Paper
#f5f3ee / #1a1712 - Stone
#e5dfd5 / #2d2820 - Ink
#1c1c14 / #ece7dd - Forest
#1b5e4b / #5cba9b - Amber
#c98a2b
Versions
Read from the build itself, so these are what built the page you're looking at.
| Astro | 7.2.4 |
|---|---|
| Astro Cloudflare adapter | 14.2.6 |
| Expressive Code | 0.44.1 |
| Hey API openapi-ts | 0.99.0 |
| astro-og-canvas | 0.13.0 |
| Sass | 1.103.1 |
| Wrangler | 4.147.0 |
| Node.js | 22.22.0 |
A colophon is the note at the back of a book about how it was made. This is the web version.