Systems
Email and product pages that fail loudly
A spec, a build from locked parts, a pass or a fail, then a read-back of what actually shipped.
Where a brand quietly breaks
Campaign emails and product pages are where a brand quietly breaks: a relative image path, a missing metafield, an SEO title that runs long. Each looks fine until it ships.
Judgment stays human. Markup, tagging, and checking are the machine’s. Bad input fails the build loudly instead of shipping quietly.
- Brief
- spec.json
- Build
- QA
- Ship
- verify.py
Bad input fails the build. The write is done when the read-back matches.
Newsletter Issue 01, rebuilt
email/build.py turns a spec into campaign HTML from 12 locked components. It enforces absolute https images only, a UTM on every link, VML button twins, and mobile stack markup. A relative image path raises an error. That was the bug that nearly broke the first send.
email/qa.py runs 22 checks. Exit 0 means ship. The shipped Newsletter Issue 01 was rebuilt from spec and passed 22 of 22, with the visible copy byte-identical to the approved send. Four negative tests refused to build. I reproduced it on 14 September 2026: 22 passed.
The component kit
Nine Mailchimp templates: new drop, sale, welcome, abandoned cart, back in stock, review request, win-back, newsletter, and dealer. All of them are table-based, with VML buttons, plus a component library.
Product pages with a read-back
build_pdp.py turns a spec into a validated payload and description HTML. It enforces the metafields that collections depend on. Without them, a product looks perfect on its own page and is invisible in a smart collection. That is now a build error. The SEO title stays at or under 60 characters, the description at or under 155, and the price stays out of the description.
QA runs 15 checks for the main product category, and 13 otherwise. Six negative tests all refuse with the error text I wrote.
The build does not call the API itself. It goes build, then execute, then verify.py, which reads the store back and diffs intended against actual. It caught a simulated silent metafield drop and a truncated SEO title. Brand voice and claims rules live in one lint file, imported by both the email and the product page.