Inspiration

Most puzzle games track your progress with a number on a menu. I wanted the levels you beat to actually build something you can look at. I also wanted a puzzle that's about thinking, not reflexes. Nothing is timed, every board can be solved, and you can always work out the answer just by looking.

What it does

Burrow Run is a maze puzzle for Android. A rabbit needs to get home and snakes are lying across every path. Tap a snake and it slides up to three cells forward along its own body, stopping when it hits something. Move the snakes around until a lane opens, grab every carrot (the burrow stays locked behind a grille until the last one is collected), then walk the rabbit home. If you slide a snake onto the rabbit, it gets caught.

There are four kinds of board. Normal burrows. Warrens, where several mazes are joined by tunnels the rabbit fits through but the snakes can't. Long Runs, where three to five boards are linked by teleport holes and your hearts carry over. And Snake Attack, where a picture is made out of snakes and you tap them off the board in the right order.

Levels come in Meadows of ten that mix all four kinds, so you never do the same thing twice in a row. There are 241 Meadows, 2,410 levels in total, plus a daily puzzle that's the same for everyone.

Then there's the farm. Carrots only come from solving puzzles, and they buy seeds. A crop grows with time or with the levels you clear, whichever is faster, so playing the puzzle literally grows your farm. You harvest into a barn, run a mill, a bakery and a jam kitchen, fill orders for gold, and spend it on 19 buildings, more land and 75 decorations. You can even draw stone paths with your finger.

All of it works offline.

How I built it

The whole game is plain HTML, CSS and JavaScript. No framework and no build step, you can open index.html in a browser and play it. I used Capacitor to turn it into an Android app.

The part I'm proudest of is how the levels are made. Instead of generating a random board and hoping it can be solved, I start from a solved board and play it backwards, one move at a time, until it's scrambled. That way every level is solvable from the start. I wrote a Node script that makes thousands of these and sorts them by how they play: how many different snakes you need to move, how much thinking each move takes, and how tangled the board is. That keeps the variety instead of just keeping the hardest ones. Then a solver checks every single board before it ships.

Each level is stored as a random seed plus a short list of changes, so a whole level takes about 235 bytes.

The same solver runs on the phone to give hints and to drive the tutorial. The tutorial has no text at all. A ghost hand shows you the move on the real board and waits for you to copy it.

Everything is drawn with SVG. The snakes aren't images, they're lines drawn in code with a little face on the head. The farm sits on an isometric grid, and the paths are drawn flat and then tilted into place with a single transform, so they always line up perfectly.

Most of the farm art started as images I generated with ChatGPT. I wrote my own tool in Node to cut them into sprites, and the hardest part was separating green bushes from green backgrounds. Colour couldn't do it, but texture could, so the tool checks how rough each patch of pixels is.

All the sound effects are generated live in code with the Web Audio API, only the music is recorded. For the app side I used Firebase for sign in, cloud saves, crash reports and analytics, AdMob for ads, and RevenueCat for the purchase that removes them. I used Claude Code as a pair programmer the whole way through.

Challenges I ran into

  • At first, snakes always moved exactly three cells. When I tested about 2,000 boards, over 90% of them had no solution at all. Changing it to "up to three" fixed it.
  • The order of the backwards moves matters. When I tried to simplify it, 2 of the first 57 boards stopped rebuilding properly. Worse, it could have quietly turned a level into a different puzzle that still worked, and I'd never have noticed.
  • On an isometric grid there's no such thing as a straight horizontal line, so dragging your finger sideways made the path zigzag. I fixed it by locking each stroke to one direction as soon as you start drawing.
  • Testers find things you never will. A friend harvested 18 sunflowers and only got 2, because the screen was showing an old number while the harvest paid the real one. Another time, 46 of the 75 decorations became impossible to buy, and stone only worked by pure coincidence.

Accomplishments that I'm proud of

It's live on the Play Store. 2,410 levels, and every single one is proven solvable. Each level fits in about 235 bytes. The whole game runs offline, in a browser or on a phone. And the farm isn't just stuck on the side, it's powered by the puzzles.

What I learned

Build puzzles backwards. Measure things instead of guessing; almost every art problem got solved once I actually measured the pixels. If pieces need to line up, draw them with code instead of using images. And when progress only ever goes up, syncing two devices is easy: just keep the best of both.

What's next for Burrow Run

Proper animations for the farm (maybe even in 3D), and more puzzle types. A circular maze is already prototyped.

Built With

Share this project:

Updates

Submission history