Review: Playground overhaul 1/4: CSS/JS unification

review-381-2026-03-25 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type — present ("Feature")
  • [x] Lineage — present (decomposed from westside-app#84, parent note: westside-playground-overhaul). Uses non-standard header ("### Type" + "### Lineage" vs template's single "### Lineage"). Acceptable variant.
  • [x] Repo — present (forgejo_admin/westside-playground)
  • [x] User Story — present and well-formed
  • [x] Context — present, thorough, explains the dual-CSS problem clearly
  • [x] File Targets — present and detailed (create, modify, remove, update sections)
  • [x] Acceptance Criteria — present, 8 items
  • [x] Test Expectations — present, 4 items
  • [x] Constraints — present, 4 items
  • [x] Checklist — present
  • [x] Related — present
All required template sections are present.

File Targets

  • [x] shared/app.css (2621 lines) — verified: exists, 2621 lines matches ticket claim exactly
  • [x] css/style.css (804 lines) — verified: exists, 804 lines matches ticket claim exactly
  • [x] shared/westside-style.css — verified: exists (804 lines), confirmed dead file (zero HTML references). Identical copy of css/style.css.
  • [x] shared/westside-main.js — verified: exists (20 lines), confirmed dead file (zero HTML references)
  • [x] js/main.js — verified: exists (20 lines), confirmed exact duplicate of shared/westside-main.js (diff is empty)
  • [x] shared/app.js (409 lines) — verified: exists, 409 lines matches ticket claim exactly
All file targets verified. Every line count and duplication claim is accurate.
HTML reference audit (18 pages total):
  • Pages using shared/app.css + shared/app.js (authenticated style): admin.html, admin-players.html, admin-teams.html, billing.html, coach.html, coach-profile.html, index.html, parent.html, player-profile.html, register.html, signin.html, team.html, tryouts.html (13 pages)
  • Pages using css/style.css + js/main.js (public style): original-index.html, sponsors.html, staff.html, success.html, westside-index.html (5 pages)
  • Pages with NO JS reference: admin.html, index.html, parent.html, signin.html, team.html, tryouts.html (6 pages — these will need script tags added if app.js becomes universal)

Repo Placement

ISSUE: The Forgejo issue is filed on forgejo_admin/westside-app (issue #85) but the scope document's Repo field says forgejo_admin/westside-playground. All file targets exist in the playground repo (confirmed via local checkout at ~/westside-playground, remote: forgejo_admin/westside-playground.git). The Forgejo issue should be filed on forgejo_admin/westside-playground, not westside-app. All 4 sub-tickets (#85-#88) and the parent #84 have this same mismatch.
An agent spawned with "forgejo_admin/westside-app#85" would clone the wrong repo. The scope body does specify the correct repo, so a careful agent could recover, but the mismatch creates unnecessary friction and error risk.

Dependencies

  • Board item #380 (westside-app#84) — parent issue, also in todo. Decomposition parent, not a blocker.
  • Board item #382 (ws-app#86, "overhaul 2/4: Public pages") — depends on #381 (depends:ws-85). Correctly documented.
  • Board item #383 (ws-app#87, "overhaul 3/4: Authenticated pages") — depends on #381 (depends:ws-85). Correctly documented.
  • Board item #384 (ws-app#88, "overhaul 4/4: Cleanup + component docs") — depends on #382 + #383. Correctly sequenced.
  • Phase 15 (board #132, in_progress): "Production Port: playground to SvelteKit." Potential conflict: Phase 15 is actively porting current playground CSS to SvelteKit. If this ticket rewrites the playground CSS foundation, the port could be based on stale CSS. The scope should document whether Phase 15 should wait for this overhaul or proceed independently.
  • Board item #356 (ws-app#77, next_up): "Public site: travel schedule page + nav updates." Adds a new public page that would need the unified CSS. Should also carry depends:ws-85.
  • Board item #355 (ws-app#76, todo): "Add Coach Manny to staff page." Staff page currently uses css/style.css which will be deleted. Should note dependency on ws-85.

Acceptance Criteria

Testability:
  • "Single shared/style.css exists" — verifiable via ls
  • "Single shared/app.js exists" — verifiable via ls
  • "All dead CSS/JS files removed" — verifiable via ls, file list is explicit
  • "Every existing HTML page references unified CSS/JS" — verifiable via grep
  • "Red/black westside brand is the visual identity" — requires human review (phone approval). Correctly scoped as manual gate.
  • "Authenticated page layouts still work" — requires visual review. Which of the 13 authenticated pages specifically?
  • "Mobile-first responsive breakpoints preserved" — verifiable at 390px viewport. Test expectation covers this.
  • "Lucas approves on phone" — manual gate, correctly stated.
Missing criteria: No explicit criterion for css/ and js/ directory removal (only files listed, not directories). Minor — inferable from file removal list.

Blast Radius

  • westside-app (SvelteKit production): No direct impact — playground is a separate repo. However, Phase 15 (in_progress) is porting playground to SvelteKit, so sequencing matters.
  • Playground pages: All 18 HTML files need updating. The scope correctly says "ALL existing .html pages" without enumerating them. Agent can discover the list via ls *.html.
  • No downstream API or service impact — pure static HTML/CSS/JS.

Recommendation

Two issues require resolution before READY:
  • Repo placement mismatch (moderate): Issue #85 is filed on forgejo_admin/westside-app but all work targets forgejo_admin/westside-playground. Either move the issues to the correct repo, or add a prominent note that the agent must clone westside-playground. Applies to all 5 issues (#84-#88).
  • Phase 15 conflict (minor): Document the relationship between this overhaul and the in-progress Phase 15 (playground-to-SvelteKit port). One line in Constraints would suffice: "Phase 15 should port from the unified CSS, not the current split CSS."
Optional improvements (not blocking):
  • Add depends:ws-85 labels to board items #355 and #356 since they touch pages affected by the CSS migration.
  • Enumerate the 6 authenticated pages with no current script tag to clarify whether app.js should be added to them.