🏋️ The Murph × WHOOP®

Bring WHOOP insights
into every Murph workout.

The Murph is an iOS app for athletes training the Murph CrossFit hero workout. We want to integrate WHOOP so users can see their recovery before the workout and their strain after — giving them the context they need to push safely.

📱 iOS only (native Swift) 🎖️ Military aesthetic 🔐 OAuth 2.0 + PKCE 📅 Live in App Store

Three touchpoints where WHOOP data will appear.

We only fetch WHOOP data when the user explicitly opts in (via Settings → Connect WHOOP) and only display it in three specific places — nowhere else.

1

Connect in Settings

User taps "Connect WHOOP." OAuth 2.0 flow with PKCE. One-tap, standard iOS sheet.

2

Pre-workout recovery

Recovery score (0–100) shown on the Home screen so users can gauge readiness.

3

Post-workout strain

Strain, avg HR, max HR shown in workout summary after the WHOOP workout syncs.

What users actually see.

Mockups styled to match The Murph's existing design language — warm neutrals, army-green accents, Bebas Neue typography, and monospaced counters.

The Murph
12
Total Murphs
3
This Month
44:12
Best Time
Recovery
78%
Recovery
You're in the green.
Great day for a hard effort.
Data by WHOOP®
+
Home → Recovery Card Matches existing "Total Murphs / This Month / Best Time" layout.
Settings
Connections
Apple Health Connected
Heart Rate Strap Not paired
WHOOP Not connected
WHOOP®

Connect your WHOOP to see recovery before workouts and strain after.

CONNECT WHOOP
Settings → Connections Users opt in explicitly. Can disconnect anytime.
Workout Complete
47:23
The Murph · 20# vest
100
Pull-ups
200
Push-ups
300
Squats
2mi
Run
Workout Summary
Strain
15.8
0–21 scale
Energy Burned
712 cal
Avg Heart Rate
162 bpm
Max Heart Rate
184 bpm
Data by WHOOP®
Post-workout → Summary WHOOP card sits below Murph's existing stat tiles.

The scopes we request — and why.

We request the minimum scopes required to display the three screens above. No data is sent to third parties. Data is stored only in the user's iCloud and a user-scoped Firestore collection.

read:workout

Workout data

Strain, average HR, max HR, and calories for the workout the user just completed.

Why: Shown in the post-workout summary card.
read:recovery

Daily recovery

Today's recovery score (0–100) pulled on Home screen load.

Why: Pre-workout readiness context on the Home screen.
read:body_measurement

Max HR & weight

User's max HR for percentage display, and weight for calorie accuracy.

Why: Show "88% of max" alongside raw HR numbers.
read:profile

Basic profile

First name + WHOOP user ID to associate the OAuth tokens with our user.

Why: Required to map WHOOP account to The Murph account.
offline

Refresh tokens

Allows our app to refresh access tokens in the background.

Why: So users don't have to re-authorize every hour.

How the integration is built.

OAuth 2.0 + PKCE

Native iOS app uses OAuth 2.0 Authorization Code flow with PKCE (no client secret shipped in the binary). Redirect URI: themurph://whoop/callback

Secure token storage

Access and refresh tokens stored in the iOS Keychain, encrypted with the user's device passcode + Secure Enclave. Never sent to any server other than WHOOP.

No webhooks, no backend

The Murph pulls data on demand (Home load and workout save). No server middleware. No third-party analytics see WHOOP data.

Disconnect = full cleanup

Tapping "Disconnect WHOOP" revokes the token with WHOOP's API, deletes local tokens, and clears cached data.

We follow the WHOOP Brand & Design Guidelines.

Every screen above adheres to the public WHOOP Brand & Design Guidelines (logos, typography, color palette, utilizing data). The final iOS build will ship the official WHOOP wordmark and Puck SVG files from the developer logo pack — the text treatment in these mockups is a placeholder.

Logo & attribution

WHOOP wordmark rendered in black or white only — never tinted, rotated, distorted, or overlaid on imagery. Every card displaying WHOOP data carries the required "DATA BY WHOOP" attribution. The logo is never placed next to a chart or data visualization.

Recovery color palette

Recovery score uses WHOOP's exact color bands: High #16EC06 (67–100%), Medium #FFDE00 (34–66%), Low #FF0026 (0–33%). The ring above shows 78% in High-Recovery green.

Strain color & scale

Strain values render in WHOOP Strain blue #0093E7 on the 0–21 scale — never on an arbitrary scale, never recolored, never relabeled.

Typography

WHOOP data uses DINPro for numbers and Proxima Nova for labels, per the WHOOP typography guidelines. Fallbacks: Helvetica Neue, Helvetica, Arial.

Metric naming

We never rebrand WHOOP metrics. "Recovery" stays Recovery (not "Readiness"). "Strain" stays Strain. Heart rate labels use WHOOP's exact terms: Activity Strain, Average Heart Rate, Max Heart Rate, Day Strain.

No contradiction of WHOOP coaching

Copy alongside recovery data never contradicts WHOOP's own recommendations. A low recovery will not be paired with "push hard today." Messaging mirrors WHOOP's stoplight coaching framework.