project-page active Westside Basketball
project-westside-basketball updated 2026-04-14

Vision

Westside Kings & Queens is a youth AAU basketball program in West Valley, Utah. One production app with three concerns: public landing page (marketing), tryout registration (acquisition funnel → account creation), and member area (player/parent, coach, admin dashboards). Built on the Pal-E platform.

Plan

Active: Plan: Westside Kings & Queens — 19 phases. Phases 1–9 completed, Phase 10 in progress (playground — 11 pages), Phase 11 in progress (girls tryout March 21 — Issue #93).

Completed plans:

Plan Status Summary
Stripe Connect Payouts completed Research done. Decisions carried forward.
Westside App completed (absorbed) User stories (US-1–11) absorbed into plan-wkq Phases 13–17.

Board

board-westside-basketball — 21 items. 9 phases done (57 pts), 1 in progress (playground), 1 next up (girls tryout with blockers), 7 backlog (47 pts), 2 Forgejo issues.

Sub-project boards:
board-westside-sheet-sync — DB → Google Sheet append-only jersey sync. 5 backlog tickets on basketball-api (story:sheet-sync). Separate project westside-sheet-sync.

Status

Quick Links
Active Plan | Tryout Day Ops Guide | User Stories
Playground: playground.tail5b443a.ts.net/westside/
SvelteKit App: westsidekingsandqueens.tail5b443a.ts.net
API: basketball-api.tail5b443a.ts.net
Keycloak: keycloak.tail5b443a.ts.net

  • Girls tryout: March 24, 2026 (Tuesday, 4-5:30 PM, Kongo gym) — Phase 11 IN PROGRESS. Backend blockers resolved (PR #94): auto Keycloak account creation, email-mismatch fix, script names fix. Massive post-PR-94 sprint: jersey selection + Stripe checkout, MJML branded emails, password reset, Keycloak login theme, jersey size/number selection, role redirect fix. Gmail OAuth read-only secret mount (#136) — FIXED (pal-e-deployments PR #43, merged 2026-03-22).
  • Playground: Phase 10 COMPLETED. 13 pages built, QA passed — phone-approved design source of truth.
  • SPA Port: Phase 15 IN PROGRESS, ~70% delivered. SPA scaffold + all 13 routes ported + keycloak-js auth + API compatibility (6 new endpoints) + dev overlay — all merged. Remaining: data bindings polish, SSR teardown, observability (#99).
  • Auth: Keycloak OIDC fully deployed. 50+ accounts live. Auto account creation on registration (PR #94). Password reset via Gmail OAuth (PR #132). Keycloak login theme with Westside branding (PR #130). Roles: admin, coach, player. Public client (westside-spa) for SPA.
  • Payments: Stripe checkout for tryout ($30) + jersey ordering ($90/$130/opt-out). Monthly dues $200/mo standard. Tiered pricing ($160/$180/$200) in Phase 14. Generic checkout webhook not syncing jersey fields to players — FIXED (PR #172, merged 2026-03-26). Duplicate order prevention added. Legacy /jersey/checkout deprecated.
  • Email: MJML branded email service (westside-emails repo). Gmail OAuth sending — token refresh fixed (emptyDir pattern, PR #43). Tryout announcements, jersey checkout links, profile reminders all wired.
  • Teams: Draft board, coach roster, player profiles — all deployed.
  • CI/CD: All 4 repos auto-deploy on merge. 554 tests passing (basketball-api).

Milestones

Architecture

  1. Domain Model — entities and relationships
  2. Data Flow — runtime information flow
  3. Deployment — services, namespaces, pipeline
  4. Auth Architecture — Keycloak OIDC, roles, SSR → SPA migration, account creation, token flows
  5. SSR → SPA migration (Phase 15): Current westside-app is SSR (adapter-node + Auth.js). Will be replaced entirely with SPA (adapter-static + keycloak-js + PKCE). Capacitor-ready — one codebase for web + future iOS app. Decision validated by mcd-tracker project.

Repos

Repo Platform Subproject Role Status
forgejo_admin/basketball-api Forgejo shared backend FastAPI backend — auth, registration, Stripe, teams, profiles, email sending deployed, CI green, 464 tests
forgejo_admin/westside-app Forgejo westside-app SvelteKit SPA — authenticated member area (admin, coach, parent dashboards). adapter-static + keycloak-js + PKCE. Capacitor-ready. deployed, migrating to SPA
forgejo_admin/westside-landing Forgejo westside-landing Public landing site — program info, staff, schedules, sponsors, tryout registration CTA. Static, SEO-friendly, no auth. SPLIT from westside-app. TODO: split from westside-app
forgejo_admin/westside-contracts Forgejo westside-contracts Contract e-sign SvelteKit app (adapter-node, direct Postgres) deployed, 12 tests
forgejo_admin/westside-emails Forgejo shared MJML email templates — branded emails compiled to HTML, consumed by basketball-api new, CI configured
forgejo_admin/westside-playground Forgejo shared HTML/CSS prototypes — design iteration active
ldraney/west-side-basketball GitHub legacy Original landing page (to be replaced by westside-landing) live, to be retired

User Stories

Role Tier Actor(s) Scope
Superadmin Platform Lucas All projects, infra, deployments, observability
Admin Organization Marcus Teams, players, payments, communications, coaches
Coach Team Assigned coaches Roster, playbooks, attendance, parent contact
Parent Account Registered parents Registration, payments, profiles, email actions
Player Member Registered players Profile (read), team, schedule
Prospect Public Unregistered families Public site, program info, staff bios, schedules, contact

Superadmin (Lucas)

  • story:WS-S1 As superadmin, I want to deploy platform changes via IaC so that infrastructure is reproducible and auditable
  • story:WS-S2 As superadmin, I want to monitor service health via Grafana so that I catch issues before users do
  • story:WS-S3 As superadmin, I want to manage Keycloak realms so that each project has isolated auth
  • story:WS-S4 As superadmin, I want to serve static assets via public CDN so that emails and apps can reference images without auth
  • story:WS-S5 As superadmin, I want basketball-api's database on the CNPG shared cluster so that player data has daily backups, WAL archiving, and automated restore verification

Admin (Marcus)

  • story:WS-S5 As an admin, I want to view registration stats on a dashboard so that I know signup progress at a glance
  • story:WS-S6 As an admin, I want to assign players to teams via draft board so that placement is transparent and trackable
  • story:WS-S7 As an admin, I want to send branded email announcements so that parent comms are professional and consistent
  • story:WS-S9 As an admin, I want to track payment status per player so that I know who owes what
  • story:WS-S10 As an admin, I want to manage coaches and assign them to teams so that teams have leadership
  • story:WS-S11 As an admin, I want to create Stripe checkout sessions for jerseys/fees so that payments are automated
  • story:WS-S12 As an admin, I want to manage user accounts (reset passwords, view profiles) so that I can support parents directly
  • story:WS-S13 As an admin, I want to view and manage the program schedule (practices, tournaments, games) so that I have a single source of truth for all planned activities
  • story:WS-S14 As an admin, I want an AI agent to research potential sponsors and draft personalized outreach emails so that I can send targeted pitches without hours of manual research
  • story:WS-S15 As an admin, I want Westside to be a registered 501(c)(3) nonprofit so that sponsors get tax deductions, fundraising is tax-free, and we qualify for facility access and grants
  • story:WS-S23 As an admin, I want to configure custom contract terms per player (different fee, tournaments, practice schedule) so that custom deals render correctly without code changes
  • story:WS-S29 As an admin, I want to manage sponsor relationships — track their tier, what they've paid, their logo, and whether they show on the website — so that I always know what we owe each sponsor and what they've committed
  • story:WS-S30 As an admin, I want to see which parents have joined their team's GroupMe so that I can follow up with those who haven't and ensure all families are connected
  • story:WS-S31 As an admin, I want a long-standing public jersey order link I can share with any player (known or new) so that recipients self-identify and submit their own sizes, number preferences, and tier without me collecting details manually
  • story:WS-S32 As an admin, I want a generic email blast system with pluggable audience queries so that new email types ship as config, not code changes
  • story:WS-S33 As an admin, I want to bill players for tournament entry fees at team-specific rates via Stripe so that event costs are collected before registration deadlines

Coach

  • story:WS-S13 As a coach, I want to view my team roster with player photos so that I know my players on sight
  • story:WS-S14 As a coach, I want to upload playbooks so that players can study game plans before practice
  • story:WS-S15 As a coach, I want to see parent contact info so that I can communicate directly about my team
  • story:WS-S16 As a coach, I want to track attendance so that I know who shows up consistently
  • story:WS-S27 As a coach, I want to see my team's practice schedule and upcoming events so I know when and where my teams practice and play

Parent

  • story:WS-S17 As a parent, I want to register my child online (info + photo + payment + waiver) so that signup is one seamless flow
  • story:WS-S18 As a parent, I want to receive a branded email with jersey ordering link so that I can order without bringing cash
  • story:WS-S19 As a parent, I want to see my child's team assignment and coach so that I know the season plan
  • story:WS-S20 As a parent, I want to sign contracts digitally so that paperwork is handled online
  • story:WS-S21 As a parent, I want to manage my login credentials so that I control my own access
  • story:WS-S22 As a parent, I want to receive clear email communications with action links so that I never miss a deadline
  • story:WS-S28 As a parent, I want to see my child's team practice schedule so I know when and where to take them

Player

  • story:WS-S23 As a player, I want to see my team and practice schedule so that I know when and where to show up
  • story:WS-S24 As a player, I want to view my profile with photo and team info so that I can share it
  • story:WS-S25 As a player, I want to access playbooks my coach uploaded so that I can study before games

Prospect

Key People

  • story:WS-S26 As a prospective parent who received a link from Marcus, I want to see a professional landing page with current program details (practice schedule, fees, divisions) so that I take the program seriously and don't have to text Marcus back with basic questions
  • story:WS-S27 As a prospective parent, I want to see coaching staff with bios and credentials so that I trust the people who will coach my child
  • story:WS-S28 As a prospective parent, I want to see team structure, tournament circuits, and travel schedule so that I understand the competitive level and time/travel commitment
  • story:WS-S29 As a prospective parent, I want a clear way to contact the program (email, phone) so that I can ask questions or sign up without hunting for info
  • story:WS-S30 As a prospect who expressed interest, I want to receive a welcome email introducing the team, schedule, and membership options so that I feel welcomed and know how to join
  • story:WS-S31 As a prospect who can't attend regular practices, I want a tournament-only membership at a reduced monthly fee so that I can still participate competitively
  • story:WS-S26 As a prospect, I want to browse team rosters on the public site so that I can evaluate the program before committing
  • story:WS-S27 As a prospect, I want the landing page to guide me toward registration so that I can take action without hunting for a signup link
  • Lucas Draney — Founder, platform architect
  • Marcus Draney — Head Coach, program director, operations
  • Coach West — Recruiting partnership
  • 5 coaches: Marcus, James Taylor, KJ Ng, Ken Seka, Abbie Sa (see Staff & Coaches)

Program Details

  • Org: Westside Kings & Queens (youth AAU basketball)
  • Location: West Valley, Utah
  • Divisions: Boys, Girls — 15U, 16U, 17U
  • Tryout fee: $30 via Stripe
  • Monthly dues: $200/mo standard, $160/mo Cyprus girls, $180/mo LCA (Phase 14)
  • Split payment: $100 beginning + $100 end of month option (Phase 14)

Sponsors & Partners

See Westside Sponsors & Partners for full tracking. 1 pending conversation (plant-powered pain relief spray, 2026-03-24).