project1 min read
undercover: a party game that stays on one phone
Pass-and-play social deduction for 3–12 people. Secret words, civilians vs undercover, optional Mr. White. Client-only PWA — no accounts, offline after the first load.

Social word games die when setup takes longer than the round. Accounts, rooms, "everyone open the link on your phone." By the time people are ready, half the room is on Instagram.
Undercover keeps the phone as the prop, not the product.
What it does
One device gets passed around. Each player privately sees a word — or learns they are Mr. White. Civilians share word A. Undercover gets a related word B. Then the room gives short clues, discusses in person, and eliminates someone until a side wins.
3–12 players. Classic-style role mixes or manual overrides. A large English word bank across easy / medium / hard. Speak order biases civilians first so impostors hear more clues. Setup (roster, Mr. White toggle, difficulty) saves in localStorage.
No accounts. No server. State lives in the browser. After the first load it works offline as an installable PWA.
Stack
Next.js static export, React, Zustand for game state, pure engine helpers for deal / speak order / win checks. Deployed as static files to Cloudflare Pages.
Play
Live at undercover-suj.pages.dev. Open it, add names, pass the phone.