Vocal ERLab

Canonical file: docs/PRD.md — this page renders it verbatim. Relative links may point at repo files rather than lab pages.

Vocal ER — Product Requirements (PRD)

The single source of truth for what we're building. Vision lives in BRIEF.md; process lives in DEV-STRATEGY.md. Rule: no feature is built until its section here exists; if the build wants to deviate, this file changes first.

Status legend: 🧪 lab demo · 📝 spec draft · 🔒 locked (Nina approved) · 🔨 building · ✅ shipped

Feature index

#FeaturePhaseStatus
F1Exercise library1🧪 demo built, spec draft
F2Exercise player + programs1🧪 demo built, spec draft
F3Disclaimer gate1🧪 demo built, spec draft
F4Booking (Nina + pro bench)1🧪 demo built, spec draft
F5Check-in reminders (email→SMS)1–2🧪 demo built, spec draft
F6AI triage nurse2🧪 SOTA demo live — neural voice, speech-in, Claude-guarded routing, full realtime mode
F7Practice recorder + coach review2🧪 demo built, spec draft
F8Voice analyzer (baseline-relative)2–3🧪 SOTA demo live — MPM pitch, in-browser CPPS, log-freq spectrogram
F9Provider program builder3🧪 demo built, spec draft
F10Provider patient management3📝 not started
F11In-app video sessions3📝 not started
F12Laryngoscopy uploads + research library3🧪 concept demo built (synthetic cases, AI pre-read mock, 3-lens education view)
F13Lesson corpus pipelineParallel🧪 first piece live — on-device acoustic fingerprint + metadata card
F14Nina's AI avatar (voice → video)2🧪 capture studio live; clone blocked on her takes + signed release
F15The listening coach (the real model)Parallel📝 research done, build plan written — see LISTENING-COACH-PLAN.md

F1 — Exercise library

User story: Anyone with a voice problem can browse Nina's exercises and self-select — without talking to anything first. Spec: Two-layer categorization exactly as designed in the founding meeting — symptom (universal core: recovery, fatigue, hoarseness…) × user-type (additive niches: touring singer, teacher, …). Launch channels: general voice recovery + touring singer. Each exercise: video, duration, level, categories, "when to use / when NOT to use." Acceptance criteria: browse < 3 taps to any exercise · filters combine (symptom ∧ user-type) · skippable triage entry point visible · works one-handed on a phone. Data/compliance: exercise content only; no user health data required to browse. Consumer tier, no PHI. Out of scope (v1): search, favorites, offline. Open for Nina: the actual taxonomy (her exercise list drives it), channel names, how many exercises at launch. TBD-Nina.

F2 — Exercise player + programs

User story: A user follows an assigned or chosen program ("~5–6 exercises") with a clear daily routine. Spec: Program = ordered exercise list + frequency/timing guidance (e.g., touring singer: humming first thing, 2×/day). Player: video + step list + mark-complete; adherence view ("3 of 5 today"). Acceptance criteria: completion state survives refresh · program progress visible at a glance · timing guidance per user-type renders when applicable. Data/compliance: completion telemetry is the seed of the future RTM "therapeutic data" requirement (RESEARCH.md §3) — design the event shape now (per-day, per-exercise, per-episode). Consumer tier: stored under the user's account, still no clinician → no PHI. Open for Nina: what counts as "done" for an exercise (time? reps? self-rating?). TBD-Nina.

F3 — Disclaimer gate

Spec: Spoken + on-screen at first entry (and before triage): educational voice wellness, not medical advice, no diagnosis, not a substitute for professional care; AI voice disclosure when applicable. Acceptance logged with timestamp. Red-flag symptoms list shown with "see an ENT/SLP now" framing. Acceptance criteria: cannot reach triage or programs without acceptance · acceptance record retrievable · copy reviewed by Barry (and eventually counsel). Data/compliance: the acceptance log is a compliance artifact — immutable, timestamped.

F4 — Booking

Spec: "Talk to a real person" → book Nina at her coaching rates; when unavailable (or out of coaching scope), a bench of recommended certified pros (voice coaches, SLPs, doctors). v1 can be a scheduling link; bench is curated static content. Acceptance criteria: booking reachable from every triage exit and the library · rates visible before booking · scope language distinguishes coaching vs. licensed care. Open for Nina: rates shown, calendar tool she prefers, initial bench list. TBD-Nina.

F5 — Check-in reminders

Spec: User-selectable email and/or SMS (both offered — meeting decision). Daily check-in tied to the assigned program; message bodies contain zero health specifics ("Time for today's session — log in"), per RESEARCH.md §2. Email first (cheap, easy), SMS in Phase 2. Acceptance criteria: opt-in per channel · quiet hours respected · one-tap from message to today's program · unsubscribe honored immediately. Data/compliance: contact info + schedule only; PHI-free bodies are a hard rule regardless of tier.

