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 once a day on their own, whenever Susan opens the dashboard, or on demand via the Refresh button any visitor can click. Visitors see whatever was 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. A scheduled job also refreshes the snapshot from WHOOP once a day on its own, so the page stays current even on days nobody opens it.

WHOOP wristband measures heart rate movement & temperature sleep Netlify syncs one-time WHOOP sign-in pulls fresh data daily browser never holds a token One snapshot publishes a single stored reading never the live account labeled with its age You, right now reads no sign-up, no login no WHOOP account touched refresh button, no waiting
How your data gets to this page.

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.
Pro Athlete Snapshot
Susan's average resting heart rate and weekly training sessions, set against a pro athlete's published WHOOP season data. The athlete shown rotates daily among four (Tadej Pogačar, Mathieu van der Poel, Jasper Philipsen, Cristiano Ronaldo), picked deterministically by the date, so the same day always shows the same athlete. It's a fixed season snapshot, not a live feed — no public pro athlete publishes daily recovery or strain data, so these numbers are updated by hand when WHOOP publishes new season data. Only figures both sides actually have are compared directly; the rest is shown as sourced context.
Recovery × Strain
Each day's recovery shown as a colored bar (green, gold, 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, weightlifting (also covers resistance training and CrossFit), 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. Gold 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.

Green Recovered, healthy Gold Moderate, worth watching Red Low, off-track Blue Effort — no good or bad
What each color means, at a glance.

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, with a plain Refresh button next to it. 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, one at a time, in order. The dashboard you're reading is live; six further phases are planned next — five ideas for a more agentic dashboard, followed by an editing pass informed by outside design review. See the full roadmap for what's shipped and what's next, and the guide for how the whole thing is built and kept running.

06 what it won't do

The Fitness Log · Built with Claude · Data from WHOOP