-
-
Win Lock: your distracting apps stay locked until you've hit your daily wins, then lock again at midnight.
-
Receipts: every win is saved with the date, so on the bad days you've got proof you're moving.
-
Need a Win: stuck? Get a quick challenge and make a win happen.
-
I WON: caught a win? Tap it, name it, feel it. Little wins count, especially the ones you think don't.
-
Dubz Up: log real-life wins, keep the receipts, build a streak, and earn back your apps.
-
The Dubz Up app icon.
-
Inspiration
Ever go to bed feeling like you got nothing done? Like you're stuck, or losing, even when you're not?
Truth is, wins are all around you. You made the bed. You went for the walk. You showed up. Your brain has just been trained to ignore them. It replays every mistake and forgets every win. Then you pick up your phone, and the feed gets the first win of the day instead of you.
I wanted an app that retrains your brain to catch your wins. Once you start catching them and actually feeling them, you stop hunting for wins. They start finding you. And little wins, especially the ones you think don't count, stack up into big wins, big goals and big dreams.
That's Dubz Up. Win first. Scroll second.
What it does
- I WON: caught a win? Tap the button, name it, and let yourself feel it. Haptics, sound and a celebration make every win land, however small.
- Keep the receipts: every win is saved as a receipt, so on the bad days you've got proof you're moving.
- Streaks: every day you log a win keeps your winning streak alive.
- Need a Win?: no win in sight? It hands you a quick timed challenge so you can make one.
- Win Lock: pick the apps that eat your time. They stay locked until you've hit your daily wins, and they lock again at midnight, so every day is earned.
Your first win is free. Dubz Up Pro (weekly, monthly, or yearly with a 3-day free trial) unlocks unlimited wins, Win Lock and challenges.
How I built it
- Expo + React Native + TypeScript, with Reanimated, haptics and sound designed so that catching a win feels like something.
- Apple's Screen Time APIs (Family Controls, ManagedSettings, DeviceActivity) through a custom Swift native module and two app extensions: a branded shield screen and a monitor that re-locks your apps at midnight. Apple only hands the app opaque tokens, so it never learns which apps you've blocked.
- RevenueCat powers every subscription: offerings, the paywall, restore, and entitlement checks, with a Supabase edge function double-checking entitlements on the server.
- Supabase for Sign in with Apple, the database, and account deletion.
- EAS Build in the cloud. I built and shipped the whole thing from Windows, without a Mac.
- A Next.js landing page at dubzup.com with six live phones running the real app UI.
- I worked with AI coding agents alongside me, coordinated through shared docs in the repo, while I made the product, design and launch calls.
Challenges
- No Mac. Every native change meant a cloud build and a test on a real device. The web preview lied: fonts that looked perfect in the browser clipped on an iPhone.
- Family Controls entitlements. Apple has to grant the distribution entitlement on the app and on each extension. Until it does, builds won't even sign.
- Moving payments to RevenueCat. Purchases started on a custom receipt-verification setup. I moved everything to RevenueCat, which also handled renewals properly.
- A rename mid-build. The app started as "Winning Streak", but that name was already taken on the App Store, so it became Dubz Up.
- Audits and App Review. An independent audit came back no-go with five blockers. I fixed every one, answered Apple's information request, and was approved on 25 Sep 2026. Small wins, stacked.
What I learned
- Always test on a real device. The simulator and the web preview are not the truth.
- If a button can't do its job, remove it. Dead controls get apps rejected.
- Shipping is mostly the unglamorous 20%. Building this taught me the app's own lesson: little wins every day turn into a launched app.
What's next
Voice-logged wins, per-app win targets, and acting on what the first real users tell me.
Built With
- eas
- expo.io
- family-controls
- next.js
- postgresql
- react-native
- reanimated
- revenuecat
- screen-time-api
- sign-in-with-apple
- supabase
- swift
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.