Review: SvelteKit scaffold + Dockerfile

review-794-2026-04-03 Doc

review ready

Verdict: READY

Re-review (r3). Both prior issues resolved: arch label fixed on board item, project page user-stories section confirmed present (r2 false positive from empty TOC on inline-HTML page).

Template Completeness

  • [x] Type -- Feature
  • [x] Lineage -- Sub-ticket of #7
  • [x] Repo -- forgejo_admin/twitch-2k-wager
  • [x] User Story -- developer wants a working scaffold so subsequent tickets can add features
  • [x] Context -- promote playground CSS, dark Twitch theme, no logic yet
  • [x] File Targets -- 8 file groups listed (all new files)
  • [x] Acceptance Criteria -- 6 testable criteria
  • [x] Test Expectations -- visual comparison + docker build
  • [x] Constraints -- no auth/Stripe/DB, match playground CSS exactly
  • [x] Checklist -- PR/tests/no-unrelated
  • [x] Related -- parent #7 + playground PR #13
All required template sections present and substantive.

Traceability

  • [x] story:challenger-auth label -- Challenger Twitch Login
  • [x] story note verified -- story-twitch-2k-wager-challenger-auth (id 1157) exists, active, note_type user-story
  • [x] story entry on project page verified -- project-twitch-2k-wager user-stories table lists challenger-auth with link to story note (r2 false positive corrected; page uses inline HTML so TOC was empty, but content is present)
  • [x] arch:deployment-twitch-2k-wager label -- confirmed on board item #794 (label fix applied since r2)
  • [x] arch note verified -- arch-deployment-twitch-2k-wager (id 1156) exists, active, note_type architecture. Deployment diagram includes twitch-2k-wager-app component, Dockerfile, adapter-node -- matches this ticket's scope.
  • [x] Forgejo issue -- forgejo_admin/twitch-2k-wager#8, open
All three traceability legs satisfied. Both backing notes confirmed.

File Targets

  • [x] package.json, svelte.config.js, vite.config.ts, tsconfig.json -- new files (SvelteKit init). Repo has README.md + spike/ only. Correct for greenfield scaffold.
  • [x] src/app.css -- new file promoted from playground style.css
  • [x] src/routes/+layout.svelte -- new file (app shell with dark theme)
  • [x] src/routes/+page.svelte -- new file promoted from playground index.html
  • [x] src/routes/game/[id]/+page.svelte -- new file promoted from playground game-status.html
  • [x] Dockerfile -- new file (multi-stage Node.js build for adapter-node)
  • [x] .dockerignore -- new file
All targets are new files in a greenfield repo. No existing code conflicts. Source design available from merged pal-e-playground PR #13. Reference implementation at westside-contracts (same SvelteKit adapter-node + Dockerfile pattern).

Repo Placement

OK. Issue filed on forgejo_admin/twitch-2k-wager, matches ### Repo field. Single-repo ticket. Kustomize overlay scoped to separate issue #3 (item #788).

Dependencies

  • [x] Playground PR #13 (pal-e-playground) -- merged. Source CSS and HTML available.
  • [x] Parent issue #7 (item #793) -- open. This is the first sub-ticket; all others (#9-#13) depend on this scaffold.
  • [x] Service onboarding #1 (item #786, needs_approval) -- downstream, not blocking scaffold.
  • [x] Kustomize overlay #3 (item #788, todo) -- downstream, not blocking scaffold.
  • [x] Item #800 (Annotate playground #14) -- in next_up. Shares story:challenger-auth. Independent prep task, not a blocker.
No unresolved blocking dependencies.

Acceptance Criteria

  • [x] "npm run dev starts on port 3000" -- testable: run command, check port
  • [x] "Landing page matches playground design visually" -- testable: screenshot comparison (final visual approval deferred to human)
  • [x] "Game status page renders (with placeholder data)" -- testable: navigate to /game/test, verify render
  • [x] "docker build . succeeds" -- testable: exit code check
  • [x] "No Tailwind -- pure CSS vars" -- testable: grep package.json and node_modules for tailwind
  • [x] "Mobile-first (390px viewport)" -- testable: CSS inspection for min-width media queries
All 6 AC are specific and programmatically verifiable. No missing criteria.

Blast Radius

Minimal. Scaffolding a new project in a near-empty repo. No downstream consumers, no shared libraries, no auth/payment/DB integration. Same proven pattern as westside-contracts. Rollback is trivial (revert single PR on greenfield repo).

Decomposition Assessment

1 repo, 8 file targets (all new), 6 ACs. SvelteKit scaffold + CSS promotion + Dockerfile is one cohesive unit.
  • Discrete changes: 3 (SvelteKit init, CSS/route promotion, Dockerfile). At the three-thing limit.
  • Estimated agent time: 3-5 minutes. Within the five-minute rule.
  • Parallelizable subtasks: None. SvelteKit init must precede route promotion.
No decomposition needed.

Recommendation

No action needed. Ticket is ready for execution.