Review: Coach dashboard: team schedule via team_id FK
Verdict: APPROVED
Re-review of board item #808. Prior review (NEEDS_REFINEMENT) had 3 issues — all resolved in updated issue body.
Template Completeness
- [x] Type — Feature
- [x] User Story — story:WS-S27, inline in issue body
- [x] Lineage — story, arch, blockers documented
- [x] Repo —
forgejo_admin/westside-landing(local:~/westside-app) - [x] Context — thorough, includes DB relationships, verified data counts, decided API strategy with exact filter logic
- [x] File Targets — 1 frontend file, correct
- [x] Acceptance Criteria — 5 items, all testable
- [x] Test Expectations — 3 items
- [x] Constraints — no Tailwind, no new endpoints, verify /coaches/me shape
- [x] Checklist — 7 items, maps 1:1 to implementation steps
- [x] Related — API endpoints + merged sibling PR
Traceability
- [x] story:WS-S27 — "As a coach, I want to see my team's practice schedule and upcoming events so I know when and where my teams practice and play." Verified in project-westside-basketball user-stories section under Coach.
- [x] arch:landing-site — label present on board item
- [ ] arch note MISSING — [SCOPE] No
arch-landing-sitenote exists in pal-e-docs. Non-blocking for this ticket but multiple board items reference this label. Create architecture notearch-landing-sitefor the westside-app frontend component. - [x] Forgejo issue —
forgejo_admin/westside-landing#213, open
File Targets
- [x]
src/routes/(app)/coach/+page.svelte— verified at~/westside-app/. Schedule tab lines 149-157 currently shows "Coming soon" placeholder. Correct target. - [x] No backend file targets — correct per decided approach (client-side filter of
/public/schedule)
Repo Placement
RESOLVED. Forgejo repo
forgejo_admin/westside-landing confirmed as the remote for local checkout ~/westside-app (verified via git remote -v). Issue body now documents both names explicitly.Dependencies
- [x] #629 — Schedule data model + migration + seed — done
- [x] #630 — Schedule API CRUD endpoints — done
- [x] #739 — Seed practice_schedules with Spring/Summer 2026 — done
- [x] #790 — Seed events table with tournament schedule — done
- [x] #653 — Public schedule endpoint (GET /public/schedule) — done
- [ ] #810 — Admin: Marcus verifies schedule data — in needs_approval. Low risk: if Marcus finds data errors, seeds may change, but frontend code is unaffected.
- [ ] #809 — Parent dashboard: player's team schedule — sibling ticket in backlog. Same arch pattern. Not a blocker; approach chosen here sets precedent.
Acceptance Criteria
- [x] AC1 — "Coach sees practice schedule with day name, 12-hour time, and venue" — testable, format requirements clear.
- [x] AC2 — "Coaches with multiple teams see all team schedules grouped by team" — testable, Marcus with 2 teams is the concrete test case.
- [x] AC3 — "Coming soon placeholder removed" — testable via DOM check.
- [x] AC4 — "Events filtered by team_id match first, then division match for unscoped events" — NOW CLEAR. Issue body specifies exact JS filter logic. Verified
CoachTeamResponsereturnsdivisionfield andEventResponsereturns bothteam_idanddivision. - [x] AC5 — "No backend changes — pure frontend" — verifiable by confirming no changes to basketball-api.
Blast Radius
src/routes/(app)/teams/[id]/+page.svelteline 114 — also has "Coming soon" schedule placeholder. Sibling ticket #809 will use same pattern. No conflict.formatTime/formatDatehelpers duplicated inline inadmin/schedule/+page.svelteand(public)/schedule/+page.svelte, not in$lib/. Agent will need to copy or extract. Minor implementation detail, not a scope issue.- Rollback is trivial — single Svelte page change, no schema migration.
Decomposition Assessment
1 file target, 1 repo, 5 ACs — all in a single Svelte component. Client-side filtering only. Well under the 5-minute rule. No decomposition needed.
Prior Issues Resolved
- Backend approach undecided — FIXED: Issue body now commits to client-side filter with exact JS filter expressions documented in Context section.
- AC4 events ambiguous — FIXED: "team_id match first, then division fallback" with code-level filter logic specified.
- Repo mismatch — FIXED: Issue clarifies
forgejo_admin/westside-landing= Forgejo repo,~/westside-app= local checkout. Verified via git remote.
Recommendation
[SCOPE]Create architecture notearch-landing-site— multiple board items reference this label with no backing note. Non-blocking for this ticket.
No other action needed. Ticket is ready for dispatch.