the fitness log

Roadmap · built in deliberate phases

Phases 1 through 7 are live. So are two that jumped the queue: phase 12, after a security review asked about it, and phase 13, which was ready before the phases in front of it. Four are still ahead. Three would make the dashboard more agentic, and the last is an editing pass driven by an outside design review. A phase starts only once the one before it is solid.

1

The dashboard

Live

The whole picture, at a glance, no app to open

Pulls six months of recovery, sleep, strain, and workouts from WHOOP onto one page: hero scores, recovery and strain charted together, HRV and sleep trends, all-time records, sport mix, and computed patterns. A full refresh now costs about 30 data requests instead of roughly 200. Between any change and the live site sit 186 automated tests and a practice copy that runs on sample data first.

2

Always current

Live

Stays current without a manual refresh

A scheduled job pulls the latest WHOOP data once a day on its own. The credential that keeps the connection alive lives in encrypted storage and renews itself, in step with normal sign-ins.

3

A smarter read

Live

Reads the week, not just this morning

Today's Call now weighs a 3-day recovery trend, a 6-day no-rest-day guard, and sleep debt building across nights, still a deterministic rule set (no ANTHROPIC_API_KEY yet, so no generated summary). The rules live in their own tested module, the safety net for an AI-written version later.

4

Polish

Live

Smaller rough edges, once the bigger pieces are solid

Loading placeholders, tabular numerals so figures line up site-wide, self-hosted fonts that skip a round trip to Google, and a line-by-line copy check of onboarding and connection-bar wording.

·

Pro athlete snapshot

Live

A sense of scale against a real professional

A season-level comparison against real, published WHOOP data for a pro athlete, shipped out of sequence once WHOOP published sourced season data for the first time. Resting HR and weekly session count compare directly; training hours and recovery-session counts are shown as sourced facts, never forced into a comparison this dashboard can't back up.

·

Design review cadence

Live

Catch design drift before it's substantial

A recurring outside critique, not a one-time audit: an independent designer checks the live site against its own locked rules and whether prior recommendations landed. Automated on a quarterly schedule (January, April, July, October).

5

iOS app

Live

One tap from the Home Screen

A web app manifest and icon set make the dashboard installable with no browser chrome, on iOS and Android alike. A service worker caches the last snapshot for offline reading; sign-in and owner-only routes always hit the network.

12

The public refresh, checked

Live

Already safe against a shared link

A security review flagged the open Refresh button as a possible gap. It isn't: throttled to once every 5 minutes off the snapshot's own timestamp, so repeated clicks can't burn through WHOOP's rate limit or spam the shared snapshot. Worst case, an early refresh; no data is ever lost.

6

Why it failed

Live

A failed check that says what's wrong

The post-deploy smoke test used to report healthy or stale, nothing more. It now sorts a failed headless refresh into a dead token, a WHOOP outage, a rate limit, or a store-availability problem, and surfaces the classified reason instead of a generic "stale."

7

Today's Call, written daily

Live

Reasons about the week, not a fixed table

A daily job has a model read the week in context and write the call itself, falling back to the tested deterministic version if the call fails or ANTHROPIC_API_KEY isn't set. The key itself still isn't provisioned in production, so the dashboard is running that fallback today.

8

Ask your data

Future

An answer, not a chart

A small function that answers a plain question against the last 180 days, using data already in the snapshot. Owner-only at first, to keep the cost of an open-ended question bounded.

9

Nudges

Future

Hear about it when it matters

Everything today is pull: open the dashboard to learn anything. A scheduled job could watch the same signals Today's Call already flags and reach out only when one trips, once a delivery channel (likely email) exists.

10

Athlete data, kept current

Future

One less thing to remember

The pro athlete snapshot is hand-maintained today. A standing job could watch for newly published season data and draft the update itself, once parsing WHOOP's press page proves reliable enough to trust unwatched.

11

An editing pass

Future

Take things away

An outside design review found the visual system solid and recommended subtraction: let Today's Call dominate, cut secondary-label noise, darken supporting copy, differentiate section rhythm, simplify chart legends, and trim implementation-heavy prose. Vertical density is already tightened 12–15% site-wide; the rest is still to do.

13

Noticed

Live

Patterns the fixed rules would miss

A model reads the last 60 days and writes up to three patterns, each tied to specific dates and numbers from the data. They show on the dashboard under Noticed. The prompt hands the model the list of things the fixed Patterns rules already check, so it looks elsewhere instead of restating one of them in different words. Nothing substitutes for it when it comes up empty, since a fixed-rule answer is what this phase exists to get past. The section just stays hidden. A failed call or a missing key hides it the same way. 14 tests cover the prompt and the parsing, and ANTHROPIC_API_KEY still isn't provisioned in production, so nothing shows there today.

Phases are sequential. Nothing gets added to an earlier phase just because it would be easy to slot in. Phases 08 to 10 are ordered by how easy they are to build, not by how much they matter, so which one actually goes next is a separate conversation, held when one of them is ready to move from planned to active. Four items sit outside that order on purpose. The pro athlete snapshot was gated on real data existing at all, and shipped the week it did. The design review cadence has no end state; it is a standing practice on its own quarterly clock. Phase 12 was pulled forward because a security review asked a question that deserved a documented answer. Phase 13 went in when it did because the pattern-finding work was finished and there was no reason to hold it.

© 2026