- Svelte 64.3%
- CSS 31%
- JavaScript 2.9%
- Swift 1.4%
- HTML 0.2%
- Other 0.1%
| ios | ||
| k8s | ||
| src | ||
| static | ||
| .claude-no-enforce | ||
| .current-issue | ||
| .gitignore | ||
| .sops.yaml | ||
| .woodpecker.yaml | ||
| capacitor.config.ts | ||
| Dockerfile | ||
| jsconfig.json | ||
| nginx.conf | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| svelte.config.js | ||
| vite.config.js | ||
westside-landing — Westside Kings & Queens Web Platform
Full-stack web platform for a youth basketball organization serving 80+ families across two divisions. Handles public-facing marketing, player registration, coach tooling, contract e-signing, and payment scheduling — replacing a patchwork of Google Forms and GroupMe threads with a single unified experience.
Live: westsidekingsandqueens.tail5b443a.ts.net
Stack
| Layer | Technology |
|---|---|
| Framework | SvelteKit 2 (adapter-static, SPA mode) |
| Auth | Keycloak SSO (OpenID Connect) |
| Serving | Nginx on Alpine (Docker) |
| Backend | basketball-api (FastAPI + PostgreSQL) |
| Deploy | Woodpecker CI, Kustomize, ArgoCD on k3s |
| Infra | Tailscale funnel for ingress + TLS (no cert-manager) |
Features
Public pages — Landing, about, staff directory, team rosters, tryout info, sponsors, schedule, gear shop.
Registration — Multi-step player sign-up with division selection, jersey sizing, and parent contact capture. Feeds directly into the admin CRM.
Coach dashboards — Roster views, player details, and division-filtered team management for coaching staff.
Admin CRM — Player search, status tracking, and bulk management. Contract and payment visibility per player.
Contract e-signing — Digital offer letters with signature capture. Players and parents sign on-device; status flows back to admin views. Backed by westside-contracts.
Payment scheduling — Stripe Checkout integration for registration fees with installment support.
Keycloak SSO — Branded login with custom theme. Role-based access (admin, coach, player) with automatic redirect for protected routes.
Project Structure
src/routes/
(public)/ Landing, about, staff, teams, tryouts, schedule, sponsors, gear
(app)/ Auth-gated: admin, coach, players, register, checkout, jersey
static/ Team photos, logos, sponsor assets
k8s/ Kustomize overlays (dev, prod)
Development
npm install
npm run dev # http://localhost:5174
npm run build # Static build to /build
npm run preview # Preview production build
Requires PUBLIC_API_URL and PUBLIC_KEYCLOAK_URL environment variables pointing at running instances of basketball-api and Keycloak.
Related Repos
- basketball-api — FastAPI backend, PostgreSQL, player/team/contract domain
- westside-contracts — Contract e-signing service (SvelteKit, adapter-node, direct Postgres)
- pal-e-platform — Infrastructure bootstrap (Tailscale, Forgejo, Woodpecker, ArgoCD)