Project name
Havyn
Inspiration (- Why did you choose this idea?)
Havyn was built around a simple reality. Many women have had to fake a phone call to get out of an uncomfortable situation. But relying on improvisation in those moments isn’t enough. We wanted to turn that instinct into something dependable, a tool that gives women a fast, believable, and discreet way to leave safely, without having to think under pressure.
What it does
Havyn is a personal safety mobile app designed to help users discreetly respond to uncomfortable or unsafe situations. It allows users to trigger a realistic safety call, receive automatic timed check-ins, alert trusted emergency contacts, and navigate to nearby safe locations such as hospitals or police stations.
How we built it (What tools, languages, or platforms did you use?)
Havyn is an Expo React Native app written in TypeScript, structured around two main state layers: one for managing the fake call lifecycle and overlay UI, and another for safety planning (scenarios, contacts, voice, and persistence). We used AsyncStorage for local scenario storage, expo-av for audio playback, and react-native-maps with expo-location for the safety map experience. For voice realism, we built a lightweight Express backend that proxies text-to-speech requests to ElevenLabs, allowing scripted calls to sound natural in real time.
What features did you implement?
Havyn delivers three core experiences: a customizable safety plan, a realistic fake call system, and a safety map. Users can create and edit their own call scenarios, preview and customize scripts, and persist them locally. The fake call flow includes a timed trigger, scripted dialogue, real TTS playback, and a floating overlay so the call continues while using other parts of the app. The map shows nearby safe places, supports filtering and search, and includes a guided “get me there” mode with route and distance tracking.
Challenges we ran into
The hardest part was coordinating multiple “live” systems at once. Keeping a fake call active while users navigate the map requires syncing audio playback, timers, overlays, and navigation state across screens. We also ran into Expo-specific issues when combining maps, storage, and audio, where small version mismatches could break features. On the product side, designing safe editing flows (without risky auto-save) and making features work even without permissions (like location) required careful fallback logic.
Accomplishments that we're proud of
We’re proud that Havyn feels like a real product, not just a demo. The fake call system includes real audio playback, timing, and background behavior, making it believable in a real-world situation. The map is functional with ranking, filters, and navigation guidance, not just a static display. Most importantly, users can fully customize their experience through editable scripts and persistent scenarios, which makes the app feel personal and actually usable.
What we learned
We learned that safety-focused apps depend heavily on clean state architecture. Once multiple systems (calls, maps, timers, scripts) interact, separating logic into contexts and storage layers becomes critical. We also learned that Expo enables fast development, but still requires careful handling of native-like features. Finally, we saw that a strong user experience doesn’t always require full production infrastructure, thoughtful interactions and reliable fallbacks can create a convincing and useful product.
What's next for Havyn (What would you add or improve with more time?)
Next, we want to turn Havyn from a demo into a real safety tool. This includes integrating live location sharing with trusted contacts, improving the reliability of the fake call system in the background, and replacing demo map data with real-time APIs. We also want to expand the script system with AI-generated scenarios and smarter personalization, making the app more adaptive to different situations.
Built With
- asyncstorage
- elevenlabs
- expo.io
- express.js
- javascript
- node.js
- reactnative
- typescript
Log in or sign up for Devpost to join the conversation.