Sprint 3 locked the tab architecture (4 tabs + raised +Log FAB). Sprint 4 locked the UX per tab across 5 sub-consiliums (Today · +Log · Coach · Progress · Plan). All mockups below render in the locked A Cool Relief design system. Six cohorts (🔥 Brian · 🤰 Patricia · 🍷 Frank · 👴 Sam · 🌿 Anna · 🎤 Larry) are routed through identical chrome with cohort-specific hero content. Sibling docs: design.html (tokens) · index.html (overview).
| # | Tab | SF Symbol | Role | Launch? | Primary cohorts served |
|---|---|---|---|---|---|
| 0 | 🏠Today | house.fill |
Cohort-routed hero + daily ritual. 6 hero variants (RSI gauge · days-since · Tums ring · meal photo · med countdown · taper bar). Real-time updates from FAB commits. | ✅ LAUNCH | All 6 (per-cohort hero) |
| 1 | 💬Coach | bubble.left.and.bubble.right.fill |
DeepSeek V3 + on-device RAG. 4-section CoachHome (Daily Q · Try Asking · Cheat Sheets · Threads). 3-tier disclaimer pattern, 10 refusal categories. | — | All 6 (cohort-voiced personas) |
| — | ➕+Log | plus (gold raised circle) |
Capture sheet, cohort-filtered chips (Meal/Symptom/Med/Lab universal + Tums/RSI/Throat-clearing/PPI/Drink/Supplement cohort overrides). Long-press = 1-tap radial. | — | All 6 (chip override per cohort) |
| 2 | 📈Progress | chart.line.uptrend.xyaxis |
Segmented Chart ↔ Timeline toggle + PDF export. Per-cohort hero chart (Larry's RSI 12-wk · Brian's heartburn-days · etc.). 4 cohort-routed PDF formats (GI · ENT · OB · Functional-med). | — | All 6 (per-cohort default view) |
| 3 | 📋Plan | list.bullet.clipboard.fill |
Active protocol + 4 paid add-on gates: LPR Pro $39.99/yr · Voquezna Companion $29.99/yr · PPI Taper Pro $29.99/yr · Diet Lab $29.99/yr. Single monetization surface. | — | All 6 (cohort-priority card order) |
Larry's hero is the most distinctive: a 280×180pt semicircular gauge with a 144pt center score (here 18), gradient mint→deep-mint arc fill, gold (--cta) needle, threshold tick at Belafsky 13, and a non-dismissible inline ribbon framing RSI as screening, not diagnosis (per COMPLIANCE.md).
Data bindings: LPRData.rsiScore · LPRData.rsiBreakdown · FoodEntry.acidWatcherCompliant · SymptomEntry.throatClearing.
Same chrome, same 280pt frame, same disclaimer footer. Only the 200pt glyph zone swaps — snapshot-test economy.
| Cohort | BIG glyph (size · color) | Data binding | Top-right pill |
|---|---|---|---|
| 🔥 Brian | "12" · 152pt SF Pro Rounded Black · brand-deep | store.symptoms.filter { heartburn ≥ 3 }.last | "GI report" → DoctorPDFExporter |
| 🤰 Patricia | 240pt Tums ring · "1,200" 72pt center · ring darkens past 75% | PregnancyData.tumsTracker.dailyDoseMg / 7500 | Trimester picker "28w" |
| 🍷 Frank | Last meal photo 320×320pt full-bleed + verdict pill 20pt | FoodEntry.last { $0.photo != nil } | Camera shortcut → AVCapture |
| 👴 Sam | "09:00" · 96pt + med name 34pt brand-mid | MedSchedule.nextDose | Voice input mic → SFSpeechRecognizer |
| 🌿 Anna | "Week 4" · 96pt + "of 12" 34pt + 12-seg taper bar | TaperPlan.weekNumber / 12 | Supplement leaf — 4 pre-set quick-log |
| 🎤 Larry ⭐ | RSI semicircular gauge 280×180pt · score 144pt · gauge mint→deep gradient · gold needle | LPRData.rsiScore | RSI waveform — opens 9-question Belafsky sheet |
Universal core (Meal · Symptom · Med · Lab) becomes Throat-clearing · RSI · Meal · Symptom for Larry. Top 2 chips render full-row 64pt with gold border (the "primary" pair). Sticky bottom Quick-log capsule commits the top chip without sub-sheet — true 2-tap.
Universal core: Meal · Symptom · Med · Lab. Cohort overrides promote 1-2 chips to positions 1-2 (full-row gold-bordered primary slot).
| Cohort | Chip order (positions 1-4) | 1-tap target (long-press radial) | Toast copy |
|---|---|---|---|
| 🔥 Brian | Meal · PPI dose · Symptom · Lab | PPI dose .rigid 0.8 | "Taken — 9:04 AM." |
| 🤰 Patricia | Tums · Meal · Symptom · Sleep | Tums +500mg .soft 0.6 | "Added — 1,200 / 7,500 mg today." |
| 🍷 Frank | Meal · Drink · Symptom · Med | Drink (3 quick-tiles) | "Captured. Espresso flagged Watch (pH 5.0)." |
| 👴 Sam | Med · Symptom · BP · Meal | Voice input (no radial — a11y) | "Taken — 9:04 AM." (no praise — hygiene) |
| 🌿 Anna | Meal · Symptom · Supplement · PPI dose | Supplement leaf 4-slot rail | "Added. DGL + zinc done for today." |
| 🎤 Larry ⭐ | Throat-clearing · RSI · Meal · Symptom | Throat-clear +1 .soft 0.5 | "Noted — 7 today. Map updating." |
Founder constraint: "большим сканом" → full-screen takeover (not FAB sheet, not embedded card). Hepatica DNA reuse ~80%: fork MealScanView.swift, swap LiverDataStore → RefluxoraStore, swap liver-friendliness → reflux-trigger rating, swap hepBrand → RefluxoraColors.brand.
Per-cohort post-capture landing (only Frank's meal becomes hero; rest land as secondary content because their JTBD isn't "show me what I ate"):
| Cohort | Landing | Why this cohort cares |
|---|---|---|
| 🍷 Frank | Hero replace — 320×320 photo becomes Today hero | Identity = photo journal · meal IS his Today |
| 🔥 Brian | Secondary card 200pt under hero · "Watch · 2h before bed" | Tracks flares; meal = flare-prediction input (4h watch window arms) |
| 🎤 Larry ⭐ | Sticky AW banner · "Acid Watcher compliance 6/7 today · this one not on protocol" | KPI = AW % adherence · every meal nudges the ring |
| 🤰 Patricia | Snippet row · "Captured · safe · 2h before bed ✓ left-side" | Worries about bedtime + Tums interaction, not the meal itself |
| 👴 Sam | Snippet row + interaction flag if drug+food collide | Risk surface = drugs · meal only matters for interactions |
| 🌿 Anna | Secondary card · DGL timing reminder · "supports week 4 protocol" | Food = part of taper protocol, not separate domain |
When user taps "Discuss with Coach" on verdict card, CoachContextPayload (photo + verdict + cohort + 72h symptom digest + active meds) seeds a new Coach thread with the cohort-templated prompt below. Coach replies in 60-110 words, 3 bullets + closing line, with ≥1 ACG/Aviv/ACOG citation chip.
| Cohort | Auto-prompt template (≤30 words) |
|---|---|
| 🔥 Brian | "I just ate {items}, trigger rating {n}/10, {hoursBeforeBed}h before bed. What should I watch for tonight, and would Voquezna timing help?" |
| 🤰 Patricia | "I'm {weeks} weeks pregnant. Just ate {items}. Is this combo OK for tonight's heartburn, and how many Tums can I safely keep in reserve?" |
| 🍷 Frank | "Just had {items} with {drink}. Trigger {n}/10. Give me 3 swaps that keep the flavor profile but drop the pH below 5." |
| 👴 Sam | "Just ate {items}. I'm on {medList}. Any interaction concerns, and should I shift my evening omeprazole?" |
| 🌿 Anna | "Captured {items} — does this support week {n} of my taper, or push me toward rebound? Should I add DGL before bed?" |
| 🎤 Larry ⭐ | "Just ate {items}, pH {bucket}. This is {AWCompliant ? 'on' : 'off'} Acid Watcher. What's the impact on tonight's throat-clearing, and should I steam?" |
dayOfYear % 30 from 30-question cohort pool (180 total)SymptomEntry @Query + RuleMark for Voquezna-start date ·
Patricia's banned causal "−65% with wedge" → "co-occurred with wedge 65% of nights" ·
Frank's color-without-sample-size heatmap → 2-encoding (opacity=N, color=correlation) + N≥5 gate ·
Sam's auto-scaled stable-data drama → fixed y-axis 0-10 ·
Anna's generic decline → actual TaperPlan.dosePerWeek mg with rebound LineMark + baseline RuleMark ·
Larry's mock RSI 22→14 always crossing Belafsky threshold → realistic noisy decline that doesn't always cross + dashed RuleMark always rendered + watch-bg AreaMark for >13 zone + fixed y-axis 0-45.
The single most important chart in the app — Larry's RSI 12-week LineMark with Belafsky RuleMark at y=13, AreaMark zones (watch-bg above 13, alert-bg above 30), gold PointMark Sundays, and Voquezna-start vertical dashed rule. This is what the ENT spends 30 seconds with on page 1 of the PDF — the entire $39.99/yr LPR Pro monetization defense.
.soft 0.5 haptic · "Pin as default" pill on non-default viewCohort-priority order: LPR Pro hero (locked, gold border, live preview) → free baseline (Diet · Meds · Sleep) → Voquezna Companion secondary → "More plans (2)" collapsed group for irrelevant add-ons. Single Tab, no scrolling exhaustion.
| Add-on | Price | Cohort | Trigger event (only thing that fires paywall sheet) |
|---|---|---|---|
| LPR Pro ⭐ (Acid Watcher 1,800 foods · 12-wk RSI PDF · vocal hygiene) | +$39.99/yr | 🎤 Larry | (a) 2nd RSI logged + improvement ≥3pt · OR (b) 4 weeks active + Acid Watcher ≥40% · OR (c) user taps "Save to ENT report" |
| Voquezna Companion (efficacy tracker · insurance appeal · drug-DB interactions) | +$29.99/yr | 🔥 Brian + 🎤 Larry | (a) PPI logged 14+ consecutive days + breakthrough symptom ≥4 in 7d · OR (b) user mentions "Voquezna"/"vonoprazan" to Coach · OR (c) Coach refusal pivot #2 fires |
| PPI Taper Pro (12-week wizard · DGL/zinc/mastic protocols · rebound watch) | +$29.99/yr | 🌿 Anna | (a) Taper plan started + week 3 reached (~25%) · OR (b) rebound symptom ≥4 during taper · OR (c) DGL/zinc/mastic logged 3+ times |
| Diet Lab (Mediterranean vs Acid Watcher A/B · restaurant kit 50+ chains · coffee chemistry) | +$29.99/yr | 🍷 Frank + 🌿 Anna | (a) 30 days active + trigger map ≥3 foods at ≥70% correlation · OR (b) photo-timeline opened 5+ times · OR (c) same trigger food logged 3+ times after flare |
Trial scope: 7-day trial covers SINGLE add-on triggered into (not all add-ons — prevents trial-shopping). Multi-add-on owners get Refluxora Pro · N add-ons active consolidation ribbon. Phase 3 (Month 7+): Loveiko Health Suite $199/yr cross-app bundle surfaces as Plan footer hint at 2-add-on threshold.