The first commit of Stitch Puzzle had no game in it.
It had a study of about 1,775 reviews of Yarn Loop and 1,896 reviews of Pixel Flow, two popular thread puzzles. It had a teardown of how they monetise, rough revenue estimates and a pitch deck. The code came after.
Three and a half days later the game had 216 levels, iOS and Android builds and a support page on this site. It’s live on Google Play now. The iOS version is still waiting for App Review.
The game
Spools of thread travel round an embroidery hoop. Each spool pulls out the first stitch in its line of sight if that stitch is its colour. A spool with thread left over waits on a shelf. Fill every slot on the shelf and you lose.
It’s calm, it’s a little bit clever and you can play it with one thumb on the sofa.
A level
Hold to preview
Daily picture
What the reviews said
People like this genre. They hate how it’s run. The complaints were loud and consistent: levels that feel unwinnable, ads forced between rounds, a queue you can’t see and luck dressed up as skill.
So I wrote eight promises before the first level. Among them:
- Every level is checked by a solver, so every level can be won without paying.
- The queue is visible.
- No forced ads.
- Colourblind symbols.
- It works offline.
- Every finished picture comes with a real chart you can stitch.
The rest followed from those. “Mystery skeins” were an obvious mechanic to steal. I dropped them because hidden colours were the top complaint about luck.
The real chart
This is the bit no competitor does. Finish a picture, tap “Get the real chart” and you get a proper cross-stitch pattern: symbols, a bold line every 10 stitches, centre arrows, DMC thread numbers with stitch counts and the finished size on 14-count Aida.
It exists because I’d already built the converter. A week before the game I wrote cross-stitch, a Python tool that turns any image into a printable DMC pattern: a PDF with a chart, a colour key and a shopping list of skeins.
It matches every cell to one of about 455 DMC thread colours in CIELAB, a colour space built around how people see differences. If you feed it a photo of existing stitchwork, it finds the stitch grid by autocorrelation and reads it cell by cell instead of resampling. It splits charts across A4 pages and tries to put the cuts away from busy areas, because nobody wants to stitch across a page break in the middle of a face.
I measured it against a designer’s hand-made chart called “Нічка”. The converter’s DMC matching then became part of the game’s level pipeline.
The charts were going to be a paid extra. On day two I made them free for everyone. They’re the thing that makes the game feel like it belongs to the hobby.
Lives lasted 19 hours
I ran the game through rounds of AI review. The first round scored it 3.5 out of 10. Ten polish rounds later it had lives, like every other game in the genre.
Nineteen hours after that I deleted them. The “fair play” commit gave you free restarts, a shop that never opens by itself and free charts.
The money comes from rewarded ads you choose to watch for a free continue, and coin packs from $0.99 to $9.99. Coins buy helpers and decorations for your cottage.
The cottage I said I wouldn’t build
The plan said, in writing: no races, no story, no home to decorate.
The game now has a cottage with four rooms, a cat you feed once a day, crafter XP and a button-jar mini-game. So much for the plan.
The real chart
Craft room
Kitchen
The hint that walked into a wall
The first hint system was greedy: it suggested the best move right now. On 17 levels that led straight into a dead end, the fox picture among them.
The fix was a real solver in GDScript. The web build has no threads, so it searches for a winning line a little at a time on each frame. If it runs out of budget, it falls back to the solution stored with the level. The hint now follows a line that wins, and the game warns you when a move leads to a dead end.
Every level is tuned by simulation. A script plays each deal with a random player and keeps it only if that player wins inside a target band: 35 to 50% for normal levels, 6 to 12% for super hard ones. Every pair of colours in a level is at least 20 apart on CIEDE2000, a colour difference formula, so you never squint at two blues.
Built with Godot
It’s Godot 4.7 with about 7,000 lines of GDScript. The rules were prototyped in JavaScript first and ported line by line. Art, music and sound effects came from AI tools, and the first 10 levels include two public-domain Hokusai prints.
Progress backs up to my own Supabase with a code you type on the new phone. There are no analytics.
Google Play · Stitch Puzzle support · cross-stitch converter