Inspiration
When you practice squats alone, recording a video is easy. Finding the repetition that felt rushed—and understanding its pace—takes more work.
Repbom started with a simple question: How long did that descent take, and where can I see it?
We wanted to connect a measurement to a useful next action: choose a tempo target, review the relevant moment, practice with a beat, and record another set. That led us to focus on one observable metric: squat descent time.
What it does
Repbom turns short squat videos into an interactive review experience.
Users can set a descent-time target, record or upload a set, and explore measured repetitions through synchronized video, joint overlays, a repetition timeline and selectable tempo bars. Selecting a repetition jumps to its video segment, with half-speed playback available for closer inspection. Beat guidance helps users practice their chosen rhythm before trying again.
There are three distinct ways to explore the project:
- Recorded demo: immediately review a licensed sample with actual saved OpenCV 5 results. No account, camera permission or upload is required.
- Live practice: preview the camera, start a five-second recording countdown, receive experimental browser-based tempo feedback, and save or export a session locally.
- Fresh video analysis: explicitly upload a clip for new OpenCV 5 analysis, running locally or through the hosted AWS pipeline.
A “fast” label means faster than the user's selected target range. Repbom measures tempo; it does not assess overall form or injury risk.
How we built it
OpenCV 5 powers the server analysis pipeline. We used Python and pinned OpenCV Zoo person-detection and pose-estimation models to extract landmarks. FFmpeg normalizes the video for playback, and movement rules identify descent intervals from observed landmarks and video timestamps. Results preserve model provenance and explicit partial or unmeasurable states.
React and TypeScript power the mobile interface. The review connects video playback, joint overlays, repetition selection and the tempo chart. Live practice uses a separate MediaPipe Tasks Vision runtime in the browser, with a worker path and a page-canvas compatibility fallback. Optional saved sessions use IndexedDB and do not automatically upload recordings.
AWS runs the hosted analysis flow. CloudFront and S3 deliver the application, a Lambda API handles bounded uploads, and a containerized Lambda worker runs the OpenCV pipeline. DynamoDB tracks session ownership, job state and usage reservations. Request limits, finite operating windows and scheduled cleanup and stopping controls support the prototype's limited operating budget.
Challenges we ran into
Adapting model inference to OpenCV 5. Model outputs differed from assumptions in the upstream wrappers. We corrected output handling using checked tensor shapes and verified the pinned model files before execution.
Making camera behavior reliable. Worker-canvas support, delayed permissions and interrupted frame delivery behaved differently across browser environments. We added a compatibility path, explicit cancellation and recovery behavior, and tests that check whether camera resources are released.
Measuring through imperfect observations. Portrait camera geometry and changing landmark confidence exposed standing-calibration problems. We corrected aspect-ratio handling and stabilized the calibration reference. Tracking gaps remain explicit: the system can recover for later repetitions without inventing a timing across missing observations.
Keeping replay dependable under tight cloud limits. Concurrent metadata and media requests could compete for the API's small concurrency allowance. We serialized metadata reads and added video-only retry behavior so playback recovery does not trigger another analysis.
Accomplishments that we're proud of
We built an end-to-end path from video input to real OpenCV analysis and replayable measurements, alongside a browser-based practice experience.
The recorded demo contains three measured descents—1.333, 1.200 and 1.133 seconds, averaging 1.22 seconds—from actual saved OpenCV analysis. It remains clearly labeled as a recorded example.
Standalone source verification passed 88 Python tests and 86 browser/motion tests. Coverage includes analysis behavior, incomplete results, camera lifecycle, replay, local storage and deployment controls. These establish functional behavior; they do not establish independent timing accuracy or coaching benefit.
What we learned
A useful computer-vision product depends on the whole interaction: calibration, timestamps, inference, playback and failure handling must agree.
We also learned that uncertainty needs a visible place in the interface. An unmeasurable repetition gives the user more honest information than a confident-looking number unsupported by the video.
Keeping the project focused on descent time helped us make each result easier to inspect and identify what still needs validation.
What's next for Repbom
Our next step is to evaluate consenting adults performing bodyweight squats against independently annotated movement boundaries. We want to measure repetition-detection performance and descent-time error across different people, camera positions and recording conditions.
We also plan broader physical iPhone and Android testing, followed by usability studies to learn whether evidence-linked replay and beat practice help users review their sets and follow their chosen tempo.
Credits
Built by Team KAN.
The recorded demo uses footage by Taco Fleur / Cavemantraining, licensed under CC BY-SA 4.0, with attribution and modification notices included in the application and source.
AI coding and writing assistance was used during development.
Built With
- amazon-cloudfront
- amazon-dynamodb
- amazon-web-services
- aws-lambda
- aws-sam
- aws-waf
- docker
- fastapi
- ffmpeg
- indexeddb
- mediapipe
- opencv
- playwright
- python
- react
- typescript
- vite

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