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.
At a glance
The promise, the principles every screen follows, and where each part stands today.
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
| Layer | What exists | Status |
|---|---|---|
| Plugin skills | coach, setup, log-note, coach-analysis, weekly-review, voice | Built · v0.1 |
| Workspace templates | TEAM.md rules, journal, training, coaches, plan page, instant init script | Built · v0.1 |
| Voice Coach server | Local server, browser speech-to-text, live team steps, read-aloud replies | Built · v0.1 |
| App v2 prototype | Onboarding, task Home, templates, Calendar, Plan, Tournaments, Team, Health & Load | Prototype · tested 3 rounds |
| App v3 prototype | Interview + live plan board, team huddle, plan review with Why, conversation-first Home, free-text routing | Prototype · tested 3 rounds |
| Strategy, Tournament coaches, auto-open hook | Designed in the brief and prototypes | v0.2 build |
Personas and their tasks
Two personas, three people. Juniors are parent-operated in v0.2 because Claude consumer accounts are for adults.
- 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
- 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
- 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
Hero tasks and where they start
| Persona | Task | Trigger | Entry point | Handled by |
|---|---|---|---|---|
| Sam | Tell my coach how it went | Walking off court | Chip "How did practice go?" · mic | Head Coach → Journal Keeper |
| Sam | Know my one thing | 10 min before playing | Today strip (instant) | Head Coach |
| Sam | Save what my coach taught | After a lesson | Chip "After my lesson" | Coach Analyst |
| Sam | Get ready for a match | Day before | Chip "Match coming up?" · calendar prompt | Tournament Coach |
| Sam | See if I'm improving | Sunday | "Your weekly check-in is ready" | Progress Coordinator |
| Mei | Plan the tournament schedule | New events announced | "Add a tournament" with overload check | Tournament Coach |
| Mei | Is Alex OK? | After a heavy weekend | Health & Load tab · "Load & body" | Head Coach (health rule) |
| Mei | Sideline note | In the stands | Chip "Sideline note" | Journal Keeper (observer evidence) |
| Mei | How to talk about today | Before the car ride | Chip "How do I talk about today?" | Head Coach (parent guidance) |
| Mei + Alex | Debrief a match | Hours after | "Hand Alex the mic" | Tournament Coach → Journal Keeper |
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.
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"]
| Member | Skill | Owns | Writes to | Joins the team when | Status |
|---|---|---|---|---|---|
| 🎾 Head Coach | coach | Routing, tone, housekeeping, health-first replies | _system/plan-data.js | Always | Built |
| 🧰 Team Manager | setup | Workspace, profile, starter plan | player/, training/ | First run | Built |
| 📓 Journal Keeper | log-note | Clean entries, patterns, assignment decisions | journal/, decisions CSV | Always | Built |
| 🔍 Coach Analyst | coach-analysis | Coach evidence, principles vs hypotheses, verdicts | coaches/<slug>/ | Player names a coach | Built |
| 📈 Progress Coordinator | weekly-review | Keep / level up / simplify / rest / swap / test | Weekly plan, decisions | Always | Built |
| 🗺 Strategy Coach | roadmap | Final goal, phases, monthly on-track check | player/goals.md, training/roadmap.md | Player states a goal | Designed |
| 🏆 Tournament Coach | tournament | Calendar, guides, taper, match cards, reflections | tournaments/ | An event or match is mentioned | Designed |
| 💪 Fitness · 🥗 Nutrition · 📊 Stats · ⭐ Scout | — | Load-aware fitness, fueling, stats import, idol analysis | — | Later | Joining soon |
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
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.jsonwith 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.
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 asks | Quick replies | Board 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 months | Goal card, Strategy Coach presents the phase |
| 3 | "What loses you the most points right now?" | Returns · Second serve · Backhand · Net · Consistency · Nerves | Priority cards with "because you said…" |
| 3b | Follow-up when vague: "Which shot lets you down most when it gets tight?" | Chips from #3 | Refines the top priority |
| 4 | "Any matches or tournaments coming up?" | None · League · Tournament + date | Tournament Coach joins, calendar entry |
| 5 | "When and how often do you play?" | Day chips: practice / match / lesson | Schedule strip |
| 6 | "Anything sore or injured I should know about?" | No · Tight · It hurts + body part | Body card (monitor or pause) |
| 7 | "Do you work with a coach?" then "Anything else I should know?" | Name · No coach | Coach 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.
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 appears | Reason shown | Team 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 2027 | Quote | Strategy 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 date | Tournament card with countdown | Quote + date | 🏆 Tournament Coach joins |
| Play days | Schedule strip | Chips chosen | Calendar seeded |
| Tight, sore | Body card · monitor | Quote | Fitness kept light |
| Pain, injury | Body card · pause related work | Quote + "see a professional" | Related focus paused |
| "No", "not injured", "nothing hurts" | No card (negation handled) | — | Fixes "Paused: rest your" bug |
| A coach's name | Coach card | "You work with Coach Maria" | 🔍 Coach Analyst joins |
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.
☐ Sat: 10 live returns, count deep ones
Before and after
| v2 | v3 (tested) | Why it changed |
|---|---|---|
| Today card, coach reply, then a 5-tile grid; mic at the bottom of the page | Conversation 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 explanation | Plan 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 tab | Avatars in the header; members join during the interview; replies signed | The team should feel present, not hidden in a tab |
| Typed messages got a generic reply | Free 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 answers | Stay inside the conversation |
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.
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 term | Player sees | Rule |
|---|---|---|
new | New this week | Setup or review only |
keep | Keep going | The default when evidence is thin |
validate | Test it in real points | No live or pressure evidence yet |
progress | Level up | Target met repeatably in live play |
reduce | Simplify | Complexity or recovery is poor |
pause | Rest it | Pain, illness, higher priority |
replace | Swap it | Only 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.
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.
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"]
| Area | Adult | Parent |
|---|---|---|
| Home chips | How did it go · Today's focus · Match coming up | Add a tournament · This week's brief · Load & body · Sideline note · How do I talk about today · Alex's debrief |
| Evidence weight | Player's words · direct coach · public material | Alex'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 |
| Guardrails | Health rule | Health rule + growth guardrails, no weight or diet goals, nutrition is general fueling only |
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.
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.
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
Workspace and data
Plain files the player owns. Green marks files the AI team writes; orange marks files the app writes instantly without AI.
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.
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.
| Player | Stage | Round 1 | Round 2 | Round 3 |
|---|---|---|---|---|
| SAM adult · desktop | Onboarding | 3 | 4.5 | 4.5 |
| Daily training | 2 | 4 | 4 | |
| Tournaments | 2 | 3.5 | 4 | |
| MEI parent · phone | Onboarding | 3 | 4 | 4.5 |
| Weekly / daily | 3 | 4 | 4.5 | |
| Tournaments | 2 | 4 | 4.5 |
v3 prototype: interview + conversation-first Home
| Player | Stage | v3 first test | v3 final |
|---|---|---|---|
| SAM adult · desktop | Interview | 4.5 | 4 |
| Plan review | 4 | 4.5 | |
| Home and daily | 3.5 | 4.5 | |
| Tournaments | 4 | 4.5 | |
| MEI parent · phone | Interview | 4 | 4 |
| Plan review | 4 | 4.5 | |
| Family Home | 2 | 4.5 | |
| Tournaments and health | 4 | 4.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.
Roadmap
Prototype first, then the real build. Each phase has a goal the personas can feel.
- 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.
- Two devices via shared iCloud or Drive folder
- Phone capture: synced voice memos first
- Family brief, deadlines, travel and school checklist
- ICS calendar export, manual UTR trend
- Fitness Coach with growth-aware load
- 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
Decisions and open items
What the product owner has decided, and what still needs a call.
| Topic | Decision | Status |
|---|---|---|
| Juniors | Parent-operated in v0.2; teen role and private notes wait for a policy review | Decided |
| Auto-open | First session after install opens Welcome once; afterwards only in a tennis folder; in-app opt-out | Decided |
| Onboarding | Interview + live plan board + team huddle + plan review with Why | Decided |
| Home | Conversation-first: pinned mic and text, 3 chips + More, Today strip, Why everywhere | Decided |
| Voice recognition | Clean-up pass + optional on-device Whisper; no cloud speech API for now | Decided |
| Sideline notes | Lower-weight observer evidence | Default, confirm |
| Phone | Synced voice memos before any LAN or hosted access | Default, confirm |
| Workspaces | One folder per player; siblings and playing parents get their own | Default, confirm |