How I built Tilemory — a privacy-first photo sliding puzzle in Flutter

Share

Some photos you never delete, but never really look at again either. Tilemory
started from that feeling. It turns one of your own photos — your kid, your
pet, a trip, an ordinary good day — into a sliding-puzzle board: crop it,
slide the tiles back into place, and when it's whole again you keep a little
"memory card" you can share. It's meant to feel like a small wooden puzzle in
your hands, not a high-score grind.

This is about the decisions behind it — especially privacy — and the Flutter build.

The decisions I didn't compromise on

  • On-device by default. Photos are processed on your device (crop, puzzle,
    history, share previews). Nothing is uploaded to my servers.
  • No accounts, no ads, no tracking. No login, no ad SDK, no third-party analytics.
  • One-time Pro, not a subscription. Replay analysis, HD export, watermark-free
    cards, more templates — a single lifetime purchase.
  • A daily challenge, so you and a friend play the exact same board and shuffle.

The tech

One Flutter codebase ships iOS + Android. A few choices:

  • On-device content safety: an optional NSFW check runs locally via TFLite —
    no image leaves the device, and it's off by default.
  • On-device QR decoding: the "same daily board as a friend" feature scans QR
    with ZXing via FFI, not a cloud / ML Kit service — keeps the privacy posture
    and permission surface minimal.
  • The memory card is rendered via a RepaintBoundary captured to an image, so
    the shared output is pixel-identical to the preview.
  • Daily images ship bundled as an offline fallback and refresh from a small
    remote manifest — the daily challenge works offline and stays fresh online.
  • The site (tilemory.app) is a small Go service; deep links are verified via
    .well-known (App Links / Universal Links).

Why privacy as a default

It's a photo app. The least surprising thing should be that your photos stay
yours — which also means there's simply no data collection to declare on
either store.

Launch

Tilemory is on iOS and Android now (tilemory.app). It's a solo project —
feedback very welcome, especially on the on-device approach.