Inspiration
Every trip meant juggling a different app for everything — one to convert currency, another to translate a menu, a notes app to track who paid for what. The breaking point was watching a friend try to "talk" to a shopkeeper by typing into a translator app one sentence at a time. I wanted something closer to a real conversation: hold a button, speak, hear the translation back.
What it does
TravelDex is an AI travel companion that translates by voice, text, and camera, tracks trip expenses and budget, and helps groups split shared costs — all in one app. Core features include a hold-to-talk Voice Translator with live transcript, Camera (OCR) Translation, Text Translate, Trip Budget estimation, an Expense Tracker, and Travel Squads for group trips.
How I built it
TravelDex is built in Kotlin Multiplatform with Compose Multiplatform, sharing one codebase across iOS and Android. I used Clean Architecture with Koin, Ktor, and Room, Supabase for real-time Squad sync, RevenueCat for cross-platform subscriptions, and Unity LevelPlay for ad mediation on the free tier.
Challenges I ran into
Integrating Supabase for real-time Squad sync was harder than expected — getting Row-Level Security policies right so squad members could only see their own squad's data, while still syncing expenses and settlements instantly across devices, took several iterations. I also secured backend APIs with Firebase App Check, which meant threading attestation tokens through a Kotlin Multiplatform networking layer that has to behave correctly on both iOS and Android, not just one. On top of that, wiring RevenueCat and Unity LevelPlay into the same shared codebase without platform-specific logic leaking into the business layer took real care in how I structured dependency injection with Koin.
Accomplishments that I'm proud of
One Kotlin Multiplatform codebase powering a genuinely native-feeling app on both platforms, a Voice Translator that supports real back-and-forth conversation instead of one-shot phrase lookup, and getting through App Store review by fixing the actual root cause instead of just resubmitting.
What I learned
Building real-time sync well means designing your security model (Row-Level Security, App Check attestation) at the same time as your data model, not after — retrofitting access control onto an already-working sync flow is much harder than starting with it. I also learned that Kotlin Multiplatform pays off most when third-party SDKs are wrapped behind your own interfaces early, so platform differences between iOS and Android stay isolated instead of spreading through the codebase. Integrating RevenueCat reinforced that same lesson from the monetization side — letting one shared subscription interface handle StoreKit and Play Billing underneath meant paywall and entitlement logic only had to be written once, instead of maintained twice and kept in sync by hand.
What's next for TravelDex
Group chat and push-to-talk for Travel Squads, a one-tap SOS location alert, broader language coverage, and smarter Trip Suggestions based on traveler preferences rather than generic destination lists.
Built With
- kmp
- kotlin
- revenuecat
- supabase
- swift

Log in or sign up for Devpost to join the conversation.