Recent · 30 days · Lean left axis · FFMI right axis
Measurements (cm) (weekly)
Recent · 30 days
Sleep Hours (Garmin)
Yearly Average · hrs
Recent · 30 days
Daily Steps (Garmin)
Yearly Average · steps/day
Recent · 30 days
Stress (avg) (Garmin)
Yearly Average · /100
Recent · 30 days
VO2 Max (Garmin)
Yearly Average · ml/kg/min
Recent · 30 days
Strava Fitness · Fatigue · Form
Recent · 30 days
History
📋
No entries yet
Tap any cell to edit · Scroll right for more columns
Settings
History
All entries · tap to browse
›
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
Used to auto-compute body fat from your weekly waist + neck measurements (US Navy method, ±3% vs DEXA — trend matters more than absolute).
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
Import History
Last 10 imports — tap to roll back
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.10c
v2.10c — Body composition + chart standardization + sleep hours: Set your height + sex in Settings → Profile, then add a weekly Neck measurement in Log alongside Waist. Body fat % is auto-computed via the US Navy method (±3% vs DEXA — trend matters more than absolute). Lean mass and adjusted FFMI computed alongside. Three new chart cards in Insights → Charts: Body Fat (computed + manual override, 7-day smoothed), Lean Mass & FFMI (dual-axis, smoothed), and Measurements now includes Neck. All Insights → Charts now use a unified 30-day calendar window with date-aligned x-axes — fixes the Sleep Hours bug where sparse Garmin data stretched across years. Y-axis ranges fixed where physiologically sensible (HR 40-80, BF 10-30%, sleep 0-10h, stress 0-100, etc.) so charts are visually comparable. Sleep input is now an hours slider (0-12, 0.5 step) instead of a 1-5 quality rating heuristic. Quality 1-5 stays as an optional separate field. Garmin sleep data overrides manual entry with an Override link. Existing entries are migrated: rating-only entries get sleepHours backfilled from the heuristic so dial data isn't lost. Bundled cleanups: tappable ⓘ legend on food-score pills, weekly benchmark inputs hidden Mon-Sat by default with manual show toggle.
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.