feat: jersey number picker on checkout page #67

Closed
opened 2026-03-21 21:34:52 +00:00 by forgejo_admin · 0 comments

Type

Feature

Lineage

plan-wkq → Phase 11 (Girls Tryout) → discovered during jersey email blast 2026-03-21

Repo

forgejo_admin/westside-app

User Story

As a parent, I want to pick a jersey number on the checkout page so that my child gets their preferred number

Context

Jersey checkout needs a number input alongside the size dropdown. Per AAU rules, valid numbers are 0, 00, and 1-99. Numbers must be unique per division. The page should fetch already-taken numbers from GET /jersey/taken-numbers?division={division} and show which are unavailable. Player's division is determined from their data (loaded via token).

File Targets

Files the agent should modify:

  • src/routes/jersey/+page.svelte — add number input to each non-opt-out card. Fetch taken numbers from API. Validate input (0/00/1-99). Show taken numbers as unavailable. Disable "Order" button until both size AND number are selected. Send number param with checkout request.

Files the agent should NOT touch:

  • Other routes — unrelated

Acceptance Criteria

  • Each jersey option card (except opt-out) shows a number input field
  • Input validates: only 0, 00, 1-99 accepted
  • Already-taken numbers shown as unavailable (fetch from GET /jersey/taken-numbers?division=...)
  • Attempting to submit a taken number shows an error message
  • "Order" button disabled until both size AND number are filled
  • Number sent to POST /jersey/checkout as number param
  • Opt-out card has no number input
  • Mobile responsive

Test Expectations

  • Manual: navigate to /jersey?token=..., see number input
  • Manual: can't type letters or numbers > 99
  • Manual: taken numbers show as unavailable
  • Manual: checkout includes number in request

Constraints

  • Match existing card design style
  • Number input should be compact — small text input, not a dropdown of 101 options
  • Show "Already taken" feedback inline if parent types a taken number
  • Depends on basketball-api #143 (taken-numbers endpoint + checkout param)

Checklist

  • PR opened
  • No unrelated changes
  • Works on mobile
  • plan-wkq — Phase 11
  • project-westside-basketball
  • basketball-api #143 — backend number support (dependency)
  • westside-app #65 — jersey size (same page, just merged)
### Type Feature ### Lineage `plan-wkq` → Phase 11 (Girls Tryout) → discovered during jersey email blast 2026-03-21 ### Repo `forgejo_admin/westside-app` ### User Story As a parent, I want to pick a jersey number on the checkout page so that my child gets their preferred number ### Context Jersey checkout needs a number input alongside the size dropdown. Per AAU rules, valid numbers are 0, 00, and 1-99. Numbers must be unique per division. The page should fetch already-taken numbers from `GET /jersey/taken-numbers?division={division}` and show which are unavailable. Player's division is determined from their data (loaded via token). ### File Targets Files the agent should modify: - `src/routes/jersey/+page.svelte` — add number input to each non-opt-out card. Fetch taken numbers from API. Validate input (0/00/1-99). Show taken numbers as unavailable. Disable "Order" button until both size AND number are selected. Send `number` param with checkout request. Files the agent should NOT touch: - Other routes — unrelated ### Acceptance Criteria - [ ] Each jersey option card (except opt-out) shows a number input field - [ ] Input validates: only 0, 00, 1-99 accepted - [ ] Already-taken numbers shown as unavailable (fetch from `GET /jersey/taken-numbers?division=...`) - [ ] Attempting to submit a taken number shows an error message - [ ] "Order" button disabled until both size AND number are filled - [ ] Number sent to `POST /jersey/checkout` as `number` param - [ ] Opt-out card has no number input - [ ] Mobile responsive ### Test Expectations - [ ] Manual: navigate to `/jersey?token=...`, see number input - [ ] Manual: can't type letters or numbers > 99 - [ ] Manual: taken numbers show as unavailable - [ ] Manual: checkout includes number in request ### Constraints - Match existing card design style - Number input should be compact — small text input, not a dropdown of 101 options - Show "Already taken" feedback inline if parent types a taken number - Depends on basketball-api #143 (taken-numbers endpoint + checkout param) ### Checklist - [ ] PR opened - [ ] No unrelated changes - [ ] Works on mobile ### Related - `plan-wkq` — Phase 11 - `project-westside-basketball` - basketball-api #143 — backend number support (dependency) - westside-app #65 — jersey size (same page, just merged)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
forgejo_admin/westside-landing#67
No description provided.