CAMP AVE ×21 — THE GUIDE

How it was made

Twenty-one websites, one barbershop,
zero invented facts.

This is the full production process behind the Camp Ave demonstration — written so you can reproduce it. One AI (Fable, a Claude model) ran the whole pipeline autonomously: studying the real shop, editing its real photographs, writing one spec, directing parallel builder agents of itself, reviewing their work, and deploying the result — then iterating the two favorite designs (plus the noir) into an eleven-site SEO wave.

Step 01 — Study the real place

Seven photos, one logo, and a phone number read off the sign

The input was a folder: storefront, interior, portraits of both barbers, one candid of the head barber cutting a kid’s hair, and the shop’s logo. Every image was analyzed before any design work — the building’s brick and awning, the interior’s mirrors and wood floor, the barbers’ actual faces, the signage.

Facts were extracted, not invented: the phone number was verified by cropping the storefront photo at full resolution and reading the box sign. Anything the photos and brief couldn’t support — founding dates, awards, exact opening hours — was banned from all ten sites.

Step 02 — One shared image pool

Identity-faithful edits, anonymous gaps

All ten sites draw from one 14-image pool so they differ only in design language. Generated with fal.ai’s GPT Image 2 in one batched script (4 concurrent, retries):

// the edit call, per image (concurrency 4, 3 retries)
POST https://fal.run/openai/gpt-image-2/edit
{
  "prompt": "…same face, same building, same signage text…",
  "image_urls": ["data:image/jpeg;base64,…"],   // the real photo(s)
  "image_size": { "width": 1536, "height": 1024 },
  "quality": "high", "output_format": "webp"
}

Every output was then reviewed against the source photos. The review round caught three defects and re-ran those jobs with corrected prompts:

Defect 1The model rewrote the sign’s area code — (716) instead of (516). Fixed by naming the exact number in the prompt.
Defect 2It invented a legible price board with wrong prices in the interior. Fixed by requiring wall boards be soft-focus and unreadable.
Defect 3Both barber portraits were staged in a fictional upscale shop. Fixed by passing the real interior as a second reference image.

Approved masters were compressed with sharp to 1600px/q80 plus an 800px variant — the whole pool ships at ~2.6 MB for 27 files.

Step 03 — One spec as the contract

Grounded facts, shared copy, ten direction briefs

A single SPEC.md is the source of truth for every builder: the verified facts, one pricing table, a pool of twelve testimonials written strictly from real review themes, the image manifest, engineering constraints (static, self-contained, responsive at 390px, reduced-motion safe, semantic HTML, AA body contrast) — and ten one-paragraph direction briefs, each a fundamentally different design language with fixed URL slugs.

The ten: vintage print built on the real logo · neo-noir gold · Swiss type poster · real-time 3D chrome · warm minimal · cut-and-paste zine · thermal receipt · aurora animation · blueprint drafting set · editorial magazine.

Step 04 — Ten parallel builders

Each site: one agent, three iteration passes, screenshots it must actually look at

Ten builder agents (forks of the same model, inheriting the full context) ran in parallel, each owning one slug and one port. The rule that mattered most: a pass isn’t reading your own code — it’s looking at pixels. Each pass = serve the site, take full-page screenshots at 1440×900 and 390×844 with Playwright, inspect them, then fix what you see:

A recurring class of bug the builders caught themselves: scroll-reveal animations that hide content by default render blank pages in full-page captures and for no-JS visitors. The pattern that survived: content visible by default, JS only adds the entrance.

Step 05 — Independent review

The director re-verifies everything with fresh eyes

Every finished site was re-screenshotted and inspected by the orchestrating agent — not the builder — the same way an art director reviews a designer’s work. This pass caught what self-review missed: a desktop-only horizontal overflow (a 150vw decorative ribbon widened the page to 1803px; the builder had only verified mobile), and two “blank image” reports that turned out to be capture artifacts, confirmed harmless by probing the live DOM (img.complete, computed opacity, box size) instead of trusting the screenshot.

Step 06 — The fleet probe

Ten sites, one objective pass/fail sweep

Before deploy, a headless probe visited all ten at both viewports and asserted the things screenshots can’t prove at a glance:

// per site, at 1440×900 and 390×844
scrollWidth === clientWidth          // zero horizontal overflow
pageerror events === 0               // zero JS exceptions
responses ≥ 400 === 0                // zero broken assets
title, meta description present
body includes the real phone number
footer credits Fable + links to the hub

Result: 10/10 green on every check.

Step 07 — Deploy

One bundle, one command

A small assembler copies the hub to the root, each site to its slug, the image pool to /assets/camp-ave/, and this guide to /guide/ — then the whole bundle ships as a single direct upload:

node tools/build-bundle.mjs
npx wrangler pages deploy bundle --project-name=fable-showcase --branch=main

Post-deploy, every route is re-verified live (status, content-type, spot screenshots) before calling it done. Cloudflare Pages serves everything as static files — no build step, no server.

Step 08 — Wave two: the SEO build-out

The two favorites, iterated eleven ways

After reviewing the ten, the client picked two favorites — the letterpress original and the editorial journal — and asked for five new iterations of each, plus one more take on the midnight noir. Wave two is a different exercise: not ten unrelated worlds, but controlled variation inside two design families, with every site grown from a design study into a 10–13 section local-SEO homepage.

A second spec (SPEC-V2.md) added the contract wave one didn’t have:

The tiny 400px logo also had to survive header duty. An ESRGAN 4× upscale lost to the file’s alpha channel (black-speckle artifacts); the winner was a GPT Image 2 edit-mode recreation at 1536px — “recreate this exact logo as crisp flat artwork” with the original as reference — then the platform’s background-removal pass for true transparency, verified on both light and dark grounds.

Same workflow otherwise: eleven parallel builders, three looked-at-the-pixels passes each, an upgraded fleet probe (now asserting the SEO contract — schema fields, neighborhood coverage, nav labels, no booking language — alongside overflow/errors/broken assets), independent review, one deploy.

The rules that kept it honest

Constraints are what make the demonstration credible

No invented facts

No founding dates, awards, exact hours, or history. Prices and testimonials stay inside what the brief and real review themes support.

Identity-faithful imagery

The real building, the real room, the real faces — AI-edited, never AI-replaced. Reviewed against the source photos.

Generic where the folder ends

Anything the photos didn’t cover became anonymous stock-style imagery — never a fabricated version of the actual shop.

No fake machinery

Walk-ins are the business model, so CTAs are “walk in” and tel: links — no booking forms that submit to nowhere.