WhoopLink: designing and building a recovery app I actually use

A personal project, end to end. I designed and built a native iPhone app that reads a WHOOP band directly and turns its raw signals into three calm daily scores, each drawn as a halo of light. I wear the band and use the app every day.

WhoopLink: designing and building a recovery app I actually use

A personal project, end to end. I designed and built a native iPhone app that reads a WHOOP band directly and turns its raw signals into three calm daily scores, each drawn as a halo of light. I wear the band and use the app every day.

A band in a drawer, and an itch to build

When my WHOOP trial ended, the band went into a drawer. The hardware still worked. What I had lost was access to my own heart rate, sleep and recovery, and I wanted to know whether I could get that back myself.

I’ve spent years designing health products that other people build. This time I wanted to take an idea all the way: design it, build it, put it on my wrist and live with it. I didn’t want a prototype that only looks right in a demo. I wanted an app that actually works, and one I would choose to open.

Reviews of the leading trackers kept naming the same three frustrations: paying every month to see your own body, scores that feel like a black box, and apps that nag. Those became my brief. Every number free to see. Every score able to explain itself. Calm by default.

A band in a drawer, and an itch to build

When my WHOOP trial ended, the band went into a drawer. The hardware still worked. What I had lost was access to my own heart rate, sleep and recovery, and I wanted to know whether I could get that back myself.

I’ve spent years designing health products that other people build. This time I wanted to take an idea all the way: design it, build it, put it on my wrist and live with it. I didn’t want a prototype that only looks right in a demo. I wanted an app that actually works, and one I would choose to open.

Reviews of the leading trackers kept naming the same three frustrations: paying every month to see your own body, scores that feel like a black box, and apps that nag. Those became my brief. Every number free to see. Every score able to explain itself. Calm by default.

Designing end to end, from Bluetooth to the last pixel

I owned every layer: the product decisions, the visual language and design system, the SwiftUI app, and the work of getting a band with no public API to talk to it. That changed how I designed. Whenever a screen depended on data, I could see exactly what the data could and couldn’t support, and design for that instead of an ideal.

To move at that pace alone, I ran the design work as short sprints with AI agents. One wrote briefs, others built frames, checked accessibility, reviewed copy and ran QA scenarios. A critic reviewed every stage and came back with ranked must-fix items. The decisions stayed with me: what to cut, which direction to follow, and when something was honest enough to ship.

And I enjoyed it more than almost anything I’ve worked on. The loop was short. I would sketch an idea in the morning, try it in a small test app with sliders at lunch, and judge it on my own phone in the evening. Some experiments died within the hour. A few became the app.

Designing end to end, from Bluetooth to the last pixel

I owned every layer: the product decisions, the visual language and design system, the SwiftUI app, and the work of getting a band with no public API to talk to it. That changed how I designed. Whenever a screen depended on data, I could see exactly what the data could and couldn’t support, and design for that instead of an ideal.

To move at that pace alone, I ran the design work as short sprints with AI agents. One wrote briefs, others built frames, checked accessibility, reviewed copy and ran QA scenarios. A critic reviewed every stage and came back with ranked must-fix items. The decisions stayed with me: what to cut, which direction to follow, and when something was honest enough to ship.

And I enjoyed it more than almost anything I’ve worked on. The loop was short. I would sketch an idea in the morning, try it in a small test app with sliders at lunch, and judge it on my own phone in the evening. Some experiments died within the hour. A few became the app.

The Data halo: one idea at the heart of the app

Each of the three scores, Recovery, Sleep and Movement, sits inside a ring of small lights. The ring lights up clockwise from the top to the score, so a Sleep score of 84 lights 84% of the ring, and Movement fills out of 21. The dots grow brighter towards the tip, which carries a soft glow.

The halo is never quite still. A slow light travels along the lit arc every ten seconds, and the dots breathe on a six-second cycle, like a resting pulse. With Reduce Motion turned on, everything holds still and nothing is lost.

Each score has its own palette in Day and Night: sage for Recovery, dusk lilac for Sleep and warm clay for Movement. At night the ground turns deep violet with a soft wash of sky, so checking your sleep at bedtime doesn’t glare.

Getting there took a lot of play. I tried nine silhouettes, three for each score, with names like bloom, ripple, crescent, tide and flare. I built a small lab app where I could drag a score and watch every halo respond. My first shipped version drew thirty nights of history around the ring. On my phone, after a night that scored 90, the ring looked ten percent full. I read it as a gauge, and so would anyone else. That same afternoon, every halo became a gauge of the day’s score, and history moved to a screen of its own.

From then on, the halo became the system. The same ring appears at every size: as the hero of a detail screen, beside each card on Today, in the sticky bar, as a day on the calendar and around the alarm icon. One shape, with one meaning everywhere.

The Data halo: one idea at the heart of the app

Each of the three scores, Recovery, Sleep and Movement, sits inside a ring of small lights. The ring lights up clockwise from the top to the score, so a Sleep score of 84 lights 84% of the ring, and Movement fills out of 21. The dots grow brighter towards the tip, which carries a soft glow.

The halo is never quite still. A slow light travels along the lit arc every ten seconds, and the dots breathe on a six-second cycle, like a resting pulse. With Reduce Motion turned on, everything holds still and nothing is lost.

Each score has its own palette in Day and Night: sage for Recovery, dusk lilac for Sleep and warm clay for Movement. At night the ground turns deep violet with a soft wash of sky, so checking your sleep at bedtime doesn’t glare.

