SUS
Everyone gets the same word, except one. From there it is talking, bluffing and voting, with the impostor having to fake knowing what everyone is on about.
The problem
The impostor game is great around a table and terrible in a WhatsApp group. Someone has to hand out the words privately, someone has to remember who is who, and whoever turns up late breaks the whole round.
Most apps that solve this ask you to sign up before they let you play, and that is where the call with your friends dies.
The decision
Take the friction off the door. You open the link, the nickname is already filled in, the avatar is already drawn, you type the room code and you are in. The account exists, but it is optional and it is there to keep your history. On a Friday night call, every extra form field costs you a player.
The secret has to live on the server
It is the same problem every hidden-information game has: if the client receives everybody’s word and only hides it on screen, the game ends with the first person who opens devtools. Hiding with CSS something that already reached the machine hides nothing.
So what each player receives is cut on the server, one by one: the impostor gets one thing, the others get another, and the full word only becomes public at the reveal. It is a tedious rule to maintain, because it reappears in every new query you write and forgetting it once is enough to ruin the match.
Whoever drops mid-round
A real-time room is easy while nobody leaves. The real case is the phone that locks its screen, the underground train entering a tunnel, the tab that reloads on its own. Because the state lives on the server and the screen is only a reflection of it, coming back means resubscribing to the query and reappearing in the same round, in the same place. It is the problem that repeats most across the games here, and therefore the one I have learned to solve best.
Who owns the information
Almost every multiplayer problem I have run into ends up becoming the same question: who owns this information. The times I answered that at the start, the rest of the code almost wrote itself. The times I left it for later, it became a patch on top of a patch.