ExpandPROTOTYPE·ONGOING PROTOTYPE·OCT 2026
BENCH | from rep counter to verified local leaderboard
A phone-camera rep counter that turned into a verified local bench leaderboard, with computer vision assisting the evidence instead of pretending to be the judge.
Overview
BENCH started as a simpler experiment: point a phone at someone lifting and see if I could count their reps.
I built an early squat detector with pose landmarks, joint angles, and a small state machine. It worked well enough to make the technical problem interesting, but it exposed a product problem: automatically telling someone they did five reps is not particularly useful on its own. Most people already know roughly how many reps they just did.
So I changed the question. What if the camera was not the product, but the evidence layer?
BENCH became a local bench-press leaderboard where lifters record an attempt, have the movement analyzed, submit video for verification, and see how they rank at their gym. The computer vision still matters. It just stopped being the point.
The problem
Gym leaderboards sound simple until you ask how a result gets there. If anyone can type "Bench: 315 lb," the board is easy to build and hard to trust. Video helps, but someone still has to review the attempt and decide whether it satisfies the rules.
I initially assumed computer vision could remove that human step. That was the wrong goal for an early product.
A pose model can estimate shoulders, elbows, and wrists. Camera angle, occlusion, lighting, and landmark confidence all introduce uncertainty. The more useful question became: How much work can the system do reliably, while remaining honest about what it does not know?
Approach
I narrowed aggressively: one lift (bench press), one loop (choose gym → record → analyze → verify → rank), and three separate concepts instead of one authoritative score.
Claimed result — what the lifter says happened.
Detected result — what the computer vision system believes happened.
Verified result — what is allowed on the leaderboard after review.
The detector assists with counting, movement phases, and flagging uncertain sections. A human stays authoritative for leaderboard verification.
What I built
Local leaderboards tied to real gyms
BENCH ranks lifters by gym location, not free-text names. Search "GoodLife Hillcrest" and the app matches its canonical directory first, then falls back to Google Places so two spellings still land on the same board. Challenges include Heaviest Bench, 225 Rep Challenge, and Pound for Pound, with filters by gym, overall rank, and age group.
Video evidence and explicit states
Attempts are recorded in-app or uploaded from the camera roll. Video stays private and attaches to the attempt. States are Pending → Verified / Rejected; only verified results affect the leaderboard.
Bench-press detector
MediaPipe pose landmarks track shoulder, elbow, wrist, angles, direction, visibility, and reliability. A state machine walks Ready → Eccentric → Bottom → Concentric → Lockout. Reps can be confident or low-confidence. The detector produces evidence for verification; it does not decide the leaderboard.
Pose Lab
The most useful computer vision work is internal. Pose Lab answers why the detector counted a video the way it did: human-labelled reps, detected events, confident vs low-confidence events, reliable vs unreliable frames, tracking side, visibility, raw vs smoothed elbow angle, detector state, and rep timestamps on one timeline.
The latest pass adds a readable rep lifecycle: session view, then per-rep Eccentric → Bottom → Concentric → Lockout, with unreliable tracking visible on the movement. Below that, diagnostic graphs plot landmark visibility, raw vs smoothed elbow angle, and detector state on one timeline — plus an analysis summary that separates detected events from confident vs low-confidence reps. That gives three debugging levels — session, rep, frame — which improved the questions I could ask before improving the model.
One failure worth keeping
An early video had five visible cycles. The detector found most of them, but one rep landed low-confidence when landmarks degraded at the bottom. The state machine had seen the movement; the disagreement was confidence policy, not missing detection. Without the lab, both would have looked like "wrong count."
Expand
Expand
Expand
Expand
Expand
Expand1
Choose gym and challenge
Gym and challenge
2
Record or upload attempt
Record attempt
3
Analyze movement with computer vision
Rep analysis
4
Verify and rank on the board
Verification queue
Step 1 of 4: Choose gym and challenge
What I learned
The interesting feature is not always the product. Live rep counting mattered less once I looked at the full loop. Someone under a barbell is not watching for a 4 vs 5 on screen. BENCH records first and analyzes after, which eases latency and battery pressure. The better live feature may be simpler: is the camera positioned well enough before recording?
Confidence needs context. Landmark visibility, tracking reliability, and rep classification are related but not interchangeable. A single "92% confident" number explains almost nothing.
Human-in-the-loop can be architecture, not compromise. Automate what the system is good at; keep human judgment where trust matters. The detector can reduce review effort over time without the product depending on perfect accuracy on day one.
Evaluation tooling changes how you build. After Pose Lab I could ask narrow questions — tracking failure vs state machine failure vs low-confidence classification vs wrong-side tracking — instead of watching a video and tweaking thresholds blindly.
Key takeaway
Key takeaway
BENCH started as an experiment in counting reps and became an experiment in building trust around imperfect sensing. The camera observes, the detector interprets, but the product is the system around that signal: evidence, uncertainty, verification, and a reason for the result to matter — see how you stack up at your gym.
What's next
The next phase is collecting better evidence: more lifters, camera positions, body types, and bench setups, compared against human-labelled attempts. That should show whether the next win is camera guidance, tracking reliability, rep-state logic, confidence policy, or something else.
On the product side, the milestone is closing the full loop — record → analyze → submit → verify → appear on the leaderboard — compellingly for bench press before adding more lifts.
Tech stack
- NNext.js
- RReact
- TTypeScript
- SSupabase
- MMediaPipe Pose Landmarker
- GGoogle Places API
- VVercel
- CCursor
More from the Playground
Prototype
Joist Trust Sandbox
Voice-to-invoice for contractors: verified when matching is solid, amber review when it isn’t.
Experiment
Building my portfolio like a product
Designed, built, and shipped a personal portfolio with AI-assisted development, as a living product system rather than a static résumé archive.
Experiment
Building Product Sprint
How an over-scoped “Ship It” prototype became a focused pixel-art runner about surviving product chaos, and used 82% of my Cursor model allowance along the way.