Content provenance — internal only

What in the passport system is real coach content vs. what I wrote as a stand-in. The families' passports, coach sheets and rubric doc carry no draft labels — this page is the only place that tracking lives.

Do not share with families. Coaches see only their own sport's row.

Sport rubrics

Sport / coachStatusDetail
Ultimate Frisbee
Jeff Bussel
Coach contentAll five skills (Good Spirit, Dump, IO, OI, Break the Mark) and their level wording came from Jeff's reply verbatim. Only the 14-week ordering is mine.
Dance
Nicolette Ehrke
Coach contentAll five skills and level wording from Nicolette's reply. Daily session shape (10/20/20) and class-size preference are hers. The 14-week build-to-performance plan is mine, built on her shape.
Soccer
David Alfreds
MixedDribbling is David's confirmed rubric. Passing, First Touch, Shooting, Defending, Field Vision are mine — standard youth-soccer progressions written in his format. 14-week plan is mine.
Volleyball
Amanda Matos
All mineAmanda has not replied. All six skills (Bump, Serve, Set, Blocking, Attacking, Court Awareness & Rotation), their level wording, field codes and the 14-week plan are mine.
Character & behavior
cross-sport
MineGrit, Focus, Teamwork, Effort — written to match David's progression-chart language. Never coach-authored; used by every sport.
Yoga ClubSample onlyFictional sport used to demonstrate the sheet layout. No coach, not enrolled, not in Supabase as a real offering.

Badges

ItemStatusDetail
Badge namesFrom DavidTurf Tactician, Bounce Back, True North, Kindness Captain, Field Ready, Passport Pro and the personal-best names came from David's progression chart.
Badge artworkMineVector icons drawn in the program palette (deep green / gold). No artwork was supplied. If the embroidered patches use different art, the digital badges should be redrawn to match the physical ones.
Unlock requirementsMineRequirement text (e.g. "5 clean wall-passes in a row") is illustrative and needs a coach pass before it drives real awards.

Program & operations

ItemStatusDetail
Program name / domainDecided, not boughtPublic-facing: CKC Athletics. Umbrella / back end: Wildlight Education Group. Domain ckcathletics.com is the chosen name and is already written into the passport link text and the notification message — but it has not been purchased. Someone must register it (Namecheap, Cloudflare, etc.) and point it at Netlify. Buy it under a company account if Wildlight should own it long-term; the registrar account is separate from Netlify access.
Season datesSetFall 2026: every Tuesday and Thursday from Thu Sept 10 through Thu Dec 17, both Thanksgiving-week days skipped — 27 sessions across 14 program weeks, pre-loaded in Supabase and in Elsa's date dropdown.
Placement / capacityRule set, needs the surveysPlacement runs from each athlete's survey ranking, filling rosters in preference order against a floor of 5 and a ceiling of 15 per sport. Admin reviews before it's final. Waiting on the trial surveys actually being filled in.
Coach loginHalf-builtSQL for per-coach PINs (name + code, e.g. AMANDA1) is written and ready to run; the entry screens still use the shared passcode until it's switched over. The portals in steps 11–13 sit behind these PINs.
Personal-best metricsSetFour fitness metrics, collected in weeks 1–2 and repeatable all season: sprint (lower is better), push-ups in 1 minute, plank hold, squats in 1 minute. They drive Elsa's Fitness column, the kid-view personal bests, and the parent view's “Measured this week.”
Coach data entryDecidedCoaches never type into the system. They mark the paper matrix sheet; Elsa enters it. The coach portal is read-only reference — rubric plus their own athletes' current standing.
Family text notificationHalf-builtQueue table + trigger function written. Sending needs an SMS provider — Twilio (or MessageBird, Vonage, Amazon SNS) is a service that sends texts from software: you rent a phone number and the app hands each message to their API. Cost for this program: about $1.15/month for the number plus under a cent per text — roughly 700 texts a season (26 families × 2 sessions × 14 weeks) is $6–8 total, and Twilio's ~$15 new-account credit would cover the first season. Free alternatives: email instead of text, or Elsa keeps texting manually.
Athletes & guardiansReal dataAll 26 enrolled kids, ages, guardian names, emails and phone numbers are real and loaded in Supabase.
Demo athleteFictionalRizzo Alfreds' history, personal bests and journal entries are invented for the prototype. Not a real record.

What's left to finish — punch list

Ordered so nothing waits on something later in the list. Steps 1–11 are what a placeholder-free passport and a real launch need; steps 12–16 are the back-end portals and the log — needed for staff to run the season without opening Supabase directly, but not blocking the families' launch.

