Prologue Tension Reframe Experience Artifacts Craft System Process Where it stands
Case study · iOS 26 · Founder & product designer

Scrollpass

Your apps stay locked until you move. The walk you already took pays for the scroll.

RoleFounder and product designer. Engineering by Claude Code, under my direction.
TimelineOctober 2026
PlatformNative SwiftUI, Screen Time, HealthKit
StatusBuilt. Next: Apple's Screen Time approval.
The product · 13 screens from the running build
Welcome screen
Welcome
What eats your time screen
What eats your time
Health, in context screen
Health, in context
Earn rate screen
Earn rate
The reveal screen
The reveal
Today at 8 a.m.: 15 minutes banked
Today · 8 a.m.
Back from a walk: +15 minutes, 30 banked
Back from a walk
Today at 6 p.m.: 51 minutes banked
Today · 6 p.m.
Today at 10 p.m.: 68 minutes banked
Today · 10 p.m.
Today scrolled down: 4,534 steps, 68 minutes earned, and this week's chart
Today · below the fold
Your week screen
Your week
Settings screen
Settings
One-tap survey screen
One-tap survey
Prologue

Every screen-time tool asks you to say no at 1 a.m. Scrollpass moves the decision to 4 p.m., and makes it a walk.

The problemLimits fail at the exact moment they matter. "Ignore Limit" is one tap away, and willpower is lowest at night.
The betTurn movement into currency. Steps, pushes and workouts from Apple Health deposit minutes; locked apps open only against that bank.
My roleI defined the product, wrote the spec and the design system, made every product call, and directed Claude Code as the engineering team.
Act I · Tension

People want this. The tools they use keep losing.

I validated the idea before designing anything. The full market study, two research agents cross-checked against a deep-research run, came after the first build, and it reframed what mattered: demand is real, and the dominant model of self-control is broken.

70%of under-30s say they spend too much time on their phone. Of adults who tried to cut back, only a quarter say it worked.Pew Research · 2026
36%kept a hard lockout on, against 62% for a gentle nudge. Strict locks get switched off.CHI · 2024
−16%screen time on social apps from self-set limits over twelve weeks. Commitment devices work when people keep them.American Economic Review · 2022
~140iOS apps chase the same keywords. No walking-based one has passed 500 ratings.My App Store sweep · Oct 2026

The research reframed the brief. The question was never "how strict should the lock be?" It was "how do you make a lock people choose to keep?" That question produced the four principles below, and every design decision in this study traces back to one of them.

Act II · Reframe

Four principles, set before the first screen

1

Pay out before you ask

The first session ends on credit the user already earned, before any paywall. A gift lands better than a promise.

→ The reveal · Act III
2

A lock you keep beats a lock that's strict

Honest exits keep people in: a weekly emergency five minutes, sick and off days, and Turn off locks, always one tap away.

→ Journey map · Shield copy
3

Every body counts

No camera, ever. Wheelchair pushes equal steps. Any device that syncs to Apple Health counts, and the earn rate is yours to set.

→ Earn rate · The bank model
4

Calm enough for 18 to 60+

No mascot, no confetti, no shame. The product should feel like Apple made it and read like a friend wrote it.

→ Design system · Content design
Act III · The experience

One day, one sky

Home is drawn as a landscape that follows the clock: cool at 8 a.m., golden at 6 p.m., quiet at night. The sky warms as minutes are earned, so the screen itself shows how your day is going.

Home at 8 a.m.: a cool morning sky, 12 minutes banked, Almost there, 200 steps to 15 min
08:00Almost there12 minutes from the walk to the train. The arc shows 200 steps to the first unlock.
Home at 6 p.m.: golden hour sky, 51 minutes banked, Ready when you are, Unlock 15 min
18:00Ready when you are51 minutes banked by golden hour, and the sky has warmed with them.
Home at 10 p.m.: night sky, 36 minutes banked, 15 spent, Enjoy your time, 15 min unlocked and locks again when used
22:00Enjoy your timeOne tap, 15 minutes, re-lock already armed. The hour every other blocker loses.
Act III · First run

Five screens from install to the magic moment

