I built a translator app that runs entirely on your phone. No cloud. No API calls. No data leaving the device. 108 languages. Voice, camera, screen translation, and offline group conversations over Bluetooth.
It started because I could not find what I needed, and it turned into something bigger than I expected.
The Problem
I live in Hong Kong. My daily life involves Cantonese, Mandarin, English, and occasionally Japanese. My partner's family speaks Cantonese. My work is in English. The government forms are in Traditional Chinese. The restaurant menus in the neighborhood are often in Simplified Chinese or Japanese.
I tried every translator on the market:
Google Translate works well enough online, but offline quality drops hard. And it lumps Cantonese into "Chinese," which anyone who speaks Cantonese knows is like lumping Portuguese into "Spanish." They share characters but not pronunciation, grammar, or vocabulary.
Pocketalk costs $323 and needs internet for every translation. I cannot use it in the MTR (Hong Kong subway) where there is no signal in half the stations.
Apple Translate has beautiful design and good on-device processing, but supports about 20 languages. No Cantonese. In a city where 95% of the population speaks Cantonese. That tells you everything about how the big tech companies prioritize languages.
iTranslate puts core features behind a $50/year paywall. DeepL does not even do voice or camera.
None of them could handle a dinner with my partner's family where people switch between Cantonese, Mandarin, and English mid-conversation. None of them could translate the Cantonese voice messages I receive on WhatsApp. None of them worked reliably in areas with bad connectivity.
So I started building.
The First Version Was Terrible
The first prototype was a Flutter app with a single ASR model (Whisper, running on-device via sherpa-onnx) and basic NMT translation. It handled maybe 15 languages. The voice recognition was slow. The translations were mediocre. The UI was ugly.
But it worked offline. And that single fact, that I could translate a Cantonese sentence to English on a plane with no WiFi, kept me going.
The Architecture Rabbit Hole
Once you commit to on-device AI, you fall down a deep rabbit hole.
ASR (speech recognition): One model does not fit all languages. I ended up shipping three: Parakeet (English-optimized, bundled), Whisper.cpp (broad multilingual, downloadable), and Qwen3-ASR (CJK-optimized, downloadable). The app routes to the best model automatically based on the source language.
Translation: Traditional ML models cover 61 well-resourced language pairs. For the remaining 47 languages (Yoruba, Amharic, Lao, Myanmar, and others), a quantized Gemma LLM running locally handles translation. This was the unlock that took language count from 61 to 108.
Camera OCR: Two engines. ML Kit for fast recognition. PaddleOCR for thorough recognition of complex scripts. iOS required manually adding script-specific pods because Apple only bundles the Latin model by default. That took a day to debug because the failure is completely silent.
Group chat: Bluetooth mesh connecting up to 7 devices. Each phone handles its own ASR and translation. Messages broadcast to all devices. No server coordinating anything.
Memory management: The real engineering challenge. Three ASR models, translation models, an LLM, and OCR engines cannot all live in phone RAM simultaneously. The app has a memory budget planner that loads and evicts models based on what the user is doing right now.
The Numbers
- Development time: About 18 months from first commit to App Store / Play Store launch
- Languages: 108 (61 traditional ML + 47 AI via Gemma)
- ASR languages: 30 with on-device speech recognition
- OCR languages: 92 with camera text recognition
- App size: ~150MB base + downloadable models
- Pricing: Free tier with all core features. Premium at $1.99/month or $19.99/year for group chat, file transcription, and meeting summaries
- Team size: 1 person
What I Got Right
Privacy as architecture, not policy. "We do not share your data" is a policy. It can change. "Your data never leaves your phone because there is no server" is architecture. It cannot change without rebuilding the app. Users understand this distinction intuitively.
Cantonese as a first-class language. Most translators treat Cantonese as Chinese with a different accent. Traverba has a dedicated ASR model for Cantonese. This resonated strongly with the Hong Kong and Guangdong user base, who are tired of being treated as an afterthought.
The free tier is generous. Voice translation, camera translation, screen translation, and text translation are all free and unlimited. The paywall only gates group chat features, file transcription, and meeting summaries. This is important because the people who need translation the most, immigrants, travelers in unfamiliar places, students, often cannot afford premium subscriptions.
Offline-first design. Every feature works without internet. Internet is not a degraded mode. Offline IS the mode. This is a stronger value proposition than "also works offline."
What I Got Wrong
Underestimating low-end devices. Development happened on flagship phones. The first time I tested on a phone with 3GB RAM, half the features crashed. Memory management should have been the first thing I built, not a retrofit.
The iOS review process. Apple rejected the first submission for not implementing App Tracking Transparency (ATT). Even though Traverba does not track users, the AdMob SDK triggers the requirement. Getting ATT wired correctly through Flutter with the right timing (after app launch, before ads initialize) took multiple iterations.
Not launching sooner. I spent months polishing features that users did not ask for before launching. The feedback I got after launching was about completely different things than what I expected. Ship early, listen, iterate. Everyone says this. I still fell into the trap.
The Market Opportunity
The translation market is worth over $40 billion and growing. But it is dominated by two extremes:
- Free cloud apps (Google Translate, Apple Translate) that are good enough for most people but sacrifice privacy and offline reliability
- Expensive hardware devices (Pocketalk $323, Timekettle $299, Vasco $350+) that require internet and solve a problem your phone already solves
The gap in the middle, a free/affordable app with full on-device processing that actually works, is surprisingly empty. DeepL is text-only. iTranslate paywalls core features. Most AI translation tools are cloud-only.
On-device AI has crossed the quality threshold. The models are good enough. The phones are fast enough. The frameworks (CoreML, ONNX, sherpa-onnx, LiteRT) are mature enough. The missing piece was someone building the product layer on top.
What Is Next
The immediate roadmap:
- More ASR languages. 30 is a good start but the long-tail languages need speech recognition too.
- Improved LLM translation. Gemma 2B is good. Newer, smaller models may be better. The architecture supports swapping models without changing the app.
- iPad and tablet optimization. The app works on tablets but the UI is not yet optimized for larger screens.
- Android Vulkan acceleration. iOS has Metal and CoreML for GPU inference. Android's GPU acceleration story (Vulkan via whisper.cpp) needs more work.
The bigger vision: a world where language is not a barrier to human connection, and where breaking that barrier does not require handing your private conversations to a tech company's servers.
If you have made it this far, try the app. It is free. I read every piece of feedback.
Traverba is available on Google Play and App Store. Learn more at traverba.com. Questions, feedback, or feature requests: [email protected]