Flaux
Unlistedkidscoachingpwa

Coach Cavanagh Swim School

A poolside swim coach app for one student

Built to be my son's swim coach after he stopped enjoying group lessons. Tracks skills and milestones, builds and runs poolside lessons with a timer for each block, and rewards effort with swim tokens he can spend on small things he actually cares about.

Available on request
Vanilla JSPWAIndexedDBSupabase

What it is

A poolside swim coaching app for one student: my son. iPad-only, offline-first, sits beside the pool in a waterproof case while I run his lesson. It tracks where he's at in a skill hierarchy, lets me pick activities for the day from a curated repertoire, runs the session with a timer for each block, and feeds a small reward system that turns good effort into things he actually cares about.

How it started

My son was having a tough time with swimming lessons. He'd taken a break, fallen behind his old level, and felt self-conscious about being moved down into a younger class while the kids he wanted to be with were further along than him. Lessons stopped being a place he wanted to be. So we cancelled them.

Rather than just stop swimming, I decided to coach him myself. The first few sessions at the pool were loose. Me Googling drills the night before, trying to remember them, no real structure beyond "let's do this one for a bit". It was fine but I could feel that I was the bottleneck.

Why I built an app for it

My daughter still does lessons at a swim school that uses an app. You can see her progression, the milestones she's working on, what's next. It's small but it's a really good motivator. She can see herself moving up the ladder.

I thought: what if I had that for my son's lessons? Mark where he's at, plan a session around the skills he's working on, run the session, log what happened.

I didn't have lesson plans in my head though, so I pulled together source material from a stack of official swim teaching frameworks and stage-by-stage lesson plans. From that I built a repertoire of activities mapped to skills, mapped to levels.

How a lesson works

Each session has four blocks with a timer for each:

  • Warm up. Short and easy. Get him moving and listening
  • Skill revision. Things he's worked on before that need locking in
  • New skill. The stretch goal of the day
  • A bit of fun. Dive games, races, whatever ends the session on a high

When I'm building the plan in the app, his current level is already set. The activity picker shows me everything in the repertoire for the skills he's working on. Tap to add, drag to reorder, hit save. Bob's your uncle.

At the poolside I just hit start on each block and let the timer run. No internet needed. IndexedDB on the iPad does all the storage. Waterproof case clipped to a bag.

The reward system

This is the part where the app started doing something I didn't expect.

His school uses a points system they call car bees. Kids earn them for listening, helping out, good effort. Save up enough and you can cash them in for prizes. He understands the mechanic and he's motivated by it.

So I built the same shape into the swim app. He earns points for things like listening at the pool, sticking with a hard drill, or just showing up on a day he didn't feel like it. Six points become one swim token. Tokens spend in the app's reward shop. Rough prices:

  • A few tokens: a lolly
  • A bigger pile: an extra five minutes of Nintendo Switch time
  • A bigger pile still: a family movie night that's not on a Friday, and he gets to pick the movie

The side effect: he started saving them up. Choosing the bigger reward over the immediate small one. Without anyone making a thing of it, he picked up a tiny bit of "earn it, save it, choose what you actually want" thinking. That wasn't the brief but I'll take it.

What I'd change before showing this to anyone else

The skill names and level structure in the current build are lifted from my daughter's swim school. I changed enough that it works for our family, but it's still too close to swap untouched. Before this went any wider it'd want a generic structure: Beginner, Novice, Intermediate, with sublevels inside each, and milestones I've reworded myself.

The app icon was AI-generated and, viewed in the wrong light, the swimmer in it looks like, um, not a swimmer. That's also on the list.

Where it's at

It works. We used it through the warm months earlier in the year. Then it got cold and we shelved poolside lessons until we find an indoor heated pool. When swimming starts back up, the app gets used again.

The bigger lesson

The interesting thing about building this wasn't the code. It was that the same shape of system that motivates kids in school, and motivates my daughter in her real swim school, also worked for my son one-on-one with a parent. The app was just the lightweight frame to make that system possible at home, without a swim school behind me.

AI built the helper. The discipline to actually show up at the pool with my son is still on us. But the helper makes the discipline a lot easier.