Gap analysis — the app surfaces vs production-quality (2026-06-15)

Target: A finished, production-quality consumer app that markets itself — every BASIS surface at its good_when bar (Cam-stamped good).
Constraint gap: G2
1 kill 3 minor 9 serious · 13 total

Gaps

idgaptargetcurrentseverityeffortevidence
G1Dialog views: pickers render EMPTY cards (live bug)populated, labeled, searchable cards; matches the design languagebuilt, but a live empty-cards bugkillMBASIS "live bug: empty cards"; dialogs lane (active)
G2Create not good — the produce spinea user reaches a downloadable on-brand reel in ONE guided pass; no dead ends, no naked enumsbuilt · UNRATED; engine-client seam + enum gapsseriousMsurface-doctor: built/unrated; build-master
G3Templates wall is data-thinevery template a real preview, applies cleanly into Create, wall populatedbuilt · data-thinseriousMBASIS "data-thin"; build-master
G4Home is a funnel hole (UNASSIGNED)on sign-in, the user knows the next move + one tap reaches the produce spinespec'd · staged (no real hub)seriousMBASIS spec'd·staged; no owner
G5Creators: consistency + DNA casting card not surfacedconsistent renders + the locked DNA casting card on the creator pagebuilt · consistency WIP · unratedseriousMBASIS; Cam (other terminal, active)
G6Products: can't bind a product INTO a scene (UNASSIGNED)add a product, render a scene that visibly features it (renderScene productId)built · partial (P0)seriousMBASIS partial(P0); no owner
G7The Agent: assist/remix/cost-confirm not surfacedwand-fill any field + remix a template + never spend a credit without a confirmspec'd · seam builtseriousLBASIS; design-lead (active)
G8Template Studio: no SEE/EDIT/TUNE surface (UNASSIGNED)edit a single scene cheaply in the image domain + save the fix back to the templatespec'dseriousLBASIS spec'd; no owner
G9Landing/SEO not production-qualityproduction SSR'd for crawlers + pSEO routes render real contentspec'd · drafted (hero just shipped full-bleed)seriousMBASIS; seo-web (active)
G10Library doesn't show all artifact types (UNASSIGNED)every generated artifact appears, re-opens, re-usable as an inputbuilt · unratedseriousMsurface-doctor built/unrated; no owner
G11Pricing: page vs lib/pricing.ts parity unprovenaccurate, matches lib/pricing.ts, shown price == derived chargebuilt · partial · unratedminorSsurface-doctor built/unrated
G12Free tools are a static launchereach listed tool runs end-to-end for a logged-out userspec'd · static launcherminorMBASIS static-launcher
G13Brand kit not applied everywhereK1 icon + W2 wordmark + tokens shipped to apps/web + used everywherespec'd · deferredminorSBASIS deferred

Close order — leverage-sequenced (feeds triage)

  1. G1 — kill the Dialog-views empty-cards bug; it breaks the picker step INSIDE the produce flow (dialogs lane is on it). The flow can't be good while a core control is broken.
  2. G2 (the constraint) — drive Create to good (the produce spine IS the product; once a user gets a downloadable on-brand reel in one pass, the core value is proven). Needs G1 + G3.
  3. ASSIGN the unowned leverage: G4 Home (the funnel hole every signed-in user hits) · G6 Products-bind (a core differentiator) · G8 Template Studio (the composer, Cam's long-standing pain). These won't close without an owner — triage's first job.
  4. Feed the spine: G3 Templates (populate + previews).
  5. Let active owners drive to good: G5 Creators, G7 The Agent, G9 Landing.

Parked (mondo / not-now)

rendered from docs/reviews/2026-06-15-gap-app-surfaces.md · re-run `pnpm gap-report` after editing the markdown (source of truth)