Inspiration
Most of us have a conversation we keep putting off: asking for a raise, setting a boundary, telling a teammate their work isn't landing, or saying no without guilt. We rarely avoid these because we don't know what to say. We avoid them because we've never said it out loud, and the first attempt happens when the stakes are highest.
Athletes rehearse, speakers rehearse, and actors rehearse. For everyday hard conversations, though, most people rehearse only in their heads, in the shower, or at 2 a.m. We wanted to build a safe, private place to say the hard part out loud before it's real, with a partner who actually talks back.
This matters most for new managers. Almost overnight they're expected to give honest feedback, hold boundaries and handle pushback, usually without anyone to practice with.
What it does
Unsaid is an iPhone app for rehearsing difficult conversations out loud with a realistic AI voice partner, then getting honest feedback on how you did.
36 real-life scenarios covering work, family, friends, money and everyday situations: ask for a raise, give honest feedback, set a boundary, say no without guilt, receive criticism without shutting down, hand in your notice, and more. Each comes with clear, concrete goals, such as "Describe the specific behavior you observed" and "Explain the impact it had on the team," so you know what a good conversation looks like before you start.
Live voice practice. Swipe up and just talk. Your practice partner speaks first, answers in a natural voice and reacts to what you actually say. Pushback is included. You choose how much resistance you want: Supportive, Realistic or Challenging. You can also pick from several practice voices. Honest feedback, not just a score. After each practice you get a conversation map showing clarity, empathy, directness, composure and listening. You also see what worked, what to try next time, how you did on each goal, and the full transcript.
Custom scenarios. Describe your own situation in plain words, for example "I just became a manager. A teammate keeps missing deadlines and I need to raise it without damaging our relationship." Unsaid turns it into a ready-to-practice scenario with a title, goals and a partner who behaves the way you asked.
Progress over time. Activity keeps your practice history, stats and past feedback, stored privately on your iPhone first, with optional backup to your private iCloud. Reminders that bring you back. Opt-in practice reminders open straight into a specific scenario, so you land in the practice rather than on a home screen. Safety built in. Content is moderated, and a clear support sheet points people to emergency and crisis resources if a conversation touches something serious. Unsaid is a practice tool, not therapy.
Monetization: Everyone gets 6 free voice minutes each month and every built-in scenario. Unsaid+ (monthly or yearly, with a free trial for eligible users) unlocks 45 voice minutes a month, custom scenarios and full feedback on every practice. Purchases, trials, restores and entitlements all run through RevenueCat.
How we built it
iOS app: SwiftUI for iOS 18+, iPhone portrait, written in Swift 6 with strict concurrency. It uses a feature-first architecture where every integration sits behind a protocol with a deterministic preview version, so every screen can be tested without live services. The glowing halo on the live call is a custom Metal shader that responds to the conversation state.
Voice: ElevenLabs Agents power the live call as one continuous, low-latency voice session. Each scenario supplies the partner's role, opening line, goals and voice. The partner opens with varied, in-context lines, and the app handles silence, inactivity and natural farewells so a call ends like a real conversation.
Backend: Convex (TypeScript) handles account sessions, practice quotas, custom-scenario generation, feedback generation and reports. Before a call, the backend reserves the user's remaining minutes and issues a short-lived voice token. It then charges only the time actually used, so failed or cancelled calls cost nothing. Provider API keys never ship in the app.
AI feedback and custom scenarios: OpenAI moderates input and turns a finished transcript into structured feedback, scored against that scenario's goals and weights. It also turns a user's description into a safe, playable custom scenario.
Accounts and privacy: Sign in with Apple with revocable sessions. Practice history is stored on the device first, with optional CloudKit private sync, and Unsaid never stores recordings of your voice. You can delete a single practice, all history or your whole account in the app.
Monetization: RevenueCat handles offerings, trial eligibility, purchases, restores and the unsaid_premium_access entitlement, and a RevenueCat webhook keeps the server's quota tier in sync. Engagement: OneSignal handles opt-in push notifications that deep-link into specific scenarios. The OneSignal ID is passed to RevenueCat for subscription-aware lifecycle messaging.
Challenges we ran into
Making it feel like a real conversation. We started with a turn-based design: hold to speak, on-device transcription, then one AI reply at a time. It worked, but it felt like using a walkie-talkie. Midway through the build we switched to a continuous ElevenLabs voice session. That meant rebuilding the call lifecycle to handle connecting, silence at the start, long pauses, the partner ending the call naturally, and backgrounding, without ever leaving the user stuck.
Fair, abuse-resistant minutes. Voice time costs real money. We needed a system that stops parallel calls from overspending, never charges for failed or unused time, survives the app being killed mid-call, and stays in sync with RevenueCat entitlements. The server is the only authority on how much time is used; the app never reports its own number.
Feedback that's actually useful. Generic "good job!" feedback is worthless. Scoring against each scenario's goals, and not saving attempts where the user barely spoke, made the feedback feel honest. Privacy for sensitive conversations. People rehearse personal things. Keeping history on the device first, never storing audio, and giving people real deletion controls took deliberate design in every layer. Shipping native polish on a deadline. Custom motion, a Metal-driven call halo and full accessibility support, while also getting through App Review, took constant tradeoffs.
Accomplishments that we're proud of
A live voice partner that feels like a conversation, not a chatbot. The partner pushes back, asks follow-up questions and ends the call naturally.
Custom scenarios that let someone rehearse their exact situation in under a minute.
A monetization model that's generous and fair: a real free tier, clear value in Unsaid+, charges only for minutes actually spoken, all handled by RevenueCat.
A calm, warm, fully native design with hand-drawn characters for every scenario, dark mode, and accessibility support from day one.
Privacy and safety built in from the first screen, not added afterwards.
What we learned
For voice products, latency and turn-taking matter more than model quality. The switch to a continuous voice session changed how the whole app felt.
Monetization is product design. Deciding what's free, what's premium and how minutes are counted shaped the architecture from the first backend schema.
Building every integration behind a protocol with a deterministic preview made it possible to iterate fast, test every state and record demos without live services.
People don't need to be told what to say. They need a safe place to hear themselves say it.
What's next for Unsaid
A more distinctive design. We're working with a designer on a refreshed visual identity and interaction design, so Unsaid feels more unique, warmer and more memorable.
ElevenLabs creator program. Voice is our biggest cost. We're applying to ElevenLabs' creator program to lower our voice bill, which would let us give free users more minutes and keep Unsaid+ affordable.
Deeper manager and workplace packs. One-on-ones, performance reviews, delivering tough news, handling defensiveness, and saying no to extra work, each with progressive difficulty.
Practice streaks and progress insights. Compare attempts at the same scenario over time, so people can see their clarity and composure improve.
Smarter reminders. OneSignal Journeys that suggest the next scenario based on what you practiced, and follow-ups before the real conversation happens.
More languages and voices, so people can rehearse in the language the real conversation will happen in.
Teams and coaching. A way for managers, coaches and L&D teams to assign scenarios and help people build confidence together.
Built With
- cloudkit
- convex
- elevenlabs
- livekit
- metal
- onesignal
- openai
- revenuecat
- sign-in-with-apple
- swift
- swift-testing
- swiftui
- typescript
- xcode
- xcodegen
- xctest
Log in or sign up for Devpost to join the conversation.