Inspiration
We kept meeting the same two problems in one phone: workout apps that are easy to lie to, and social apps that are hard to put down. A rep counter you can cheat changes nothing, and a screen-time limit you can dismiss changes even less. So we built the missing link between them: a phone that can actually referee your push-ups, and a lock that makes your favorite apps cost exactly today's workout.
What it does
PushRank turns an iPhone into a rep counter and a referee. Put it on the floor, get into plank, and the count starts itself. Full range of motion only: no lockout, no count.
- Live 1v1 duels against real people. Challenge a friend or get matched at your level. Both cameras count, every rep lands on a shared scoreboard within a second, and the loser can demand a rematch. No bots, no scripted opponents.
- A weekly league with six tiers. Bronze to Champion, clusters of about 30, top five promoted, bottom five relegated, every Sunday at the same moment worldwide.
- Your apps, earned back. Pick the apps that eat your day. They stay locked until today's push-up goal is done, then unlock themselves. The lock screen shows the exact price: "27 push-ups left." An emergency unlock always works, because trust matters more than streaks.
- Counting you can trust. Every rep is validated twice: once by the camera on the device, once by the server against the rep stream. Half reps and phone shakes do not survive. Every set gets a 0-100 form score for depth, body line and tempo.
- Reasons to come back. Daily streaks, 23 badges, an activity grid, Home Screen widgets, Apple Health sync, and push notifications that are part of the game itself: duel invites, league results, streak saves.
All camera processing happens on the iPhone. Video is never recorded and never leaves the device.
How we built it
- iOS app: SwiftUI, with a custom Vision-based pose pipeline (our RepVision engine) doing on-device rep detection and form scoring.
- Backend: Node.js + TypeScript + Prisma, running matchmaking, the weekly league, and server-side rep validation. Live duels and presence run over WebSockets.
- Monetization: StoreKit 2 through RevenueCat. One Pro entitlement gates the core loop. RevenueCat webhooks feed our backend, so server-authoritative features check the entitlement server-side, not just in the client.
- Retention: OneSignal for push, deep-linked into duels, league results and streak nudges.
- App lock: Apple's Screen Time frameworks, with schedules and an always-available emergency unlock.
- Launch scope: shipped worldwide on day one: 174 storefronts, App Store listing localized into 37 languages, app UI in 17.
Challenges we ran into
- Counting that cannot be cheated. People are creative. We had to reject half reps, phone shakes and camera tricks while staying friendly to honest reps in bad lighting, on 60 fps and 30 fps devices alike. The answer was a strict state machine over pose data plus a second, server-side pass on the rep stream.
- Two cameras, one scoreboard, under a second. A duel only feels real if your opponent's rep lands before your next one. Getting count latency reliably low over real-world networks took several protocol rewrites.
- Trusting the right source about money. The client's RevenueCat cache, the server's webhook view and the store receipt can briefly disagree. We built a reconciliation with a grace window, so a temporary disagreement never locks a paying user out and never lets a fraudulent entitlement in.
- One Sunday, one planet. Promotion and relegation happen at the same instant worldwide, which makes timezone math and cache invalidation a single, unforgiving deadline every week.
Accomplishments that we're proud of
- Launched August 15, 2026 in 174 storefronts with a fully localized listing.
- Real organic downloads from 30+ countries in the first week, with zero marketing spend for the first three days.
- First trial starts on day 2; roughly 6% of first-week downloads started a free trial. [GÜNCELLE: final rakamlar]
- First ratings: 5 stars in Japan and Korea.
- A rep counter our own friends failed to cheat.
What we learned
- A new app's search visibility in the big English storefronts is a moving target: we watched our brand query rank #1 in 17 countries while disappearing entirely in the US for three days, then recover. Momentum, ratings and patience beat panic metadata edits.
- Trial-first pricing works when the product can prove itself in one workout: our job is not to sell on the paywall, it is to get one honest set counted.
- Push notifications retain when they are the game, not an announcement about the game.
What's next
- Seasons with placement sets, tournaments and team battles.
- Richer duel formats: best-of-three, handicaps, async challenges.
- Deeper social layer around clubs and friend leagues.
- More markets: the storefronts are already live, now the localized growth work starts.
Built With
- healthkit
- node.js
- onesignal
- prisma
- revenuecat
- screen-time-api
- storekit
- swift
- swiftui
- typescript
- vision
- websockets
- widgetkit
Log in or sign up for Devpost to join the conversation.