This site: A page that cannot lie to you
The rebuild of brandononchain.com: unsupported claims deleted, status computed daily instead of typed, weight enforced in CI, and every demo labelled with what it is really showing.
Solo — audit, rewrite, tooling, and the checks that keep it true · 2026
The problem
The site you are on now used to make claims it could not support. A press bar named four publications that had never covered anything. A marquee under the hero showed eighteen screenshots of other companies’ websites. The testimonial slot held a quote from me, above my own photograph.
None of that was dishonest by intent. It was the drift that happens when a page is edited by hand and nothing checks it. Badges said Live because someone typed Live. A counter said zero because the pipeline behind it had stopped.
The rebuild was not a redesign. It was an attempt to make the page unable to say something a check cannot hold up.
Architecture
Four checks on the way in, one check running daily, and a label on anything that is not real data.
- A pull request must pass the page weight budget: 4 MB of assets, 6 MB of video
- Writing rules block dashes, a banned phrase list and a title that opens like another post
- Generated files must be current, so the published posts match their source
- The build runs with warnings as errors
- A daily job opens every linked project and writes the file the Live badge reads
- Demos are filmed from each app’s own build, labelled sample or prototype data
- Placeholder screens are cut with a visible curtain and the reason is in the storyboard
- Every case study ends with what is not proven yet
Key decisions
Delete first, design later
The press bar went, with no replacement. The marquee of other companies’ sites went. The self quote became a plain positioning statement. Then the page got a navigation bar, which it had never had: zero links on the entire site before this. Most of the first evening was removal, and the page got clearer before a single new pixel was drawn.
Status is computed, never typed
One product’s card read Live for days while its host returned a 404. A daily job now opens every linked project and writes a status file, and the badge reads that file. The claim that is easiest to leave stale is the one a visitor is most likely to test.
A metric that can read zero does not go on a public page
A live counter on the homepage showed leads scored this week, straight from the pipeline. On a slow week it read zero, which is worse than showing nothing at all. The section was removed and replaced by a page that shows the shape of each pipeline, which is true whatever the week looked like.
Weight is a budget in CI, not an intention
The site was shipping 35 MB of images, including a 12.6 MB social preview that was too large for the platforms it was meant for, so link previews silently failed. It is 2.8 MB now. A check fails the pull request if assets pass 4 MB or video passes 6 MB, because the only page weight rule that survives a busy week is one that blocks a merge.
The blog stopped being a database
Posts lived in Airtable and every page view asked Airtable for them. Fourteen posts had been published unattended by a pipeline that ran every two days, and eleven of them opened with the same three words. Posts are files in the repository now, reviewed in a pull request, and a lint blocks dashes, a banned phrase list and a title that opens like another post. Drafting still uses a model; publishing needs a human.
Demos are recorded from the build, and labelled
Screenshots go stale quietly. A recorder builds each app for the web, plays a scripted sequence in a phone frame, and writes the clip, the poster and the card image, so the demo tracks the code. Anything filmed from a build that is not running on real data carries a label on the media itself, and a placeholder screen is cut with a visible curtain rather than shown as if it were the product.
Numbers
- 35 MB → 2.8 MB — assets on the site (social preview 12.6 MB to 102 KB)
- 0 → 5 — navigation links (the site previously had none)
- 4 — checks that can block a merge (weight, writing rules, staleness, build)
- 11 — recorded demos (filmed from each product or app build)
- 3 — unsupported claims removed (press bar, marquee, self quote)
None of this proves the site converts. There is no attribution on inbound messages yet, no A/B test behind any of these decisions, and the traffic is small enough that it would take months to learn anything from one. What the checks buy is narrower than that: a visitor cannot catch the page claiming something untrue, and neither can I.
The site you are reading