Onboarding is strictly ordered, because the payoff needs Screen Time, the chosen apps and Health in place first. Each permission is explained on its own screen, in plain words, before iOS asks.

Welcome screen with the Scrollpass mark and 'Win your scroll.'
01WelcomeOne promise, one button.
What eats your time? screen with ideas to lock
02What eats your timeIdeas grouped the way people talk about them.
Your walks already count: what Apple Health data is read
03Health, in contextWhat's read, and what never leaves the phone.
Earn rate screen with Easy suggested
04Your earn rateSuggested from your own average.
Reveal: 51 minutes earned today
05The reveal51 minutes, already yours.
How did you hear about us, one tap
06One tapAttribution without a form.
The reveal screen at full size: 51 minutes earned today, from 3,400 steps
Act III · The magic moment
"Your walk already counts." Nearly everyone has walked somewhere before they install an app.

So the last onboarding screen reads today's activity and shows the minutes already banked, counting up along the arc: 51 minutes from 3,400 steps. It turns a permission-heavy setup into a reward, and it guarantees the first session pays out before the paywall ever appears.

The amber is deliberate. In Scrollpass, amber appears only on minutes and steps the user earned. It's the one color you have to move to see.

Act III · Below the fold

The whole screen, not just the hero

Home and Week are read top to bottom: the glance first, then the evidence. These are live recordings from the running build, scrolled by the agent in the Simulator.

  1. 01Glance: earned, spent, unlocks left
  2. 02Hero: minutes banked, progress to the next 15
  3. 03Action: one glass button
  4. 04Today: steps against the next unlock
  5. 05This week: today against your usual range
  6. 06Trust: when Health last synced, and help if a workout is missing
TodayFrom the sky down to the evidence.
WeekThe chart, then every day in words.
Act IV · Artifacts

The thinking behind the screens

These artifacts set the build order. The reveal and the weekly emergency exit exist because of the two low points in the journey map.

Fig. 1Primary persona and jobs to be done

Jordan, 21, college junior

"I want to feel in control of TikTok, not controlled by it."

Devices
iPhone and an Apple Watch from two birthdays ago
Breaks down
In bed. "Five minutes" ends at 2 a.m.
Has tried
Screen Time limits, then Ignore every time. Deleting TikTok during finals.
Won't accept
Filming themselves, guilt, anything that feels made for kids

When I open TikTok on autopilot, I want something to catch me before the scroll starts, so I choose it on purpose.

When I've had an active day, I want it to count toward something I enjoy, so the scroll feels earned rather than stolen.

When I'm sick or traveling, I want the rules to bend, so one bad week doesn't make me quit.

Jordan is the primary user. The calm register is what makes it work for their parent too.

No camera, everNo mascotPushes = stepsOn-device
Fig. 2Journey map, from first sighting to advocacy
Notice
Install
Set up
Reveal
Daily loop
Slip
Share
Doing
Sees a video of a locked app and "+45 min"
Reads "No camera. Your walks count."
Picks apps, grants Screen Time and Health
Sees minutes already earned today
Hits the shield, walks, unlocks in one tap
Sick day, travel, a 1 a.m. urge
Posts the monthly distance card
Thinking
"Another blocker?"
"Will it actually hold?"
"Why all these permissions?"
"Wait, I already have credit?"
"That's a fair trade."
"Is this going to punish me?"
"My friends would use this."
Feeling
Response
Show the payout, not a lecture
The lock is free, forever
One permission per screen, explained first
The reveal, before any paywall
Shield copy that's kind
Emergency 5 min weekly, sick days
A card made for Stories
Fig. 3Onboarding flow
Welcome3 explainers
Privacyanalytics opt-in
Screen TimeFace ID
Pick appssystem picker
Healthread access
Earn ratefrom average
Revealalready earned
Heard aboutone tap
PaywallPhase 4
Alertsoptional
Todayhome
Scrollpass screenApple system sheetMagic moment
Fig. 4Information architecture
Tab

Today

  • Earned, spent, unlocks
  • Minutes banked and the arc
  • Unlock 15 min, longer on Pro
  • Back from your walk
  • Today and This week
Tab

