Doodlewick
A cooperative drawing-and-guessing game for two. No coins, no ads, no clock.
After building Wordwright I had a game that worked the way I wanted — a move at lunch, a move before bed, nobody waiting on anybody. So I went looking for another one to build in the same shape, and kept coming back to Draw Something.
It came out in 2012, it was great, and it got bought within weeks. What showed up after that was a coin economy: harder words paid out coins, coins bought brushes and colours. The game underneath never changed, it just got a store bolted onto it. Zynga switched the servers off at the end of 2022 and the revival that followed is ad-supported. So I built my own.
I had three things I wanted out of it:
- Cooperative — Draw Something had two people taking turns but nothing actually at stake between them. I wanted one score and one pool of lives shared by both players, so you win or lose together instead of just trading pictures.
- No clock — not on the drawing, the guess, or the turn. I wanted to be able to put my phone down mid-drawing and come back to it the next day.
- Nothing to sell — every colour and every brush is there on the first turn. There's no currency, no unlocks and no ads, because there's no business here to need any of that.
Functional Design
One of you picks a word and draws it. The other watches it get drawn back stroke by stroke, then builds it out of a tray of letter tiles — the ones the word needs, plus a handful that it doesn't. Get it right and the word's value goes on the shared score. Get it wrong and it costs a life.
The part I spent the longest on was that last bit. My first version just took a life for a wrong guess, and when I played it that way nobody wanted to guess at all — you'd sit there staring at a picture you were 80% sure about, not typing. So now a wrong guess also removes one of the letters that isn't in the word. You pay a life and the word gets easier, which is enough to make people take the shot. It also means the third guess is usually free, which I have decided is a feature.
Everything else follows from having no clock in the game. A drawing in progress gets saved as you make it, because with nothing hurrying you along it's going to sit through a locked phone and a closed tab at some point. Add it to your home screen and it'll notify you when it's your move, which is honestly most of how it gets played.
Technical Design
The guessing browser never gets the word. The server picks it, holds onto it, sends down a tray of letters and a length, and checks the guess itself. Open the dev tools on the guessing screen and there's nothing in there to find — not the answer, not the words it was picked from, and not which of your tiles are the decoys. I am fully aware that I am the only person likely to go looking, which is exactly why I did it.
A drawing is stored as a list of strokes rather than an image — lines and fills with coordinates in a 1000×1000 square. That's what makes it possible to replay a drawing being made, and it's a lot smaller than sending a PNG every turn. It's also why the paper is square on every device: both of you have to be looking at the same picture, and a fixed shape is the only way to guarantee that.
The rest is deliberately boring. One HTML file, one PHP file, SQLite, and a three second poll. There's no build step and nothing to install — deploying is copying a folder onto a PHP host.
Tech Stack
- Vanilla JS in a single HTML file — canvas, drawing tools, replay and animations, with inline CSS and JS. No framework, no build step, no dependencies.
- PHP + SQLite — one file holding the API and every rule in the game. Clients poll it every three seconds.
- Web Push — about two hundred lines of PHP doing the encryption itself, so notifications go straight from my server to your phone without a third party in the middle wanting an account.
- PWA — a service worker and manifest so it installs to a home screen and opens without browser chrome. Delete the whole layer and the game still plays.
Play it
- Try Me! — Doodlewick. Grab a friend, one of you starts a game and reads out the room code.