← Back to Projects
Machine LearningIn progress

Bhangra Coach

CV dance coach: compare your form to a reference clip and get cues that actually mean something.

I dance, so I care when feedback is useless. Bhangra Coach uploads a clip, runs MediaPipe landmarks, aligns against a reference when tempos differ, then surfaces deltas in a Next.js UI with FastAPI and Supabase behind it. Raw joint error is not coaching. Alignment and wording are the product right now, and both still need work.

Engineering highlights

  • Pose landmarks on user and reference clips
  • Temporal alignment before scoring movement diffs
  • Upload / process / review loop with stored clip metadata
Date
2026
Focus
CV + ML
Build stage
Iterating on feedback quality
Disciplines
Computer Vision · Full-Stack Product
computer-visionmlfullstackproduct-iteration
Demo
Full write-up below. The hero is the short version. This is the build story: what I designed, what broke, and why I made the calls I did.

Motivation

Why I started this

What pulled me in, and what I wanted to get better at.

Why I built it

As a dancer, 'your elbow is 12 degrees off' is not useful feedback. I wanted cues I would actually fix.

What interested me

People dance at different tempos. Align first, then compare. Otherwise the numbers are noise.

What I wanted to learn

Upload, MediaPipe, alignment, feedback UI, Supabase storage. Still iterating on cue quality.

System Overview

How the system fits together

Compare a user clip to a reference with pose landmarks, temporal alignment, and a review UI.

01

Upload UI

Capture and review clips in Next.js.

02

Pose service

FastAPI + MediaPipe landmark extraction.

03

Comparison

Temporal alignment and delta metrics.

04

Storage

Supabase metadata and outputs.

Data flow

Clips → landmarks → alignment → coaching cues → UI.

Engineering Breakdown

Broken down by discipline

Each block covers the goal, the design, what broke, what changed, and what shipped.

01Vision Pipeline

Vision Pipeline

Goal

Turn two performances into comparable motion signals.

Design

MediaPipe landmarks for user and reference; alignment layer before metric diffs; interpret deltas as cues.

Challenges

  • Tempo differences break naive frame-wise compare.
  • Camera angle and lighting shift landmark quality.

Iterations

  • Raw pose overlay
  • Alignment layer
  • Cue wording pass

Final implementation

Working upload/process/feedback loop under active iteration.

Feedback demo

Pose comparison surfaced as coaching feedback.

Key Design Decisions

Calls I actually made

What else was on the table, what I picked, and why it still made sense once the hardware was real.

01

Explicit temporal alignment

The problem

How do you compare dancers at different speeds?

Alternatives considered

  • Frame index compare
  • Alignment before metrics

Tradeoffs

Index compare is easy and wrong; alignment adds complexity and truth.

Why I chose this

Align first, then score.

Evolution

How it got here

Bench bring-up, CAD fits, soldering, and the demos in between. Not just the final photo.

  1. v1

    Pose extract

    Landmarks working.

    No media for this milestone yet.
  2. v2

    Full stack

    Upload + storage + feedback UI.

    No media for this milestone yet.
  3. Now

    Cue quality

    Robustness across angles/lighting.

    No media for this milestone yet.

Results & Validation

What held up

What worked in the end, what I can show for it, and where it's still limited.

End-to-end coach loop

Live app + demo video

Clips can be uploaded, processed, and reviewed with pose-based feedback.

Limitations

  • Feedback quality still iterating; not a finished pedagogy product.

Reflection

Looking back

What surprised me, what I'd redo, and questions I'm still chewing on.

What surprised me

  • UX wording mattered as much as landmark error.

What I would redesign

  • Stronger camera-calibration guidance.

Future improvements

  • More robust multi-angle models.

Questions that emerged

  • What numeric delta becomes a useful dance cue?