Inspiration

Every screen time app shows you a chart and makes you feel bad. Charts are easy to ignore. A capybara staring at you in quiet disappointment is not. We wanted the internet's calmest animal to do what iOS notifications never could: judge you into putting the phone down.

What it does

Capi is a cartoon capybara that watches your daily screen time and reacts with escalating moods: happy under 1 hour, then neutral, disappointed, sad, and fully devastated (lying down, crying, still wearing his pineapple hat) past 3 hours.

  • He lives in your Dynamic Island: a Live Activity keeps your count and his judgment on the Lock Screen and island all day
  • Home screen widget that updates in the background as thresholds fire
  • Daily goal + streak: set a limit, watch your week improve (or not — he notices)
  • The reveal: onboarding converts your habits into days per year lost to the phone, scores you 12-74, and asks for a commitment
  • Hats. Obviously. Dress him in a pineapple, orange, strawberry or a turtle
  • Privacy-first: no accounts, no backend, nothing leaves the phone. The only external service is RevenueCat

Premium (3-day free trial, yearly or weekly via RevenueCat Paywalls): hourly judgments instead of one per day, full history and stats. Closing the paywall triggers a once-per-day second-chance offer at 50% off — also built on RevenueCat offerings.

How we built it

Expo / React Native + TypeScript for the app, with four native Swift targets: a DeviceActivityMonitor extension, a WidgetKit widget, and ActivityKit for the Live Activity. Apple never exposes exact screen time to apps, so Capi registers a ladder of usage thresholds (every 15 minutes) and takes the highest one that fired — approximate by design, which is fine: the capybara only needs to know which mood band you deserve. The extension mirrors state into an App Group and reloads the widget while the app is closed.

Monetization is 100% RevenueCat: two offerings (default and discount), RevenueCat Paywalls UI, entitlement-driven premium state shared across the app, and non-consumable IAPs for the hats.

Challenges we ran into

  • Apple's Screen Time sandbox is brutal: no exact totals, no per-app names or times, and extensions cannot update Live Activities. Instead of faking it, the island marks its count as stale after 45 minutes and switches to an honest "Probably more by now."
  • iOS 26 threshold flakiness (events firing late or never) meant building a mock provider, diagnostics, and a lot of patience
  • StoreKit sandbox edge cases: purchases completing after the paywall reported cancelled — fixed with entitlement re-verification everywhere

What we're proud of

A character with an actual personality (calm, passive-aggressive, never angry), a fully native island/widget presence, and an app that respects privacy completely while still monetizing well.

What's next

App blocking is already built behind a flag: when you blow past your goal, Capi offers to take your danger apps away and shows his disappointed face when you try to open them. That ships in v1.1, followed by Android with a floating capybara bubble.

Built With

Share this project:

Updates

Submission history