← projects

SnapDish

FlutterDartPlatform ChannelsOn-device OCR
Download on the App StoreGet it on Google Play

The story

My sister's camera roll was overflowing with recipe screenshots. Instagram posts, blog pages, photos of cookbook pages. She could never find the one she wanted. The photos app can't search the text inside a picture, and the recipes were buried among thousands of unrelated images. SnapDish is the app I built to fix that.

What it is

You import your recipe screenshots and SnapDish runs OCR on each one, on-device, so the text inside the image (titles, ingredients, steps) becomes searchable. You get a little cookbook you can actually search, instead of an archive you have to scroll. Everything stays on the phone: SnapDish is local-only by design, with no backend and no account.

It found an audience quickly, with 1,000+ downloads in its first 14 days across the App Store and Play Store.

How I think about it

  • Local-only. Recipes and screenshots live in the app's own storage. Nothing is uploaded; there's no server to trust.
  • Fundamentals over frameworks. Plain Flutter. ChangeNotifier for state, file-based JSON for storage, the platform's own OCR engine for recognition. No heavy dependencies to ship a focused app fast.
  • Each platform's native strength. OCR runs through Apple Vision on iOS and Google ML Kit on Android, behind a single Dart interface.

The two articles below are about building it. First the Flutter app itself, then the on-device OCR, which turned out to be genuinely different on iOS and Android, including an on-device Gemma feature I tried and decided to cut.

Articles