averagejoematt method

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.

One person’s model, applied to another. These instruments are calibrated on me — my thresholds, my variance, my device. Where your own export runs deep enough (30+ days), the thresholds re-derive from your distribution, exactly as mine do; where it doesn’t, the fallback is labelled. Read the output as a lens, not a verdict.

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