Susan wears a WHOOP wristband. WHOOP runs a developer service that lets approved applications read a wearer's data, with the wearer's permission. Susan created an application for this dashboard once, gave it permission to read her data, and stored a long-lived credential on the server that hosts the page.
When Susan opens the dashboard and clicks Refresh, the server uses that credential to pull her last 180 days of recovery, sleep, strain, and workouts from WHOOP. It saves the result as a single file on the server. That file is the public snapshot.
Anyone who opens the dashboard URL reads that snapshot. They do not log in. They do not need a WHOOP account. They never touch the WHOOP servers. They just read what Susan last published.
The rest of this page is the technical reference for setting up your own copy of the dashboard. It is not needed to view this dashboard. Skip it unless you are deploying a fork.
Fitness Log)./api/auth/callback. Example: https://your-site.netlify.app/api/auth/callback.offline, read:profile, read:recovery, read:cycles, read:sleep, read:workout, read:body_measurement.In your Netlify project, go to Project configuration → Environment variables and add these four values:
WHOOP_CLIENT_ID = (from step 1) WHOOP_CLIENT_SECRET = (from step 1) WHOOP_REDIRECT_URI = https://your-site.netlify.app/api/auth/callback SESSION_SECRET = (a random 32+ character string)
openssl rand -hex 32Or use any password manager's random-string generator. This value is used to encrypt the owner's WHOOP credentials at rest. Keep it private.
Connect your GitHub repository to Netlify (recommended), or drag a build folder onto app.netlify.com/drop. Once connected to Git, every push to main triggers an automatic deploy. The serverless functions for authentication, snapshot reading, and snapshot writing build without configuration.
If you are updating an existing deploy, confirm the Redirect URI in your WHOOP developer app still matches your site URL exactly before reconnecting.
Open the deployed dashboard. Click Owner sign-in. You will be sent to WHOOP, where you click Grant, and then returned to a live dashboard showing your last 180 days of data.
The credential WHOOP grants you persists for 90 days of normal use and renews automatically in the background. Click Refresh on the dashboard at any time to pull fresh data from WHOOP. Each refresh automatically updates the public snapshot.
Visitors with the dashboard URL see the most recent published snapshot. They do not need a WHOOP account, they are not asked to log in, and their browser never contacts WHOOP directly. The snapshot is read from server-side storage.
Only the signed-in owner can write a new snapshot. Signing out clears the owner's session in the browser but leaves the published snapshot in place. The last published view remains visible until the owner publishes a new one.
SESSION_SECRET. The browser cannot read it; only the server-side functions can./api/public/data.