Story: Tournament Signup + Payment Visibility
Story: Tournament Signup + Payment Visibility
Role
Marcus — Lucas's brother, head coach at Westside Basketball.
Key
tournament
Want
As Marcus, I want to pick the upcoming tournament from a dropdown and see every player who's signed up, with their payment status (paid / unpaid) and parent contact.
So That
I can see which players are in for the tournament, which families haven't paid the entry fee yet, and copy the unpaid parents' emails into Gmail to chase the fee — without asking anyone to query the database.
Acceptance Criteria
- [ ] Tournament dropdown lists tournaments ordered by
event_date DESC NULLS LAST, defaulting to the most recent - [ ] Grid for the selected tournament: player name, program (Kings/Queens), team(s), tournament fee amount, payment status (paid / unpaid), parent email, parent phone
- [ ] Filters: Program, Payment Status
- [ ] Totals caption: signups, paid, unpaid
- [ ] Email cohort export textarea
- [ ] Empty-state handles "no tournaments yet" gracefully
- [ ] Read-only
Data Shape
Tournament payments flow through orders, not registrations:
tournaments(id, name, event_date) — added in migration 045tournament_products(tournament_id, product_id, team_id) — links a tournament to specific Stripe productsproducts— Stripe productsorders(player_id, product_id, status, amount_cents) — who paid for what;ordersis already in migration 044's GRANT allowlist
Join chain for "who paid for tournament X": tournaments → tournament_products → products → orders → players → parents.
Related
project-westside-streamlit- Migration
045_add_tournament_tables— creates tournaments + tournament_products - Section pattern:
app.py:147-211Jerseys section