“Be careful what you wish for” is one of the oldest jokes in storytelling, and nobody had made it a game you play instead of read. The Monkey Paw fixes that. Each day serves up a curated wish, and an ancient, malevolent artifact that has been issued a filing cabinet begins to negotiate.
What It Is
One page. A daily wish, like “Today I want to end world hunger” or “Today I want to live forever,” and the Paw asks three to five gleefully monstrous clarifying questions. You answer by picking from a handful of hand-written options, each one closing a loophole, leaving one open, or cheerfully opening a new one you did not notice. It plays like twenty questions where you are the safety rail and you are losing. When the questions run out, the wish is granted as a short story, built almost entirely out of the loopholes you failed to close. You win by getting an ending that is merely disappointing instead of civilization-ending.
The Architecture Is the Point
Every question, every option, and every consequence is pre-authored content shipped as data. The AI model is called exactly once per playthrough, at the very end, to stitch the ending from the specific path you took. That single decision drives everything good about the game:
- Cost is one model call per completed game, not one per tap, and identical paths are cached so the same path is free forever after.
- Every joke is hand-tuned rather than rolled live. Reading the four things you are allowed to say is funnier than saying them.
- Nothing unvetted can reach the player mid-game.
- The game stays fully playable when the API is down, because every scenario ships its own pre-authored fallback endings.
The Ending
On a completed run, a Cloudflare Worker sends only the ids of your choices, never any free text, to Gemini Flash, which grants the wish as a 150 to 250 word decree. The rules are strict, and they are the product. The wish is always granted exactly as negotiated. The betrayal is anchored to a loophole you actually left open, so you can trace the cost back to a specific answer you gave. Loopholes you sealed stay sealed. A near-perfect run earns a near-clean ending. The cost is always ironic, bureaucratic, or emotional, never graphic. When a wish implies something dark, the Paw renders it as absurd paperwork: people are not removed, they are “reassigned to a rounding error and filed under Consolidation, Voluntary.”
The Filing Cabinet
Every wish you have had granted is filed. A local, private archive lists each case by name with its outcome, from “merely disappointing” to “civilization-ending,” expands to the full decree and a recap of what you sealed and what you opened, and lets you replay any wish you have discovered. It lives in your browser and is never sent anywhere.
Features
- A daily, date-seeded wish that everyone gets on the same day, recycling through a growing pool of scenarios
- Three to five hand-written clarifying questions per wish, four tempting options each
- One AI-stitched ending per playthrough, anchored to your choices, with pre-authored offline fallbacks
- A recap that shows which loopholes you sealed, left open, and personally opened
- The Filing Cabinet: a local archive of every decree, replayable by name
- A hidden perfect run in every scenario, provable but non-obvious
- A real reduced-motion path throughout, and a cursed-antique-bureaucracy look that refuses to resemble a chat app
Stack
| Tool | Role |
|---|---|
| React + TypeScript | Game module inside wanessalabs-games |
| Content-as-data | Zod-validated scenario packs, one AI call at the end |
| Hono on Cloudflare Pages Functions | The single POST /api/decree endpoint |
| Cloudflare KV | Ending cache, keyed by wish and path |
| Gemini Flash | Stitches the ending story from the negotiated path |
| Tailwind | Scoped “cursed antique bureaucracy” theme |
| Cloudflare Pages | Hosted inside the wanessalabs-games hub |

