Inspiration
As club managers, we found Jeopardy games are difficult to manage and run. There was no good solution for easily creating, hosting, and playing a Jeopardy game in a social setting.
What it does
Bucky's Buzzer Beater is a Jeopardy game similar to Kahoot. It allows for a host to create a room using a JSON file with categories and questions. Players can join the room using a code. Supports disconnecting/reconnecting for both host and players. There's also a game builder UI that lets you make your own question/answer pairs.
How we built it
Caffeine and Websockets
Frontend:
- React
- TypeScript
- TailwindCSS
Backend:
- Rust
- Axum web framework
- Tokio async runtime
- Serde deserialization/serialization framework
To handle buzzer latency, the server asks clients for a heartbeat, the client then responds with a heartbeat. The server acknowledges the heartbeat, and the client sends the latency of the heartbeat. This allowed us to ensure the first player who hit the buzzer will get to answer, regardless of latency variation.
The server utilizes a state machine to keep track of the game's state. This allows us to ensure that disconnected players' state is properly restored upon connection.
Challenges we ran into
- Supporting player rejoin and properly supporting websockets.
- Ensuring fair buzzers due to network latency
- Solved using heartbeat sequences to measure latency
Accomplishments that we're proud of
Player rejoin, state management, heartbeat latency detection, game builder, second screen display
What we learned
Learned about websockets in both React and Rust. Maintaining types and API schema across languages.
What's next for Bucky's Buzzer Beater
- Other games
- Double Jeopardy
- Final Jeopardy
- Text input
- etc
Log in or sign up for Devpost to join the conversation.