
Deal Breakers - 3D Multiplayer Card Game
A browser card game for friends who are not in the same room. Up to eight players sit round a 3D table as cartoon characters and play Badam Satt (Sevens) or No Limit Texas Hold'em with play chips, talking over built-in voice chat. No sign-up: share a room code and play. Built with React, three.js and Firebase, with a cryptographic shuffle so nobody can see another player's cards.
Overview
Deal Breakers ("Deal. Bluff. Break hearts.") started as a way to keep game night going with friends in different cities. It runs in the browser with nothing to install and no account: one player starts a table, shares a 12-character room code, and everyone joins from their own device. It has two games: Badam Satt (Sevens, opened by the 7 of hearts), played solo or in teams, and No Limit Texas Hold'em poker with play chips.
Key Features
- A 3D table: every player is a cartoon character in a chair who throws the card they play, knocks on the table to pass, pushes chips in to bet and acts out emotes
- 12 characters to pick from: The Bluffer, The Panic, The Gremlin, The Boss, The Drama and more, each with its own build, face, outfit and idle personality
- Voice chat: talk to the whole table, only to your team, or privately to the player you are helping. Everyone sees the two characters whispering, but only they hear it
- Teams and helpers: in Badam Satt a team plays as one seat; in poker a player who folds can get up and stand beside a player still in the hand to help them
- Pranks: tap another player to throw a tomato, an egg, a chappal, a cream pie or a water balloon at them, or blow an air horn to tell them to hurry up
- Announcer: big stamped words and sound cues for the moments worth a reaction, like the opening 7♥, a team down to its last card, all in, showdown and the winner
- Up to 8 players per room, and late arrivals can join a poker table between hands
Fair Play Without a Server
There is no game server. Every browser runs the game, so the hard part was making sure nobody can cheat by reading the database or changing their own client:
- Mental-poker shuffle: every player or team locks and shuffles the deck in turn using elliptic-curve cryptography, so no player, host or database owner can see another hand
- End-of-game check: when a game ends, every browser replays it and checks that nobody passed while holding a playable card
- Encrypted rooms: names, moves, emotes and voice signalling are encrypted in the browser, and the key comes from the part of the room code that never reaches the database
- Chips can't be faked: stacks are rebuilt from the list of moves on every device, so no player can change their own balance
Technical Implementation
- React + TypeScript + Vite for the app and screens
- three.js for the table, lighting and characters. The characters are built from code out of simple low-poly shapes, so the game ships no model files, and three.js only loads once a table is on screen
- Firebase Realtime Database for room state and signalling, with Anonymous Auth and database rules that enforce who can write what
- WebRTC voice mesh between players
- Web Audio for the announcer and sound effects
- Unit tests for the game rules, poker hand ranking and side pots, and the crypto
The source code is private.
Screenshots



Links
- Play it: dealbreakers.web.app