#Build a game with AI

You don't have to be an engineer to put a game on the arcade. An AI coding assistant can write the whole thing. You supply the idea and the rules it has to follow. This page is those rules, in a form you can paste straight into a chat.

You need three things: the repo on your machine, Node 24+, and an AI coding tool that can edit files in it (Claude Code, Cursor, Copilot, or similar).

Never used GitHub? Getting started has a path that gets you set up with GitHub Desktop and no command line beyond three commands. Do that first, then come back here.

#1. Make the folder

npm run new-game -- my-game --template vanilla

my-game is your game's id: lowercase letters, digits and hyphens. It becomes the folder name and the URL. Use --template vanilla unless you know you want a build step. It's plain HTML and JavaScript, so there's nothing to compile and the AI has fewer ways to get it wrong.

You now have games/my-game/ with a working (if boring) page in it.

#2. Give the AI the brief

Copy everything in this block, fill in the two bracketed parts, and send it.

I'm adding a game to the Gamesight Arcade, a repo of browser games. My game lives in games/my-game/ and is already scaffolded from the vanilla template.

The game: [describe it in a few sentences: what the player does, how they win or lose, what it looks like]

Rules you must follow:

  • Only edit files inside games/my-game/. Never change anything elsewhere in the repo.
  • The game must be plain static files: HTML, CSS, JavaScript, images. No server, no backend, no npm packages, no build step. Put everything in games/my-game/public/, with index.html at the top of it.
  • Every URL in the game must be relative (main.js, ./art/ship.png), never absolute (/main.js). The game is served from a subfolder and absolute paths break it.
  • The arcade SDK is already loaded by <script src="/sdk/v1/arcade.js"> in index.html. Leave that tag alone. It gives you a global called Arcade. It is undefined when the page is opened directly from disk, so keep the typeof Arcade !== "undefined" guard that's already in main.js.
  • Don't build a login, a user list, or a high-score server. The arcade provides sign-in and leaderboards; use the SDK calls below.
  • Update games/my-game/game.json: a real description, my name in authors, and a genre (free text; it groups the game on the landing page). Don't change slug or the build block.
  • It must work with a keyboard and a mouse, and not depend on any file I'd have to download separately.

Arcade features you can use (all optional, all fail silently when offline, so wrap them in try/catch and carry on):

Arcade.init();                                  // once, at startup
await Arcade.leaderboard.submit(score);         // when a run ends
const top = await Arcade.leaderboard.top(10);   // [{ player, score, at }, …]
const user = await Arcade.auth.getUser();       // { email, name, picture } | null
await Arcade.achievements.unlock("first-win");  // see below

When you're done, tell me what you changed and how to try it.

#3. Try it

npm run build && npm run preview

Open http://localhost:8002. Your game is on the landing page, and playable at http://localhost:8002/games/my-game/. Play it, then tell the AI what to change. Rebuild with npm run build -- --only my-game to skip rebuilding everything else.

Keep the loop tight: one change, rebuild, play, react. That works far better than describing five changes at once.

#4. Add achievements

Achievements are the highest-value thing to add and the easiest to describe. Each game gets 1000 GS (Gamesight Score) to spend across up to 100 of them. Ask for them like this:

Add achievements to my game. Create games/my-game/achievements.json following schema/achievements.schema.json and the guide in docs/guides/achievements.md. Give me [6–10] achievements covering easy first steps through to hard mastery, with the points totalling exactly 1000. Then call Arcade.achievements.unlock("<id>") at the right moments in the game code. Finally run npm run gen-achievements and npm run validate.

The popup, the chime, the player's score and the browse page at /achievements/my-game/ all appear on their own. Full detail: achievements.

#5. Check it before you share it

npm run validate

This is the same check CI runs, and it catches a broken game.json or an achievement list that doesn't add up. If it prints an error, paste the whole error to the AI; the messages name the file and the problem.

#When it goes wrong

Two things AI assistants get wrong on this repo more than anything else: absolute URLs (the game is served from a subfolder, so /main.js 404s), and inventing a backend for scores it could have got from Arcade.leaderboard. Both are in the brief above. When you see one, point at the rule rather than explaining the fix; it's shorter and it sticks.

Troubleshooting has the rest, including what to say back for each one.

#Get it reviewed

Your game needs approval from Anthony Kinson or Robert Syvarth before it goes live, on a GitHub pull request. Submitting your game walks through it both ways: with Git, and with GitHub Desktop if you'd rather not touch the command line.

You can ask the AI to do the git part for you. Read what it says it's doing first, and keep the change to your own game folder.

See also: getting started · adding a game · achievements · leaderboards

View docs/building-with-ai.md on GitHub ↗