# content
My daughter has spent a fair bit of her short life watching the back of my head while I stare at a screen full of bioreactor curves and Python. So one weekend I decided to put something on the screen that was actually for her. The result is a small block-puzzle game I called Cracker Blaster, and it has quietly become the most-played thing I have ever written.
Thank you for reading this post, don't forget to subscribe!
Let me be honest about what this is and is not. I did not invent a genre. Cracker Blaster is a clone of the block-puzzle idea you already know: The one where pieces drop into a grid and full lines disappear. That format has been refined by far better studios than me over many years. What I set out to do was take that well-worn idea and make my version of it as warm, as smooth, and as nice to hold in a small pair of hands as I possibly could. That turned out to be a much deeper rabbit hole than I expected, and I loved every minute of it.

You can play it here: cracker-blaster.vercel.app.

What the game is

It is an 8×8 board. At the bottom sits a tray of three pieces. Little polyominoes in soft pastel colours. You drag a piece onto the board, and the moment you complete a full row or a full column, it clears with a satisfying burst of crumbs and sparkles. There is no falling timer breathing down your neck. You place pieces at your own pace, and the only pressure is the slow truth that the board fills up if you stop clearing lines. When none of your three pieces will fit anywhere, the game is over.

The theme is crackers and biscuits, because that is roughly what the colour palette reminded me of while I was picking it: wheat cream, honey oat, sesame tan, graham brown, butter biscuit. The board is a warm wooden brown. The whole thing looks like a snack, which is exactly the effect I was after for a four-year-old audience.

How you actually play

Drag a piece from the tray onto the board wherever it fits.

Fill a whole row or a whole column to clear it and score.

Clear lines on consecutive moves to build a combo, which multiplies your points.

Keep an eye out for the two special pieces. They are worth saving for the right moment.

When all three tray pieces are used, a fresh set of three appears.

The two power-ups

Two pieces are not ordinary polyominoes. The Bomb is a filled 3×3 square that does not need empty space to land. Drop it anywhere and it blows a 3×3 hole clean through the board, which is wonderful for rescuing a position that has gone wrong. The Wild Line is a little plus-shaped cross that clears the entire row and column running through its centre. Both of them show up more often as you climb the levels, so the game hands you stronger tools right when the board is getting tighter. Watching my daughter learn to hoard a bomb for a desperate moment was one of the small joys of building this.

Making it feel good

This is the part that ate most of my weekends, and the part I suspect only other tinkerers will care about. A block puzzle is trivial to make work. Making it feel good is where all the time goes, and it comes down to dozens of tiny decisions that nobody notices individually but everybody feels together.

Scoring is a good example. You earn fifteen points for every cell you place, plus a small bonus for snugly fitting a piece next to others. Clearing lines is where the real points live, and a combo multiplier ramps up the more you chain clears together, topping out at triple points. But the detail I am quietest-proud of is the forgiving combo: your combo does not die the instant you place a piece without clearing a line. It survives one “wasted” move and only resets if you miss twice in a row. For an adult that is a generous grace period; for a child still learning to plan two moves ahead, it is the difference between a game that encourages and a game that punishes.

The sound is entirely synthesised. There are no audio files in the project at all. Everything you hear is generated on the fly with the Web Audio API. There are three little chiptune tracks that crossfade into one another depending on how well you are doing: calm and slow when you are pottering about, faster and busier when your combo and level climb. The clear sound is a crunch whose pitch rises with each step of your combo, so a long chain literally sings higher and higher, and there are short celebratory fanfares when you hit combos of three, five, and eight. You can mute the lot with one tap, which, as any parent who has handed a phone to a child in a quiet room knows, is not an optional feature.

Visually, the board is drawn on a 2D canvas that is resolution-aware, so the pieces stay crisp on a high-density phone screen instead of going soft and blurry. Behind everything sits a WebGL layer rendered with Three.js, with a bloom post-processing pass that gives the whole scene a gentle glow. Every cleared cell throws off a burst of “crumb” and “sparkle” particles, and those particles are recycled from a pool rather than created and thrown away each frame, which keeps the animation smooth even when several lines pop at once. It is a small thing, but the difference between a clear that just vanishes and a clear that scatters is enormous when you are five.

A short note on the engineering, for the curious

