Every party game app I'd used before building this one wanted an account, a lobby website, or a subscription. I wanted the opposite: plug a laptop into the TV, run one command, and have everyone's phone connected in under thirty seconds — no internet required once the LAN is up.

That constraint ends up dictating almost every architectural decision in GameNight: a Node/Express/Socket.io server that runs five real-time party games — a Mafia-style social deduction game I call Mongolpuri, UNO, a trivia quiz, Scribble, and Tic-Tac-Toe with tournament brackets — entirely from two in-memory Maps, no database, no auth, no build step on the frontend.

Decision 1: A room is a plain object, not a schema

const rooms = new Map(); // roomCode -> room

const playerRooms = new Map(); // socketId -> roomCode