Milestone: Tryout Day 1 (March 13, 2026)
Tryout Day 1 — March 13, 2026
Numbers
| Metric | Count |
|---|---|
| Total players registered | 53 |
| Ready to play (paid + waiver) | 45 (85%) |
| Needs waiver | 5 |
| Coaches signed up | 6 |
| Emails sent during tryouts | 43+ |
What shipped
- basketball-api deployed to HEAD — 9 commits of undeployed functionality (check-in toggle, assign-number, graduating_class, photo PVC, test fixes) pushed live mid-session. Zero downtime.
- westside-app deployed from zero — SvelteKit dashboard went from undeployed to live at
westsidekingsandqueens.tail5b443a.ts.netduring tryouts. Stats page, admin triage (3-bucket), coach card grid — all SSR via basketball-api JSON endpoints. - Real-time email blast — 43 registration emails sent from the pod during tryouts. Parents received branded Westside emails with personal registration links.
- Live data fixes — 3 families (Hasip x2, Jencarlo) had waiver records stuck due to email-mismatch bug. Diagnosed root cause (form creates duplicate parent when email differs from Stripe checkout) and manually corrected from verified DB records.
- Stripe webhook recovery — Johan Kisuka's payment was in Stripe but webhook missed the record. Manually created player/parent/registration and sent email within minutes.
What we learned
- Email-mismatch bug: Registration form looks up parent by email. If parent uses different email than Stripe checkout, a new parent record is created. Waiver lands on the new record, not the paid one. Needs fix: match by token, not email.
- ArgoCD Image Updater broken platform-wide: Harbor credential error. All 7 apps affected. Manual image bumps required. Platform issue.
- Woodpecker CI broken for SvelteKit apps: K8s backend log streaming bug. Manual docker build+push is the workaround.
- Gmail SDK needs writable secrets dir: K8s secret mounts are read-only. Token refresh fails. Workaround: copy to /tmp before sending. Also
credentials.jsonwas missing from the secret — added manually. - Stripe webhook reliability: At least one payment (Johan Kisuka) was processed in Stripe but never triggered the webhook. Need to investigate missed webhooks or add a reconciliation job.
Platform under pressure
This was the first time the full Pal-E platform stack operated under real-world pressure — live users, real money, real deadlines. Two services deployed, 43+ emails sent, data fixed in real-time, a missed webhook recovered, all while 53 families were actively registering and coaches were waiting for rosters. Zero downtime. The enterprise SOP held.