Inspiration I'm Omar, from Tunisia, and I've been shy my whole life. I watched other people take the job, the conversation, the person — chances I could have taken if I'd just said something. It took me years to get past it. When I looked for help, most apps suffered from at least one of four major flaws. They were theoretical: you read about confidence instead of practicing it. There was no progressive overload, so day ninety felt like day one. They ignored your environment — "invite a friend out" doesn't help if you don't have friends. And crucially, they took way too much time. That was a massive roadblock for me when I was a student, and it's just as inconvenient today as a full-time employee. So I built the app I wish I'd had. What it does ShyBreak gives you one small real-world challenge a day, and it only takes two minutes. A plan built around you. Onboarding asks what you want to work on, who's actually around you day to day, how hard each social situation feels, which part is hardest, how many days a week you can practice (3, 5 or every day) and when your usual break is. Your answers become your personal fear ladder, gentlest first. 133 challenges across five levels, from The Warm-Up to Center of Gravity. Each day's pick only includes things you can physically do, leans toward your goals and the part you find hardest, avoids repeats within 30 days, and brings back a challenge you rated "rough" about three weeks later, because facing it again is how the fear drops. Help in the moment. You get a line to borrow if your mind goes blank, one swap a day, and an optional hold-to-start countdown that turns "sometime today" into a real commitment. At Levels 1 and 2, you get one rehearsal with an on-device AI coach. The honest window. You answer one question after every rep: how did that feel? Rating a challenge "easy" moves you up; "rough" holds you where you are. With our companion Apple Watch app, you can rate a rep from your wrist seconds after you do it, while the emotion is still honest. A log in your own words, typed or spoken, that you can search or filter. In a few months, it becomes a powerful visual list of things you were nervous about and did anyway. Progress that respects your pace. Your streak counts weeks where you hit your own custom target, so a planned rest day never breaks your momentum. No sign-up, and your notes never leave your phone. How we built it ShyBreak is a native SwiftUI app for iOS and watchOS, with data stored locally on-device using SwiftData. RevenueCat powers the subscriptions seamlessly: a yearly plan with a 3-day free trial, and a weekly plan, unlocked through a single pro entitlement. It allowed me to completely offload backend purchase logic and focus on the UI. The level-up rule is deliberately conservative. You move up once you've practiced on enough distinct days at your level with no "rough" rep among your last three If you told the app things feel very hard, it holds you at each level longer. Speech is transcribed on-device with Apple's Speech framework, which also measures pace, filler words, and volume. The AI coach sits behind a Cloudflare Worker, so no API key ships in the app, and only your words are sent — never the audio recording. A remote update gate, also on Cloudflare, lets me require an update if I ship a critical bug. Localization covers 8 languages entirely: the interface, the app store metadata, and all 133 challenges. Sentry handles crash reporting and PostHog runs analytics, counting events but intentionally never recording what anyone types. Challenges we ran into Designing progression for shy people. Pushing someone up a difficulty ladder faster than they're ready is how an app like this hurts people. Every rule algorithmically leans towards holding them back to ensure safety. Apple Watch sync. For the watch app, I found the phone's first update was getting swallowed by the WatchConnectivity framework. On launch, the watch was showing challenges to people who hadn't subscribed, and a stuck "done" state left the wrist showing a different streak from the phone. Double work at launch. Two screens were fetching subscription data at the exact same moment, and the App Store took 7.6 seconds to answer, causing a massive UI hang. I had to rewrite the logic to share a single StoreKit fetch with short-lived caching to cut launch latency. Accomplishments that we're proud of Building in Public for 40+ days while working full-time. I documented every single day of this journey with a daily video update across X, YouTube, and TikTok—often recording my updates right in the middle of my lunch break. Launching on the App Store during the Shipaton. Translating the actual behavioral challenges contextually, not just replacing the button text. Building an empathetic UX that never celebrates at the wrong moment: no share prompts after a rep you rated as "rough." What I learned Building in public is what made me believe this could actually work. People's suggestions shaped real features — the post-rep rating flow and App Store review prompts came straight from community comments — and their questions pushed me to dig into bugs I would have never caught alone. The support made me work harder than I thought possible. What's next for ShyBreak An App Store Feature. I just officially nominated ShyBreak to be featured by Apple. The story is strong: rating a social rep from your wrist, seconds after you do it, without hiding behind a phone screen. Accessibility. Expanding our dynamic type support to make the UI highly accessible. Community Expansion. making content to share what ShyBreak offers, and growing the 133-challenge library using ideas submitted by the people actually using it.
Built With
- cloudflare
- posthog
- revenuecat
- sentry
- swift
- swiftui
- xcode
Log in or sign up for Devpost to join the conversation.