Revela - A polyglot's toolkit

Inspiration

While reading Harry Potter in English, I kept hitting words I wasn't 100% sure about, nothing major, just enough hesitation to break my flow. Every time, I'd grab my phone, open Google Translate or ChatGPT, type the word, wait for the translation, then go back to the page. On some pages, I did this constantly, and it turned reading into a chore.

Then I rewatched the scene where Snape points his wand at the Marauder's Map and commands, "Reveal your secrets." It got me thinking: what if I could touch the book and say, "reveal your language," and every word I didn't know would appear with its meaning, right there?

Then it hit me: I don't need a wand. I already have something just as magical: my phone. We explain it with science now, but hand a smartphone to someone from centuries ago, and they'd call it sorcery without a second thought; you tap a glowing slab of glass, and someone shows up at your door with a pizza. That's magic.

So we decided to build that spell ourselves. Named it Revela, short for "reveal language."

What it does

Point your camera at any text, and Revela translates it, word by word or sentence by sentence. Tap a word to save it, and it feeds into WordCards for practice.

We later added Tandem mode and real-time speech translation after a trip abroad, since the translation pipeline was already there.

How we built it

Revela is built with Kotlin Multiplatform and Compose Multiplatform, sharing one codebase across Android and iOS. OCR, translation, and speech recognition all run on-device with offline fallbacks. RevenueCat handles subscriptions across both platforms. We used Claude throughout development, and Higgsfield AI for the app's visuals.

Challenges we ran into

One of the main challenges was that Android and iOS expose very different speech recognition APIs. We solved this using Kotlin Multiplatform's expect/actual mechanism, defining the common speech recognition interface in shared code and providing platform-specific implementations for Android and iOS. This kept the platform differences isolated while allowing the rest of the application to use the same API across both platforms.

The App Store submission also took longer than expected, with the review process extending to around two weeks. We eventually downgraded some of the libraries to versions we knew to be stable, and the app passed review successfully after that change.

Even though the app doesn't require a login, providing the App Store reviewers with the necessary sandbox test accounts was important, especially for testing the purchase flow. Apple's test environment can sometimes behave differently from a production environment, so providing reviewers with the cleanest and most reliable testing environment possible made the process much smoother. After stabilizing the library versions and providing the required sandbox accounts, the app passed the review without further issues.

Accomplishments that we're proud of

Being a pure Kotlin Multiplatform app, one shared codebase across Android and iOS. Running on-device AI models for OCR, translation, and speech instead of depending on network calls. Shipping something this feature-complete with a team of two. But the thing we're most proud of is how much care went into accessibility. Beyond what AI tools and skills catch automatically, every screen is manually checked by hand against WCAG guidelines, down to a dedicated landscape layout that's both more accessible and gives tablets a proper UI instead of a stretched phone screen. We're also proud of going full localization. Anyone installing an app like this, by definition, doesn't speak the language they're trying to learn, so we made sure the app itself is completely localized rather than assuming English as a fallback.

What we learned

We learned how to build an app end-to-end with Kotlin Multiplatform, from architecture to shipping on both stores. We picked up generating app visuals, including assets that can later be reused for ads. Through RevenueCat's research and docs, we learned how to think about monetization, pricing strategy, trials, and what makes a subscription setup work.

What's next for Revela - Photo Translator

Next up is marketing to get Revela in front of more people, and building a process to prioritize updates based on user feedback rather than guessing what to build next.

Our bigger goal is to make Revela the ultimate polyglot language-learning tool.

One problem that motivated us is that people can spend years studying a language at school without becoming truly proficient, or maintain a one-year streak in a language-learning app without reaching the level they hoped for.

At the same time, children can naturally acquire a new language within a few years, and there are polyglots who report reaching conversational levels in new languages within months. This made us interested in a simple question: what are the most effective ways to learn a language?

We are currently researching how polyglots approach language learning and identifying methods that we can turn into practical features inside Revela. We've already integrated spaced repetition through word cards, and this is just the beginning.

We've now shipped the MVP, so our approach going forward is to continuously improve Revela and release new features as they become ready. One of our main areas of interest is on-device AI, as well as using LLMs to bring more effective and personalized language-learning techniques into the app.

We're also exploring an MCP connection with other AI apps, so users could save a word directly into Revela from wherever they encounter it.

And we want to keep pushing accessibility further. The goal isn't just compliance; we want other developers to look at Revela and think, "that's how it should be done."

Built With

  • claude
  • cmp
  • composemultiplatform
  • firebase
  • kmp
  • kotlin
  • kotlinmultiplatform
  • revenuecat
Share this project:

Updates

Submission history