the fitness log

About · how to read this dashboard

Susan Nesbitt's recovery, sleep, strain, and workouts, read off her WHOOP wristband and republished here every day. Anyone with the link can read it; only Susan can update it.

This page is the reference: how to read what's on the dashboard today. For the method behind it, plus the prompt to build one for your own wearable, read the Guide instead.

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

The whole dashboard is one static index.html with no build step. Netlify Functions handle the one-time WHOOP sign-in and stand between the browser and the API, so the browser never holds a token. The single published snapshot every visitor reads lives in Netlify Blobs.

Source lives on GitHub and deploys itself on every push. The page's logic sits in small modules covered by 186 automated tests, run against the same code a visitor sees. After each deploy a smoke test is run by hand to check that the live data path is healthy and current. A scheduled job refreshes the snapshot from WHOOP once a day, so the page stays current on days nobody opens it. A separate daily job backs up the published snapshot to the GitHub repo, so a bad write is recoverable rather than permanent.

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. Four athletes are in the pool: Tadej Pogačar, Mathieu van der Poel, Jasper Philipsen, Cristiano Ronaldo. The date picks which one, so the same calendar day always shows the same athlete. These are fixed season figures updated by hand, since no public pro athlete publishes daily recovery or strain. Only figures both sides actually have get compared; the rest is shown as sourced context.
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. Past 1.3 the dashboard starts warning about injury risk, and above 1.5 it says so plainly.
Sport Mix
Training time broken out into eleven activity buckets: running, cycling, swimming, weightlifting (which also absorbs resistance training and CrossFit), HIIT, yoga, pilates, massage, mobility, walking and hiking, and a catch-all. Useful for noticing when one kind 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
Ten rules look for things worth saying in plain language, and only the ones with enough data behind them appear. 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 sits in the middle: moderate, or worth watching. Anything red is low or off-track. Blue carries no good-or-bad signal at all; it marks effort, strain, and anything you can click. Each sport then gets its own color so the breakdowns stay readable.

Green Recovered, healthy Orange 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 signed in and pulling new data. The rest of the time it reads Snapshot · last updated and then how long ago that was, with a plain Refresh button next to it. Before a first snapshot has ever been published it reads Snapshot view · awaiting first refresh instead. On a typical day the snapshot is updated within a few hours of waking.

05 roadmap

Everything described above is live. Four phases are still planned: three that would make the dashboard more agentic, then an editing pass driven by an outside design review. The full roadmap has the order and the reasoning, and the guide covers how the whole thing is built and kept running.

06 what it won't do

© 2026