Fifteen websites, each with its own subject, palette, typography, and signature technique — designed and built end-to-end by Claude Fable 5 inside Claude Code, then deployed as one static bundle. This is the complete workflow, written so you can run it yourself.
The single highest-leverage artifact was a briefs document: one section per site, written before any building began. Each brief fixed the things that make sites converge when left to chance — a named (fictional) subject and audience, a 4–6 hex palette, an exact font pairing, a one-paragraph description of the signature element (the one thing the site would be remembered by), and a short forbidden list of the clichés that category always produces ("no purple AI gradients", "no realtor grids", "no Matrix green").
A companion standards document set the floor every site had to clear: static HTML/CSS/JS only,
no frameworks, relative paths, honest copy in the brand's voice, prefers-reduced-motion
respected, visible keyboard focus, readable without JavaScript, zero console errors, and a payload
budget. Separating "what makes this site itself" (brief) from "what makes any site good" (standards)
is what let fifteen sites be built in parallel without blurring together.
Each site was built by its own agent — a separate Claude instance with the same two documents and one instruction: build your brief, then iterate. Fifteen agents ran concurrently. None saw another site's code, which turned out to matter: shared code breeds shared look. The only shared surface was a small toolbox:
No site was accepted as first-built. Each agent ran three mandatory passes over its "finished" site, each pass starting with fresh screenshots (desktop hero, full page, mid-scroll, and 390px mobile) that it read like a reviewer:
Every pass was logged — findings, then fixes. The logs caught real bugs that "looks done" hides: stretched images from a lone HTML height attribute, a page that rendered blank without JavaScript, reveal animations that never fired, a neon sign that stayed dark when scripts were off.
Each site lives in its own folder with relative paths, so the whole showcase is one static bundle: a gallery index at the root (thumbnails are just headless-browser screenshots of each hero), this guide, and fifteen directories. Deployment is the Netlify API, no CLI needed:
# create the site once
curl -X POST https://api.netlify.com/api/v1/sites \
-H "Authorization: Bearer $NETLIFY_TOKEN" \
-d '{"name":"your-site-name"}'
# then every deploy is: zip the folder, POST it
zip -qr deploy.zip .
curl -X POST https://api.netlify.com/api/v1/sites/$SITE_ID/deploys \
-H "Authorization: Bearer $NETLIFY_TOKEN" \
-H "Content-Type: application/zip" \
--data-binary "@deploy.zip"
The recipe, compressed:
Honest notes: the build hit real-world friction — API usage caps mid-flight (agents resumed from their transcripts and logs) and an image-API billing limit that cut some photo sets short. The agents adapted: a moonrise photo became a drawn art-deco plate, missing botanical plates became SVG line engravings styled as a second printing register, a perfume bottle became a 3 KB vector-glass SVG. Constraints, as usual, improved the work.