the fitness log

About · how to read this dashboard

A live view of Susan Nesbitt's recovery, sleep, and training, drawn from her WHOOP wristband. Anyone with the link can read it. Only Susan can update it.

01 what it is

WHOOP is a small wristband with no screen. It measures heart rate, body movement, body temperature, and sleep around the clock. This dashboard pulls Susan's last 180 days of those measurements and lays them out on a single page.

The numbers refresh whenever Susan opens the dashboard. Visitors see whatever she last published — a single stored snapshot, never the live WHOOP account.

02 the stack

One static index.html with no build step. Netlify Functions handle the one-time WHOOP sign-in and proxy the API so the browser never holds a token. Netlify Blobs stores the published snapshot that every visitor reads.

Source lives on GitHub and deploys itself on every push. The page's logic sits in small, tested modules, so an automated suite runs against the same code a visitor sees. After each deploy a smoke test checks that the live data path is healthy and current.

03 what's on the page

Today's Call
One line on what kind of day to plan. Push hard, hold steady, or take it easy. Based on this morning's recovery score and the past week of training.
The Hero Row
Three headline numbers. Recovery is a 0 to 100 score for how rested Susan is. Day strain is a 0 to 21 score for how hard the day was. Sleep is hours in bed last night. On the "today" view these are today's exact numbers. On wider views they are averages.
Numbers
Heart-rate variability, resting heart rate, percent of sleep need met, and number of workouts. Higher variability and lower resting heart rate both signal good recovery. Each number compares to the prior equivalent window with a plain "better" or "worse" label.
Personal Records
Eight all-time peaks across the full data set. Best recovery, lowest resting heart rate, longest sleep, hardest training day, and so on. These stay constant when you switch time ranges.
Recovery × Strain
Each day's recovery shown as a colored bar (green, orange, or red) with that day's strain plotted as a line on top. The pattern of effort and rest becomes visible at a glance.
Training Load
A ratio of the last 7 days of work to the prior 28-day average. Between 0.8 and 1.3 is the productive range. Above 1.5 is a hard push with rising injury risk.
Sport Mix
Training time broken out by activity. Running, biking, swimming, strength work, yoga, pilates, walking. Useful for noticing when one type of training has crowded out the rest.
Sleep Stages + HRV
Two views side by side. How each night was split between deep, REM, light, and awake. And how heart-rate variability has trended across the range with a rolling average.
Patterns
A handful of plain-language observations the dashboard pulls from the data. Things like "your best recoveries follow nights of 7 to 8 hours" or "strength days reduce next-day recovery by an average of 5 points." Recalculates when the time range changes.

04 reading the colors

The palette is small on purpose. Green means recovered or healthy. Orange means moderate, or worth watching. Red means low or off-track. Blue is for effort, strain, and interactive elements — it carries no good-or-bad signal. Each sport gets its own distinct color so the breakdowns are easy to read.

The bar at the top of the page reads Live, syncing from WHOOP when Susan is actively pulling new data, or Snapshot from X ago the rest of the time. On a typical day the snapshot is updated within a few hours of waking.

05 roadmap

The Fitness Log is built in small, deliberate phases. The dashboard you're reading is live; a short, ordered set of improvements is planned and intentionally not started early. See the full roadmap for what's shipped and what's next.

06 what it won't do

The Fitness Log · Built with Claude Code · Data from WHOOP
← Back to the dashboard