F6 — AI triage nurse

User story: "Talk to Nina's AI" — a phone-call-style intake that asks how your voice feels and what you use it for, then assigns ~5–6 exercises. Spec (per RESEARCH.md §1): decision tree lives in our code as a state machine; the model only selects transitions via typed tool calls — it never invents questions or advice. Voice-first (browser WebRTC), animated audio-reactive visual + chat bubbles (early version: audio + cartoon, per meeting). Skippable. Hard-coded red-flag list → immediate "see an ENT/SLP" + human handoff. Users self-report (no listening diagnosis in this feature). The check-in loop (core, from the meeting): "they submit — is my voice improving, is it not improving, I'm having this new experience — and then it's like, here are some new exercises." Every assignment schedules a reassessment conversation (~day 3): better → step-up · same → hold + adjust · worse → escalate (pain/voice-gone = red flag; fatigue = prescribed rest). Check-ins may include guided exercise probes — her actual technique: "do this exercise… does your voice separate here, here and here?" — a micro-exercise mid-call with self-reported outcome routing the next branch. Acceptance criteria: every reachable tree path ends in a program, a red-flag exit, or a booking handoff · off-topic input gets the scripted redirect 100% of the time in the adversarial suite · disclaimer precedes first session · transcript QA runs on every session in beta. Data/compliance: v1 stores routing outcome only — no name/DOB/contact tied to symptoms; consumer tier, deliberately PHI-free (sidesteps the realtime-audio BAA problem). Voice clone of Nina requires her signed release + in-audio AI disclosure. Proven in the lab (2026-08-03): both halves of the architecture run live — (a) scripted mode: pre-rendered neural voice (gpt-4o-mini-tts "coral", warm-nurse steering), browser speech-in, Claude Haiku forced-tool branch classification (/api/triage-turn); (b) realtime mode: full speech-to-speech WebRTC call (gpt-realtime-2.1-mini, voice "marin") where choose_route tool calls keep the model inside the same tree. Open: Nina's actual intake questions + tree (workshop from her real triage habits); cloned voice day one vs. stock voice. TBD-Nina.

F7 — Practice recorder + coach review

Spec: User records video (meeting decision: video, not audio-only) of themselves doing an exercise, reviews, submits to coach; coach reviews asynchronously and responds. Consumer tier = review by Nina (paid tier); Tier 2 = review by the user's own provider. Acceptance criteria: record → review → re-record → submit loop under 2 minutes · uploads resumable on mobile networks · coach queue ordered and clearable. Data/compliance: consumer self-uploads are FTC-health-data (breach rule), not HIPAA — until a provider directs them (then PHI, Tier 2 infra). Storage designed BAA-upgradeable from day one.

F8 — Voice analyzer (baseline-relative)

Spec (per RESEARCH.md §1 feasibility line): in-browser acoustic feedback — pitch (F0), steadiness, loudness envelope, breathiness proxy — always framed vs. the user's own baseline, never as diagnosis. UI modeled on visual biofeedback tools (TruVox pattern). Trend view over sessions. Acceptance criteria: runs fully client-side in v1 (nothing uploaded) · degrades gracefully on bad mics · no clinical/GRBAS language anywhere in the UI. Out of scope until the science is there: absolute scores, strain detection, "diagnosis by listening" (the long-term dream stays parallel-tracked via the corpus work).

F9 — Provider program builder

