Gridlock Pop
Drop blocks, clear lines, chase the combo. No timer, no lives.
A block puzzle on an 8×8 grid: three pieces at a time, fill a row or column and it clears, and the run ends when nothing fits. The rules are pure functions with no React anywhere in them, which is what makes a game this small worth testing properly.
Drop a piece, watch a line vanish, line up the next one. There is no timer, no lives and nothing asking you to come back tomorrow — the run simply ends when none of your three pieces fit anywhere.
The rules are not in the components
Grid, scoring, piece bag, placement legality and game-over detection are pure functions that import nothing from React. That separation is what lets 207 tests cover the interesting cases — the combo multiplier, a board that is full but not finished, the exact move where nothing fits — without rendering anything or simulating a touch.
What the tests could not catch
All 207 passed while the first drag on a real device crashed. The animated style was calling an ordinary JavaScript helper from a worklet, which Jest cannot see and a phone refuses to do. A second defect had the same shape: the board's position was read once on layout, so moving the window left every drop landing a cell out. Both needed a device, not a test run — which is the argument for the rest of the suite, not against it.
Capabilities
A pure rules engine
Placement, line clearing, scoring and game-over are functions over plain data, tested without a renderer.
Combo scoring
Clearing on consecutive moves builds a multiplier, so the reward is for setting up rather than for luck.
Offline and accountless
No sign-in, no network in the play path, and nothing that expires while you are not looking.
Lifetime unlock
A single non-consumable purchase removes every ad, permanently.
Screens
What it looks like in use.
Select any screen to view it full size. Use the arrow keys to move between screens and Escape to close.
Three pieces, one board, and a preview of where the drag will land. A full row or column clears; consecutive clears build the combo. The run ends when none of the three pieces fit anywhere.