Here is our stance on AI-assisted engineering, stated as plainly as we can manage: AI writes most of the code at this studio, and humans decide what ships. Neither half of that sentence works without the other.
We are not interested in pretending the AI is not there. We are equally uninterested in the opposite pretense: that model output can be trusted because it compiles and reads well. Between those two dishonesties sits a working method. Ours is gates.
The gates, plainly
- Typecheck, lint, and a full production build must all be green before anything is committed. Every commit, every time, with no exception for small changes.
- Every page is checked, not a sample. On a catalog build that means hundreds of pages held to the same bar as the homepage.
- Every page is screenshot-verified on desktop and on a real phone viewport. Not the code. Not the diff. The rendered page.
- Audit findings are re-verified by an independent review pass whose entire job is to disprove them. Findings that do not survive the challenge do not ship. Neither do fixes that only look fixed.
None of this is exotic. What is unusual is holding the line every single time. It sounds obvious; almost nobody actually does it, because the pressure to skip a gate is highest exactly when skipping it is most dangerous: late, tired, and close to done.
Why gates instead of trust
AI-generated code fails in confident ways. It does not look wrong. It compiles, it lints, it reads like the work of someone careful. The failures live on the rendered page: a contrast that misses the accessibility bar, a layout that collapses at phone width, a hover state that traps touch users, a plausible claim in the copy that nobody can actually back up.
So the gates are ordered by what each one can catch. The build gate catches what a compiler can see. Full-page review catches what a compiler cannot. Screenshot verification catches the final class of bug: things that are technically present and visually broken. And independent re-verification catches the most dangerous artifact of all, the fix that satisfies the reviewer without satisfying the visitor.
We hold the build gate with something close to superstition, because we earned it the hard way: early on, one ungated commit broke a production branch. Once. The rule that typecheck, lint, and the production build stay green before every commit has not bent since, and it is the cheapest insurance we own.
A screenshot you do not open is not verification
One story shaped our verification rules more than any other. An element on the Creative Maintenance Solutions site animated into view on scroll, and it had a real contrast bug. The fix was verified with a screenshot that forced the element visible instead of letting the real animation run. The screenshot looked perfect. The live page was still broken, and we caught it after deploy, on the production site, the way nobody wants to.
The rule that came out of it is now doctrine: verification must show the exact state a real visitor sees. Trigger the real animation. Wait for it to finish. Confirm the element is genuinely visible at its true rendered state, then capture. A screenshot of a state that cannot occur proves nothing except that screenshots can lie.
Every page, not a sample
Quality checks here cover the whole build, because a sample only ever proves the sample. On one launch that meant 173 pages checked on both desktop and mobile, 346 quality runs in total, with every page scoring 100 for accessibility, best practices, and SEO. On another, a security review logged 43 findings, none critical and none high severity, and every fix landed in code rather than in a promise.
The point is not the numbers. The point is the coverage. A quality claim that only applies to the pages someone happened to look at is a hope, not a claim.
What humans still own
The model does not decide what is true. Every number we publish traces to a real build or a real source, and when we do not know something, the page says less instead of lying. No invented statistics, no fabricated testimonials, no stock photo pretending to be the client's team. That rule has held under pressure, including times when inventing one small detail would have been the easy way to finish a feature. We skip the feature instead.
The model also does not own taste. What gets featured, what gets cut, whether a page reads official or generic, whether motion clarifies or shows off: those calls are human, and they are most of the value we sell.
AI made us faster. The gates are why faster never became worse. If you remember one phrase from this post, make it the one we run the studio on: gates, not guesswork.
