Skip to content

How I built a puzzle game site with AI, and what it got wrong

Juan, author photoBy Juan

I built this game site with AI, and I did not write a line of the code. I wrote a brief, Claude Code (an AI coding agent) built PuzzleMoss from it in a cloud session, and my part was to approve, merge and answer short questions from my phone. The code was the easy bit. Almost everything the agent got wrong was about facts: what a game is, who owns a name, what a developer actually said. This post is what happened, with the real numbers, so you can judge whether to try it.

The brief

The brief was long and specific. It set the niche (puzzle games only), the eight types the site is organised into, the filters every game has to pass, and a rule I care about more than any other: every game page needs at least 250 words written about that specific game, and a game that cannot reach 250 honest words does not ship. It also set writing rules, down to a list of banned words and a ban on em dashes, and the design direction.

The site started from the codebase of an earlier game site of mine, so the agent was adapting working code rather than inventing a structure. That helped. Most of the time went on data and words.

From 31,086 games to 232

The games come from GameMonetize's public feed. I wrote up the technical side in how to add GameMonetize games to your website; here are the numbers from this build.

The agent swept every category the feed offers and got 31,086 unique games. About 5,864 were puzzles of some kind. Then the filters ran, in order: 894 were puzzle types the site does not carry (jigsaws, escape rooms, bubble shooters), 90 had gambling, adult, horror or crypto content, 795 were clones of somebody else's characters or trademarks, and 1,138 were aimed at small children or were meme games. Another 1,633 could not be placed confidently in one of the eight types, so they were left out rather than forced in. After 74 reskins and 243 listings too short to write about, a pool of 1,240 was left.

That pool was then read game by game, with each developer's description and instructions side by side, before any copy was written. 304 more were turned down at that stage, most of them by the writing agents, which is more than several of the automated filters caught. The site launched with 232.

What it got wrong

It trusted names it should not have

The first version of the clone filter had the obvious names: Candy Crush, Tetris, Wordle, Minecraft and so on. Reading the pool turned up dozens it did not have. Games built on The Amazing Digital Circus, Toca Boca, Pocoyo and Dora. A mahjong game that described itself only as having an "among theme", which is how you avoid writing Among Us. Listings calling themselves Block Blast, the name of a specific commercial game. A merge game titled after Suika Game. A 2048 game whose description was the app store text of Chain Cube 2048.

One got all the way into the finished copy: a five-guess word game called WORDLY, one letter off Wordle. It was caught at review and removed, and the name went on the blocklist. The filter also overreached once. Blocking "Islands of Insight" knocked out Logic Islands, a perfectly ordinary Nurikabe puzzle whose developer had only said it was inspired by that game. That term came back off the list.

It guessed when the developer said nothing

Every game page lists its controls, and the rule was to list only what the developer states. Several developers state nothing: no mouse, no tap, no keys. The checker at first required at least one control, so some writers filed a reasonable guess under "mouse". Reasonable is not the same as stated. The fix was to change the rule rather than the writers: a game with no stated controls now has an empty list, and its page says plainly that the developer does not list them.

It got a number wrong

The first draft of the homepage said fewer than one game in twenty in the feed was a puzzle. The real figure is about one in five. One in twenty is how many survived the filters. The sentence read well and was wrong, which is the most dangerous combination. It was caught by checking the claim against the pool data, and the homepage now says both numbers correctly.

Some listings describe a different game

This one is the feed's fault, but an AI writer will happily repeat it. A sorting game's description turned out to belong to a different truck sorting game. A match-3 listing described another title entirely and mentioned real-money purchases. Mahjong listings were promotional copy for differently named apps. The writers flagged these and rejected them, because a page built on the wrong game's text would be confidently false.

Parallel agents trod on each other

Copy was written by eight agents working at once, one per puzzle type. They shared a scratch folder, used the same file names, and overwrote each other's working files. At one point six drafts for the connect games landed in the match-3 file. Nothing wrong shipped, because every draft was keyed to a game id and checked for duplicates before it went into the catalogue, but it is the kind of mistake a single person working alone never makes.

The target lost

The brief asked for 30 games in each type. Block Puzzles launched with 16. Most of what the feed labels as block puzzles turned out to be sliding puzzles, brick breakers, tap-a-group "collapse" games or near-copies of each other with a single line of rules. The writers rejected them rather than pad, which is the behaviour I asked for. Hidden Object & Spot the Difference went the other way and has 34. I would rather have the uneven numbers.

The checks that caught it

The useful lesson is that rules in a brief are suggestions until something enforces them. Every rule I could express mechanically became a script that fails the build:

  • Every game page has 250 or more words unique to that game, every section is within its word range, and the title appears early in the description.
  • No sentence of six words or more appears on two game pages, and no two pages share more than 30% of their three-word sequences. At launch the closest pair shared 6.4%.
  • No run of ten words is copied from a developer's own description, because every other site embedding the game publishes that text.
  • No banned words and no em dashes anywhere in the built pages, and no American spellings in the copy.
  • Every page has a unique title of 50 to 60 characters, a description of 140 to 160, one H1, a canonical URL and valid structured data, and every internal link resolves.
  • No page loads a script from another site.

What could not be scripted was done by reading: is this really a mahjong game, is this listing about this game, does this name belong to somebody. That is where the agents earned their keep, because they read every listing in the pool. It is also where they made their mistakes. The checks above did not catch WORDLY. Reading did.

If you want to try it

Write the brief as if the reader will take every word literally, because it will. Say what to do when the rule cannot be met; mine said "do not ship it", and that one sentence is why the site has 232 pages I can stand behind and not 240 with eight padded ones. Ask for the reasons behind every rejection, and read a sample of them. Most of what I learned about the feed came from rejection notes.

And keep the scope where you can check it. Eight types was manageable. The rest of the site, from Brain & Numbers to Mahjong & Tile Match, is the result.