Week

  • Daily movement chart
  • Average and usual range
  • Last seven days
Tab

Settings

  • Locked apps
  • Earn rate
  • Missing a workout?
  • What Scrollpass can see
System

The shield

  • Drawn by iOS over a locked app
  • Copy changes with the balance
  • Emergency 5 min, weekly
Fig. 5The model: a bank, not a timer
DepositMoveSteps, pushes and workouts from any device that syncs to Apple Health.
Rate1,000 → 15 minEasy 750, Medium 1,000, Hard 1,500, or custom.
HoldBankUp to 180 minutes earned a day. Carries over on Pro.
WithdrawUnlock15 minutes a tap. The re-lock is armed before apps open.
ExitEmergencyFive minutes from the shield, refilled weekly.
Fig. 6Lock state machine. A lock people trust can't have an undefined state.
Lockednothing banked Lockedminutes banked Re-lock armedbefore anything opens Unlocked15 or 5 minutes Locks off Pausedback at midnight move tap open time's up · re-locks emergency 5 min · from the shield tap in thelast minutes on off
Fig. 7Failure states and their recovery. Every one has a fix the user can do in one tap.
What went wrongWhat the user seesRecovery
Screen Time access revoked"Reconnect Screen Time" banner on TodayOne tap, with a passcode variant
Saved app selection expired"Your locked apps need a quick re-pick"Picker opens empty, the lock re-applies on save
The lock didn't stick"Locks didn't turn on" bannerRetry from the banner
Health hasn't synced"As of 10:18" instead of a fake fresh number"Missing a workout?" explains the fix
An unlock couldn't start"Couldn't start your session. Try again."The button stays, nothing was spent
The day's last minutes"Redeeming pauses for the last few minutes of the day."Comes back at midnight on its own
Daily earning maxed out"You've maxed out today's earning: 180 min. Nice."None needed, and no shame in it
Fig. 8Shield copy by state. The most-seen screen, written as a system.
BankTitleSubtitle template
EmptyTime for a walk{steps} {unit} or {min} active min unlocks 20 min of {app}. It'll keep.
Close{n} min bankedYou're {n} {unit} from 15 min of {app}. As of {time}.
Ready{n} min bankedOpen Scrollpass to unlock {app}. As of {time}.
Capped0 min leftYou've maxed out today's earning: 180 min. Nice.
ButtonsEarn more timeEmergency 5 min ({n} left) · No emergencies left

"As of {time}" is there because Health data can lag. The shield never shows a number it can't stand behind.

Fig. 9Competitive landscape
CAMERA REPSPASSIVE MOVEMENT CRAFTEDUTILITY-FIRST Unrot Pushscroll PushUp Time Steppin Fitlock WalkLock Scrollpass
Scrollpass featureIn the market
Any Apple Health sourceUncommon · Fitlock, EarnLock
Pushes equal to stepsUncommon · Fitlock
User-set earn rateTable stakes
Bank with carry-overTable stakes
Free weekly emergenciesDistinct · others sell skips
Free lock, paid earningRequired · Guideline 4.10

The uncomfortable finding: features don't differentiate in this category. Craft, voice and distribution have to. Placement is my read of each app's current listing and build.

Act V · Craft

A decision log

I reviewed every build on my iPhone and in the Simulator against reference screens from Oura, Apple Health, Whoop and Garmin. Four calls moved the product most. Each one gave something up.

Decision 01 · Art direction

From flat cards to a landscape that tells the time

The first pass was correct and lifeless. My review note was four words: "nothing happens yet." I lifted my own no-header-art rule and gave Home a Horizon drawn in code: six ridges with haze and rim light, palettes for each part of the day, film grain so the gradients read as photographic, and a sky that warms as minutes are earned.

Considered
Illustrations, a mascot, activity rings
Chose
A procedural landscape tied to time and progress
Gave up
A simpler render path, and a strict no-decoration rule
Early Home: flat dark cards
Before
Current Home with the morning landscape
After
Decision 02 · Interaction

The primary action joins the sky

