Review: Interactive girls roster draft tool (mobile-first)
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type -- Feature
- [x] Lineage -- standalone, discovered during girls roster meeting prep
- [x] Repo -- forgejo_admin/westside-roster-draft
- [x] User Story -- coach role, assign girls to teams
- [x] Context -- 16 registered girls, coaches meeting prep
- [x] File Targets -- 6 files to create, 1 exclusion
- [x] Acceptance Criteria -- 6 items
- [x] Test Expectations -- 3 items with run command
- [x] Constraints -- 4 constraints listed
- [x] Checklist -- present
- [x] Related -- project and board references
All sections present per
template-issue-feature. Template is structurally complete.Traceability
- [x] story:WS-S6 -- "As an admin, I want to assign players to teams via draft board so that placement is transparent and trackable" (Admin/Marcus stories on project-westside-basketball)
- [ ] arch:roster-tool -- ISSUE: No architecture note
arch-roster-toolexists in pal-e-docs. The project page architecture section lists Domain Model, Data Flow, Deployment, and Auth -- no roster-tool component. New repos require an architecture note. - [x] Forgejo issue -- forgejo_admin/westside-roster-draft#1, open
File Targets
- [x]
index.html-- new file in new repo, no conflict - [x]
style.css-- new file in new repo, no conflict - [x]
app.js-- new file in new repo, no conflict - [ ]
server.py-- ISSUE: Creates SQLite backend that duplicates basketball-api's existingPOST /admin/teams/saveendpoint andGET /admin/teamsendpoint (see blast radius below) - [ ]
seed.py-- ISSUE: Proposes direct Postgres connection to basketball-api DB. This creates a coupling that bypasses the API layer and requires DB credentials in the standalone tool - [x]
db.sqlite-- gitignored artifact
Repo Placement
MAJOR ISSUE: The ticket proposes a new standalone repo
westside-roster-draft with its own SQLite backend. However:basketball-apialready hasGET /admin/teams(returns all players with division, position, height, graduating_class, photo_url, parent info) andPOST /admin/teams/save(persists player-to-team assignments). Both endpoints are specifically documented as "for the SPA draft-board UI."westside-appalready has a functional draft board at/admin/teamsthat reads from and writes to these endpoints, with player assignment, team creation, save/reset, and unassign functionality.- The new repo is not listed in the project page Repos table.
The correct approach is to enhance the existing draft board (add division filter for girls-only view, add missing fields like tryout_number and current_school, improve mobile UX) rather than create a parallel data silo.
Dependencies
- Existing infrastructure: basketball-api
/admin/teamsand/admin/teams/saveendpoints already handle the core CRUD - Existing UI: westside-app
/admin/teamspage already implements draft board with assignment logic - Board item #122 (Phase 5: Team Placement -- draft board, coach roster) is in
donecolumn, confirming this feature was already built - No items currently in
in_progressornext_upthat block or are blocked by this
Acceptance Criteria
- "Mobile-first layout readable on 390px screens" -- testable, but the existing westside-app admin/teams page could be made mobile-responsive instead
- "Read-only link shows all 16 girls grouped by grad class" -- the existing API already returns graduating_class and division; a filter param on the existing page would achieve this
- "Admin link adds drag/tap to assign" -- existing westside-app page already has assign/unassign; needs mobile touch improvement, not a new tool
- "Assignments persist in SQLite" -- WRONG PERSISTENCE LAYER. Assignments should persist in basketball-api Postgres via the existing /admin/teams/save endpoint
- "seed.py successfully pulls current girls data" -- unnecessary if the tool reads from basketball-api directly
- "No concurrent write conflicts" -- the existing API handles this; SQLite would introduce a sync problem
Blast Radius
HIGH. Creating a separate SQLite data store for team assignments means:
- Assignments made in the draft tool would NOT be visible in westside-app admin dashboard
- Assignments made in westside-app would NOT be visible in the draft tool
- Two sources of truth for the same data (player-team assignments)
- seed.py requires direct Postgres access, creating an undocumented coupling to basketball-api's database
The Player model already has all fields referenced in the ticket: name, date_of_birth (not "age" directly -- needs computation), height, position, current_school (not "school"), tryout_number, team_preference, division.
Minor field naming discrepancy: ticket says "age" but model has
date_of_birth; ticket says "school" but model has current_school.Decomposition
If rescoped to enhance the existing draft board, this is likely 2-3 tickets:
- Add division filter + missing fields (tryout_number, current_school, team_preference) to basketball-api
GET /admin/teamsresponse and westside-app UI - Mobile-optimize the existing westside-app admin/teams page for 390px
- Add read-only coach view (no auth token required, or URL-param auth for quick sharing)
Each is a single-agent ticket. Current scope as written is too large AND architecturally wrong.
Recommendation
[SCOPE]Fundamental architecture decision needed: enhance existing westside-app draft board vs. create standalone SQLite tool. Existing infra already covers 80% of the need. Recommend enhancing, not duplicating.[BODY]If standalone approach is chosen despite overlap: fix field names -- "age" should referencedate_of_birth(computed), "school" should referencecurrent_school[LABEL]arch:roster-tool label references a nonexistent architecture note. Either createarch-roster-toolor re-label toarch:westside-appif work happens in the existing app[BODY]Remove seed.py direct Postgres access -- if standalone, use basketball-api REST endpoints instead of DB coupling[DECOMPOSE]If rescoped to enhance existing draft board: split into 3 tickets (API field additions, mobile CSS, read-only view) via template-board