The studio · AI-built, human-inspected

One human directs an AI production line. Nothing ships without inspection.

Templatorium is a template shop and a working AI production system, run by one person. The owner architected the pipeline and directs it: AI agents research, design, build, art-direct, and inspect every template — and a forty-two-check quality gate, plus a human with final say, keeps the output from ever being slop.

This page is the proof, told with real artifacts: the org chart of the AI team, the gate it can't skip, and one template's full run — timestamped from git, revise rounds included.

14 templates listed
14 with a filed PASS report
42 checks per template
1 run shown: research → shelf in 73 min
1 human, final say

01 — The production line

An AI team with real job descriptions.

Each role is a defined agent with its own instructions, context, and rules — dispatched in sequence, and in parallel where the work is independent. The owner is the chief of staff: agents prepare, a human publishes.

  1. 01

    design-scout

    Studies how the vertical's best sites are actually built — and files a dossier on where this template can differ.

  2. 02

    template-designer

    Writes the DESIGN.md brief: the exact ground, type, layout, and motion the build must commit to.

  3. 03

    template-developer

    Builds it — semantic HTML, hand-written CSS and JS, packaged with buyer docs and a license.

  4. 04

    art-director

    Adversarial taste review of the built pages. Orders fixes; never makes them.

  5. 05

    qa-inspector

    Runs the 42-check gate and files the report. The only role that can pass a template onto the shelf.

  6. 06

    copywriter · seo-strategist · documenter

    Product copy in the shop's voice, metadata, and the docs inside every zip.

