I'm a solo developer, and for the past months I've been building Mangit: an iOS and Android app that translates manga, manhwa and comic pages. You take a photo or screenshot of a page, and the app puts the translation back inside the speech bubbles, so you read the page like it was lettered in your language.

Here's how it's built and what I learned.

The pipeline

Every page goes through five steps:

  1. Detect the speech bubbles and text regions
  2. Read the text (OCR)
  3. Translate it, with the source language detected automatically
  4. Erase the original lettering (inpainting) without damaging the art
  5. Typeset the translation back into the same bubble, fitting the font size to the space

Steps 4 and 5 are where most of the work went. A translation that's correct but overflows the bubble, or leaves ghost strokes of the original text, feels broken to readers.

The stack

  • Kotlin Multiplatform + Compose Multiplatform for one shared UI and logic layer on iOS and Android
  • Koin for DI, Ktor for networking, Room for the local library, RevenueCat for subscriptions
  • Firebase Cloud Functions (Node.js) as the backend that orchestrates the AI calls
  • A self-hosted processing pipeline on Modal for the detection / erase / typeset work

Sharing the UI across both platforms is what makes it realistic to ship this alone. The platform-specific parts are small: image picking, file access, and a couple of expect/actual abstractions.

Cost was the real problem

The first version sent every page to a large image model. The output was good, but it cost about $0.05 per page. Manga readers don't translate one page: they translate whole chapters. At that price a free tier is impossible and even paid users can lose you money.

So I built a "lite" pipeline: smaller specialised models for each step instead of one big model, plus my own typesetting. It now runs at roughly $0.001 to $0.004 per page, with the big model kept as a fallback. That's what lets the app have a real free tier.

Lessons from going multilingual

The app translates into 30+ languages. The hardest bugs weren't in the translation but in rendering: a font that covers Latin scripts happily renders Thai, Arabic or Hindi as empty boxes, or nothing at all. If you typeset text yourself, test every script you support with real pages, not just English.

Try it

It's free to try (3 pages to start, then 3 free pages every week). I'd love feedback, especially from anyone who has worked on text detection, inpainting or typesetting, or on Compose Multiplatform at this scale.