ZooGrid
A cozy number logic puzzle with 1,000 unique-solution boards


Scale
1,000 unique-solution levels
Performance
Fully offline play
Reach
Users in 10+ countries
The Problem
A logic puzzle only feels fair when each board has exactly one answer, because a second solution forces the player to guess. Checking that by hand across a thousand levels is not realistic, and a difficulty curve built on instinct would swing between trivial and punishing.
The Solution
A deterministic generator partitions each grid into rectangles, then tries clue placements and keeps the trickiest one that a solver proves has a single solution. Each batch of ten is ordered by a measured difficulty score, with a breather in the middle and the hardest board last. The validator re-solves every shipped level in CI. The result ships as data, so the app never generates levels on the device.
What it looks like.
What it does.
1,000 Unique-Solution Levels
Daily Puzzle With Streaks
Ten Animals With Real Sounds
Hints And Three Hearts Per Try
Five Languages
Fully Offline Play
How it's built.
Frontend
Flutter & Dart — pure engine, Riverpod state, canvas renderer
Backend
None — levels and progress stored on-device
Infrastructure
Google Play · Firebase Analytics, Crashlytics & Remote Config · AdMob
Tech Stack
What changed.
Wrote a seeded level generator and solver that regenerates the full 1,000-level set in about five seconds, with every board proved to have exactly one solution.
Shipped the game in five languages with a daily puzzle set of 730 boards, ten animals with their own sounds, and full offline play.






