Plan: Westside App
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
mainremains - ☐ 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 — onlymainremains.
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
Related
- Project: Westside Basketball — unified project page
- User Stories & Acceptance Criteria — detailed AC for US-1 through US-11
- Product Design — long-term vision reference (domain model, rules engine, tryout flow)
- Plan: Stripe Connect Payouts — superseded, decisions carry forward
- Non-Profit Research — 501(c)(3) recommendation
- Tryout Logistics — March 13 event details