The Pause - Arrive on purpose, not by accident

App Store Link

Inspiration

I kept catching myself opening Instagram the way you open the fridge for the hundredth time...you're not actually hungry or curious...you're just moving. By the time I noticed, I was forty minutes in and couldn't have told you a single thing I'd seen.

I tried the usual fixes. Screen Time I disabled within a week. Opal felt like a parent. One Sec was the closest to right, but every app in this category ends the same way: after you've done the healthy thing (pausing), it finds a way to make you feel bad for what you do next.

That's the part I wanted to remove. Not the friction...the judgment.

What it does

The Pause puts one calm breath between you and the app you reached for.

You tap Instagram. Instead of the feed, a breathing orb appears and counts you through a single slow breath...about fifteen seconds total. Then it says:

One breath is enough I'm ready — open Instagram

And it opens Instagram. That's the whole interaction. The breath isn't a toll you pay. It's a doorway you walk through on purpose.

How we built it

  • SwiftUI, iOS 17+, fully native.
  • App Intents + Shortcuts automation for the doorway, rather than the Screen Time / FamilyControls API. Screen Time requires a special entitlement and grants very broad visibility into someone's usage. The Shortcuts route costs a little setup, but the app never sees which apps you use or what you do in them — the privacy story is honest rather than promised.
  • App Groups so the Shortcuts action (a separate process, no network) still agrees with the app about entitlement state. It deliberately fails open ( a stale cache should never lock a paying user out of their own breath.)
  • Supabase for an opt-in communal counter: how many people took a pause today. Anonymous, no accounts. Early testers said the thing they liked most was breathing "with other people all over the world."
  • RevenueCat for purchases, behind a vendor-agnostic PurchaseProvider protocol so exactly one file in the app imports the SDK.

Challenges I ran into

Choosing Shortcuts over Screen Time - the harder, more private architecture, and the App Group entitlement mirroring it required Resisting my own instincts - shipping and then tearing out a streak counter, twice The RevenueCat Test Store trap - reframed here as a challenge rather than a lesson, since your main description already covers it as "What I learned." Told briefly so it doesn't feel repeated if both fields sit on the same page The two App Review rejections, folded into the same point since they share a root cause Building the asset pipeline with no ffmpeg/Node/Homebrew - native AVFoundation instead of an unfamiliar binary

Accomplishments that I'm proud of

The guilt-free completion screen - the single frame that is the thesis Solo-shipped and approved, including two fast rejection turnarounds Pay-what-you-can that's actually structurally enforced, not just marketing copy A real, verified sandbox purchase + restore before resubmitting - not an assumption A privacy claim that's true because of the architecture, not just stated in a policy

What I learned

The sharpest lesson came from a rejection. Apple bounced the app under guideline 2.1(b) - "we were unable to locate the in-app purchases." I assumed a discoverability problem and wrote back explaining where to tap.

I was wrong. The products were registered against RevenueCat's Test Store rather than the App Store, so the SDK asked for App Store products and got nothing. Every dashboard page showed green, because the identifiers and the offering genuinely were correct...the store was the one attribute none of those checks surfaced.

What let it reach review undetected was my own code. When the store returned nothing, the paywall quietly fell back to a hardcoded price list...so a totally dead storefront rendered as a healthy one. My "never show an empty screen" resilience had made failure invisible.

A fallback indistinguishable from success is a bug, not resilience. The paywall now says "Prices unavailable" and names the reason.

What's next for The Pause: Arrive on Purpose

Android, a widget, and gentler doorway variants for apps that aren't social media. But the constraint stays: if a feature works by making someone feel bad, it doesn't ship.

I'm also especially interested to see how well the community likes the "shared breath" aspect as a metric. Perhaps it would be a cool next-step to implement this a bit bigger and do some sort of "global one breath" if people enjoy this app and find value from it!

Built With

Share this project:

Updates

Submission history