the method · the open artifact
The Mirror
Every number on this site is me. This page is the one place it gets to be you: drop the CSV export Whoop already lets you download, and your months are scored by the same deterministic instruments that score me every night — then laid over my published distributions. Your file never leaves this page. There is no server on this site that could receive it.
Drop the export
In the Whoop app: More → App Settings → Data Export. Whoop emails you a zip — unzip it and drop physiological_cycles.csv here (add sleeps.csv too if you like). CSV only, straight from Whoop; no account, no email, no upload.
Nothing is uploaded. Parsing and scoring run entirely in this page. The only network request this tool makes is a GET of my published distribution file — data flows from me to you, never back. What you drop persists only in this browser’s localStorage until you press clear my data.
The readout
You, on my distributions
No export handy? Type a number
The lighter rung of the same ladder: type today’s number off your watch face and see where it lands in my last year — one value per day, exact midrank percentile, computed here. (This replaces the old three-field mirror widget, which compared against a 7-day window; this one uses the full published year.)
What the numbers mean
Readiness is the platform’s composite: recovery ×0.40, sleep ×0.25, HRV trend ×0.20, training-load balance ×0.10 — renormalised over what your export actually contains. A Whoop export carries no external training-load series, so that component is absent here, not zero, and the page says so (ADR-104: absence is reported, never faked).
The HRV trend maps your 7-day/30-day RMSSD ratio through percentile anchors. Past 30 days of history the anchors come from your own ratio distribution — the same personal-variance machinery (and the same 30-observation floor-guard) my thresholds run under (ADR-105). Below the floor it uses the population fallback and is labelled as such.
The overlay places your 30-day median inside my last year, one value per day, as an exact midrank percentile — computed in this page from the full published sample, not interpolated from summary statistics. HRV here is Whoop’s RMSSD in milliseconds against the same measure from my device; an Apple Health export reports SDNN, a different quantity, which is why this v1 is Whoop-only rather than quietly comparing incomparables.
The same instruments, provably
The scoring on this page is not “like” the platform’s — it is a port of the deployed Python, pinned by a shared test-vector suite generated from those modules (tests/vectors/mirror_vectors.json), which both sides must reproduce exactly, to the last banker’s-rounded digit. The privacy promise is enforced the same way: a repo test pins this page’s code to exactly one network request — the static distributions file — and to zero upload mechanisms. The repo is public; check the page rather than trust it.
Generated by scripts/v4_build_mirror.py. Scoring: /assets/js/mirror-core.e5ed8b8b.js, pinned to the deployed engine by tests/test_mirror_parity.py. client-side · nothing uploaded