Off the line: a market-researcher (what's worth building) and an analyst (weekly numbers, honest grew/flat/declined verdicts). When something breaks, the lesson is written down — and any lesson that occurs twice is promoted into the responsible agent's permanent rules, so the same mistake can't happen a third time.

02 — The gate

Forty-two checks. The AI can't skip them, and neither can the human.

Every template faces the same anti-generic gate before it can list: 38 required checks and 4 recommended ones, from a single registry file (v2026-07-17). Every count printed anywhere on this site is computed from that file — a hardcoded number is itself a QA failure.

The mechanical half runs as scripts: zero broken links, zero console errors, zero serious axe-core violations, no overflow at 375/768/1440px, WCAG 2.2 AA contrast computed with the relative-luminance formula — never eyeballed. The judged half is adversarial: one named signature moment, real type contrast, opinionated copy, and a shelf-distinctiveness rule — every template must diverge from every shipped one on all four axes at once: ground, type, layout, and motion.

A PASS only counts when the report is committed to the repo. Right now: 14 templates listed, 14 with a filed PASS report — the product pages read those files at build time, so an unfiled PASS can't even render.

See a live inspection sheet →

What a REVISE looks like

The gate isn't ceremonial — it fails things. On 2026-07-22 it re-ran on all fourteen then-listed templates in one night and surfaced eight real shipped defects: a pre-hidden content reveal, a 1.04:1 hover caption, a dead anchor, three missing no-JS nav fallbacks, a page without its h1, and a glass card that sank below AA over a new photo. All fixed and re-inspected the same day.

registry v2026-07-17 · 38 required · 4 recommended

03 — One real run

Nocturne: research to shelf in 73 minutes.

A boutique-hotel template with a working split-flap arrivals board as its booking UI. Every beat below is a real commit from 2026-07-22 (times UTC) — including the two revise rounds, because the catches are the point.

  1. 10:46 9bf24d5

    Research filed

    The owner asked for a batch of new templates. design-scout files the boutique-hotel dossier: the genre's real page skeleton, an award-site survey, and the one shelf collision to steer around.

  2. 10:53 8742d68

    Brief committed

    template-designer commits DESIGN.md: “After Dark” — a deep-aubergine ground and a Solari split-flap arrivals board as the booking UI. Seven minutes after the dossier.

  3. 11:16 86d253a

    Built

    template-developer ships six pages. The split-flap is hand-rolled in WAAPI + CSS 3D — no GSAP, because its license doesn't clearly permit resale. Fonts vendored, content readable with JavaScript off.

  4. 11:30 e9db501

    Photography

    Three art-directed demo photos added — AI-generated, and flagged as synthetic placeholders in the LICENSE so buyers know to replace them.

  5. 11:40 e0d2d96

    Art-director: REVISE

    Five fixes ordered, including a P0 the build shipped with: the hero board split words mid-glyph at phone widths. Fixed and re-verified at 375, 768, and 1440px.

  6. 11:53 ded019b

    QA inspector: REVISE

    The mechanical gate returns pass:false — 48 serious axe violations, traced to one CSS class pre-hiding below-the-fold content until scroll. Plus a prohibited aria-label pattern and a 1.79:1 watermark. All fixed; the reveal lesson was promoted into the developer's permanent rules the same day.

  7. 11:59 39373ee

    PASS → listed

    The catalog manifest flips to available — a flip the build itself refuses unless the inspector's PASS report is on file. Research to listed: 1 hour 13 minutes, including both revise rounds.

  8. 21:48 1821440

    Receipt filed

    A same-day claims audit found PASS verdicts across the shelf without committed report artifacts. The full gate re-ran on Nocturne's listed code and the report below was committed to docs/qa/ — now a permanent rule: no committed report, no PASS.

Nocturne template home page — split-flap arrivals board on a deep aubergine ground
Nocturne · home · captured at 1440px
Nocturne rooms index — numbered room plates with amber accents
Nocturne · rooms index

The honest framing: the machine produced — six pages, a signature interaction, and along the way one layout bug and 48 accessibility violations. The gate caught them before any buyer could. A human decided when it was done. Produce fast, inspect adversarially, fix, file the receipt — that loop is what this page is demonstrating.

Read the filed QA report, verbatim docs/qa/2026-07-22-nocturne.md · PASS · 2026-07-22
# QA report — Nocturne (boutique-hotel template, $69)

- **Target:** `templates/nocturne/` — 6 pages: `index.html`, `rooms.html`,
  `room.html`, `dining.html`, `offers.html`, `contact.html`
- **Brief:** `templates/nocturne/DESIGN.md` ("After Dark" — the Solari split-flap
  arrivals board)
- **Inspector:** qa-inspector · 2026-07-22
- **Run type:** Phase-0 receipts run (claims-audit F1 remedy,
  `docs/audits/2026-07-22-claims-audit.md`). Nocturne passed a full gate run
  earlier this same session on this same code (post commit `ded019b`, "nocturne
  QA fixes: reveal rests visible, board role=img, room-No AA, docs match
  LICENSE"), but no report artifact was filed, so `site/src/lib/inspection.ts`
  treated it as ungated. This report re-runs every mechanical check fresh and
  spot re-verifies the judged checks against the check registry
  (`pipeline/conventions/check-registry.json`, v2026-07-17: **42 checks — 38
  required + 4 recommended**), then files the receipt.
- **Method:** fresh `check-theme.mjs` / `genericize-check.mjs` /
  `content-slots.mjs verify` runs; local serve + Playwright
  (`/opt/pw-browsers/chromium`) — screenshots at 375/768/1440 with
  `reducedMotion:'reduce'` (so the split-flap settles — per LEARNINGS
  split-flap screenshot-timing row), all-6-page console/overflow sweep at
  375 + 1440, keyboard focus probes, JS-off context, external-request
  listeners; WCAG relative-luminance computation (node) from the built
  `:root` tokens. Worktree clean; no commits touch `templates/nocturne/`
  since today's full-gate PASS.

---

## 1. Mechanical gate (fresh runs, real outputs)

| ID | Check | Verdict | Evidence |
|---|---|---|---|
| MECH-01..07 | `node pipeline/scripts/check-theme.mjs templates/nocturne` | PASS | `{"pass":true,"brokenLinks":0,"missingAssets":0,"consoleErrors":[],"axeViolations":[],"unsafeVectors":[],"horizontalOverflow":{"375":false,"768":false,"1440":false}}` exit 0 |
| PROV-01 | `node pipeline/scripts/genericize-check.mjs templates/nocturne` | PASS | `{"pass":true,"hits":[]}` — 0 hits across all 6 banned needles |
| — | `node pipeline/scripts/content-slots.mjs verify templates/nocturne` | PASS | `verify OK: 287 slot keys, 22 tokens, round-trip byte-exact` |
| MECH-03/05/07 (depth) | All-pages sweep: 6 pages × {375, 1440}, console + pageerror listeners + overflow | PASS | `{"pages":6,"consoleErrors":[],"overflow":[]}` — check-theme browser-tests the index only; this sweep covers the other 5 pages too |

## 2. Accessibility (computed, not eyeballed)

Ratios computed with the WCAG relative-luminance formula from the shipped
`:root` values:

| ID | Pair | Computed | Verdict |
|---|---|---|---|
| A11Y-01 | bone `#F0E6DA` / plum `#2A1130` (body) | 13.95 | PASS AAA (CSS header claims 13.9 — matches) |
| A11Y-01 | bone / plum-deep `#1C0A22` | 15.27 | PASS AAA |
| A11Y-01 | bone / plum-lift `#3A1C42` (cards, booking rail) | 11.96 | PASS AAA |
| A11Y-01 | bone / flap `#241228` (split-flap cell face) | 14.29 | PASS AAA |
| A11Y-01 | bone-dim `#A896A4` / plum (muted) | 6.19 | PASS AA |
| A11Y-01 | bone-dim / plum-lift (worst muted pair) | 5.31 | PASS AA |
| A11Y-01 | amber `#EBA94E` / plum (the signal) | 8.45 | PASS (claim 8.5 — matches) |
| A11Y-01 | amber-ink `#1C0A22` / amber (buy-button label) | 9.25 | PASS (claim 9.3 — matches) |

| ID | Check | Verdict | Evidence |
|---|---|---|---|
| A11Y-02 | Visible focus on every ground | PASS | Keyboard probes: `2px solid rgb(235,169,78)` (amber, 8.45:1 on plum) on skip-link, wordmark, nav links, Book. Form fields swap outline for an amber border + `0 0 0 1px` amber glow (`.rail-field`, `.field` — visible replacement, not removal); `.chip input:focus-visible + span` gets the amber outline |
| A11Y-03 | Sticky nav + scroll-margin | PASS | `[id] { scroll-margin-top: calc(var(--nav-h) + var(--rail-h) + 16px) }` (style.css:158) — accounts for nav **and** the booking rail |
| A11Y-04 | prefers-reduced-motion | PASS | 2 guards in style.css + 2 in main.js + 1 in smooth.js (Lenis skipped). Rendered probe under `reducedMotion:'reduce'`: **0 hidden/near-invisible elements** on the home page — the board **rests as visible plain text** (today's `ded019b` fix confirmed in the 1440 screenshot: all three board lines legible without JS motion) |
| A11Y-05 | Semantics | PASS | 1 h1, 1 main, header/footer landmarks, `lang="en"`, title "The Nocturne — a boutique hotel, after dark.", skip-link first tab stop. Non-heading boards get `role="img"` + `aria-label` (main.js:80–83, today's fix), every flap cell/word `aria-hidden` — SR reads the word, not letters. axe: 0 serious/critical |
| A11Y-06 | Grain overlay headroom | PASS | Film grain sits **behind** ground fills (style.css:113 "BEHIND ground fills, never under" text); worst text pair 5.31 keeps 0.81 headroom over the 4.5 floor — well past the ≥0.3 requirement |

## 3. Anti-generic gate — REQUIRED items by name

| ID | Item | Verdict | Evidence |
|---|---|---|---|
| DES-01 | One signature moment, named | PASS | DESIGN.md `signature:` field names **the Solari split-flap arrivals board**; built: `data-board` lines rebuilt as `flap-cell`s that clack character-by-character (main.js), availability boards re-play on view. Exactly one signature |
| DES-02 | Real type contrast | PASS | Limelight deco caps (marquee, LARGE CAPS only) vs General Sans body vs Fragment Mono machine data — three registers, no Inter |
| DES-03 | Committed composition | PASS | The full-width arrivals-board hero + departure-board booking rail; room cards as numbered "RM NO." keyhole plates, not three identical cards |
| DES-04 | One restrained accent <5% | PASS | Amber only on Check-availability/Book, board glow-edge + arriving flap, AVAILABLE dot, focus rings — confirmed in 1440 full-page screenshot; DESIGN.md documents amber banned from eyebrows/body/headings |
| DES-05 | Editorial detail | PASS | Mono micro-labels ("THE ROOMS · RM NO. 01–14", "ARRIVALS · AFTER 3PM", coordinates in the footer), room-number plates |
| DES-06 | Opinionated copy | PASS | "Fourteen rooms, each with one good lamp" / "The lamps are on" / "Turn in". No "Welcome to", no "trusted partner" |
| DES-07 | Imagery art-directed | PASS | Full-bleed room photo + labeled keyhole slot-spec placeholders (ratio + RM No. + view direction), zero white boxes |
| COH-01..07 | Coherence pass | PASS | Re-verified on the 1440 full-page screenshot: one `.btn` system (amber fill = the only buy action), same plum-depth banding + hairline language every section, CTA band ("Turn in") reuses the hero board system, motion = the one meaning-bearing clack |
| DIV-01..03 | Shelf distinctiveness | PASS | Ground: deep aubergine/plum — DESIGN.md: "the one saturated ground the shelf never uses"; type: Limelight deco (no other template); layout: arrivals-board/concourse; motion: split-flap (WAAPI + CSS 3D) — no shipped signature shares it. Vertical (boutique hotel) appropriate: after-dark jewel-box register fits the product. Four-axis divergence documented in DESIGN.md gate checklist |

## 4. Packaging & catalog

| ID | Check | Verdict | Evidence |
|---|---|---|---|
| PKG-01 | LICENSE.txt | PASS | "Nocturne — a Templatorium template … SINGLE-PRODUCT LICENSE (v1) … This template is a paid product" — matches house terms; docs match LICENSE per `ded019b` |
| PKG-02 | Buyer docs | PASS | `docs/README.md` current — describes the split-flap board, aubergine ground, token contract |
| PKG-03 | Fonts vendored | PASS | `fonts/`: limelight-400.woff2 (OFL, OFL.txt shipped), general-sans-variable.woff2 (Fontshare FFL), fragment-mono-400.woff2 (OFL); **0 external requests** on any of 18 page-loads (request listener) |
| PKG-04 | Favicon | PASS | icon link present on all 6 pages (6/6 grep) |
| PKG-05 | Usable without JS | PASS | JS-off context: 0 hidden of 22 probed content nodes, 2,157 chars body text — board lines are real text before JS rebuilds them |
| CAT-01 | Manifest validates | PASS | `catalog/products/nocturne.json` parses; name/tagline/price 69/formats (html available, astro+react vote) — schema shape per content.config.ts; site build gate unchanged |
| CAT-02 | Live demo | PASS | `https://templatorium-demos.pages.dev/nocturne/` → HTTP 200 |

## 5. Recommended items (walked, advisory)

REC-01 texture over gradient: PASS (violet film grain). REC-02 density rhythm:
PASS (cramped board/rail vs airy room bands). REC-03 not three identical cards:
PASS (photo card + two keyhole plates, numbered). REC-04 motion-as-meaning:
PASS (the clack = arrivals; rests visible under reduced-motion).

## Screenshots

`docs/qa/evidence/2026-07-22-receipts/nocturne-{375,768,1440}.png`
(1440 = full page, captured under `reducedMotion:'reduce'`).

---

All 38 required registry checks pass; 4 recommended pass. Mechanical outputs
are fresh runs on current code; judged items re-verified at receipt depth
against this session's full-gate PASS. Nothing regressed.

## Verdict: **PASS**

04 — What this demonstrates

If you're evaluating the owner.

Multi-agent orchestration

A role-based agent system with defined hand-offs, parallel dispatch, revise loops, and a rule that promotes repeated failures into permanent instructions.

Quality-system design

A 42-check gate as code and convention: scripted mechanical checks, adversarial judged ones, and PASS verdicts that only exist as committed artifacts.

Front-end craft

The templates themselves: semantic HTML, computed WCAG 2.2 AA, hand-rolled motion (no unlicensable libraries), working no-JS fallbacks, unminified readable source.

Honest measurement

Every number computed from a source file, a claims audit that removed anything unbackable, and an append-only weekly log where "zero sales" is a valid result.

05 — See for yourself

This whole shop is the portfolio.

Browse the shelf, open any inspection sheet, read the code in any zip. Everything here was made the way this page says it was.

The owner is open to AI-automation work · info@templatorium.com