Colophon
How I Built This Website
Printed books traditionally close with a colophon, a short note on how the thing was made: the typefaces, the paper, the press. I think websites deserve the same courtesy. This one brings my writing and speaking together in one place, and this page is its colophon: the stack, the design decisions, and the principles behind the build, written for the curious and for anyone weighing a similar build of their own.
The first version was a static Hugo site too, born of hard lessons from my previous WordPress sites that spent their lives being knocked over by DDoS attacks. I started writing my own generator in Perl (I’m a classically trained Software Engineer afterall), realised after a couple of weeks that better options existed, and settled on Hugo. That build served me well for almost three years. What you’re reading now is its successor, rebuilt from the ground up in June and July 2026.
The goals haven’t changed much, though the bar has risen:
- Respect the reader’s privacy: collect the minimum, keep it first-party, and give no data to third parties
- Score above 90% on usability, accessibility, best practice, and SEO
- Be easy to maintain and update from any device: MacBook, iPad, or iPhone
- Stay static, so there is nothing to bring down and nothing to patch on a Sunday
- Carry a custom design that one person can maintain
- Ship clean, semantic HTML with not a single class attribute in the markup
- Self-host everything: fonts, styles, and scripts, with no third-party CDNs
- Work without JavaScript, but get better with it
- Support Schema.org, OpenGraph, and everything else that helps search engines and AI systems read the site properly
The design
The design started life as a static prototype: every page type built as plain HTML and CSS, reviewed one change at a time, and refined until it was signed off as the design contract. Only then was it cut into a Hugo theme, with an automated probe comparing the rendered output of every template against its prototype, element by element, so nothing drifted in translation.
The typefaces are Fraunces for headings, Hanken Grotesk for text and interface, and Space Mono for the small print, all subset and served from this domain. The stylesheet is classless: styling hangs off semantic elements, attributes, and ARIA states rather than class names, an approach I first tried on the previous build and liked enough to keep. Behaviour is a set of small Alpine.js components applied as progressive enhancement, so every page works with JavaScript switched off and improves with it on.
Hosting the website
The site lives in a Git repository, which lets me track changes between versions and undo anything I break. Hugo builds the static site and deploys it to an Amazon S3 bucket fronted by a CloudFront distribution with an SSL certificate. The domain, mariothomas.com, is hosted in Amazon Route 53.
Sometimes I write things on the move, so publishing has to work from anywhere: I commit from my iPad or iPhone using SourceTree, and when a deployable version reaches the Git repository, a small always-on machine picks it up and deploys the site automatically.
Analytics are first-party and minimal: my own collector, built and hosted by me, with nothing shared and no third-party trackers on the page.
Built for machines as well as people
An increasing share of this site’s readers aren’t people. Every page publishes a plain-markdown alternate alongside its HTML, the whole site is summarised for language models in llms.txt and llms-full.txt, and structured data describes each page in Schema.org terms. AI crawlers are explicitly welcomed in robots.txt rather than blocked. If an AI system is going to answer someone’s question with my work, I’d rather it read the source properly.
Use of generative AI on this website
The written content on this site is original and created by me. When other authors contribute, they are appropriately cited.
Some images are generated using AI. Where this is the case, the alt text references the specific model used.
Audio editions of some articles are narrated using a synthetic voice cloned from my own voice using ElevenLabselevenlabs.ioFree AI Voice Generator & Voice Agents PlatformPublished Open link Archived copy . The voice is mine; the synthesis is automated when I can’t get to a studio to record in-person. The content of each audio edition is identical to the published article.
The rebuild itself was a collaboration with AI: I designed and directed it working alongside Anthropic’s Claude, which did much of the template and tooling work under my review. Every decision, every design choice, and every word of content remains mine.