Building a Virtual Team Activity That Works in Any Browser
Our team is remote. Fully distributed, five time zones, the usual. Every few weeks someone on the People team asks if we can "do something fun together." The options are always the same: Jackbox (someone can't install it), Kahoot (half the team groans), or a virtual escape room that costs $25/person and requires a purchase order.
So we built something instead. A multiplayer bingo game that works in any browser, needs zero installs, and starts with a shared link. Here's how it works under the hood, and why the constraints mattered more than the features.
The Constraint That Shaped Everything
The hardest part of virtual team activities isn't the game itself. It's the 15 minutes before the game where someone can't install the app, someone else needs to create an account, and the IT person on the call says the domain is blocked by the corporate firewall.
We set one rule: it has to work the moment someone clicks a link. No app stores. No sign-up forms. No browser extensions. If it doesn't work in the browser you already have open, it's not worth building.
That constraint eliminated most architectures. Native apps were out. Anything requiring authentication was out. Heavy client-side frameworks that break on corporate-managed Chrome installations were out.
What's left? A server-rendered page with a WebSocket connection for real-time gameplay.
How the Real-Time Part Works
Every bingo game is a room. When a host creates a game, the server generates a room code and a shareable link. Players click the link, land on the game page, and a WebSocket connection opens automatically.
Here's what travels over the wire:
- Player joins → server sends them a uniquely shuffled board (same word pool, different arrangement per player)
- Player claims a cell → broadcast to all players in the room
- Player reacts with an emoji → broadcast immediately
- Someone gets bingo → server validates the pattern and announces it
The important design choice: the server is authoritative. Clients don't decide if they got bingo. They send their board state, the server checks it, and confirms or rejects. This prevents the inevitable "I definitely had bingo first" argument.
Client A clicks cell → WebSocket → Server validates → Broadcasts to Room
↓
Client B sees claim
Client C sees claim
Host sees claim
We use WebSocket heartbeats to track who's still connected. If someone's browser goes to sleep (common on phones during Zoom calls), the connection drops and the player shows as inactive. When they come back, they reconnect and the server replays any missed state.
AI Content Generation: The Part That Saves 20 Minutes
The second friction point with team bingo is content. Someone has to write 25 squares. For a "things that happen on Zoom calls" card, that means opening a Google Doc, brainstorming with the team, arguing about whether "someone's kid walks in" is too obvious, and eventually giving up at 18 squares.
We built an AI content pipeline that takes a topic description and generates a full set of bingo clues in seconds. The model gets the topic, the grid size (3×3, 4×4, or 5×5), and returns clues that are specific enough to be funny but broad enough that multiple people can claim them.
The generation is streaming — clues appear one by one as the model produces them. Users can swap individual clues they don't like, which triggers a single-clue regeneration rather than rebuilding the whole card. This keeps the human in the loop without making them do the tedious part.
Why "No Account" Is a Feature, Not a Missing Feature
We went back and forth on this. Accounts enable saved games, player history, leaderboards across sessions. But accounts also mean:
- Someone in IT has to approve a new SaaS tool
- GDPR compliance for European team members
- Password reset emails when someone forgets their login before the next game
- One more entry in the company's vendor management spreadsheet
For a team activity that happens every few weeks, the overhead of accounts kills adoption. So we made accounts optional. You can create one to save your cards, but players never need one. The host shares a link, people click it, they play.
This is the same reason the game works without a native app. Every friction point — every "download this first" or "create an account to continue" — loses a percentage of your team. By the time you've lost 3 people to setup friction, the game isn't fun anymore because the room is too small.
The Printing Path (For When WiFi Fails)
Not every team activity happens on a video call. Some offices do in-person team lunches. Some teams meet up at offsites. We added PDF generation that produces up to 200 uniquely shuffled boards — same content, different cell arrangements — that you can print and play with markers.
The PDF generation runs server-side. The client sends the card content and grid size, the server generates the PDFs with randomized layouts, and returns a downloadable file. No client-side PDF libraries, no browser compatibility issues.
What We Learned
1. Distribution beats features. A game that works instantly via link beats a game with 50 features that takes 10 minutes to set up. We could add tournament brackets, persistent leaderboards, team scoring. But none of that matters if three people can't join.
2. The host experience is the bottleneck. Players just click a link. The host has to create the game, pick a topic, configure the grid, and share the link. Every second of host setup time reduces the chance they'll do it again next month.
3. Corporate networks are hostile to fun. Firewalls block unknown domains. Chrome extensions get disabled by policy. App installations require admin approval. Building for the browser — specifically, building something that works on a locked-down corporate Chromebook — is the only reliable path.
4. WebSocket reliability matters more than WebSocket performance. Nobody cares if a cell claim takes 50ms or 200ms to propagate. They care a lot if the connection drops during the game and they lose their progress.
Try It With Your Team
If you want to run this with your own remote team, BingWow is the tool we built. Completely free, no account needed for players, works in any browser. Type a topic, share the link in Slack or Zoom chat, play for 10 minutes.
The best team activities are the ones that actually happen. And they only happen when the setup cost is close to zero.
Top comments (0)