Inspiration

Every push up contest ends in the same arguments. "that one didn't count", "dude I swear I did more than you" Powerlifting solved this long ago with three referee lights. We wanted the same thing for push ups at an event booth, with a camera instead of a judge and a verdict the whole crowd can see.

What it does

Pump Court is a push up competition game for events. A camera films the player from the side, pose tracking follows their body in real time, and every rep is judged on three lights: Depth, Torso, and Lockout.

  • Modes: Play these by yourself, or head-to-head against a friend, and get your name on the leaderboard! Sprint, 30 second race. Marathon, a 60 second endurance test. Max, an attempt to impress your buddies or just get on the leaderboard.
  • Judging: There are 3 criteria that determine wether or not a push up counts, and it rewards good technique over rushed slop. Depth, are you going low enough? Lockout, are you completing the full range of motion? And torso, is your back even straight? Getting 2/3 of these criteria correct earns you a push up count, weighing in at one point. Getting 3/3 can get you the perfect push up, where you get double the points and a chance to unlock our next feature.
  • Streaks: Rewards the player every 5 perfect reps, raising a score multiplier starting from 1.2x, up to a fixed 1.5x, across four tiers. Each tier unlocks different video effects that get more intense until you reach our final streak.
  • Two screens: An operator window to run the booth and a crowd window for a projector or TV.
  • Any camera: a webcam, or any phone paired by scanning a QR code, with nothing to install.
  • Leaderboards: global boards for each mode, event boards with teams, and a hall of fame shelf showing the live top three. ## How we built it
  • A Tauri 2 desktop app. The Rust backend owns the round clock, the scoring and an SQLite leaderboard
  • A React + Vite frontend, with MediaPipe pose tracking running in the app window.
  • The referee math lives in its own pure module, separate from the UI.
  • For phone screens, the Rust server hosts a single HTML page over HTTPS. Video streams by WebRTC on the same Wi-Fi, with a JPEG relay as a fallback over the internet.
  • The whole thing is drawn in a sketchbook style: paper, ink, and the Patrick Hand Font ## Challenges we ran into
  • Tracking the right person. At an event, people walk through the frame. The tracker follows up to three people, and a Recalibrate button locks onto whoever is in a push-up start position.
  • Judge sensitivity. We had multiple cases where you'd have to basically kiss the floor to get depth. And lockout sometimes didn't track correctly. We had to make multiple adjustments for its sensitivity and found out we had to back up for better tracking.
  • Phones as cameras: Browsers only allow camera access on secure pages, so our local server had to serve HTTPS, and we needed the relay for when the phone and laptop can't connect directly. ## Accomplishments that we're proud of
  • The full loop works end to end: mode select, camera, verdict, score, leaderboard.
  • Any phone becomes a camera in one QR scan.
  • We had fun with it and gave it more personality, whether it were UltraKill streak names, Minecraft and Terraria splash screens, and Undertale/Deltarune music for certain sections. ## What we learned Pose data is noisy, so a fair referee needs carefully tuned angle thresholds. We also learned how to split a real-time app between Rust and a web frontend, and how WebRTC behaves on real networks. ## What's next for Pump Court Potentially make an app so its not strictly for events, expand on the movement selection (squats, pull-ups, etc.). Potentially add an online global leaderboard so you can see the scores throughout the entire app usage, not just your event or session. Add random/selected profile pictures to users for customization.
Share this project:

Updates

Submission history