I cannot help myself, so here is the part where the day job leaks in. I spend my working life thinking about feedback and control about how a system senses its own state and responds. A puzzle game is, when you squint, a very gentle control loop: the player observes the board, acts, and the game responds with sound, particles, and a number going up. Most of the craft is in tuning that response so it lands at the right moment and the right intensity. I found myself fussing over animation timing with exactly the same instinct I bring to a control problem at work, which made me laugh more than once.

For anyone who opens the repository, it is plain vanilla JavaScript, no framework, no build step, just ES6 classes loaded straight into the page. I kept the structure deliberately clean because I wanted to be able to come back in six months and still understand it. The Board class is a pure data model and knows nothing about drawing. The Renderer draws and knows nothing about the rules. The Game class is the orchestrator that ties state, scoring, audio, and animation together, and the input handling, music, particles, and achievements each live in their own file. The pieces themselves come from a hand written library of polyominoes, from single cells up through the familiar tetromino shapes and a few larger blocks, with every rotation stored as its own entry so there is no rotation maths at runtime.

There are six achievements to collect, persisted in your browser so they survive between sessions: your first line clear, an eight-chain combo, detonating ten bombs over your lifetime, scoring ten thousand in a single game, reaching level ten, and the elusive perfect clear, emptying the entire board in one move. Your best score is saved too, and a little crown appears when you beat it. The whole thing is mobile-first and installs to a phone home screen like a real app, and it is hosted on Vercel so I can share it with a single link.

Why bother

I could have handed my daughter any of a thousand free games. But there is something I cannot quite explain about watching her play something I built, line by line, on the kitchen table after she had gone to bed. It is not a clever game. It is a clone of a clone, dressed up in biscuit colours. But every forgiving combo and every crumb-burst and every muteable jingle in it exists because I was thinking about her specifically while I wrote it, and she can feel that even if she could never name it.

If you have a small person in your life, point them at Cracker Blaster and let me know how high they get.

# contentMap.en
My daughter has spent a fair bit of her short life watching the back of my head while I stare at a screen full of bioreactor curves and Python. So one weekend I decided to put something on the screen that was actually for her. The result is a small block-puzzle game I called Cracker Blaster, and it has quietly become the most-played thing I have ever written.
Thank you for reading this post, don't forget to subscribe!
Let me be honest about what this is and is not. I did not invent a genre. Cracker Blaster is a clone of the block-puzzle idea you already know: The one where pieces drop into a grid and full lines disappear. That format has been refined by far better studios than me over many years. What I set out to do was take that well-worn idea and make my version of it as warm, as smooth, and as nice to hold in a small pair of hands as I possibly could. That turned out to be a much deeper rabbit hole than I expected, and I loved every minute of it.

You can play it here: cracker-blaster.vercel.app.

What the game is

It is an 8×8 board. At the bottom sits a tray of three pieces. Little polyominoes in soft pastel colours. You drag a piece onto the board, and the moment you complete a full row or a full column, it clears with a satisfying burst of crumbs and sparkles. There is no falling timer breathing down your neck. You place pieces at your own pace, and the only pressure is the slow truth that the board fills up if you stop clearing lines. When none of your three pieces will fit anywhere, the game is over.

The theme is crackers and biscuits, because that is roughly what the colour palette reminded me of while I was picking it: wheat cream, honey oat, sesame tan, graham brown, butter biscuit. The board is a warm wooden brown. The whole thing looks like a snack, which is exactly the effect I was after for a four-year-old audience.

How you actually play

Drag a piece from the tray onto the board wherever it fits.

Fill a whole row or a whole column to clear it and score.

Clear lines on consecutive moves to build a combo, which multiplies your points.

Keep an eye out for the two special pieces. They are worth saving for the right moment.

When all three tray pieces are used, a fresh set of three appears.

The two power-ups

Two pieces are not ordinary polyominoes. The Bomb is a filled 3×3 square that does not need empty space to land. Drop it anywhere and it blows a 3×3 hole clean through the board, which is wonderful for rescuing a position that has gone wrong. The Wild Line is a little plus-shaped cross that clears the entire row and column running through its centre. Both of them show up more often as you climb the levels, so the game hands you stronger tools right when the board is getting tighter. Watching my daughter learn to hoard a bomb for a desperate moment was one of the small joys of building this.

Making it feel good

This is the part that ate most of my weekends, and the part I suspect only other tinkerers will care about. A block puzzle is trivial to make work. Making it feel good is where all the time goes, and it comes down to dozens of tiny decisions that nobody notices individually but everybody feels together.

