WHOOP Integration UX

WHOOP workouts automatically earn screen time.

This page documents how lockin. integrates WHOOP workout data inside the app. The integration is optional: users connect WHOOP via OAuth, and workouts are used to calculate minutes earned (1:1 with workout duration) which can then be spent unlocking blocked apps.

End-to-End Flow

OAuth + Auto-Sync
1

Connect WHOOP

User authorizes WHOOP in-app via OAuth (no manual token entry).

2

Workout Logged

User records a workout in WHOOP as usual.

3

Sync Triggers

Workouts are fetched and credited; webhook events can trigger a background refresh.

4

Earned Time

Earned minutes appear on the dashboard and can be used to unlock blocked apps.

Connect Screen (Onboarding)

WHOOP Connect Row
OPTIONAL
WHOOP
WHOOP
Earn time from WHOOP workouts
Connect

Users see WHOOP as an optional workout source during onboarding (and later in Settings). After connecting, the row changes state to “Syncing workouts from WHOOP”.

Earn More Time (Auto-Earn)

From Synced Workouts
lockin. dashboard screenshot showing earned time and earn more time CTA

In the “Earn more time” sheet, WHOOP appears under From synced workouts. If WHOOP is connected, workouts contribute minutes automatically (no manual logging). If not connected, tapping the WHOOP row routes the user to Settings to connect.

Connected Devices (Settings)

Connect / Disconnect
CONNECTED DEVICES
WHOOP
WHOOP
Last synced: today
Connected

WHOOP connection is managed in Settings under “Connected devices”. Users can disconnect at any time (revoking access and stopping workout sync/crediting).

Review Synced WHOOP Activity

Transparency
lockin. progress screenshot

Users can drill into a source-specific activity list (e.g. “WHOOP Activity”) to see the items that were synced and credited toward earned screen time (titles, timestamps, durations, and earned minutes).

Background Sync (Webhooks)

Workout Events Only

To make crediting timely, lockin. subscribes to WHOOP webhook events for workout.*. When a workout is created/updated, our backend triggers a silent push to wake the app, which then fetches the latest workout summaries and updates the user’s earned minutes. Non-workout events (e.g. recovery updates) are ignored.