StepWhereWhat it unblocks
1 · Run SQL steps 10–12SupabaseVolleyball's six skills, per-coach PIN login, and the notification queue.
2 · Run SQL steps 13–17SupabaseThe rest of the content and plumbing: 13 all four sports' skills, rubric wording and 14-week outlines (this is what fixes Elsa seeing Soccer only); 14 the Fall 2026 calendar and Explorer/Builder/Master groups; 15 legacy code cleanup plus the four fitness metrics; 16 roster placement; 17 the demo-athlete flag. Run them in order — skipping any leaves a screen half-populated.
3 · Seed the badge tableSupabaseAll 26 badges exist as art but not as data. Needs one row per badge: name, skill code, and the level→metal rule (L1 bronze, L2 silver, L3 gold) so badges award themselves from session levels.
4 · Capture the week-1 fitness baselineCoaches + ElsaThe four metrics are decided and seeded (SQL step 15). What's left is running them with every athlete in weeks 1–2 so each child has a starting number — without it the first personal best has nothing to beat. Worth a quick confirm with David that sprint distance and the 1-minute counts match how he'll actually test.
5 · Retire the demo athleteSupabaseSQL is written (step 17): flags Rizzo Alfreds as demo and adds a view and roster function that exclude it. Careful — Rizzo Bacigalupo is a real student; the filter is on the slug, never the name.
6 · Switch Elsa's screens to PIN loginEntry screensReplaces the shared passcode with real per-coach accounts. Depends on step 1.
7 · Point the passport at live data onlyPassport appBadge vault, personal bests, skill web, growth bars and journal all read from Supabase instead of sample content. Depends on steps 2–5.
8 · Run one real session end-to-endElsa + a coachPaper sheet → batch entry → publish → open two passports → confirm a level, a badge and a personal best all appear.
9 · Buy ckcathletics.com, point at NetlifyOpsEvery link we hand families uses this domain. Do it before the links go out.
10 · Twilio account + numberOpsTurns the notification queue into real texts. ~$1.15/month plus pennies per message.
11 · Text the family linksOpsAll 26 links and PINs are generated and waiting. This is launch — recommended for the start of week 3, once fitness and sign-ups are in.
12 · Coach portalNew buildOne screen per coach behind their PIN: their sport's rubric for reference, plus their own athletes — current level per skill, character levels, badges earned, fitness numbers. Read-only; coaches don't type. The piece four people would open every session, and the only one that doesn't exist in any form yet.
13 · Elsa portalShell around existing screensDaily session entry, survey entry, and the roster & link generator as tabs behind one link, so there's nothing to bookmark separately and no chance of opening the wrong screen mid-session. All three screens already exist.
14 · Admin portalNew buildEverything the other two have, plus placement review, the response log, and a passport viewer — a picker of all 26 names that opens any passport read-only, so admin can see exactly what a family sees without their link.
15 · Response logSupabase + admin viewEvery write is already a permanent row (sessions, session_entries, both survey tables), so nothing is lost — what's missing is a readable log: “Elsa published Soccer, Explorer group, Oct 13 — 12 athletes, 9 levels, 2 badges.” Needs a small log table, a trigger on publish, and a Log tab.
16 · Re-upload to NetlifyOpsPage changes need a fresh upload; database changes do not. The badge vault, the fitness personal bests and every portal above are files, so they go up together once they're built. SQL steps take effect the moment they're run.

How kids land on the right group sheet

Groups are by level, never by age. Each athlete's group comes from their own recorded levels: recompute_level_groups() averages their skill levels per sport and files them as Explorer, Builder or Master. Run it after publishing sessions and the next sheet prints them in the right group.

How kids land on the right sport roster

From the end-of-trial survey. Each athlete ranks the sports they tried; placement walks the rankings in order and fills rosters against two hard limits — at least 5 and no more than 15 per sport.

Where survey answers go

Both forms live on the athlete's own passport screen, opened with their personal link — there is no separate site or login to visit. Submitting writes straight to Supabase, not to the passport display:

The answers are not shown back to families on the passport. Confidence and enjoyment feed the Growth Journal trend; coach feedback is visible to David and Elsa only. Nothing a kid writes about a coach appears on a family-facing screen.

Still to wire: the submit buttons only save when the page is opened with a real athlete link. Without one they show a preview of the row instead — fine for review, but the link path has to be how families actually receive the surveys.
Can surveys be passed around digitally at the end of the two week? That will make the grouping easier but can be a print out.

Sequence: what gets collected when

WhenWhat's collectedWhy in this order
Weeks 1–2
(the rotation)
Fitness baselineAll four fitness metrics — sprint, push-ups in 1 min, plank hold, squats in 1 min — are captured for every athlete in the first two weeks, before any sport-specific skill work is logged. That gives each child a starting number to beat, so personal bests are real comparisons instead of first-ever entries.
End of week 2Sport sign-upKids rank the sports they tried. Placement runs from these rankings against the 5-minimum / 15-maximum limits.
Week 3 onwardSport-specific skillsOnce rosters are set, coaches start logging that sport's skill levels and character levels on their group sheet.
End of each rotationReflection + re-rankConfidence and enjoyment, plus “what would you like to try next” — the re-ranking doubles as the sign-up baseline for the following rotation.

Passport rollout

Recommendation: send family links after the fitness baseline and sport sign-ups are in — start of week 3. A passport opened before then is nearly empty: no levels, no personal bests, no badges, and no sport assigned yet, which reads as a broken app rather than a new one. By week 3 every child has four fitness numbers, a sport, a group, and at least one session logged — so the first thing a family sees is a passport with something in it.

Practical order: run one test session end-to-end first (one coach, one sheet, two passports checked), then text the 26 links the same week. Everything after that is incremental — each session just adds to what families already have open.

What to ask for, in priority order