Phase 1 · Foundation
Good morning
Loading…
Sleep
tap to log
Recovery
composite
0/21
Strain
today
Joint Pain
tap to log · 1=none · 5=severe
Elbow
L
R
Shoulder
L
R
Knee
L
R
Back
Today's workout
Loading…
The Hydrocut
check ↗
Resting HR
Weight
🍽
Calories
📊
Strava Form
Phase 1 — Foundation Week 1 of 12
Log
📅
Logging for
Joint Pain (1=none · 5=severe)
Elbow
L
1
R
1
Shoulder
L
1
R
1
Knee
L
1
R
1
Back
1

Medications Taken Today

Vitals

Nutrition

Recovery

Hydration & Alcohol
≈ 8 glasses = 2L
0
1 drink = 12oz beer / 5oz wine / 1.5oz spirits

Food Log

Activities
Add Activity

Weekly Benchmark (test once a week)
Body Composition (cm)
Evo Ops Engine
Today's Optimized Workout
⚙️
Log 3+ days to activate the optimizer
Today's Nutrition Targets
🍽️
Log check-ins to calibrate
Correlations (n=0)
Key Relationships
Log 5+ days to see correlations
Pattern Insights
Insights appear after 7 days of data
Variable Sensitivity
What Drives Your Best Days
Needs 7+ days of data
● Local · No internet required
Phase 1 · Weeks 1–4
Foundation
Build aerobic base, restore joint integrity, establish movement patterns. Volume over intensity.
This Week
Phase Notes
History
📋
No entries yet
Settings
Medications
Define meds you take regularly. Each one becomes a tappable chip in Check-In so you can log compliance daily. Used for correlations with pain, sleep, and HR.
Stored only on this device. Included in JSON backups.
Profile
👤
My Profile
Solo · Stable Core build
Backup & Import
Export all entries as JSON for backup. Restore accepts both full backups and partial imports from the Garmin / Strava export scripts (field-level merge — won't overwrite manual entries).
Last backup: Never
Install as App
iPhone
Safari → Share → "Add to Home Screen"
Android
Chrome → menu (⋮) → "Add to Home Screen"
Works offline · Data stays on device
Data Summary
Total entries0
Days tracked0
First entry
Storage used
Build Notes — v2.10b4
v2.10b4 — Nav cleanup:
History moved into Settings as a tappable link card at the top — bottom nav drops from 6 to 5 tabs (Today · Log · Program · Insights · Settings). History page now has a "← Back to Settings" link at the top. Sub-text on the link card shows entry count for quick orientation.
Text Size feature removed — control did nothing visible in practice. CSS `--scale` variable, `body.size-X` classes, `setTextSize()` and `applyTextSize()` functions all stripped clean.

v2.10b3 — Program start date fix: Program start corrected from Apr 21 (Tue) → Apr 20 (Mon). Existing week-1 completion records auto-shifted +1 day-slot via one-shot migration. Mon Apr 27 now correctly appears as start of week 2.

v2.10b2 — Today layout fix: Joint pain pills overflowed on phone width. Restructured into stacked L/R rows per joint — full screen width, larger tap targets.

v2.10b1 — Hotfix: Fixed crash when IndexedDB-cached data pre-dated the v2.9 schema (Cannot read properties of undefined). Hydration path now re-applies critical defaults after Object.assign. Added defensive guards across all D.workoutLogs and D.completedWorkouts read/write paths.

v2.10b — Today screen redesign + 6-tab nav:

Ship 2 of 2 in the v2.10 redesign. Major structural changes to the Today screen and overall navigation.

1. Hero narrative. Top of Today now shows a generated summary paragraph that reads your latest data. "You slept 7.9h. Recovery is moderate — stress was elevated. Today: Strength A." Updates whenever new data is logged.

2. Three dials. Sleep / Recovery / Strain shown as ring dials at the top of Today.
Sleep — hours from Garmin sleepHours, falls back to sleep quality 1-5 mapped to hours (4 / 5.5 / 7 / 8 / 8.5)
Recovery — composite 0-100% of sleep (40%) + inverse stress (25%) + inverse pain (35%). Auto-redistributes weight if components are missing.
Strain — TSS-style training load from today's logged workouts. Uses (duration × intensity²) where intensity = avgHR / LTHR (LTHR=144). Mapped to 0-21 scale. Falls back to active minutes if HR data missing.

3. Hybrid freshness. Each dial shows "today" / "yesterday" / "Nd ago" / "Nd ago — stale" so you know how fresh the data is. Slots stay fixed; freshness is a small text indicator.

4. Inline joint pain. The bilateral pain grid now uses pill buttons (1-5) instead of just display tiles. Tap a pill to log/toggle pain for today directly from Today screen — no need to open the full Log form for quick updates.

5. 6-tab nav. Today · Log · Program · Insights · History · Settings.
Log = Check-In renamed (sub-tabs deferred to v2.10.5)
Insights = Optimize + Trends merged. Sub-tab bar at top toggles "Patterns" (Optimize) ↔ "Charts" (Trends).
Settings = Sync renamed.

6. Quick tiles. Bottom of Today shows 4 condensed tiles (HR, Weight, Calories, Strava Form) with deltas. Each tap navigates to the relevant page for full context.

v2.10a: Palette B refresh — mineral teal accent, Schibsted Grotesk + Inter + Geist Mono typography, WCAG-AA contrast.

v2.9.3: Bilateral pain (L/R for elbow/shoulder/knee), back pain, medication tracking, food score clarity.

v2.9.2: Timezone bug fixed. IndexedDB durable storage. Skip indicator. Empty chart placeholder. Test harness adopted.

v2.9.1: Cross-week logging. Compliance strip cells jump to that week.

v2.9: Program tab is the workout logger. Per-exercise state, per-set logging, compliance strip.

v2.8c: Yearly-average bars above Trends charts.

v2.8b: Schema aligned with actual Vivoactive 3 export.

v2.7: Program tab mirrors Trail & Iron Google Calendar exactly.

v2.6: Smart carry-over on Check-In numeric fields.

v2.5: Food log with 250+ food lexicon.

v2.4: Hydration & alcohol. Body composition.

v2.3: Multi-activity per day. Felt 1–5 scale.

Stable Core: Zero external API calls. All data stays on this device.