# Vibe Coding Game Jam 2026

**Donkeycat · April 23rd, 2026**

One day. One theme. Everyone ships a browser game that goes live on **donkeycat.com/jam/\<your-game-name\>/**.

---

## Today's theme: MUSTACHE

Interpret it however you want — literal, absurd, hairy, stylish, villainous, historical, whatever. Just make it obvious.

---

## What this is

Pull the starter kit, copy the empty template, and build a game inside your own folder. At 18:00 you zip your folder and hand it to the deploy agent — your game is live on donkeycat.com a couple of minutes later.

Starter kit: https://donkeycat.com/jam/gamejam.zip

---

## Stack rules

- **Entry point is `games/<your-game-name>/index.html`.** That's the file the website will serve.
- **Anything that runs in a browser is fair game:** vanilla HTML/CSS/JS, React via CDN, Phaser, p5.js, Three.js, canvas, WebGL, whatever.
- **Must work by double-clicking `index.html`** (file:// URL). If your library refuses `file://`, use the included `./serve.sh`.
- **NO API keys in user-visible code.** Never hardcode secrets into `index.html`, JS files, or anything shipped to the browser — they're public the moment you zip them. If you need a paid API, proxy it through your own backend (or a free tier with a per-IP rate limit).
- **All paths relative.** Use `./style.css`, never `/style.css` or `file:///Users/you/...`.
- **Keep the folder under ~20 MB.** Compress videos or link out to YouTube.

---

## Get started (2 steps)

1. **Copy the starter folder** and rename it (lowercase, dashes, no spaces — e.g. `neon-snake`):

   ```bash
   cp -r games/_template games/<your-game-name>
   ```

   Windows: in Explorer, duplicate the `_template` folder and rename the copy.

2. **Double-click `games/<your-game-name>/index.html`** to open it in your browser. Edit the files, refresh the browser.

That's it. No build step, no `npm install`.

---

## Optional: run a local server

If your library refuses `file://` (Three.js loaders, service workers, etc.), start a local web server:

```bash
./serve.sh        # macOS / Linux / WSL
serve.bat         # Windows
```

Then open `http://localhost:8000/games/<your-game-name>/`.

---

## Try the reference game

Double-click `games/tictac/index.html`. Classic tic-tac-toe, hotseat or vs. an unbeatable AI. Copy as much of it as you want as a starting point. You can also play it live at https://donkeycat.com/jam/tictac/.

---

## How to deliver your finished game

### Pre-flight (before zipping)

- [ ] Your game lives in exactly one folder: `games/<your-game-name>/` (lowercase, dashes only, no spaces or underscores).
- [ ] Entry point is `index.html` **directly inside that folder** (not in a subfolder).
- [ ] Double-clicking `index.html` opens the game and it plays with no console errors. If that doesn't work, `./serve.sh` → `http://localhost:8000/games/<your-game-name>/` must work.
- [ ] All paths are **relative** (`./style.css`, `./img/foo.png`) — no leading `/`, no `file:///Users/...`, no `localhost` URLs.
- [ ] No API keys or secrets anywhere in the shipped files.
- [ ] Loads in Chrome, Safari, and on a phone browser (mobile touch should at least not crash).
- [ ] Folder is under ~20 MB.
- [ ] `team.txt` is filled in: game name, team members, one-sentence description, controls.

### Submission — just zip and hand it over

1. **Zip your folder.** The zip must extract to a single folder named `<your-game-name>/` with `index.html` directly inside it.
   - macOS: right-click the folder in Finder → "Compress".
   - Linux/WSL: `cd games && zip -r <your-game-name>.zip <your-game-name>/`
   - Windows: right-click → "Send to" → "Compressed (zipped) folder".
2. **Name the zip** `<your-game-name>.zip` (same name as the folder inside).
3. **Hand the zip to the deploy agent** (AirDrop, Slack DM, USB, whatever).
4. The deploy agent drops it into donkeycat.com, wires up the route, and deploys. Your game goes live at `donkeycat.com/jam/<game-name>/` within ~2 minutes.

### Sanity-check your zip

- Peek inside: you should see `<your-game-name>/index.html` at the top level. Not `games/<your-game-name>/...` and not `<your-game-name>/<your-game-name>/...`.
- Double-click the `index.html` inside the extracted folder. If it plays, you're done.

### If something's broken

- Works local, broken live → almost always an absolute path (`/style.css` → `./style.css`).
- Broken is still a valid submission — ship it anyway.

---

## Troubleshooting

- **Blank page when opened by double-click:** you probably used `fetch()` or `import` / `type="module"`. Either inline your data in the JS file, or use `./serve.sh`.
- **CSS / JS / images don't load when live on donkeycat.com:** you used an absolute path somewhere. Search your folder for `src="/` and `href="/` and replace with `src="./` / `href="./`.
- **Works at `/jam/name/` but not `/jam/name`:** the template includes a tiny redirect snippet that auto-adds the trailing slash on http(s) URLs. If you removed it, put it back — relative paths like `./style.css` need the trailing slash to resolve correctly when served over http(s).
- **`./serve.sh` says python3 not found:** install Python 3 from python.org, or on Windows use `serve.bat`, or use any other static server (`npx serve`, VSCode Live Server, etc.).

---

Latest rules always at **https://donkeycat.com/jam/**