Spec: Drag-and-drop: providers assemble programs from existing exercises (Nina's + their own uploads) rather than creating from scratch (meeting decision). Physitrack-style economics: per-provider SaaS, free patient app. Data/compliance: provider-uploaded content raises the IP ownership question — unresolved, decide before Tier 2 build. Patient assignment = PHI tier.

F10–F11 — Patient management · Video sessions

📝 Specs not started; blocked on Phase 3 and HIPAA infra decisions.

F12 — Laryngoscopy uploads + research library

Spec (from the meeting): patients upload scope videos via their provider (PHI tier). Anonymization is structurally favorable — "you can't see the person's face, you just see their vocal cords" — so with separate research consent + metadata stripping, cases pool into a shared teaching library ("patient X has a paralyzed vocal cord — this is what that looks like"). Future: AI pre-read flags findings for the reviewing clinician (assistive, never diagnostic). Third-iteration vision: the same case viewed through three lenses (SLP / laryngologist / voice coach) to break the silos. Lab demo: synthetic concept at /demos/scope-library — 4 invented cases, stylized SVG scope views, AI pre-read mock, 3-lens education panel, and the consent→de-identify→pooled pipeline spelled out. Compliance (for Barry): de-identification standard, research-consent flow, whether pooled use needs IRB-style review, deletion honored into the pool.

F14 — Nina's AI avatar (voice first, then video)

Decision: capture + consent + QA live in our lab (private, gated, on-device); clone training happens at the vendor; the result wires back into F6. Stage 1 — voice: professional-grade clone from studio takes → replaces the stock "coral" voice in the pre-rendered nurse clips (one script re-run) → joins the realtime call via a cascaded pipeline (STT → LLM → cloned TTS), since speech-to-speech models don't take custom voices. Stage 2 — video: talking-head avatar for lesson intros/marketing first; interactive video-call avatar later. Hard requirements: real signed release before any training (training, commercial synthesis, revocation, deletion) · vendor identity-verification flow · AI disclosure on every surface the avatar speaks (already in the triage script) · takes live in the shared Drive, never in the repo. Lab tool: /demos/avatar-studio — consent-gated booth: 5 guided script cards (conversational intro, the actual nurse lines in character, expressive range, alphanumeric clarity, free talk), voice + video modes with capture tips and framing guide, per-take download, progress vs. 30-min pro-clone / 3-min video targets. Vendor picks (researched, docs/research/avatar-cloning.md): voice = ElevenLabs Creator $22/mo (instant clone same-day → professional clone from 30min+ takes; voice-CAPTCHA identity verification; cloned voice works in TTS API and their $0.08/min realtime Agents cascade — OpenAI still has no custom voices, so realtime-in-her-voice is always a cascade). Video = HeyGen Digital Twin $29/mo (pre-rendered; 2–5 min footage + consent video) → Tavus CVI $59/mo (interactive, sub-600 ms Phoenix-4, ~2 min footage opening with their exact consent sentence). Open: ElevenLabs account creation, release document drafted for her signature (separate consideration!), whether the cloned voice ships in v1 or after Nina hears it side-by-side with "coral."

F13 — Lesson corpus pipeline (parallel track)

Spec (Ian's commitment in the meeting): "AI code that can scan your videos… pull metadata… a per-video voice analyzer — messy and experimental at first." Pipeline: acoustic fingerprint → BAA'd transcription + diarization → per-lesson metadata (presenting issue / exercise / cue / outcome) → embeddings grounding the triage nurse → Nina labels clips → the listening coach. Training data verdict from the meeting: both lo-fi virtual recordings (they match real users' phone mics) and hi-fi, plus her written notes. Lab demo: /demos/lesson-scanner — real, fully on-device: drop a recording → duration, voiced %, median pitch + range, CPPS trend, alpha ratio + the metadata card. Nothing uploaded. Open: where the corpus lives (consent-gated storage), per-student consent capture, labeling UI.


F15 — The listening coach (the real model, parallel track)

Goal: a model that hears the subtle qualities Nina hears (breathiness, strain, roughness, onset, register breaks, resonance placement) and maps them to her recovery steps. Full plan: LISTENING-COACH-PLAN.md; research: research/listening-coach.md. Core decisions: predict Nina's rating, not an average clinician (rater-conditioned model — removes inter-rater noise; PVQD's 19 raters + Nina train jointly) · WavLM trunk + classic acoustics + per-dimension heads + DSP sidecars for onset/register · transcript mining is a clip-retrieval engine, never a label source · two-stage "diagnosis": perceptual profile → an auditable quality→exercise rules layer Nina can read and edit. Honest scoreboard: breathiness/severity/onset/register-breaks ✅ · roughness/strain/fatigue 🟡 (human agreement is the ceiling; strain ships as 3-level ordinal) · resonance placement 🔴 R&D (zero public labels — her data defines it). Pass bar: on 120+ held-out clips, model-vs-Nina agreement ≥ 0.9× Nina-vs-herself, and ≥ what a second expert achieves — "agrees with Nina as well as another expert does" is the shippable claim. Resources: PVQD (free, per-dimension expert ratings) to bootstrap · her Drive folder + a custom VAS rater page (300-clip seed, ~100 clips/week active learning) · < $500 total GPU.

Cross-cutting requirements

  • Mobile-first always — every screen designed at phone width first (Nina's users live on phones); desktop is the enhancement.
  • PHI boundary per RESEARCH.md §2: consumer tier stays out of HIPAA scope; the moment a clinician manages a patient, that data lives in the isolated Tier 2 stack. One-way, logged import gate between tiers.
  • Audit-loggable schema from the first table (actor, subject, action, timestamp) — the thing you can't retrofit.
  • No health data in logs, analytics, or error trackers. No ad pixels anywhere near health screens.
  • Wellness language everywhere — "recovery support," "guidance," never "diagnosis"/"treatment"/"therapy" in the consumer tier.