Party games for one big screen, played from phones. Open potjim80.github.io/bluff on the screen and pick a game; everyone scans the code and plays from their phone. Plain HTML/JS, no server, no installs.
| Game | Players | What it is |
|---|---|---|
| Bluff | 2–10 | Put cards down face down and claim the rank. Call it if you think they're lying. |
| Corner | 3–8 | Everyone trades at once. First to hold all nine of one good corners the market. |
| Kemps | 4, 6 or 8 | Teams of two. Collect four of a kind and signal your partner without a word. |
| Durak | 2–6 | Attack and defend. Nobody wins — the last one holding cards is the fool. |
| Pinpoint | 1–12 | A photo from somewhere on Earth. Drop a pin on the map on your phone — the closer, the more points. |
The full rules of each game are on its start screen (and on the phones) before the deal.
The room code belongs to the party, not to one game. Go back to All games on the screen and open another game: the code, the people and their seats carry over, and every phone follows the screen by itself. A game left half-way picks up where it was when you open it again. Anyone removed stays out. New party on the game list sends everyone away and gives the next game a new code.
On the screen: Enter deals (or the first player taps Deal) · N deals again after a game · click a name to remove that player · Shift+Esc starts the current game over with the same people.
common/— what every game shares.js/net.js— public MQTT brokers over websockets; one topic per party, every table says which game it is.js/seal.js— hands and moves are encrypted per phone (ECDH + AES-GCM), so nobody listening on the public broker can read a hand or move for someone else.js/host.js— the screen holds the whole game and runs the clocks; the list of what a game module must export is at the top.js/party.jskeeps the party across games.js/screen-kit.js,js/phone-kit.js— the screen frame (join panel, QR code, rules, log, seats) and the phone side (join form, lobby, following the screen to another game).js/table.js,js/cards.js,css/— small shared rules helpers, card faces, the look.
- One folder per game:
index.html(screen),play.html(phones),js/game.js(the rules as a pure function: state + move → new state),js/rules.js(the rules as shown to players),js/screen.js,js/play.js, andtest/. npm testruns every test (needs Node, nothing else). Each game'stest/sim.html?view=screen|phone&step=…shows one moment of a game with pretend players — serve the folder first (python3 -m http.server).
Copy a game folder, rewrite js/game.js and js/rules.js, then the screen and phone drawing. Add the
folder name to GAMES in common/js/party.js and a card for it in the top-level index.html.
geo/img/ holds the photos, picked by hand from Wikimedia Commons (free licences: CC0, public domain,
CC BY, CC BY-SA). Each one's photographer and licence show on the screen with the answer, and the
full list (with links) is in geo/js/places.js. The files were re-saved without their metadata, so
nothing in a photo file says where it was taken. The map is OpenStreetMap's.