How I built Tilemory — a privacy-first photo sliding puzzle in Flutter
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.