A full-width cream pill was the brightest object on screen and cut across the ridges, and its split chevron read as a form dropdown. It became an iOS 26 Liquid Glass capsule centered under the hero sentence, with longer unlocks in a round glass button beside it. The landscape now anchors below the button and stays whole.

Considered
A bottom-docked bar, moving the action into a card
Chose
Glass, the material iOS 26 uses over imagery
Gave up
Some contrast; the hero carries the emphasis instead
Before: a cream full-width pill across the mountains
Before
After: a centered glass button in the sky
After
Decision 03 · Accessibility

Text over imagery, at WCAG AA, at every size

A legibility scrim darkens the sky behind the hero text in every palette. Its first version ended in a straight ramp, and the eye read the sudden change as a hard line across the sky, so it now fades on a smoothstep curve. Every screen is checked at the largest accessibility text size, where rows restack instead of truncating. VoiceOver hears outcomes ("30 minutes unlocked. Locks again when used."), and Reduce Motion removes count-ups and pulses.

Considered
Solid panels behind all text
Chose
An eased scrim, so the landscape stays visible
Gave up
A little sky saturation behind the text
Home at the default text size
Default text
Home at the largest accessibility text size, with the hero and glance circles scaled up and nothing truncated
Largest text
Decision 04 · Content design

Copy that never shames

The shield is the most-seen screen in the product, and it always appears at a moment of friction. Its copy changes with the balance: "Time for a walk" when empty, "You're 400 steps from 15 min" when close, "Open Scrollpass to unlock" when ready. Nothing banked is "fine. A walk to the store counts." Maxing out the day is "Nice." It has to work for a 21-year-old and their parent.

Considered
Cheeky guilt copy, the category norm
Chose
Warm, specific, numbers first
Gave up
Some shareable edge. The tagline also changed: research found the original belonged to the category leader.
Home with 0 minutes: 'Nothing banked yet today, and that's fine. A walk to the store counts.'
Nothing banked
Home at the daily cap: 'You've maxed out today's earning: 180 min. Nice.'
Maxed out
Act VI · System

Dusk, glass, and one serif line per screen

The tokens live in a single design.md file that the coding agents read, mirrored to an HTML style guide for people. Nothing in the app picks its own color, size or spacing.

ColorDark mode tokens
background#0E1822
surface#172431
raised#1F2F3E
atmosphere#1D3142
muted#A9B4BF
on-surface#F5EFE6
primary#F4E6CF
accent · earned#FFA24C
TypeNew York for emotion, SF for everything else, on Apple's Dynamic Type metrics
display
New York 34/41
Your walk already counts
headline
New York 28/34
Ready when you are
hero number
SF Rounded, tabular
68 min
body
SF Pro 17/22
Enough for 4 unlocks of 15 min. 400 steps to your next 15 min.
label
SF Pro, caps, tracked
MINUTES BANKED
Spacing4-point base
4
8
12
16
20
24
32
48
RadiusBy role
12
chip
16
banner
24
card
32
sheet
RulesWhat the system enforces
Amber means earnedOnly minutes and steps the user earned. Never a button, never decoration.
One serif line per screenNew York carries the emotional line, so it keeps its weight.
Arcs and bars, never ringsA closed ring reads as Apple Fitness. Scrollpass isn't a fitness score.
Glass over imageryControls on the landscape are Liquid Glass. Cards are frosted, tinted, with a status word.
Haptics mark outcomesEarned credit and an unlock get a tap. Ordinary buttons don't.
Plain words, sentence case"Turn off locks", never "Disable restrictions". Unknown numbers show a dash, never a fake zero.
Act VII · Process

Claude, wired into Xcode, the Simulator and my iPhone

This is the part that didn't exist a year ago. Claude Code didn't just write Swift: it built with Xcode's toolchain, ran the app in the iOS Simulator, tapped and scrolled it, read its own screenshots, and installed builds on my phone. I directed the loop and made the calls.