Getting there took a lot of play. I tried nine silhouettes, three for each score, with names like bloom, ripple, crescent, tide and flare. I built a small lab app where I could drag a score and watch every halo respond. My first shipped version drew thirty nights of history around the ring. On my phone, after a night that scored 90, the ring looked ten percent full. I read it as a gauge, and so would anyone else. That same afternoon, every halo became a gauge of the day’s score, and history moved to a screen of its own.

From then on, the halo became the system. The same ring appears at every size: as the hero of a detail screen, beside each card on Today, in the sticky bar, as a day on the calendar and around the alarm icon. One shape, with one meaning everywhere.

Features built around real questions

Every feature started from a question I actually had while wearing the band.

Why is my score low today? Every Recovery and Sleep score carries a “Why this score” card with the two or three things that moved it most, each compared with your own usual and marked as the biggest effect, lowering it or helping. A sheet underneath shows the exact weights the score uses, and the Today card carries one line of it, such as “Lower than usual: HRV 10% below”.

How have my mornings been lately? History shows a month of small halos for each score. More of the ring lit means a higher score, a dotted ring means no reading, and a half-drawn ring means the app is still learning your usual. Tap a day and you see that day exactly as it looked.

What are my scores while I scroll? As Today grew, I added a sticky bar. Once the greeting scrolls away, the three gauges stay pinned at the top, and each one opens its detail.

What is my heart doing right now? Live shows your heart rate as one large number, the zone in plain words, the last five minutes and the beat-to-beat intervals. Movement counts all your wear, including hours synced from the band while your phone was away, and it notices efforts so you can say what they were.

Can the band wake me up? The band buzzes on its own at the time you set, with no phone needed. The alarm’s status only changes when the band confirms it, and until it has woken you once, a calm note asks you to keep your phone alarm on.

Features built around real questions

Every feature started from a question I actually had while wearing the band.

Why is my score low today? Every Recovery and Sleep score carries a “Why this score” card with the two or three things that moved it most, each compared with your own usual and marked as the biggest effect, lowering it or helping. A sheet underneath shows the exact weights the score uses, and the Today card carries one line of it, such as “Lower than usual: HRV 10% below”.

How have my mornings been lately? History shows a month of small halos for each score. More of the ring lit means a higher score, a dotted ring means no reading, and a half-drawn ring means the app is still learning your usual. Tap a day and you see that day exactly as it looked.

What are my scores while I scroll? As Today grew, I added a sticky bar. Once the greeting scrolls away, the three gauges stay pinned at the top, and each one opens its detail.

What is my heart doing right now? Live shows your heart rate as one large number, the zone in plain words, the last five minutes and the beat-to-beat intervals. Movement counts all your wear, including hours synced from the band while your phone was away, and it notices efforts so you can say what they were.

Can the band wake me up? The band buzzes on its own at the time you set, with no phone needed. The alarm’s status only changes when the band confirms it, and until it has woken you once, a calm note asks you to keep your phone alarm on.

Testing on my own wrist, fixing the same day

I tested the riskiest assumptions on the real band first. Two minutes with the alarm proved that it fired, and showed that I couldn’t stop it with a double-tap, so stopping it became a first-class state. Everything the app shows is labelled as an estimate, and the sensors the band doesn’t expose say “Not available yet” instead of quietly disappearing.

The prototype passed all 32 QA scenarios after one round of fixes, with no critical or serious accessibility issues. The scoring engine runs on 79 tests and the band sync on 266 checks. Real use still found what the tests didn’t: the gauge that read as empty, and a sync that could overwrite a night that had just been re-analysed. Both were fixed within hours.

Testing on my own wrist, fixing the same day

I tested the riskiest assumptions on the real band first. Two minutes with the alarm proved that it fired, and showed that I couldn’t stop it with a double-tap, so stopping it became a first-class state. Everything the app shows is labelled as an estimate, and the sensors the band doesn’t expose say “Not available yet” instead of quietly disappearing.

The prototype passed all 32 QA scenarios after one round of fixes, with no critical or serious accessibility issues. The scoring engine runs on 79 tests and the band sync on 266 checks. Real use still found what the tests didn’t: the gauge that read as empty, and a sync that could overwrite a night that had just been re-analysed. Both were fixed within hours.

An app I use every day, and the most fun I’ve had designing

WhoopLink pairs with the band, reads its stored history and scores Movement, Sleep and Recovery on the phone, with no account and no cloud. I don’t have user metrics and I won’t invent any. So far the users are me and a planned friend test.

Designing end to end changed the work. When I own the data, the code and the pixels, honesty stops being a copy problem and becomes a design system: gauges that read the way people expect, status lines that wait for proof, and a reason beside every score. And it was fun. Experimenting freely and seeing an idea on my own wrist the same day is the part I’ll keep. Next, I’ll check heart rate and HRV against a chest strap before any score becomes more than an estimate.

Personal project. Not affiliated with WHOOP or Daye. WHOOP is a trademark of WHOOP, Inc. All screens use sample data.

An app I use every day, and the most fun I’ve had designing

WhoopLink pairs with the band, reads its stored history and scores Movement, Sleep and Recovery on the phone, with no account and no cloud. I don’t have user metrics and I won’t invent any. So far the users are me and a planned friend test.

Designing end to end changed the work. When I own the data, the code and the pixels, honesty stops being a copy problem and becomes a design system: gauges that read the way people expect, status lines that wait for proof, and a reason beside every score. And it was fun. Experimenting freely and seeing an idea on my own wrist the same day is the part I’ll keep. Next, I’ll check heart rate and HRV against a chest strap before any score becomes more than an estimate.

Personal project. Not affiliated with WHOOP or Daye. WHOOP is a trademark of WHOOP, Inc. All screens use sample data.

© Valentin Ivanov 2026

© Valentin Ivanov 2026

© Valentin Ivanov 2026