Westside App — User Stories & Acceptance Criteria

westside-app-user-stories Doc

active westside user-stories

Users

  • Owner — Marcus, Lucas. Full access. Manage everything.
  • Parent/Player — View schedule, pay fees, see announcements.

Schedule (ship before April 2)

US-1: View practice schedule

As a parent/player, I want to see the weekly practice schedule so that I know where to show up.
AC:
  • Shows day of week, time, gym name, gym address
  • Multiple gyms supported (e.g. Monday = Gym A, Wednesday = Gym B)
  • No login required to view
  • Mobile-friendly — parents will check this on their phones

US-2: Manage practice schedule

As an owner, I want to create and update the weekly practice schedule so that players always have current info.
AC:
  • Add/edit/remove practice slots (day, time, gym)
  • Manage gym locations (name, address, cost per hour, courts available)
  • Changes visible to players immediately
  • Owner-only — requires authentication

US-3: Cancel or reschedule a practice

As an owner, I want to cancel or reschedule a specific practice date so that players know when plans change.
AC:
  • Cancel a single occurrence without changing the recurring schedule
  • Cancelled practices show as cancelled (not just removed)
  • Optional: notify players (future — email/text)

Expense Tracking (ship April)

US-4: Set monthly budget by category

As an owner, I want to set monthly budgets per category so that I can plan spending.
AC:
  • Categories: Gym Rental, Coach Pay, Filing/Legal, Misc
  • Set dollar amount per category per month
  • Can update budgets month to month

US-5: Log expenses

As an owner, I want to log expenses manually so that I can track where money goes.
AC:
  • Fields: date, category, amount, description, who logged it
  • Gym rental auto-calculates if desired ($65/hr × hours × courts)
  • Owner-only

US-6: See revenue from Stripe

As an owner, I want to see incoming payments pulled from Stripe automatically so that I don't manually track income.
AC:
  • Shows all completed payments (player name, amount, date)
  • Monthly revenue total
  • Distinguishes payment types: tryout fees ($30) vs monthly program fees
  • Handles tiered pricing: Cyprus girls $160/mo, LCA $180/mo, standard $200/mo
  • Auto-syncs — no manual entry for revenue

US-7: Budget vs actual dashboard

As an owner, I want to see budget vs actual spending by category so that I know if we're on track.
AC:
  • Per-category: budgeted amount, actual spent, remaining
  • Total revenue vs total expenses
  • Monthly view
  • Simple — no charts needed initially, just clear numbers

Payments (ship April)

US-8: View roster and payment status

As an owner, I want to see which players have paid and who's outstanding so that I can follow up.
AC:
  • Player list with payment status (paid / unpaid / overdue)
  • Expected amount per player based on their pricing tier (Cyprus $160, LCA $180, standard $200)
  • Pulled from Stripe — no double entry
  • Filter by month
As an owner, I want to create a payment link for a tournament or event so that I can send it to players to collect fees.
AC:
  • Set event name, amount, optional description
  • Generates a Stripe Payment Link
  • Copyable link to text/email to parents

US-10: Coach pay calculation

As an owner, I want to see calculated coach pay based on roster size so that I know what to pay each coach.
AC:
  • Configurable pay formula (TBD — Marcus defines the formula)
  • Shows per-coach amount based on current roster count
  • Ties into Stripe Connect payouts (from existing plan)

Gym Management

US-11: Manage gym locations

As an owner, I want to manage a list of gyms we use so that I can assign them to practice days and track rental costs.
AC:
  • Fields: name, address, cost per hour, number of courts, contact info
  • Gym payment due date (first of month)
  • Used in schedule (US-2) and expense tracking (US-5)

Out of Scope (for now)

  • Player/parent login or accounts
  • Push notifications or email alerts
  • Player profiles, stats, development tracking
  • Public expense transparency dashboard
  • Multi-tenancy / other programs — build for Westside first, generalize later

Tech Stack

  • Frontend: SvelteKit
  • Backend: FastAPI (Python)
  • Database: Postgres (CNPG on Pal-E platform)
  • Payments: Stripe API integration
  • Auth: Owner-only, simple (TBD — API keys, OAuth, or basic auth)

Timeline

  • March 13: Tryouts
  • April 1: First gym payment due, first monthly player fees
  • April 2: Practices start — schedule must be live
  • Priority: Schedule first, expense tracking second, payment management third