Westside App — User Stories & Acceptance Criteria
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
US-9: Create tournament/event payment links
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