Pocket Tennis Team Blueprint
Flow and structure report · v3 tested · Oct 15, 2026

A whole tennis team, one conversation away

How the Pocket Tennis Team plugin is put together and every path a player or parent walks through it: from the first launch, through the coaching interview and daily training, to tournaments and the weekly review.

Status: v0.1 plugin built · v2 and v3 prototypes tested with personas · v0.2 build next Personas: Sam (adult) · Mei, parent of Alex (14) Repo: ~/tennis-team
01

At a glance

The promise, the principles every screen follows, and where each part stands today.

The promise. Someone who has never typed a command starts Claude, the app is already on screen, and within about five minutes they have talked to their coach, watched their plan take shape with reasons, and know their one thing for this week.

The page is the product

Nobody types commands or skill names. Claude Code or Cowork runs behind a local web app that opens on its own.

A coach, not a dashboard

The conversation is the main surface. The mic and text box are always one tap away, and replies are signed by the team member who wrote them.

Every plan item has a Why

Each focus links to the player's own words, the team member who decided it, and a success target. First-week plans are labelled as starters.

Never wait on the AI to move on

Questions, chips and the plan board respond instantly. The slow AI step (20–60 s per run) happens in the background and arrives as a card.

Small, honest load

At most three tennis focuses and one fitness block per week. Top priorities first. One good session is a candidate pattern, not proof.

Health comes first

Tightness means monitor, pain means pause and see a professional, limping mid-match means stop now. Juniors get growth guardrails.

Build status by layer

LayerWhat existsStatus
Plugin skillscoach, setup, log-note, coach-analysis, weekly-review, voiceBuilt · v0.1
Workspace templatesTEAM.md rules, journal, training, coaches, plan page, instant init scriptBuilt · v0.1
Voice Coach serverLocal server, browser speech-to-text, live team steps, read-aloud repliesBuilt · v0.1
App v2 prototypeOnboarding, task Home, templates, Calendar, Plan, Tournaments, Team, Health & LoadPrototype · tested 3 rounds
App v3 prototypeInterview + live plan board, team huddle, plan review with Why, conversation-first Home, free-text routingPrototype · tested 3 rounds
Strategy, Tournament coaches, auto-open hookDesigned in the brief and prototypesv0.2 build
02

Personas and their tasks

Two personas, three people. Juniors are parent-operated in v0.2 because Claude consumer accounts are for adults.

S
Sam, 44
Recreational adult · NTRP 3.5 → 4.0
Plays
League doubles Tue, hitting Sat, lesson every other week with Maria
Tech
Medium. Has never opened a terminal
Success
Knows his one thing; talks 60 s after a match and the coach remembers
"If I have to type it, I won't."
M
Mei, 46
Parent who runs the app for Alex
Handles
Entries, deadlines, travel, school, physio
Tech
Low to medium. Quits at the first error
Success
One page shows what's due and whether Alex's body is OK
"Tell me what to say in the car, and what not to."
A
Alex, 14
Competitive junior · UTR 7.4 · Sever's history
Plays
Academy 4–5 days, tournaments most weekends
In v0.2
Talks to the coach with Mei present ("hand Alex the mic")
Success
His own game plan; his words count most
"Can it just tell me what to do against lefties?"

Hero tasks and where they start

PersonaTaskTriggerEntry pointHandled by
SamTell my coach how it wentWalking off courtChip "How did practice go?" · micHead Coach → Journal Keeper
SamKnow my one thing10 min before playingToday strip (instant)Head Coach
SamSave what my coach taughtAfter a lessonChip "After my lesson"Coach Analyst
SamGet ready for a matchDay beforeChip "Match coming up?" · calendar promptTournament Coach
SamSee if I'm improvingSunday"Your weekly check-in is ready"Progress Coordinator
MeiPlan the tournament scheduleNew events announced"Add a tournament" with overload checkTournament Coach
MeiIs Alex OK?After a heavy weekendHealth & Load tab · "Load & body"Head Coach (health rule)
MeiSideline noteIn the standsChip "Sideline note"Journal Keeper (observer evidence)
MeiHow to talk about todayBefore the car rideChip "How do I talk about today?"Head Coach (parent guidance)
Mei + AlexDebrief a matchHours after"Hand Alex the mic"Tournament Coach → Journal Keeper
03

