Product Design: Basketball Program SaaS

basketball-product-design Doc

active doc

Product Design: Basketball Program SaaS

Migrated from Notion (Basketball Program SaaS → Product Design) on 2026-03-07. Updated with full-stack decisions.

Overview

Multi-tenant AAU basketball program management platform. "Run your entire basketball program from one place." Replaces Google Forms + Venmo + group texts + paper clipboards + spreadsheets.
Westside Kings & Queens is the first real client. demo-team is the test tenant.

Tech Stack (decided 2026-03-07)

  • Frontend: Svelte (SvelteKit) — coach dashboard, parent portal, admin views
  • Backend: FastAPI (Python)
  • Database: PostgreSQL
  • Multi-tenancy: tenant_id columns, not separate DBs
  • OAuth onboarding: mcp-remote-auth (client connects their own Gmail/GCal/Notion)
  • SDKs: gmail-sdk, gcal-sdk, notion-sdk (all PyPI, all ours)
  • Payments: Stripe (Payment Links for now, Checkout Sessions planned)
  • Deploy: pal-e cluster via pal-e-services SERVICE_ONBOARDING.md
  • Existing landing page: ldraney/west-side-basketball (GitHub Pages + Stripe)

Domain Model


V1 Scope

Registration, payment (Stripe), tryout evaluation, team placement, parent communication (Gmail), expense tracking. No AI in v1.

Registration Form Fields

Parent info:
  • Parent's name
  • Address
  • Email
  • Phone number
Player info:
  • Player full name
  • Height
  • Position
  • Graduating class
  • High school
  • Where they're from
  • Photo
  • Local team / travel team / both (dropdown)

Tryout Flow

  • Program director creates a season + age groups
  • System generates a registration link per age group
  • Parent hits link → Stripe checkout → pays tryout fee
  • Registration lands in DB with signup_method: "tryout" | "direct_club"
  • Automation fires: confirmation email via tenant's Gmail (OAuth)

Day of Tryouts

  • Coach opens app on tablet, sees registered kids for their age group
  • Check-in (QR or tap name)
  • Score each player 1–5: shooting, dribbling, defense, hustle, coachability
  • Multiple evaluators score independently

After Tryouts

  • Auto-rank players by composite score per age group
  • Director sees draft board — top 10 = Team A (travel), next 10 = Team B (local)
  • Drag-and-drop adjustments (coach requests, siblings, etc.)
  • One click → sends placement emails to all parents
  • Parents accept + pay season fee via Stripe

Expense Tracking (new — 2026-03-07)

Context: 34 signups currently, targeting 60+. $200/month per player. Non-profit model.

Revenue Model

  • Program fees: $200/month per player (collected via Stripe)
  • Tryout fees: $30 walk-up, $200 registration (Stripe Payment Links)
  • At 60 players × $200/month = $12,000/month gross revenue

Expense Categories

  • Coach pay — 1099 contractors via Stripe Connect
  • Gym rental — recurring operational expense
  • Player-paid (pass-through):

Marcus Dashboard Features

  • Revenue summary (monthly, per-player, per-team)
  • Expense tracking by category (coach pay, gym rental, operations)
  • Player payment status (who's current, who's behind)
  • Tournament fee collection links + status per player
  • P&L view (revenue minus expenses)

Rules Engine (Automations)

Each tenant configures: WHEN [trigger] IF [conditions] THEN [action].
  • Triggers: Stripe webhooks, cron, manual
  • Actions: gmail.send_email, gcal.create_event, notion.add_row
  • Action executors: use SDKs directly (gmail-sdk, gcal-sdk, notion-sdk)
  • Credentials: stored per tenant per provider (OAuth refresh tokens in DB via mcp-remote-auth)

The Pitch (for Marcus to use)

"You coach. We handle everything else." Registration, payments, communication, roster management, tryout scoring, team placement — all automated. Parents get professional emails from your email. You get a dashboard showing everything. No spreadsheets, no group texts, no Venmo tracking.