Scoring is a good example. You earn fifteen points for every cell you place, plus a small bonus for snugly fitting a piece next to others. Clearing lines is where the real points live, and a combo multiplier ramps up the more you chain clears together, topping out at triple points. But the detail I am quietest-proud of is the forgiving combo: your combo does not die the instant you place a piece without clearing a line. It survives one “wasted” move and only resets if you miss twice in a row. For an adult that is a generous grace period; for a child still learning to plan two moves ahead, it is the difference between a game that encourages and a game that punishes.

The sound is entirely synthesised. There are no audio files in the project at all. Everything you hear is generated on the fly with the Web Audio API. There are three little chiptune tracks that crossfade into one another depending on how well you are doing: calm and slow when you are pottering about, faster and busier when your combo and level climb. The clear sound is a crunch whose pitch rises with each step of your combo, so a long chain literally sings higher and higher, and there are short celebratory fanfares when you hit combos of three, five, and eight. You can mute the lot with one tap, which, as any parent who has handed a phone to a child in a quiet room knows, is not an optional feature.

Visually, the board is drawn on a 2D canvas that is resolution-aware, so the pieces stay crisp on a high-density phone screen instead of going soft and blurry. Behind everything sits a WebGL layer rendered with Three.js, with a bloom post-processing pass that gives the whole scene a gentle glow. Every cleared cell throws off a burst of “crumb” and “sparkle” particles, and those particles are recycled from a pool rather than created and thrown away each frame, which keeps the animation smooth even when several lines pop at once. It is a small thing, but the difference between a clear that just vanishes and a clear that scatters is enormous when you are five.

A short note on the engineering, for the curious

I cannot help myself, so here is the part where the day job leaks in. I spend my working life thinking about feedback and control about how a system senses its own state and responds. A puzzle game is, when you squint, a very gentle control loop: the player observes the board, acts, and the game responds with sound, particles, and a number going up. Most of the craft is in tuning that response so it lands at the right moment and the right intensity. I found myself fussing over animation timing with exactly the same instinct I bring to a control problem at work, which made me laugh more than once.

For anyone who opens the repository, it is plain vanilla JavaScript, no framework, no build step, just ES6 classes loaded straight into the page. I kept the structure deliberately clean because I wanted to be able to come back in six months and still understand it. The Board class is a pure data model and knows nothing about drawing. The Renderer draws and knows nothing about the rules. The Game class is the orchestrator that ties state, scoring, audio, and animation together, and the input handling, music, particles, and achievements each live in their own file. The pieces themselves come from a hand written library of polyominoes, from single cells up through the familiar tetromino shapes and a few larger blocks, with every rotation stored as its own entry so there is no rotation maths at runtime.

There are six achievements to collect, persisted in your browser so they survive between sessions: your first line clear, an eight-chain combo, detonating ten bombs over your lifetime, scoring ten thousand in a single game, reaching level ten, and the elusive perfect clear, emptying the entire board in one move. Your best score is saved too, and a little crown appears when you beat it. The whole thing is mobile-first and installs to a phone home screen like a real app, and it is hosted on Vercel so I can share it with a single link.

Why bother

I could have handed my daughter any of a thousand free games. But there is something I cannot quite explain about watching her play something I built, line by line, on the kitchen table after she had gone to bed. It is not a clever game. It is a clone of a clone, dressed up in biscuit colours. But every forgiving combo and every crumb-burst and every muteable jingle in it exists because I was thinking about her specifically while I wrote it, and she can feel that even if she could never name it.

If you have a small person in your life, point them at Cracker Blaster and let me know how high they get.

# name
Cracker Blaster: a little block puzzle I built for my daughter

# nameMap.en
Cracker Blaster: a little block puzzle I built for my daughter

# preview.content
A small, cracker-themed block puzzle I cloned and polished for my four-year-old — built in plain vanilla JavaScript with synthesised audio, a Three.js bloom backdrop, and a deliberately forgiving combo system. Free to play, open source on GitHub.

# summary
A small, cracker-themed block puzzle I cloned and polished for my four-year-old — built in plain vanilla JavaScript with synthesised audio, a Three.js bloom backdrop, and a deliberately forgiving combo system. Free to play, open source on GitHub.

# summaryMap.en
A small, cracker-themed block puzzle I cloned and polished for my four-year-old — built in plain vanilla JavaScript with synthesised audio, a Three.js bloom backdrop, and a deliberately forgiving combo system. Free to play, open source on GitHub.