PurrJar
A calm sorting puzzle with Piri the kitten. Balls of yarn sit mixed up in glass jars, and you move them one at a time until every jar holds a single colour.
Free in any modern browser, on a phone or a computer, in nine languages. No ads in the browser. The iPhone and Android apps are on their way.
How to play
- Tap a jar and its top ball lifts. Tap another jar to drop it there.
- A ball lands only on a ball of its own colour or in an empty jar.
- A jar closes when it is full and holds one colour. Most colours have four balls and most jars hold four. From level 35 some colours have three or five, and only a jar of the same size closes on them.
- Close every jar to finish the level, and Piri celebrates.
New twists arrive one at a time, and Piri explains each one the first time it appears: a wide jar that takes every ball of one colour, a jar tied with a ribbon that opens when its colour closes, and black balls that hide their colour until the ball above them moves.
What is in the game today
- A hundred levels that open one after another, from jars on wicker to bottles, test tubes, flasks and tubes that bend. A solver has checked every one, so every level can be finished.
- Undo, Hint, Shuffle and an extra jar, paid for with treats you earn by playing. Restart is always free.
- Piri’s daily gift, which grows over seven days in a row, badges, and a profile.
- Nine languages. Progress stays on your device, and once the game has loaded it plays without a connection.
Having trouble? See PurrJar help.
One rule engine for the browser and the phones, and a solver behind every level
- My role
- Game design, product, architecture
- Built with
- Claude Code agents I direct
- Stack
- TypeScript, canvas, Capacitor
- Runs on
- Browser; iPhone and Android on the way
- Server
- None yet: it all runs on the device
- Hosting
- Azure Static Web Apps, GitHub Actions
- Tests
- 109 unit tests, 12 browser tests
- Levels
- 100, each checked by the solver
One rule engine
The rule, the solver and the hint live in one small TypeScript package. The page in the browser and the apps both run that same package, so a move means the same thing everywhere, and the tests that hold the rule hold every version of the game.
A solver behind every level
Before a level ships, the solver finds the shortest way to finish it, and the build checks that every one of the hundred levels can be finished and that its record matches. The same solver gives the hint on the phone, without a connection. When the rule grew to colours of three and five balls, all hundred levels were checked again under the new rule, and the shortest way through each older level stayed the same.
Built on PopSkip
PurrJar reuses what PopSkip had already proven: the app shell, the optional-video flow with its consent steps, and the way nine languages are written and checked. That is why it went from a first prototype to a working Android build in a few days.
Questions about how PurrJar is built are welcome through the contact form.