What it does
HealMotion is a browser-based physiotherapy tool. You open your webcam, pick an exercise, and AI tracks 33 joints on your body in real time. It counts reps, checks your form, and detects when you're compensating for pain. When your range of motion starts dropping over reps, it automatically reduces your workload. After the session you get a clinical PDF report with joint angles, symmetry scores, and fatigue curve you can bring to your doctor.
No downloads. No server. No data leaves your browser.
What inspired it
528 million people have osteoarthritis globally and that number is projected to surge by 2050. Physical therapy is the most effective non-surgical intervention, but adherence rates are terrible. Most patients quit within weeks because there's no real-time feedback at home.
The bigger problem: existing pose-matching apps just check if you're in the right shape. That's not how physiotherapy actually works. I spent time reading clinical biomechanics research and found four measurable signals that real physiotherapists use but no consumer tool implements:
- Compensation patterns. Sahrmann (2002) documented how the kinetic chain works: when one joint is painful or weak, adjacent joints over-activate to compensate. This worsens the original problem. Detecting it requires monitoring joints you're NOT exercising.
- Movement smoothness. Hogan and Sternad (2009) validated that jerk (the third derivative of position) is a biomarker for neurological and musculoskeletal health. Jerky movement indicates pain, weakness, or neurological deficit.
- Fatigue. Enoka and Duchateau (2008) established that a decline greater than 15% in range of motion during a set indicates clinically meaningful fatigue. Continuing past this point increases injury risk without additional benefit.
- Bilateral asymmetry. Impellizzeri et al. (2007) showed that greater than 10% difference between left and right side performance is clinically significant and indicates imbalance or injury.
All four of these are computable from joint position data. A webcam and MediaPipe give you that data. So I built the tool that connects them.
How we built it
React frontend with Material UI. MediaPipe Tasks Vision runs entirely in the browser via WebAssembly with GPU acceleration, extracting 33 landmarks per frame.
The biomechanics engine is written from scratch in JavaScript. It computes joint angles using 3D vector math between any three landmarks, tracks movement velocity and acceleration over a sliding window, calculates jerk for smoothness analysis, and builds a bilateral symmetry index comparing left and right joint angles.
The clinical intelligence layer handles rep counting via state machine, checks form against angle threshold rules per exercise, runs compensation detection by monitoring adjacent joint deviation during primary movements, and tracks ROM per rep to detect fatigue crossing the 15% threshold. An adaptive difficulty controller integrates all signals and makes real-time decisions: reduce reps, switch to easier variant, or suggest progression.
AI coach uses Anthropic Claude via OpenRouter for personalized exercise recommendations. Local storage in IndexedDB. Reports via jsPDF. Charts with Recharts. Deployed on Vercel.
Did we use AI?
Yes. Anthropic Claude (claude-sonnet-4-20250514) via OpenRouter API powers the AI Coach feature. It interprets biomechanical session data, recommends exercises based on the user's condition, and explains adaptations in plain language. Users provide their own API key, stored locally only. We also used AI tools during development for code generation and debugging.
Challenges
Translating research thresholds into code requires decisions the papers don't specify. Enoka's 15% fatigue threshold: compared to what baseline? We averaged the first two reps and compared against the latest two. Compensation detection from Sahrmann's kinetic chain theory: what angle of trunk lean counts as "compensating" versus normal variation? We used relative deviation from the user's own starting posture rather than absolute numbers.
MediaPipe's dynamic imports also trigger a webpack critical dependency warning that Vercel's CI=true treats as a build failure. Required setting CI=false explicitly.
What we learned
The clinical science for movement analysis is well-established. The gap is entirely in accessibility. These signals (jerk, ROM decline, bilateral asymmetry, compensation) have been validated in labs with expensive motion capture systems. MediaPipe brings the joint data quality close enough to be useful with just a consumer webcam. Ota et al. (2022) validated MediaPipe against marker-based systems within 2 to 3 degrees accuracy, which is sufficient for the thresholds we're implementing.
What's next
More exercises. Longitudinal week-over-week tracking. Voice feedback during exercises. Possibly wearable integration for finer joint measurement.
Built With
- css
- html
- javascript
- mediapipe

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