Plan: Westside App

plan-2026-03-07-westside-app Plan

plan completed

Vision

Marcus focuses on sponsors, circuits, gym rentals, and marketing. We build everything else — schedule, payments, expense tracking, roster management, player registration, waivers, and a dashboard that ties it all together. Built for Westside first; generalize later only if it proves out.

Projects & Repos Touched

Project/Repo Platform Role in this plan
basketball-api Forgejo FastAPI backend — schedule, expense, payment, roster APIs
basketball-app (new) Forgejo SvelteKit frontend — public schedule, owner dashboard, player portal
pal-e-deployments (currently "deployments") Forgejo Kustomize k8s manifests for ArgoCD deployment

Context

Westside Basketball has 34 signups (target 60+), tryouts completed March 13, practices start April 2. Marcus needs a schedule visible to parents before day one. After that: expense tracking so he knows if the program is financially viable, and payment management so he can see who's paid and who hasn't.
What's already done:
  • ☑ Landing page live on GitHub Pages with Stripe Payment Links
  • ☑ basketball-api deployed on Pal-E — FastAPI, Postgres, JWT + Google OAuth, CI green
  • ☑ Non-profit research complete — 501(c)(3) recommended, EIN needed to go live
  • ☑ Stripe Connect decisions made — all 1099, Express accounts, no Mercury, no W-2 (see superseded plan)
  • ☑ Tryouts completed (March 13, Kongo Gym, Farmington)
  • ☑ Stale issue #1, PR #2 closed on basketball-api; stale branches deleted — only main remains
  • ☐ No frontend exists yet
  • ☐ No schedule, expense tracking, or payment management features built
  • ☐ basketball-api issue #3 (scaffold conventions) still open — needs assessment

Previous Plan

Plan: Stripe Connect Payouts (superseded — Phase 1 complete, Phase 2 complete via basketball-api, Phases 3-4 folded into this plan as Phase 5)

Depends On

None — can start immediately.

Decisions Made

Decision Rationale
Build for Westside, not abstract multi-tenant Marcus is getting real traction. Build for his actual needs. tenant_id columns are cheap insurance but no multi-tenant UI.
SvelteKit + FastAPI + Postgres Svelte for fast, lightweight frontend. FastAPI for Stripe/Python SDK ecosystem. Postgres via CNPG on Pal-E.
Deploy via Kustomize in pal-e-deployments K8s manifests in a dedicated deployments repo, synced by ArgoCD.
Schedule ships first Practices start April 2. Parents need to know where to show up. Everything else can wait.
Membership cancellation requires program approval This is a serious commitment — not a self-serve unsubscribe. Players/parents request cancellation, owners approve.
Four auth roles: Owner, Coach, Parent/Player, Public Different users see different things. Auth scopes are critical. Public can view schedule without login.
Phase 1 splits by repo: API first, then frontend Schedule API (basketball-api) must ship before frontend (basketball-app) can consume it. Enables parallel QA — API can be tested independently.

Phases

Phase 0: Frontend scaffold & API cleanup

  • Slug: phase-2026-03-07-0-repo-cleanup-scaffold
  • Goal: Assess basketball-api issue #3 (scaffold conventions), create basketball-app repo on Forgejo, onboard to Pal-E.
  • Owner: agent-dev
  • Repo: forgejo_admin/basketball-api + forgejo_admin/basketball-app (new)
  • Steps:
  • Already done (2026-03-08): Issue #1 closed, PR #2 closed, stale branches (1-scaffold-project, 4-add-auth) already deleted — only main remains.

Phase 1: Practice schedule (ship before April 2)

  • Slug: phase-2026-03-07-1-practice-schedule
  • Goal: Parents and players can see the weekly practice schedule. Owners can manage it.
  • Owner: agent-dev
  • Repo: forgejo_admin/basketball-api + forgejo_admin/basketball-app
  • User Stories: US-1, US-2, US-3, US-11
  • Deadline: April 2, 2026 (practices start)
  • Decomposition (two Forgejo issues, by repo):
  • Dependency: Phase 1a must ship before Phase 1b (frontend consumes API).

Phase 2: Expense tracking (April)

  • Slug: phase-2026-03-07-2-expense-tracking
  • Goal: Marcus can track program finances — budget by category, log expenses, see Stripe revenue, budget vs actual.
  • Owner: agent-dev
  • Repo: forgejo_admin/basketball-api + forgejo_admin/basketball-app
  • User Stories: US-4, US-5, US-6, US-7

Phase 3: Payments & roster (April)

  • Slug: phase-2026-03-07-3-payments-roster
  • Goal: Marcus can see who's paid, create tournament payment links on the fly, and see calculated coach pay.
  • Owner: agent-dev
  • Repo: forgejo_admin/basketball-api + forgejo_admin/basketball-app
  • User Stories: US-8, US-9, US-10

Phase 4: Player registration & profiles

  • Slug: phase-2026-03-07-4-player-registration
  • Goal: Parents can register, create player profiles, sign waivers, and manage their membership.
  • Owner: agent-dev
  • Repo: forgejo_admin/basketball-api + forgejo_admin/basketball-app
  • Scope (user stories TBD — needs detailed AC before building):

Phase 5: Coach payouts (Stripe Connect)

  • Slug: phase-2026-03-07-5-coach-payouts
  • Goal: Onboard coaches as Stripe Connect Express accounts, trigger payouts, 1099 compliance.
  • Owner: agent-dev
  • Repo: forgejo_admin/basketball-api + forgejo_admin/basketball-app
  • Depends on: EIN obtained (needed to go live, not needed to build/test)
  • Scope (carried from superseded plan):

Key Files

Phase File Repo Change
0 SvelteKit scaffold basketball-app New repo — boilerplate, Dockerfile, CI, k8s
0 k3s.tfvars pal-e-services Add basketball-app service entry
1–5 TBD basketball-api + basketball-app Determined per phase when Forgejo issues are created
Key files for Phases 1–5 will be specified in Forgejo issues when each phase begins. This plan focuses on problems and user stories, not implementation details.

Verification

  • Phase 0: basketball-app deployed, reachable via funnel. Issue #3 assessed.
  • Phase 1: Parent opens schedule URL on phone → sees practice days, times, gyms. Owner logs in → adds/edits/cancels practice.
  • Phase 2: Owner sets budget → logs gym expense → sees Stripe revenue auto-populated → budget vs actual shows correct numbers.
  • Phase 3: Owner sees roster with payment status per tier. Creates tournament link → copies → payment works. Coach pay shows calculated amount.
  • Phase 4: Parent registers → creates profile with photo → signs waiver → views membership. Cancellation request goes to owner for approval.
  • Phase 5: Coach receives invite email → completes Stripe onboarding → owner triggers payout → money arrives.

Next Plan Seeds

  • Tryout evaluation system — tablet scoring (1-5), multiple evaluators, auto-rank, draft board (see Product Design)
  • Team placement — drag-and-drop, one-click placement emails
  • Rules engine / automations — WHEN/IF/THEN triggers, Gmail/GCal actions
  • Gmail OAuth confirmation emails — sends from Marcus's email automatically
  • Multi-tenant generalization — if another program wants in