Elevator Pitch
OJustDance is a browser-based platform for creating and playing competitive dance battles live at ojustdance.com.
No download. No special controller. Just a webcam and a browser.
Inspiration
ojustdance mixes the instant stranger matchmaking of Omegle, the community-created maps of osu!, and the full-body energy of Just Dance then puts it all in the browser.
What it does
Create a dance in our database from your camera or a video online, then jump into a random 1v1 battle. Your webcam tracks your body in real time; you compete against a stranger on the same dance for the highest score.
Creators can record takes, scrub the timeline, delete clips, close gaps, and publish a finished chart. Players queue into matchmaking, get paired on a shared chart, and see live scores update as they dance.
How we built it
The frontend is React, TypeScript, and Vite. MediaPipe Pose Landmarker detects 33 body landmarks in real time and draws a skeleton over the camera feed.
Pose samples are taken at 24 Hz. Each frame is centered on the hips and scaled by torso length so charts are less sensitive to body size, framing, or distance from the camera. A shared TypeScript skeleton package normalizes landmarks and turns completed captures into playable chart JSON.
The Express backend serves chart upload/list APIs (backed by Supabase) and Socket.IO matchmaking: queue → pair → share a chart → sync scores → settle win/lose/draw. Pose stays on-device; only match handshake and scores cross the wire.
Challenges we ran into
The hardest problem was fair movement. Raw webcam coordinates shift whenever someone steps closer or stands elsewhere in the frame. Normalizing landmarks around the hip midpoint and torso length gave us a representation that stays comparable across players.
We also had to treat tracking as a product problem, not just a model problem: missing landmarks, timeline editing, camera setup, and clear feedback mattered as much as the pose detector itself.
Accomplishments that we're proud of
We’re proud of a working in-browser pose-mapping pipeline — not prerecorded or hand-keyed charts. ojustdance can detect a dancer, visualize their skeleton, capture pose landmarks, and turn that performance into a playable map.
We’re also proud that the competitive loop works end to end: publish a chart, match with a stranger, dance live, and settle a score publicly at ojustdance.com with only a browser and webcam. This somehting JustDance is not capable of. With just a broswer an a camera we've replicated the feeling of a age old game and brought it accesibility to anyone with a computer.
What we learned
Computer vision alone isn’t enough for a live camera experience. Timing, normalization, camera placement, editing tools, and feedback design decide whether the game feels fair.
Prototyping the riskiest piece first paid off. Validating pose tracking and chart generation before finishing multiplayer proved that community-created dance charts are feasible — then Socket.IO matchmaking could sit on top of something real.
What's next for ojustdance
Next we want tighter music-synced routines, richer live pose comparison feedback during battles, and more durable match/chart history as the community grows. We plan to post and really get traction on this app. Longer term: better fairness across body types and setups, and more ways for creators to publish and discover charts.
Built With
- computervision
- express.js
- mediapipe
- react
- typescript
Log in or sign up for Devpost to join the conversation.