Skip to content

work / tt-coach · Live

Table Tennis Coach

Match tracker, training journal and AI coach for my own game.

Week of Claude Maxing

After a match you always have thoughts: what worked, what to fix, how you beat that opponent. Then it evaporates, and you meet them again a year later with nothing. I wanted somewhere to dump the mess right after playing, and an AI layer that reads the whole history back and tells me how to approach the next one. A coach in the pocket, from notes I was half-writing anyway.

Why I built it

Two years of scattered post-session notes and no way to see patterns in my own matches.

The problem

A PWA for logging matches and training with an AI coach that reads the history. Local-first with a cloud mirror added later without a rewrite.

What it does
  • React 19
  • Vite
  • Dexie
  • Claude
  • Supabase
Stack
Local-first plus a cloud mirror beat a rewrite: 24 screens untouched.
What I learned

A pure-frontend replica with mock data: nothing is saved, nothing leaves the page. The real app is richer; this is the feel of it.

loading the demo…

Play with it

The thinking

user · pains · gap · tools

Competitive amateur players (me) who train weekly but never mine their own match history.

Target user

  • Two years of post-session notes scattered and unsearchable
  • Patterns in losses invisible without data

Pain points

Match tracking plus an AI coach that actually reads your history, built for amateurs rather than academies.

Gap in the market

  • Claude (coach)
  • Claude Code (build)
  • Dexie
  • Supabase mirror sync

AI + tooling

  • Deliberate practice: train the weakness the data exposes, not the favourite drill
  • Reflective practice loop: log, review, adjust
  • Local-first with cloud mirror

Frameworks

  • Built and live, but not yet stress-tested across a full season of matches
  • TBD: sessions logged, insight-to-training conversions

Success metrics

Snap a receipt, AI reads it, your spending explains itself.

← all work