The loopOne task, end to end, with no hand-off
01 · BuildXcode toolchainGenerates the project from a spec and builds it.xcodegen generate
xcodebuild build test
02 · Verify787 testsA task closes only when every test passes.scripts/build.sh → exit 0
03 · RuniOS SimulatorInstalls, sets a clean status bar, launches any screen in any state.simctl launch -fakeHour 18
status_bar --time 9:41
04 · UseTaps and scrollsDrives the app like a person, with real touch paths.tap · swipe · touch_path
05 · LookReads its screenshotsCaptures frames and contact sheets, and catches what's off.screenshot · ffmpeg tile
06 · ReviewMe, as design directorI review on my phone and in the Simulator, against reference apps."this feels off"
07 · DeviceMy iPhoneSigns and installs a demo build over the cable.devicectl device install
08 · ShipVersion controlCommits each chunk of work and pushes it to GitHub.git commit · git push
EvidenceContact sheets the agent made to review its own work
A filmstrip of 13 Simulator screenshots the agent captured to check every screen in one view
A contact sheet of a recorded take: scrolling Home, then an unlock lowering the bank from 68 to 38 minutes

Top: every screen in one strip, which is how it caught that the reveal showed 38 instead of 51 minutes and reshot it. Bottom: a recorded take, scrolled and tapped by the agent, checked frame by frame before it went into a video.

OverruledWhere the agent's first answer wasn't the right one
Atmosphere
The agent built correct, flat screens. I called them lifeless ("nothing happens yet"), because a reward app has to feel like a reward. That became the Horizon.
The button
The agent placed a full-width cream pill across the landscape. I moved it into the sky as Liquid Glass, because the brightest thing on screen should be the minutes, not a control.
The sky
The agent's legibility scrim ended in a straight ramp. I saw a hard line across the sky and had it eased, because contrast can't come at the landscape's expense.
ScaleThe build so far
59/89roadmap tasks
787passing tests
~18klines of Swift
3Screen Time extensions

SwiftUI on iOS 26.5 with Swift 6 strict concurrency. FamilyControls, ManagedSettings and DeviceActivity for the lock; HealthKit for movement; Swift Charts for the week; Liquid Glass for controls. Xcode 27, XcodeGen, Swift Testing, XCUITest and the Simulator.

Design review toolingAny screen, any state, on demand

Screen Time can't run in the Simulator, so every system dependency has a fake. Launch arguments put any screen in any state, which made design review fast and repeatable.

-useFakes -fakeBalance 51 # minutes in the bank -fakeJustEarned 15 # "Back from your walk" -fakeHour 18 # the sky's palette -fakeWeek YES # seven days of history -fakeTab week # open on a tab
Act VIII · Where it stands

Built, tested, and on its way to Apple

Apps that use Screen Time need Apple's explicit permission before they can ship, one approval for the app and one for each extension. That review is the gate between this build and the App Store.

DoneThe core loopFoundation, rules engine, onboarding and permissions, the lock, earning, unlocking and re-locking. Phases 0 to 3.
NowApple's approvalDeveloper Program enrollment first, then four Family Controls distribution requests, then App Store review.
NextLaunchPaywall and subscriptions, streaks and the monthly card, launch prep. In parallel, five short concept videos to find the hook.
ReflectionWhat I'd keep, and what I'd change
  • Directing AI is design direction. The quality of the spec, the tokens and the review set the quality of the product.
  • "Nothing happens" is a real bug. Correct screens that don't move people aren't finished.
  • Constraints made it better. The scrim, the restacking rows and the glass all came from accessibility.
  • I'd run the market study before the polish. It showed distribution, not features, is the hard part.
  • No one has used it yet. Every call here is mine, checked against reference apps, not people. The first week on TestFlight will overrule some of them.
Open risksWhat could still sink it
  • Distribution. No walking app has passed 500 ratings. The concept videos test this before any more features.
  • Apple's approval. Screen Time permission is granted per app and per extension, and waits run from days to months.
  • Lock reliability. Competitors' changelogs show shields failing on iOS 26. Real-device testing starts with the paid account.
  • Price. $34.99 a year sits above the closest comparable at $19.99.
Success measuresWhat I'll watch at launch
  • Under three minutes from install to the reveal
  • Locks kept on after 30 days, against the 36% hard-lock baseline
  • Emergency exits per week, as a read on whether the rules feel fair
  • Trial to paid on Pro

The walk you already took should count for something. Now it does.