System structure

Everything runs on the player's own computer. The workspace folder is the memory; conversations are disposable.

flowchart LR
  P["Player or parent"] -->|"talks or types"| APP["Pocket Tennis Team app
local web page"] APP -->|"speech to text"| STT["Browser recognition
or on-device Whisper"] APP -->|"instant actions:
answers, ticks, notes"| SRV["voice_server.py
127.0.0.1 + secret token"] SRV -->|"one job per message"| CL["claude -p
with the plugin"] CL --> SK["Skills: coach, setup, log-note,
coach-analysis, weekly-review,
strategy*, tournament*"] SK <-->|"read and write"| WS[("Workspace folder
markdown + CSV")] SRV -->|"plan data, replies"| APP APP -->|"read aloud"| TTS["Best installed voice"] HK["SessionStart hook
async"] -->|"starts server,
opens page"| SRV WS -.->|"iCloud or Drive sync"| PH["Phone voice memos
into inbox/"]

* designed, built in v0.2. The server only lets claude -p use file tools (read, write, edit), never shell commands.

Plugin (public repo)

Skills, workspace templates, the voice server and the launch hook. No personal data. Installs from a GitHub marketplace.

Workspace (private folder)

One folder per player. Notes, patterns, plan, coach evidence, tournaments. Plain files the player owns.

App page (localhost)

Reads plan data instantly, writes onboarding answers and quick actions without AI, and queues AI jobs that never block the mic.

04

The coaching team

One front door, specialists behind it. Members join the visible team when they become relevant to the player.

flowchart TD
  M["Message, voice memo,
or task chip"] --> HC["Head Coach
front door + housekeeping"] HC -->|"practice, match, lesson note"| JK["Journal Keeper"] HC -->|"coach advice or material"| CA["Coach Analyst"] HC -->|"week ended, how am I doing"| PC["Progress Coordinator"] HC -->|"goal, long-term plan"| SC["Strategy Coach"] HC -->|"event, match prep, debrief"| TC["Tournament Coach"] HC -->|"first contact"| TM["Team Manager
setup"] JK -->|"lesson notes"| CA JK --> D[("Decisions log")] PC --> D CA --> D D --> PLAN["Plan page data"]
MemberSkillOwnsWrites toJoins the team whenStatus
🎾 Head CoachcoachRouting, tone, housekeeping, health-first replies_system/plan-data.jsAlwaysBuilt
🧰 Team ManagersetupWorkspace, profile, starter planplayer/, training/First runBuilt
📓 Journal Keeperlog-noteClean entries, patterns, assignment decisionsjournal/, decisions CSVAlwaysBuilt
🔍 Coach Analystcoach-analysisCoach evidence, principles vs hypotheses, verdictscoaches/<slug>/Player names a coachBuilt
📈 Progress Coordinatorweekly-reviewKeep / level up / simplify / rest / swap / testWeekly plan, decisionsAlwaysBuilt
🗺 Strategy CoachroadmapFinal goal, phases, monthly on-track checkplayer/goals.md, training/roadmap.mdPlayer states a goalDesigned
🏆 Tournament CoachtournamentCalendar, guides, taper, match cards, reflectionstournaments/An event or match is mentionedDesigned
💪 Fitness · 🥗 Nutrition · 📊 Stats · ⭐ Scout—Load-aware fitness, fueling, stats import, idol analysis—LaterJoining soon
05

End-to-end journey

From install to a steady weekly rhythm. The three loops (daily, weekly, tournament) all write to the same workspace, so every tab agrees.

flowchart LR
  subgraph S1["First run · about 5 min"]
    A["Install plugin"] --> B["First Claude session
app opens itself"] B --> C["Welcome +
choose folder"] C --> D["Who is this for?"] D --> E["Coach interview
+ live plan board"] E --> F["Team huddle
AI builds plan"] F --> G["Plan review
with Why"] end subgraph S2["Every week"] H["Home conversation"] --> I["Practice and matches
logged by voice"] I --> J["Sunday check-in
weekly review"] J --> H end subgraph S3["Tournament cycle"] K["Add event
overload check"] --> L["Guide + taper week"] L --> M["Match cards"] M --> N["Debriefs +
event reflection"] end G --> H H --> K N --> J
06

Launch and first run

A SessionStart hook opens the app; it can't prompt, so every "ask first" choice lives in the page as a flag file the hook reads.

flowchart TD
  A["Claude session starts
matcher: startup"] --> X{"no-autoopen
flag set?"} X -->|"yes"| Z["Stay silent"] X -->|"no"| B{".onboarded
marker?"} B -->|"missing"| W["Start server, open Welcome
wherever Claude started"] W --> WF["Choose folder
Documents/Tennis or iCloud/Tennis"] WF --> OB["Onboarding"] --> MK["Write .onboarded
show 'next time' tip"] B -->|"present"| C{"TEAM.md in this folder
or a subfolder?"} C -->|"no"| Z C -->|"yes"| D{"Server already
running?"} D -->|"yes"| Z D -->|"no"| H["Start server, open Home"] L["Double-click
Open Pocket Tennis Team"] --> H

Verified platform facts

  • Plugin hooks/hooks.json with an async SessionStart hook runs in the CLI, the desktop Code tab and Cowork.
  • No install-time hook: the app first opens at the first session after install.
  • Paths available: CLAUDE_PLUGIN_ROOT, CLAUDE_PLUGIN_DATA, CLAUDE_PROJECT_DIR.

Opt-out and backups

  • Welcome: "Don't open this automatically".
  • Settings switch "Open automatically when I start Claude in my tennis folder". Both write no-autoopen.
  • Backup doors: a launcher file in the folder, and /tennis.
07

Onboarding: the coach interview (v3, tested)

Replaces five quick screens and a hidden AI job. The player watches their plan and team take shape while they talk, so the plan never arrives without reasons.

sequenceDiagram
  autonumber
  actor P as Player
  participant HC as Head Coach (scripted, instant)
  participant BD as Plan board (local rules)
  participant AI as Team (claude -p, background)
  HC->>P: How long have you played, and what level?
  P->>HC: Eight years, about a 4.0
  HC-->>BD: Level card 4.0
  HC->>P: What's your goal, and by when?
  P->>HC: 4.5 within a year
  HC-->>BD: Goal card 4.0 to 4.5 by Oct 2027
  HC->>P: What loses you the most points?
  P->>HC: Returns, and my second serve
  HC-->>BD: Top priorities: Returns, Second serve (quotes attached)
  HC->>P: Any matches or tournaments coming up?
  P->>HC: Club championship Nov 8
  HC-->>BD: Tournament Coach joins
  HC->>P: When do you play? Anything sore? Who coaches you?
  P->>HC: Tue, Thu, Sat. Knee fine. Coach Maria
  HC-->>BD: Schedule strip, Coach Analyst joins
  HC->>AI: One job with all answers
  Note over P,AI: Team huddle, about 1 min: each member presents their part with a reason
  AI-->>P: Plan review: 1 to 3 focuses, each with Why, target, Looks good / Too much / Change this
  P->>HC: Looks good
  HC-->>P: Home opens on the coach's plan summary
  

Interview script (adult)

#Coach asksQuick repliesBoard updates
1"How long have you played, and roughly what level are you?"Beginner · Club · 3.5 · 4.0 · 4.5+ · UTR…Level card
2"What's your goal with tennis, and by when?"Move up a level · Win league · A tournament · Stay healthy · 3 / 12 monthsGoal card, Strategy Coach presents the phase
3"What loses you the most points right now?"Returns · Second serve · Backhand · Net · Consistency · NervesPriority cards with "because you said…"
3bFollow-up when vague: "Which shot lets you down most when it gets tight?"Chips from #3Refines the top priority
4"Any matches or tournaments coming up?"None · League · Tournament + dateTournament Coach joins, calendar entry
5"When and how often do you play?"Day chips: practice / match / lessonSchedule strip
6"Anything sore or injured I should know about?"No · Tight · It hurts + body partBody card (monitor or pause)
7"Do you work with a coach?" then "Anything else I should know?"Name · No coachCoach Analyst joins

Team huddle (hides the AI wait)

Members speak in turn while the job runs: "Strategy Coach: phase 1 is about stopping free points." "Tournament Coach: we ease off the week of Nov 2." A progress bar, then the review.

Plan review

Labelled "Starter plan, adjusted after your first 2 sessions". Each focus has a Why? (reason, the player's quote, who decided), a target, and Looks good / Too much / Change this.

Skipping. Every question can be skipped. "Skip interview" produces a starter plan clearly labelled as generic, and the coach fills gaps from later notes, asking at most one profile question per weekly review.
08

Plan board rules

Instant, local rules turn answers into visible cards. The AI job later confirms or adjusts them; the board never invents facts the player didn't say.

When the player says…Card that appearsReason shownTeam effect
A level ("about a 4.0", "UTR 7")Level · 4.0"You said: about a 4.0"—
A goal with a time ("4.5 within a year")Goal · 4.0 → 4.5 by Oct 2027QuoteStrategy Coach presents phase 1
Point-losers ("returns", "second serve")Top priority cards, max 2"Because you said returns cost you the most points"—
An event or match dateTournament card with countdownQuote + date🏆 Tournament Coach joins
Play daysSchedule stripChips chosenCalendar seeded
Tight, soreBody card · monitorQuoteFitness kept light
Pain, injuryBody card · pause related workQuote + "see a professional"Related focus paused
"No", "not injured", "nothing hurts"No card (negation handled)—Fixes "Paused: rest your" bug
A coach's nameCoach card"You work with Coach Maria"🔍 Coach Analyst joins
09

Conversation-first Home

The player opens the app to their coach, not a menu. Tasks become suggestions; the plan stays one tap away with its reasons.

Team presence. Header shows the player's name, level path and the avatars of active team members. Tapping it opens the Team tab.
Today strip. Today's session and the one cue for the week, with a Why? that explains where the cue came from.
The conversation. Starts with the plan summary from the plan review. Replies are signed by the member who wrote them and end with up to three tickable next steps.
Suggestion chips. Three chips that change with context (after a scheduled practice, before a match, on Sunday). "More" opens the full task list.
Pinned composer. Big mic and text box always visible. The mic stays live while the team works; new notes queue behind the running job.

Before and after

v2v3 (tested)Why it changed
Today card, coach reply, then a 5-tile grid; mic at the bottom of the pageConversation fills the screen; mic and text pinned; 3 chips + More"Voice and text must come first. I want to feel a team is standing by."
Plan appears after setup with no explanationPlan built on screen during the interview; every item has a Why"I have no idea where this plan came from."
Team visible only on the Team tabAvatars in the header; members join during the interview; replies signedThe team should feel present, not hidden in a tab
Typed messages got a generic replyFree text routed by intent: log a session, update the body, car talk, add a tournament from one sentence, answer a question"Alex told it his heel was sore and it talked about his forehand."
Task templates opened full-screen"How did practice go?" runs inline as coach bubbles with chip answersStay inside the conversation
10

Daily training loop

Guided questions run in the page with no AI wait between them; one background job does the thinking; every tab updates from the same store.

sequenceDiagram
  autonumber
  actor P as Player
  participant H as Home
  participant T as Guided template (in page)
  participant Q as Job queue
  participant AI as Team (claude -p)
  participant S as Workspace + store
  H->>P: Today strip: Practice, cue "Short swing, deep middle"
  Note over P: plays the session
  H->>P: Chip appears: How did practice go?
  P->>T: Practice, match or lesson?
  P->>T: How did your one thing go? 6 of 10
  P->>T: What cost you the most points? Return errors
  P->>T: Anything sore? A little, left calf
  T->>P: Review screen with Edit links, then Send
  T->>Q: One note
  Q->>AI: Run (mic stays live)
  AI->>S: Entry, patterns, decision, actions, plan data
  AI-->>H: Reply card: calf first, then 6 of 10 feedback, up to 3 next steps
  S-->>H: Calendar Done, Plan "How it's going", Team "Latest" refresh
  P->>H: Ticks a next step (no AI call)
  

How did it go?

Type · what happened (matches) · your one thing out of 10 · what cost points (chips) · body check. Losses get a different reply than wins.

After my lesson

Which coach · what they told you, in their words · anything to check you understood. Journaled first, then the Coach Analyst sorts principles from ideas to test.

Today's focus

Instant, no AI. Reads the current assignments; after a session is logged, "Next" moves to the following one.

11

Weekly review and assignment decisions

Runs automatically the first time the player opens the app after the plan's week ends. Every assignment gets exactly one decision.

stateDiagram-v2
  [*] --> New: created this week
  New --> Keep: evidence sparse or mixed
  Keep --> Test: promising but felt-only
  Test --> LevelUp: target met in real points
  Keep --> LevelUp: target met repeatably
  Keep --> Simplify: too complex or tiring
  Keep --> Rest: pain or clash
  Rest --> Keep: cleared
  Keep --> Swap: no transfer after a fair trial
  LevelUp --> Keep: new, harder target
  Swap --> [*]
    
File termPlayer seesRule
newNew this weekSetup or review only
keepKeep goingThe default when evidence is thin
validateTest it in real pointsNo live or pressure evidence yet
progressLevel upTarget met repeatably in live play
reduceSimplifyComplexity or recovery is poor
pauseRest itPain, illness, higher priority
replaceSwap itOnly with a stated reason

Caps: 3 tennis + 1 fitness per week, at least one top priority every week, at most 3 open next steps, and no new technique while the current model is being tested, unless a coach prescribed it directly.

12

Tournament lifecycle

From the moment an event is added to the reflection afterwards. The load check runs before the player commits, not after.

flowchart LR
  A["Add a tournament
name + date chips +
entry deadline + format"] --> B{"Load check
before Add"} B -->|"3 weekends in a row,
hours jump over 30%,
logged pain"| W["Heads-up card
add anyway or skip"] B -->|"OK"| C["Saved everywhere:
Tournaments, Calendar
all days, Home, Load"] W --> C C --> D["Guide opens
prep, game plan, match day,
between points, after"] D --> E["Entry deadline prompt
5 days before"] E --> F["Taper week
lighter, more points,
no new technique"] F --> G["Match card
serve plan, return plan,
reset cue, linked to date"] G --> H["Match day"] H --> I["Debrief per match
score, what worked,
did the plan work?"] I --> J["Event reflection
result, best moment,
train next"] J --> K["Weekly review
adjusts the plan"]

T−21 to T−7

Normal training with practice sets. Match-play focus increases. Scouting checklist if enabled.

T−7 to T−1

Taper (configurable 3 days to 1 week). Light hitting, serve routine rehearsal, early nights.

T and after

Match cards, between-points reset, debrief chips, scores-differ check, then one event reflection under Played.

13

Parent mode

Same skeleton, different job: logistics and support, not training. The parent runs the app; the junior speaks with the parent present.

flowchart LR
  A["Welcome"] --> B["Who is this for?
My child"] B --> C["Interview about Alex
age band, level, season goals,
tournaments + deadlines,
school + training load,
growth + injury history"] C --> D["Hand Alex the mic
Alex, what's your game?"] D --> E["Plan board
+ deadlines + load guardrails"] E --> F["Team huddle"] F --> G["Plan review"] G --> H["Family Home"] H --> H1["This week's brief"] H --> H2["Health and Load"] H --> H3["Sideline note"] H --> H4["How do I talk about today?"] H --> H5["Alex's debrief"]
AreaAdultParent
Home chipsHow did it go · Today's focus · Match coming upAdd a tournament · This week's brief · Load & body · Sideline note · How do I talk about today · Alex's debrief
Evidence weightPlayer's words · direct coach · public materialAlex's words outrank parent-reported fields; sideline notes are lower-weight observer evidence
Extra tab—Health & Load: weekly hours, matches per weekend, body flags, injury history, rest-day suggestions
GuardrailsHealth ruleHealth rule + growth guardrails, no weight or diet goals, nutrition is general fueling only
14

Health and safety decisions

Applied before any coaching content in a reply. Always labelled "not medical advice".

flowchart TD
  R["Body mentioned in a note,
debrief, sideline note or intro"] --> N{"Negated?
no, not injured"} N -->|"yes"| OK["No health card"] N -->|"no"| L{"Limping or pain
during a match?"} L -->|"yes"| STOP["Stop playing now,
get it checked"] L -->|"no"| P{"Pain or injury?"} P -->|"yes"| PA["Pause related work,
see a professional,
log body flag"] P -->|"no, tight or sore"| MO["Monitor, keep load,
reduce if it repeats"] PA --> J{"Junior with
growth history?"} MO --> J J -->|"yes, e.g. Sever's"| JR["Less impact and jumping,
physio before next event,
flag in tournament load check"] J -->|"no"| E["Reply leads with
the body, then tennis"] JR --> E

Junior load guardrails

  • Warn at 2+ tournament weekends in a row, or more than 4 singles matches in a day.
  • Warn when planned weekly hours jump by more than 30%, or exceed about one hour per year of age.
  • Suggest rest after back-to-back match days; rest days replace training.

Wellbeing

Signs of distress, burnout, self-harm or disordered eating pause tennis coaching. The coach replies warmly and plainly, encourages talking to a trusted adult, and shows crisis resources. The team never contacts anyone.

15

Voice pipeline

Talking should feel as easy as leaving a voice message for a coach. Decided: clean-up pass now, on-device Whisper as an optional upgrade.

flowchart LR
  M["Tap mic"] --> R{"Better recognition
set up?"} R -->|"no"| B["Browser speech-to-text
live words on screen"] R -->|"yes"| W["On-device Whisper
primed with tennis words,
player and coach names"] B --> C["Clean-up pass
labels to level,
valley to volley"] W --> C C --> E["Editable transcript
Here's what I heard + Undo"] E --> S["Send to the team"] S --> A["claude -p
also repairs names
from context"] A --> T["Reply on screen"] T --> V["Read aloud
best natural voice,
sentence by sentence"]

Recognition

Browser recognition for the live preview. Optional Whisper download (about 500 MB) for accents and mixed Chinese and English; private and offline.

Correction

Tap any word to fix it; the mic adds to the end. Likely tennis mishearings are fixed and highlighted with Undo.

Speaking

Novelty voices hidden; Premium, Natural and Google voices preferred; choice remembered; Chrome's dropped and stalled speech handled.

16

Screen map

Five tabs per mode. Overlays (flows, sheets, panels) sit above them; Settings always sits on top.

flowchart TB
  subgraph AD["Adult mode"]
    A1["Home
conversation"] --- A2["Plan
goal, roadmap, block, week"] --- A3["Calendar
month and list"] --- A4["Tournaments
guide, cards, played"] --- A5["Team
members, knowledge"] end subgraph PA["Parent mode"] P1["Family Home
conversation + brief"] --- P2["Calendar
+ deadlines, travel"] --- P3["Tournaments
entries, checklist"] --- P4["Health and Load"] --- P5["Team"] end subgraph OV["Overlays"] O1["Onboarding interview"] O2["Guided templates"] O3["Member panel
settings, knows, teach, sources"] O4["Day detail"] O5["Settings
voice, recognition, auto-open"] end
17

Workspace and data

Plain files the player owns. Green marks files the AI team writes; orange marks files the app writes instantly without AI.

My Tennis Team/ ├── TEAM.md # rules every member follows ├── My Tennis Plan.html # static page, reads _system/plan-data.js ├── player/ │ ├── profile.md # fills in over time from notes │ ├── goals.md # Strategy Coach │ └── onboarding.json # interview answers, by role ├── journal/ │ ├── intake_log.md # verbatim notes with IDs │ ├── entries.md # cleaned entries │ ├── patterns.md # candidate → confirmed │ └── master_summary.md ├── training/ │ ├── priorities.md · roadmap.md · current_cycle.md │ ├── weekly_assignments.md # max 3 tennis + 1 fitness │ ├── assignment_decisions.csv │ └── action_tracker.csv # ticks write here instantly ├── tournaments/ │ ├── calendar.md # events + deadlines │ └── 2026-11-08-club-championship.md ├── coaches/maria/ # sources, principles, hypotheses, feedback ├── family/ # parent mode: sharing, logistics ├── inbox/ # phone voice memos land here └── _system/ ├── plan-data.js # everything the app renders ├── conversation.jsonl # Home conversation survives reloads └── coach/ # template for new coaches

Evidence order

1 · Direct

Coaching given to this player (lesson notes, a coach's feedback). Can create principles.

2 · Player

The player's own notes and words. In parent mode, Alex's words outrank parent-reported fields.

3 · Public and general

A coach's public material, then general tennis knowledge. Fills gaps, never silently overrides.

18

Test results

Two persona agents walked the whole journey; a designer agent fixed what they found between rounds. v2 ran three rounds, v3 two rounds plus a polish pass. Smoothness out of 5.

PlayerStageRound 1Round 2Round 3
SAM
adult · desktop
Onboarding34.54.5
Daily training244
Tournaments23.54
MEI
parent · phone
Onboarding344.5
Weekly / daily344.5
Tournaments244.5

v3 prototype: interview + conversation-first Home

PlayerStagev3 first testv3 final
SAM
adult · desktop
Interview4.54
Plan review44.5
Home and daily3.54.5
Tournaments44.5
MEI
parent · phone
Interview44
Plan review44.5
Family Home24.5
Tournaments and health44.5

Both personas answered "yes, ready to show" on the final v3 run. A last polish pass after it fixed: chips shifting under the finger, a lost level not reaching the header, "Also an academy" read as a coach, limping in the interview not pausing the heel, the Today strip covering messages, duplicate practice logs, and a "lighter" target that was harder. Sam: "Finally, I just talk and it gets it."

v2 prototype

Biggest fixes

  • Mic could not be tapped (ring drawn over the button).
  • Entries vanished; one shared store now feeds every tab.
  • Replies ignored answers; now built from score, x/10, body part.
  • Pain ignored; health now leads every reply.
  • Fake history for new users; now empty and seeded from answers.
  • Rest days stacked on training; overload checked only after booking.

Product owner's own test (led to v3)

  • Plan appeared with no reasons → interview + plan board + Why.
  • Mic buried under tiles → conversation-first Home.
  • Transcript not editable → tap any word to fix it.
  • Recognition weak → clean-up pass + optional Whisper.
  • "change" link and Preview silent → fixed (layering, Chrome speech bugs).
  • "Paused: rest your" → negation handling.
19

Roadmap

Prototype first, then the real build. Each phase has a goal the personas can feel.

Now · v0.2
App-first · to end of Nov 2026
  • Auto-open hook, launcher, folder picker
  • Interview + plan board + plan review
  • Conversation-first Home, job queue, persisted conversation
  • Strategy Coach and Tournament Coach skills
  • Parent mode on one device, Health & Load, guardrails
  • Transcript clean-up; optional Whisper

Target: 80% reach Home in 5 min; 70% of notes from chips or voice.

Later · v0.4+
Connected team · 2027
  • Opt-in hosted sync and phone app
  • Read-only weekly brief for a real coach
  • Stats Analyst and Player Scout
  • Nutrition (adults first)
  • Teen role after a policy review on minors
20

Decisions and open items

What the product owner has decided, and what still needs a call.

TopicDecisionStatus
JuniorsParent-operated in v0.2; teen role and private notes wait for a policy reviewDecided
Auto-openFirst session after install opens Welcome once; afterwards only in a tennis folder; in-app opt-outDecided
OnboardingInterview + live plan board + team huddle + plan review with WhyDecided
HomeConversation-first: pinned mic and text, 3 chips + More, Today strip, Why everywhereDecided
Voice recognitionClean-up pass + optional on-device Whisper; no cloud speech API for nowDecided
Sideline notesLower-weight observer evidenceDefault, confirm
PhoneSynced voice memos before any LAN or hosted accessDefault, confirm
WorkspacesOne folder per player; siblings and playing parents get their ownDefault, confirm