How this site is made.
A small site, built to load quickly on a phone with patchy signal, and to keep working.
Budgets
Every page has a budget. A change that breaks one fails the build, so it never reaches this site. Each page is measured as a first visit, with nothing cached.
| Measure | Budget |
|---|---|
| Everything a first visit downloads | 150 KB |
| Fonts | 120 KB |
| JavaScript | 5 KB |
| Largest Contentful Paint, on a phone with slow 4G (simulated) | 1.5 seconds |
| Cumulative Layout Shift | under 0.05 |
| Lighthouse performance score | 98 or more |
| Lighthouse accessibility score | 100 |
| Lighthouse best practices score | 100 |
| Lighthouse SEO score | 100 |
Built with
The pages are written with Astro, which turns them into plain HTML and CSS when the site is built. The only JavaScript fetches the next page while your pointer rests on its link, opens the header’s menu while your pointer rests on it, and runs the copy button on the contact page.
Cloudflare serves the files from its data centre nearest each visitor, through a small program of our own that adds the security headers and keeps one address for each page. Everything is compressed ahead of time, so on each visit the server only has to send files.
Type and colour
Text is set in Inter by Rasmus Andersson, headings in Schibsted Grotesk by Schibsted, and code in JetBrains Mono by JetBrains. All three are open source, under the SIL Open Font License, trimmed to the characters we use and served from this site.
The colours are the Millwright family’s: Mill green and brass on warm paper. The favicon and the social cards are drawn from the same fonts and colours by the site’s own scripts.
Security and privacy
A strict Content Security Policy tells browsers to run only the scripts and styles this site ships, each matched to a fingerprint, with Trusted Types enforced. Every response carries the same security headers, error pages included, and the site is served only over HTTPS. To report a problem, see our security.txt.
There are no cookies, no trackers, and nothing loaded from anyone else’s servers. Our privacy policy has the detail.
Checked on every change
Before anything is published, the build checks the code, validates the HTML, and holds the copy to our house style (Australian spelling, typographic quotes, no em dashes). Then it compares every page with approved screenshots, scans each for accessibility problems, and tests the server’s headers, redirects and links, as a browser would meet them.
Last updated .