WootBuild.

Studio/docade/Intake

Stages 1–2 · client-intake.md

Client intake — docade

Stages 1–2. Drafted 2026-08-17 from docade's own documentation, not from an interview: assets/manifest.json, assets/reference-sheet.txt, and docs/14-ASSET-MANIFEST.md. Sources are cited so every claim can be re-checked against the client's repo rather than trusted.

Marked ⬜ where a decision is genuinely open. Those are the only things that need a human.


Identity

FieldValue
Client iddocade
Display namedocade
Repo root/Users/alphalobo/Projects/docade
Also hosted on claude.aiyes — bridge applies (13-WORKFLOW.md §5)
Live with real users?no — pre-enrolment. Delivery is not branch-gated
Monthly ceiling$40

Request source

FieldValue
Machine-readable manifest?yes — assets/manifest.json, 19 categories, 204 keys, per-key subject briefs
Consume it directly?yes. Do not issue lane-request.md to this client
Regenerated bynpm run assets:sheet (a resolver, not a typed list)
Gap detectornode scripts/check-assets.mjs --missing
Filenames are foreign keys?YES — this governs delivery

docs/14-ASSET-MANIFEST.md §6 maps paths to database columns: profiles.avatar_key, tasks.icon_key, prizes.image_key, collectibles.image_key. Keys are kebab-case and stable forever; renaming one is a migration, not a file rename.

Delivery rule for this client: WootBuild never invents a filename, and art deliver must refuse any path that is not a declared manifest key. Art delivered to an unknown path renders broken in production and nothing catches it — docade's own §6, and the failure their check-assets script exists to prevent.


Stage 1 — What the assets do

Function map

LaneWhere it appearsMust accomplishSits besideHow it fails
glyphToday list, status bar, adminName a real-world object at 24pxOther glyphs in the same listlaundry indistinguishable from fold-clothes
avatarProfile, child switcherIdentify a child instantlyOther children's avatarsTwo children read as the same person
brandSplash, admin header, store listings, og-imageRead at ~14px in the admin headerAdult-facing chromeJudged by a parent, not a child
plushCollection grid, crane revealRead as that animal at 80px17 other sculptsSilhouette collapses; legendary doesn't read as legendary
prizePrize wallSurvive a saturated two-stop gradient groundIts ticket price, other prize cardsVanishes on mid-tone gradient — takes all 15 with it
worldRoom view, arcadeRecede — background, not subjectThe stuffies standing in itCompetes with the collectibles
lyleCopilot momentsCompetent, dry, a little wryReal UI copyComes back cute. Not a mascot, not a butler
ui-artEmpty states, streak, entry, system statesCarry a narrative momentReal copyScene register — composed, not a centred object
craneThe reveal — core loopMake the common outcome feel like a winRarity tiers above itToken drop reads as a consolation prize
storeApp store listingsSell to a parentCompetitor listings—

Sources: reference-sheet pieces 1–13; 14-ASSET-MANIFEST.md §3.5 (80px), §3.8 + lib/prizes/art.ts (gradient grounds), 04-LYLE-COPILOT.md §2 (register).

Hard constraints


Stage 2 — Volume and staffing

Volume profile

CountSource
Present today4 — all placeholder PWA iconscheck-assets.mjs --missing
To produce200
Launch total204 (196 product + 8 store)manifest totals
Phase 016
Phase 1 — the bulk103
Phase 2 / 3 / 4 / 5a6 / 35 / 36 / 8
Ongoing~150 images/yearQ25, "the operator's number, judged doable"

⚠ Launch counts are sculpts, not entries. Q25 made each colorway its own collection entry, so shipped entry count is unknown until Q44 lands. A manifest counting only launch "reads as complete on the day the library starts growing."

Lane grouping — 19 delivery categories → 10 production lanes

Lanes group by how a thing is made, not where it lands.

LaneCategoriesnFormat
glyphtask-icons, status-icons, ui-icons, admin58svg 24px, mono
worldarcade, furniture, room-treatments39png
ui-artempty-states, streak, entry, system-states24png
plushstuffies18png 512
prizeprizes15png 512 on gradient
cranecrane14riv/png — motion
avataravatars12svg 256
brandidentity, app-icons10svg/png + type
storestore-listing8png
lylelyle6png 512

Split from the first pass after reading the reference sheet: prize left plush because it is the only register on a saturated ground, and crane left ui-art because it is motion. Both splits came from the client's own doc, which is the method working.

Best-artifact analysis, and the staffing gaps

Decided with the roster ignored, then diffed.

#GapLanesWhy it mattersCost to close
1Placement harness — see candidates at real size on real surfacesalldocade calls this a prerequisite, not a conveniencebuild; the console is the natural home
2Tintable colour separation — flat fills, no colour baked into shadingplush, prize, worldQ25's whole 150/yr economics~$2 probe (piece 2)
3Motion productioncrane (14) + 9 unbuiltThe single most important animation in the product⬜ undecided
424px vector glyph methodglyph (58)28% of catalog, phase-1 bulk~$2 probe
5Typography — the wordmarkbrand"the only piece that is not illustration"authored, not generated
6Silhouette transformplush, world18 images for zero art budgetsmall sharp script

On gap 1 — quoting docade directly, because it changes our sequencing:

"There is currently no way to actually LOOK at a candidate piece in place… A style is judged at the size and against the background it will ship at — a stuffy at 80px on the collection grid, a task icon in the Today list beside real copy, a prize on the wall next to its ticket price… A harness that drops candidate files into the real surfaces at real sizes is a prerequisite for Step 1, not a convenience."

WootBuild's review UX is a contact sheet — a grid at uniform size. That is exactly what docade says is insufficient. This is a studio capability gap, and it independently confirms the Stage 1 "sits beside" principle.

On gap 3 — motion. 12 pieces are built as hand-written CSS in globals.css and are good: documented, consistent, reduced-motion honoured. 9 are unbuilt. Framer Motion, Rive and Lottie are all named across their docs and none is installed. Their Q45 narrows the real question to whether the crane and rarity reveals need a runtime state machine — and is explicitly blocked: "Do not answer it before piece 2 of the reference sheet comes back."


The critical path

Reference sheet piece 2 — plush octopus, ×2 colorways — is the highest-leverage single asset in this engagement. It settles:

Better to learn it on piece 2 than at sculpt 18, which is their reasoning and it is correct.

Sequence: visual mission (Stage 3) → placement harness (gap 1) → reference sheet with piece 2 first → volume.


Decisions — 2026-08-17

#QuestionResolution
1Motion production — ours or docade's?Decide after piece 2. Their Q45 is explicitly blocked behind it and coupled to the colorway answer; deciding now means deciding without the evidence they told us to wait for.
2Where does the placement harness live?In the console. It is a web surface, the console already exists and is protected, and this is the same surface as the eventual gallery/approval view — arriving earlier because docade needs it to approve anything.

⬜ Still open — not ours to answer

#QuestionNotes
3Piece 12 names art the inventory lacks (empty/today-done vs no-tasks)docade correctly refused to invent a key. A request that cannot become a brief — WootBuild escalates rather than generating against a guessed path.
4Q44 / Q45docade's to answer. We supply the evidence (piece 2); they decide.