How this site checks itself
I build my own site the way I build client sites. The rules are checked automatically, and every number says where it came from.
Why bother
A portfolio is a set of claims. Most of them are numbers, and most portfolios treat those numbers as words on a page: typed once, never checked, quietly rounded up over the years. Here every figure comes from one record. Each entry carries the claim, where it came from, and whether I can defend it in an interview today. If a number is missing or unconfirmed, the page cannot be published with a blank where the number should be.
The checks below run on the finished site, not the draft, so nothing can slip in on the way out. And I don't trust a check until it has failed: I plant the mistake it exists to catch and watch it get caught. The check for repeated copy earned its keep on its first run, when the homepage and the work index turned out to share 43% of their sentences.
The checks this site runs on itself
Read from the test file when this page was built. Change the file and this list changes with it.
- every page has exactly one h1
- every page has a meta description
- every image carries meaningful alt text
- no placeholder or template rot ships
- every internal link resolves to a built page or a public file
- no two pages share more than 40% of their eight-word sequences
- every fact rendered on a page is marked confirmed
- anonymised clients never enter the build
- the teardowns tab only ships once three teardowns exist
- nothing is still owed before launchruns at launch, 4 still owed
- every referenced image actually exists
- every work card shows an image or the typeset fallback
- every page has a social image that exists
- titles and descriptions fit a search result
- every page carries structured data naming the person
Every number on this site, with its source
Confirmed means I can defend it in an interview today.
2,000%+more visitors from Google over six years, without paying for ads
Executive Inn & Suites, 2013–2019 Executive Inn & Suites and Bayside case study
~$1.5Mbookings from email in a single year
Executive Inn & Suites Executive Inn & Suites and Bayside case study
9+ yearsworking with the same hotel owners
Executive Inn & Suites and Best Western Plus Bayside Executive Inn & Suites and Bayside case study
3,000+pages built from data so the site could rank in every town it serves
Home services client, 2024
283,295lines of code written and shipped by one person
MantelMarketing, measured at commit 8deebfd MantelMarketing case study
119s to 58swait time for a site audit, before and after the fix
MantelMarketing, verified live MantelMarketing case study
95.9%how alike 25 city pages were before a check caught it
MantelMarketing, first client build MantelMarketing case study
97pages, each checked 84 ways before it can go live
All Raingutter Systems, measured at commit 5337e32, 15 September 2026 All Raingutter Systems case study
500+products in an online catalog built and run solo
Thermionics Vacuum Products, 2019–2021
56films across eight categories on one online ballot
SF Queer Film Festival audience award, 2026 SF Queer Film Festival audience award case study
18automatic checks on the state rules, delivered with the site
Frost Driving School, main branch, 24 July 2026 Frost Driving School case study
227ballots counted, 2 thrown out by the rules
SF Queer Film Festival audience award SF Queer Film Festival audience award case study
4 daysfrom deposit to the client seeing it, against a three-to-four-week estimate
Frost Driving School Frost Driving School case study
Numbers I still owe
These aren't in hand yet. The site won't pass its launch check until I go and get them.
OwedGoogle searches the 40 town pages rank for, 90 days after launch
Search Console — launched September 2026, too early to pull All Raingutter Systems case study
OwedGoogle views of the event pages, 90 days before and after
Search Console — not yet pulled Executive Inn & Suites and Bayside case study
OwedHow long the sign-up form was broken before anyone noticed
Deploy history — knowable, not measured MantelMarketing case study
OwedHours to price a 187-part order by hand, before the tool
Client — one question away Quoting and ERP app for a contract electronics manufacturer case study
What it's built with
Astro, a tool that turns content into plain fast pages, served from Cloudflare's network. Inter for everything you read, a typewriter face only where the site is showing you its own machinery. Images are resized when the site is built, and a missing one stops the build. The checks run with nothing more than Node's built-in test runner. No visitor tracking yet.