Skip to content

Nobody can peek

Only your phone received this.

Your role is sent only to your phone. Nobody sees your card, not even the host. That is not a policy or a promise about what we choose to look at — it is how the thing is built, and here is the chain.

  1. 01

    The deal happens on the server

    When the host taps Deal, the server shuffles and assigns every card. No phone in the room is sent the deck, so no phone can be opened up to reveal it — the host's included.

  2. 02

    Your card goes down your connection only

    Each secret is written to one player's own socket. The message the rest of the room receives is built from a separate type that has nowhere to put a secret, so it cannot carry one by accident.

  3. 03

    Dev tools don't help

    The word you weren't given never reached your browser. There is no hidden element, no collapsed state, nothing in the page to inspect. It isn't concealed — it was never sent.

  4. 04

    A test checks it every run

    The test suite deals a real round and asserts that nothing broadcast to the room contains anybody's card. If a future change ever leaked one, that test fails before it ships.

  5. 05

    The one exception, stated plainly

    In Mafia, a host who switches on “I'll narrate” is dealt a narrator card listing every role. They run the night phases and don't play — and the lobby tells the room they're narrating. It's the only way anyone sees more than their own card.

  6. 06

    What's left afterwards

    A host's room list keeps the public label — “2 mafia among 8” — and never who held what. The room itself is deleted eight hours after the last activity, cards and all.

Why build it this way

Because the alternative ruins the game. If one person at the table can see the roles, every argument runs through them, and nobody can quite forget it. Taking that possibility away — properly, not as a setting — is what makes the rest of the night work.