Review: Promote jersey page design from playground to production

review-907-2026-04-08 Doc

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type -- Feature
  • [x] Lineage -- Standalone, discovered during jersey email send
  • [x] Repo -- forgejo_admin/westside-landing
  • [x] User Story -- As a parent clicking a jersey link from email...
  • [x] Context -- Thorough explanation of unstyled CSS classes and playground redesign
  • [x] File Targets -- 4 modify/create targets, 2 do-not-touch, 2 read-only references
  • [x] Acceptance Criteria -- 8 criteria covering division logic, mobile/desktop, layout, Stripe flow
  • [x] Test Expectations -- Manual test with real token, visual check, no unit tests (appropriate for visual promotion)
  • [x] Constraints -- 5 constraints covering script preservation, URL stability, CSS conventions
  • [x] Checklist -- PR, no unrelated changes, mobile/desktop screenshots, real token test
  • [x] Related -- project-westside-basketball, playground URL

Traceability

  • [x] story:WS-S18 label -- "As a parent, I want to receive a branded email with jersey ordering link so that I can order without bringing cash"
  • [x] story note verified -- found in project-westside-basketball user-stories section (Parent stories list)
  • [x] arch:frontend label -- references frontend component
  • [ ] arch note MISSING -- [SCOPE] Create architecture note arch-frontend for the westside-app frontend component
  • [x] Forgejo issue -- forgejo_admin/westside-landing#236, state: open

File Targets

  • [x] src/app.css -- verified: file exists, confirmed zero jersey-page/jersey-card/jersey-grid CSS classes (issue claim accurate)
  • [x] src/routes/(app)/jersey/+page.svelte -- verified: exists, 448 lines, 14KB (source for move to (public))
  • [x] src/routes/(app)/jersey/success/+page.svelte -- verified: exists, 439 bytes
  • [x] src/routes/(app)/jersey/cancel/+page.svelte -- verified: exists, 1.1KB
  • [x] src/routes/(public)/+layout.svelte -- verified: public layout exists (target route group ready)
  • [x] ~/westside-playground/jersey.html -- verified: exists (read-only source)
  • [x] ~/westside-playground/shared/style.css -- verified: exists, 29 jersey-related CSS references (read-only source)
All targets are specific enough for an agent to act on without guessing.

Repo Placement

OK. Local ~/westside-app directory is the forgejo_admin/westside-landing repo (confirmed via git remote). Issue filed on correct repo. Single-repo change -- no multi-repo coordination needed.

Dependencies

  • [x] #733 "Fix 9 failing jersey/checkout tests" -- in_progress, same story:WS-S18. Not a blocker for this visual work (test fixes are independent of CSS/layout changes).
  • [x] #696 "Update jersey/checkout pages to support session auth" -- QA column. Related: this ticket moves jersey to (public) layout. Agent must preserve dual-auth script logic during move. Satisfied (already in QA).
  • [x] #718 "Remove opt-out from jersey ordering options" -- QA column. Aligned with AC ("Opt-out option is not rendered"). Satisfied.
  • [x] #695 "Add jersey order card to player profile page" -- QA column. Not blocking.
  • [x] #694 "Add player_id param for multi-player parents" -- QA column. Not blocking.
No unresolved dependencies that would block execution.

Acceptance Criteria

8 criteria evaluated:
  • Division-conditional images (Queens/Kings) -- testable via token with known player division
  • Size + number validation enabling Order button -- testable via DOM interaction
  • Stripe redirect -- testable with real tokenized link
  • Mobile vertical stack / desktop 2-column grid -- testable via viewport resize screenshots
  • Opt-out not rendered -- testable via DOM check
  • Public layout (site-nav + footer) -- testable via layout element presence
All criteria are specific and testable. No ambiguous language.

Blast Radius

Moving routes from (app) to (public) group is low-risk: SvelteKit route groups do not affect URL paths, so existing /jersey?token=... links continue to resolve. The (app) layout (bottom-nav) will no longer render on jersey pages -- replaced by public layout (site-nav + footer). This is intentional per the issue. No other routes reference jersey page components. No downstream consumers affected. Rollback is straightforward (move files back to (app) group).

Decomposition Assessment

Three-thing limit: 3 discrete changes (move route group, paste CSS into app.css, update markup). Within limit.
Five-minute rule: 4 file targets in 1 repo. 8 acceptance criteria, but all are visual checks on the same page -- effectively one atomic change. Estimated agent time: 3-4 minutes. Within limit.
No independent subtasks that would benefit from parallelization. No decomposition needed.

Recommendation

  • [SCOPE] Create architecture note arch-frontend for the westside-app frontend component in pal-e-docs to complete the traceability triangle.
  • [LABEL] Board item #907 has an empty title. Set title to "Promote jersey page design from playground to production" to match the Forgejo issue.