← Playground
BENCH Pose Lab with analysis summary, rep lifecycle session timeline, and Rep 1 phase breakdown
Pose Lab: evidence, uncertainty, and rep-level debugging in one surface

PROTOTYPEONGOING PROTOTYPEOCT 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.

Product PrototypeComputer VisionHuman-in-the-loopNext.js

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."

BENCH record attempt screen with challenge selection and verification tips
Core loop: choose gym → record → analyze → verify → rank
BENCH admin verification queue showing claimed weight, detected result, and review before leaderboard
Trust model: claimed → detected → verified
BENCH Pose Lab admin upload setup for bench video analysis
Pose Lab: the evaluation environment behind the detector
BENCH Pose Lab Rep 1 inspector with timing, tracking visibility, invalid classification, and technical diagnostics
Rep lifecycle: session → rep → frame
BENCH Pose Lab diagnostic graphs for landmark visibility, elbow angle, and detector state over time
Deeper analysis: visibility, angles, and detector state over time
BENCH mobile leaderboard empty state with Record attempt call to action
Mobile: record and rank at your gym

1

Choose gym and challenge

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

  • Next.js
  • React
  • TypeScript
  • Supabase
  • MediaPipe Pose Landmarker
  • Google Places API
  • Vercel
  • Cursor