Building Snooji cover image

Building Snooji

September 26, 2025

projects

I wanted to build a browser game with the same basic idea as Snood. Launch something at a board, match a group, try to clear it before the board gets you. I used emojis for the pieces and called it Snooji.

A pretty different project from the SaaS apps I usually write about.

The game lives in the browser

The game engine uses HTML5 Canvas and vanilla JavaScript. Shots bounce off the walls and snap into the grid when they hit the board. Match three or more of the same emoji and that cluster clears. Pieces left without a connection to the board drop away too.

That's where the interesting shots come from. Clearing a cluster can remove the support for a much larger part of the board. Meanwhile, the danger meter increases as you take shots, so you can't just fire indefinitely and hope it works out.

The engine handles the matching and falling pieces. Scoring rewards larger clusters and dropped pieces, giving you a reason to look beyond the easiest match in front of you.

Laravel handles the rest

I used Laravel 12 for the backend, storing games, levels, and scores. Redis caches the leaderboards. The actual aiming and collision logic stays in JavaScript.

Levels are stored as JSON parameters. A level can specify grid dimensions, which emojis appear, how densely the board starts, the move limit, and score targets. That gives me a way to change the challenge without changing the engine for each level. It also supports both hand-built and generated levels.

The useful split here is pretty straightforward: Canvas handles play; Laravel handles the things I want to save and show outside a single game.

You can play Snooji in the browser. Daily challenges and multiplayer were on the ideas list, but launching emojis at a board was enough to get the first version out.