Operator gate-0 ratified 2026-05-24: Deck Hearth wins (more distinctive brand, the brand the rendered Layout header already displays). The trade is real — already-shipped infrastructure ID is the losing name — so this convoy is non-trivial-sed and needs architect slicing. Scoping rules baked into the convoy file: - Repo + Vercel rename DEFERRED to follow-up convoy rename-repo-and-vercel-project (auto-redirects make it low-urgency) - Redis prefix migration IN SCOPE (lib/rate-limit.js uses tcgvault:auth/search/upload/generate/import; rename atomic; accept one-time per-15-min / per-1-hour counter reset, no user impact) - Admin email migration IN SCOPE (admin@tcgvault.com -> proposed admin@deckhearth.com; needs in-DB UPDATE script) - package.json name rename IN SCOPE (we don't publish, contained blast) - DNS / domain OUT OF SCOPE (operator doesn't own the domain yet) - Brand asset regen OUT OF SCOPE (favicon + OG images need design pass) 5 named decisions (D1-D5) operator-ratified at gate-1: canonical display string, canonical kebab, canonical camel/lower, canonical admin email, canonical Redis prefix. No architectural decisions; this is a pure naming convoy where the architect proposes the canonical shapes and the operator picks. Cross-cutting smoke + visual-diff blast flagged (smoke spec text matchers + visual baselines both predicate on current brand strings; the adopt-playwright-smoke Decision 4 continue-on-error swallow buys us cover but the queued seed-visual-baselines-on-linux convoy gets harder until this lands). Architect dispatched next on convoy/pick-a-name. No code yet. Co-authored-by: Cursor <cursoragent@cursor.com>
7.7 KiB
pick-a-name (P1 — pre-launch brand consistency)
Status: in-progress
Priority: P1 (pre-launch; not a security blocker, but a brand-consistency
blocker that touches every user-facing surface)
Convoy owner: parent (orchestration); role-architect then
role-implementer(s) then role-doc-writer
Opened: 2026-05-24
Operator decision (gate-0, already ratified): Deck Hearth wins.
Problem
AGENTS.md line 5 has called this out since project setup: the repo, README,
seed data, package name, infrastructure, and admin email all say "TCG
Vault" (and the kebab tcg-vault / camel tcgvault variants), while the
actual rendered header brand in components/Layout.js says "Deck Hearth".
Two distinct names, two distinct visual brands (the AnimatedFireLogo.js
component is also affected). Pre-launch this MUST be one name end-to-end.
Operator's brand decision (gate-0)
Deck Hearth wins. Rationale (operator-stated): more distinctive, more ownable, and the brand the human-facing surface (Layout header) already renders. The trade is real: this is the higher-cost path because the already-shipped infrastructure ID is the losing name. The architect's job is to scope and minimize that cost — NOT to re-litigate the brand decision.
Initial surface inventory (architect to expand)
Pre-architect rough hit-count from rg, scoped to non-vendor files:
| Surface | Files (sample) | "TCG Vault" or tcg(-)?vault hits |
|---|---|---|
| Marketing copy | README.md, pages/index.js, pages/login.js, pages/signup.js |
4 + 5 + 4 + 1 |
| Brand components | components/AnimatedFireLogo.js, components/ShareModal.js |
4 + 1 |
| Seed scripts (admin email) | scripts/setup-neon-db.js, scripts/create-test-users.js, scripts/seed-collections-*.js |
2 + 7 + 6 |
| Test guides | TESTING_GUIDE.md |
7 |
| Infrastructure-bound (rename has external blast) | package.json, lib/rate-limit.js (Redis prefix), .github/workflows/*.yml |
1 + 5 + 3 |
| Already-correct (Deck Hearth) | components/Layout.js, styles/globals.css, components/AnimatedFireLogo.js partial |
n/a (these stay) |
Hard scoping rules
- Strictly NO re-litigating the brand decision. Deck Hearth wins; the architect ratifies how to rename, not whether to.
- Keep the repo
tcg-vaultfor now. GitHub rename is a separate concern (auto-redirects work, but Vercel-link /ghconfigs / local remotes / bookmarks all need touching). Track as a queued follow-up convoyrename-repo-and-vercel-project. This convoy renames the product brand in-app; the repo/Vercel rename is a downstream convoy. - Redis prefix migration is in scope.
lib/rate-limit.jsusestcgvault:auth/search/upload/generate/importas Redis key prefixes. These must rename todeckhearth:*(or similar) atomically with the convoy. Accept the one-time rate-limit-state reset (counters are per-15-min / per-1-hour anyway; no user-perceptible impact). - Admin email migration is in scope.
admin@tcgvault.comrename toadmin@deckhearth.com(or similar — architect proposes the canonical email, operator ratifies). Includes the in-DB UPDATE for any existingadmin@tcgvault.comrow (write a one-offscripts/migrations/YYYY-MM-DD- rename-admin-email.jsper the no-go-zones rule for new migrations). package.jsonname field: rename todeck-hearthin this convoy (npm package name; we don't publish, so blast is contained to lockfile + any local script reference).- Lockfile regeneration: the architect ratifies whether to regenerate
package-lock.jsonin this convoy or accept the rename mismatch short-term. (Recommended: regenerate; cheap; matches package.json shape.) - DNS / domain: out of scope — separate convoy
point-domain-at-deckhearth(you don't own adeckhearth.*domain yet per operator's pre-convoy statement; if/when acquired, that triggers DNS). - Favicon / OG images / social cards: in scope IF source files exist;
defer to follow-up convoy
regenerate-brand-assetsif they need new design.
Architect deliverables
- Full surface inventory — every occurrence of
TCG Vault,tcgvault,tcg-vault, plus every occurrence ofDeck Hearth/deck-hearth/deckhearth(the latter set tells you what's already correct and what shape collisions need handling, e.g., if Layout.js hasDeck Hearthbut AnimatedFireLogo.js hasDECKHEARTH— pick canonical casing). - Canonical-string ratification: propose the canonical product name
("Deck Hearth" with internal-cap; or "Deckhearth" one word; or other);
the canonical kebab (
deck-hearth); the canonical camel/lower (deckhearth); the canonical admin email (admin@deckhearth.comor variant); the canonical Redis prefix (deckhearthordh). Mark each as D1-D5 (operator gate-1 for all five — they're naming choices, not architectural ones). - Slice plan: probably 2-3 briefs. Suggested split (architect can
change): Brief 1 = in-repo string sweep + AnimatedFireLogo brand update
(mechanical); Brief 2 = Redis prefix migration in
lib/rate-limit.js+ admin-email DB migration script + package.json rename + lockfile regen (operationally riskier — needs careful testing). Brief 3 (if needed) = visual baseline reset (because the smoke + visual-diff specs will all fail with the new brand). - Boot-the-brief verification for each: confirm specs compile, lint passes, vitest passes, smoke can still run against a preview.
- Out-of-scope queued follow-ups: explicit list (repo rename, Vercel project rename, DNS / domain acquisition, brand asset regeneration, social card refresh).
Known constraints
- Cross-cutting smoke/visual diff blast. PR-#18's Playwright smoke spec
("sign-in page renders") + the visual-diff baseline are both predicated on
the current brand strings. Brief 2 (or Brief 3 if split) MUST update
the smoke spec expectations and either regenerate visual baselines or
accept temporary baseline drift (the
adopt-playwright-smokeDecision 4continue-on-errorswallow is still in effect, so visual-diff drift won't fail CI — but the queuedseed-visual-baselines-on-linuxconvoy becomes harder to ship until after this convoy lands). - Smoke spec lives at
tests/smoke/app.smoke.spec.ts. Likely needs one-or-two-character edits to text matchers. AGENTS.mdline 5's branding note is the canonical historical record of the inconsistency; the doc-writer pass MUST update it from "Pick one before launch" to "Deck Hearth (decided 2026-05-24 inpick-a-nameconvoy; commit X)."- Operator-action-required pre-merge: smoke-test the rebranded preview manually before merge (every public page should render "Deck Hearth"; login + register should still work; admin import UI should still function with the renamed admin user).
Out of scope (queued follow-ups)
rename-repo-and-vercel-project— GitHub repo rename + Vercel project rename + local git remote update. P2 polish. Auto-redirects make this low-risk-low-urgency.point-domain-at-deckhearth— DNS / domain. Blocked on domain acquisition (operator pre-convoy: doesn't owndeckhearth.*yet).regenerate-brand-assets— favicon, OG images, social cards. P2 polish; requires design pass.migrate-existing-user-emails— if any existing user accounts have@tcgvault.comemails (besides admin), propose a migration. Architect to surface count via arg/DB query during inventory.
Owns
role-architect (decisions D1-D5, slice plan) → role-implementer(s)
(per brief) → role-doc-writer (AGENTS.md line 5 + this file's
As-shipped + ship-readiness Status summary footer).
As-shipped
(To be appended post-merge by role-doc-writer.)