Inspiration
Twitch and YouTube viewers mostly just watch, or type into a chat the streamer reads 30 seconds later. We wanted the audience to control the game itself: drop hazards under a player's feet, flip their controls, and bet on how long they'll last. Party games like Mario Party and Jackbox Games inspired us, and the result is Crowd Control!
What it does
Crowd Control lets an audience on their phones mess with a player in a live Roblox survival game!
- Join: spectators open survivalofthe.fit, sign in, and enter the 4-letter code shown in the game.
- Vote and predict: before each round, they vote on a big hazard (like a Tornado, Tsunami or Floor Is Lava) and bet on how long the player will survive.
- Cause chaos: during each 1-minute round, they spend tokens to drop traps like bombs and banana peels, or flip the player's controls and gravity. The traps show up in Roblox within seconds!
- Earn and win: watching earns tokens, and correct predictions pay a bonus. The game calls out the winners, and an end screen shows the session's results.
How we built it
| Layer | Tech | What it does | Built by | Track / challenge |
|---|---|---|---|---|
| Roblox game | Luau, Roblox Studio | 14 physics-driven hazards, round state machine, camera shake, live action log and timer, animated lobby (rounds slider, live spectator list, transitions), end screen with stats, music and sound effects. Polls the backend every 3 seconds for queued commands | Andy | Roblox Studio |
| Backend | Node.js, Express, TypeScript, Auth0 | Secured routes for the web app and for the game server's own login, plus round-state sync, vote tallying, prediction settlement and the random-hazard fallback | Diya, Kush | Auth0 |
| Database | Tiger Data (Timescale Cloud PostgreSQL) | Sessions, telemetry, predictions and a double-entry token ledger. Idempotency keys on every credit and spend, so nothing double-pays or double-spends | Kush | Tiger Data |
| Web app | React 19, TypeScript, Vite | Mobile-first app with a custom touch-driven wheel, live token balance and countdowns synced to the game clock | Diya | Entertainment & Creative Technology |
| Design | Custom assets | Visual design, event icons, logos and token graphics | Kaylee | Easy on the Eyes |
| Infrastructure | Vultr, GoDaddy Registry | Serves survivalofthe.fit and api.survivalofthe.fit over HTTPS | Team | Vultr, GoDaddy Registry |
Challenges we ran into
- Syncing without WebSockets: keeping five round states (lobby, intermission, active, results, session over) aligned between Roblox and phones on shaky networks, using polling and a shared state machine.
- Token race conditions: purchases, 7-second rewards and prediction payouts can all land at once. We handle every balance change in a single database transaction, using database triggers.
- Clock drift: phones' clocks disagree. The backend sends its own time with each poll, so every countdown matches the game clock.
- Mobile touch: making the wheel feel tactile without triggering the phone's pull-to-refresh or page scrolling.
Accomplishments that we're proud of
- A true live loop: a tap on a phone spawns a physics object in Roblox in under 2 seconds.
- A token ledger that can't double-spend, backed by 27 backend tests covering token math, prediction settlement, room codes and Auth0 sign-in checks.
- Shipped live on custom domains with HTTPS during the hackathon, with game physics, backend, frontend and design all coming together.
What we learned
- Calling external APIs from Roblox's HttpService, with the game server signing in to Auth0 as its own client.
- Using Tiger Data for frequent telemetry and for balance updates handled by database triggers.
- Setting up Auth0 to verify sign-ins from both web users and the game server.
- Building fast, touch-driven animations in React 19.
What's next for Crowd Control
- WebSockets for sub-second hazard drops.
- Team battle royales, where spectators back or sabotage specific players.
- AI-generated hazards: type a description and get a playable trap.
- Global leaderboards, seasons and cosmetics for spectators.
Built With
- auth0
- gemini
- lua
- node.js
- react
- roblox
- tiger-data
- typescript
- vultr


Log in or sign up for Devpost to join the conversation.