Story: Tournament Signup + Payment Visibility

story-westside-streamlit-tournament Doc

active user-story

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 045
  • tournament_products (tournament_id, product_id, team_id) — links a tournament to specific Stripe products
  • products — Stripe products
  • orders (player_id, product_id, status, amount_cents) — who paid for what; orders is already in migration 044's GRANT allowlist

Join chain for "who paid for tournament X": tournamentstournament_productsproductsordersplayersparents.

  • project-westside-streamlit
  • Migration 045_add_tournament_tables — creates tournaments + tournament_products
  • Section pattern: app.py:147-211 Jerseys section