Skip to content
Thrivbe
← All experiments
LiveStarted July 27, 2026Updated July 27, 2026

Can an agent build 25 genuinely different websites without a human reviewing any of them?

Twenty-Five Websites, Three Passes Each

  • Codex CLI (gpt-5.6-terra)
  • Claude Code as orchestrator
  • Hand-written HTML/CSS/JS, no build step
  • three.js + GSAP via pinned ESM CDN
  • puppeteer-core headless QA harness
  • Vercel

Relevant services: AI Digital Teammates · Second Brain Audit — €750 · Thrivbe AI

Hypothesis

Agents are good at producing one plausible website. The interesting question is whether they can produce twenty-five that are genuinely different from each other — different visual technique, different typography, different motion language — and then improve each one without a human ever opening a browser to say "that looks wrong."

The bet: the bottleneck isn't generation, it's verification. If you can measure quality mechanically, you can iterate autonomously. If you can't, you get twenty-five variations of the same centered hero section.

What we built

Twenty-five independent websites, each built around one non-negotiable signature technique — a WebGL orrery running at period-derived orbital velocities, a raymarched metaball shader, marching-squares contour lines over animated noise, real broadsheet typesetting with working jump lines, a playable pixel arcade cabinet. Each site ships a /guide page explaining how it was made, including its own iteration log.

All 25 deploy as one static Vercel project. No framework, no bundler, no build step — every page is hand-written HTML/CSS/JS with dependencies pulled from pinned ESM CDN URLs. The entire configuration is two security headers.

The division of labour: Claude wrote the build contract, the 25 briefs, and the verification harness. Codex wrote every line of site code. Nobody looked at a page and said "make it prettier."

The harness is the actual product. Per page it checks console errors, uncaught exceptions, HTTP 4xx subresources, horizontal overflow at 390/768/1440, <title>, navigation hooks, and prefers-reduced-motion — then screenshots at 1440. Crucially it scrolls the full page first, so IntersectionObserver work actually fires before anything is judged.

Each site went through a build plus three specialised passes: correctness and robustness, then design depth, then complexify and finish. Pass 2 is forced to name its three weakest moments before fixing them. Every pass was re-verified before the next began.

Log

Build. 25 sites across five batches of five concurrent Codex processes, disjoint directories, one shared contract.

The contract learned. QA found that every single guide.html blew out horizontally at 390px — the <pre> code blocks the contract itself mandated, sitting in flex children without min-width: 0. Rather than fix 25 pages, we fixed the contract. First-build defect rate went 5/10 → 6/10 → 8/10 → 9/10 pages clean across the batches, purely from two amendments derived from QA output.

Iteration caused a regression. Pass 1 took 04-kinetic-swiss from clean to overflowing at all three widths. It was caught only because we re-verified after every pass instead of once at the end. Pass 3's guard clause named only 390px — it would have missed this. Both later passes now carry an explicit no-regression check across all three widths.

Vague failures became one-shot fixes. Four sites resisted their correctness pass. Adding element-level diagnostics — naming the outermost offending element and its right edge — converted "still overflowing" into div.film-track right=5358, and all four were fixed on the next attempt, each with an instruction to preserve the concept. The film strip still scrolls horizontally and juddering; it just scrolls inside its own container now.

Deploy. The first two Vercel deploys died with write EPIPE mid-upload. Not flaky network — 61.8MB of Codex logs were being uploaded alongside a 4MB site. A .vercelignore fixed it. Deployment Protection then 302'd every public URL to SSO, which had to be turned off for the demo to be a demo.

Final state. 51/51 pages clean locally, 76/76 live URLs serving 200, zero broken links in the gallery.

Learnings

Verification is the product. Every quality improvement in this run traced back to the harness getting sharper, not the prompts getting longer. The one time we improved a prompt without evidence, it caused a regression.

Fix the contract, not the output. The same defect appearing in 10/10 pages is a specification bug. Patching the spec mid-run made later batches nearly clean on first build — the cheapest fix available was upstream of all the work.

Diagnostics beat instructions. "Fix the horizontal overflow" failed twice. figure.cathedral-frame right=410 worked immediately. An agent given a measurement outperforms an agent given an adjective.

Re-verify after every step, not at the end. Iteration is not monotonic. A pass that improves nine sites can silently break the tenth, and a single end-of-run check attributes the damage to the wrong stage.

Specificity is what makes them different. The sites that landed best invented a real subject and wrote real copy for it — a fifth-generation woodblock studio in Kanazawa, an arcade museum in Bellwether, Iowa. The brief that produced the strongest page was the one that asked for restraint and gave the agent nothing to hide behind.