The week Kludoku lost its biggest source of players, and what I found while rebuilding everything the two rejections pointed at.
On Friday 28 August, two emails arrived a few hours apart.
The first was from the games portal that had been sending Kludoku most of its players. The game did not meet their basic launch requirements. The second was from Google's ad review: the site was low value content.
I had spent the previous fortnight working almost exclusively on the thing the first email was about. So this is a post about being wrong in public, and about what you find when two strangers tell you, on the same afternoon, that the thing you built is not good enough yet.
Portals do not grade you on whether your game is good. They grade you on gameplay conversion: of the people who load the page, how many actually start playing. It is a fair thing to measure — a portal is a wall of ten thousand thumbnails, nobody chose you, and if your game cannot get a stranger into a first move, that is your problem and not theirs.
Ours, measured on their dashboard: 44% on desktop against a 59% bar, and 14% on phones against 37.5%. Six of every seven phone players who opened Kludoku never started a case.
Our own numbers said the same thing from a different angle. Across 1,494 beginner cases opened on that portal:
Read those last two lines together, because they are the whole diagnosis. The puzzle is not too hard. More than half of everybody who makes a single move goes on to solve the entire thing. The game was losing people in the first thirty seconds, before it had explained anything — and half of the players who quit were gone in 43 seconds.
So I rebuilt the first minute. The board now deals in under three hundred milliseconds and opens directly on itself, no menu; a three-beat lesson runs on the live board — here is the rule, here is the one square that fits everything Conrad said, that is the whole game — and it waits for you to make the move rather than for you to press a button. The first placement is answered out loud: this row and this column are full now, four to go. The timer and the mistake counter stay hidden until you have finished a case, because a red counter reading zero next to a running clock is not a scoreboard, it is a threat.
Three days after that shipped, the portal said no.
I have no complaint about it. A review is a decision, not a measurement, and their reviewer looked at the build in front of them and made a call. But it is worth writing down what that actually felt like from the inside: the work was right, the numbers moved, the verdict came anyway, and the traffic that verdict controlled is simply gone. That is what a platform is. If your game lives on somebody else's front page, the front page is not yours.
The second rejection was harsher and, honestly, more useful. Google's crawler looked at kludoku.com and found a page with 69 words on it.
That is not a metaphor. The home page was a beautiful, fast, entirely client-rendered application: a board, a cast, and almost no text that existed before JavaScript ran. To a reader it looked like a game. To a crawler it looked like an empty room. Meanwhile 23 scene pages — the zoo, the botanical garden, the golf course — were all asking to be indexed on the strength of descriptions that were 53% identical to each other, and every case in the archive was described by one of five fixed sentences.
All three are now built from things that are actually true and actually different. The home page serves 562 words before any script runs, translated, and it says what the game is, how a case works and what happened in the most recent ones. A scene page asks to be indexed only once that scene has really hosted cases, and then it prints its own record: how many days it has run, which board sizes it deals, how often it hides a liar. Overlap between scene pages fell from 53.1% to 39.8%. Every case in the archive now gets a sentence built from the board it actually was — how many statements, how many blocked squares, whether somebody in that cast was lying.
None of this is SEO trickery, and that is rather the point: the fix for "you have nothing to say" is to say the true things you were already sitting on.
The same rebuild made one more thing possible. Kludoku can now send you a short daily briefing — yesterday's case, how the world did on it, your streak, and today's scene — in the language you play in, with an unsubscribe link that works in one click and offers to turn it back on if you change your mind. It is off unless you ask for it. It writes itself every morning from the same numbers the site shows, and if the mail server is not configured it says so in the log and sends nothing rather than pretending.
When you drop a detective onto a water square in Kludoku, they get an inflatable floatie. It does nothing. It is not scored, it is not a rule, and it is the single most commented-on thing in the game.
It stopped appearing. Not everywhere — that would have been easy — but on some water squares, in the same pond, in the same case.
The reason is a good lesson about data. The art packs ship a file that classifies every ground tile: this one is floor, this one is grass, this one is water. The game asked that file which tiles were wet, which is the right question. But each tile has three printings — three slightly different paintings of the same pond water, so a large pond does not look like wallpaper — and the classification file names only the first of the three. The board picks a printing per square. So roughly three water squares in ten were, as far as the game was concerned, dry: no floatie, no lily pad, in the middle of a pond.
The fix is to read the other file the pack already ships — the one that says which printings belong to the same tile — and let the classification travel across the family. If the pack calls any printing of a ground water, every printing of it is water. Measured on a duck pond before: two of the three detectives standing in it had a floatie. After: three of three.
I like this bug because the first version of the answer was not wrong, it was partial, and partial answers do not throw errors. Nothing crashed. There was no log line. The game just quietly stopped being charming on 30% of its water, and the only detector in the world for that is a person who plays it and says: where is my floatie?
One more, because it is the kind of bug that deserves to be public. On the portals, when you run out of free hints, the game offers you a short video ad in exchange for one more. Another portal's review team found that the ad played in full and no hint arrived.
The cause was four characters. Every portal's ad SDK answers "did they watch it" with a slightly different property name, and ours was reading the name used by the first portal we integrated, copied across when we added the second. Undefined is not true, so the reward never fired. A rewarded ad that takes a player's time and gives back nothing is the worst thing this game can ship — it is indistinguishable from theft — and it is now pinned by a test that plays a real reward flow against each portal's actual contract.
Kludoku is on kludoku.com, on itch.io, and on the portals that will have it. The daily case is free, has always been free, and is proved to have exactly one solution before anybody sees it.
If you are building something and a platform is sending you most of your players, the lesson is not "do not use platforms" — they were genuinely good to us for a month. It is: know which of your numbers belong to you. The funnel, the finish rate, the 39.6%, the fact that 57% of anyone who makes one move solves the case — those are still true today, and they were the map for everything above. The traffic was never ours. The measurements were.
Today's cases · More devlog · About Kludoku
Published · More from the devlog