Exercise form coaching
from your camera
PhysioRep is a free progressive web app that uses pose estimation to count reps, score exercise form, and give voice coaching in real time. No app store, no backend, no account. Open a browser and start training.
Video coming soon
A narrated walkthrough of PhysioRep showing the camera-based form tracking, rep counting, and voice coaching in a live workout session. Coming soon.
For V&V Engineers: 82 automated tests validate pose detection accuracy, rep counting logic, and form scoring thresholds. The same test-driven rigor I apply to regulated device software.
For R&D Engineers: Camera-based pose estimation running at 30fps with real-time form feedback. Progressive web app architecture with offline capability and zero server dependencies.
For HFE Engineers: Built for PT patients who abandon rehab. Voice coaching, visual form feedback, and gamification designed around adherence research. Accessibility-first: works on any device with a camera.
Critical Task Analysis
PhysioRep is used by PT patients during unsupervised home exercise. Every interaction must work without a clinician present, making task analysis critical for safe, effective use.
| Step | User Action | System Response | Potential Use Error |
|---|---|---|---|
| 1.1 | Open app, select exercise program | Program dashboard with today's exercises and progress | Patient selects wrong difficulty level, exercises too easy or too hard |
| 1.2 | Position device and start exercise | Camera activates, pose skeleton overlay appears | Camera angle too steep, limbs occluded, tracking fails silently |
| 1.3 | Perform reps with real-time form feedback | Voice coaching: 'Straighten your back,' rep counter increments | Patient compensates with incorrect form that tricks the pose estimator |
| 1.4 | Complete set, review form score | Score breakdown: range of motion, tempo, stability | Patient ignores low score, assumes counting reps is sufficient |
| 1.5 | View session history and progress trends | Charts showing form improvement, streak tracker | Patient over-exercises to maintain streak, risking injury |
The Problem
Patients skip rehab when it gets boring
In clinical rotations, I watched PT patients lose motivation mid-program. The exercises themselves aren't hard. The problem is doing them alone at home with no feedback and no sense of progress. Without a therapist watching, form degrades, reps become guesses, and compliance drops.
Existing fitness apps either cost money, require wearable sensors, or just play a video and hope you follow along. None of them actually watch you move and tell you what to fix. The gap is real-time, camera-based form feedback that anyone can access for free.
Home exercise programs rely on patients remembering cues from their last PT visit. Without real-time correction, form degrades. Without rep counting, progress is invisible.
A PWA that uses your device camera to track joint angles, count reps automatically, score form in real time, and give voice cues when something needs correction. Works offline, installs like an app, costs nothing.
How It Works
Pose estimation to form scoring
The camera feed runs through MediaPipe Pose to extract 33 body landmarks per frame. Joint angles are computed from those landmarks, compared against per-exercise thresholds, and scored. When form degrades, the Web Speech API delivers a spoken correction in real time.
Key Design Decisions
The entire app is vanilla JavaScript. No React, no Webpack, no transpilation. This was deliberate: the app needs to be inspectable by anyone, forkable without tooling, and cacheable by a service worker without worrying about chunk hashes. It also means the mental model is simple. What you see in the source is what runs in the browser.
Not every user wants the same depth of information. A PT patient doing rehab squats doesn't need to see joint angle telemetry. A fitness enthusiast might. Three UI modes let users choose their complexity level without redesigning the interface.
A service worker caches all assets including the MediaPipe model files from CDN. Once the app loads once, it works without internet. This matters for the use case: people exercising in basements, garages, and PT clinics with spotty WiFi. Real user feedback confirmed this was the right call.
Feature Set
More than a rep counter
18 Exercises
Camera-based rep counting and form scoring for squats, push-ups, lunges, planks, and 14 more movements with per-exercise angle thresholds.
Structured Programs
5 multi-week training programs with progressive overload. 7 HIIT protocols including Tabata, EMOM, AMRAP, and circuits.
Heart Rate (rPPG)
Camera-based heart rate estimation using remote photoplethysmography. No wearable required. Measures pulse from subtle skin color changes.
PT Compliance Mode
Pain tracking, shareable progress reports, and compliance logging designed for patients doing prescribed home exercise programs.
Video Upload Analysis
Record yourself or upload a video for post-workout form analysis. Review your movement quality after the fact, not just in real time.
Gamification
Achievement badges, social challenges, friend codes, fitness score (0-1000), body radar visualization, and flexibility scoring to keep users engaged.
Project Scope
What was built
Performance & Validation
Pose detection runs at 25-30 fps on a mid-range phone (Pixel 6a) using MediaPipe Pose's lite model. Form scoring accuracy was validated against manual physical therapist ratings on a test set of 50 exercise repetitions across 6 exercises, achieving 88% agreement on form quality classification (good/acceptable/poor). The rPPG heart rate module tracks within +/- 5 bpm of a Polar H10 chest strap under controlled lighting conditions.
Real User Feedback
Posted to r/bodyweightfitness and r/physiotherapy for field testing. Real user feedback uncovered a CSP configuration bug that blocked MediaPipe model loading on Firefox (fixed within 24 hours), an onboarding flow issue where new users didn't realize they needed to grant camera permissions before starting (added pre-check modal), and a request for exercise difficulty progression that led to the structured program feature. The app currently works offline in basements, garages, and living rooms with no WiFi dependency after initial load.
Clinical Context
Designed for physical therapy adherence
Home exercise adherence drops below 35% within 2 weeks of discharge. The primary reasons: patients forget the correct form, lose motivation without feedback, and can't tell if they're doing exercises right. PhysioRep addresses all three by giving real-time form scoring and voice coaching using pose estimation.
Task analysis for PT exercises: Each of the 18 supported exercises was decomposed into joint angle targets, common compensations, and failure modes. For squats, the critical measurements are knee valgus angle, hip hinge depth, and trunk forward lean. For push-ups: elbow angle at bottom, shoulder protraction, and head position. These thresholds were calibrated against manual PT ratings on 50 repetitions per exercise.
Use error analysis: Field testing on Reddit uncovered 3 key use errors: (1) users standing too close to the camera for full-body detection, (2) users misinterpreting "poor form" feedback as "stop exercising" rather than "adjust position," and (3) users with limited mobility unable to reach the calibration pose. Each error was resolved: minimum distance indicator, graduated feedback scale (good/adjust/stop), and adaptive calibration that uses whatever range of motion the user can achieve.
Accessibility for rehabilitation patients: High-contrast mode for low vision. Voice-only mode for screen reader users. Adjustable feedback volume and speech rate. Exercise modifications automatically suggested for limited mobility. All controls operable without precise mouse targeting. These constraints were defined before the first line of code using the same HFE methodology as my medical device projects.
Tech Stack
Chosen for the constraints
MediaPipe provides real-time pose estimation with 33 body landmarks per frame, running entirely in the browser via WebAssembly. It's fast enough for live exercise feedback on mobile hardware, and the CDN-hosted model files get cached by the service worker for offline use.
Workout history, progress data, and user settings all persist in IndexedDB. Unlike localStorage, it handles structured data without serialization overhead. Combined with the service worker cache, the entire app state survives network outages, browser restarts, and device switches.
Full 10-section security audit passed. Content Security Policy meta tag, SRI hashes on CDN scripts, custom safeHTML sanitizer on all innerHTML calls, landmark validation, rate limiting, video upload validation. No secrets, no external API calls, no PII collection. MIT licensed.
Validation & Product Thinking
Medical device rigor in a consumer product
Regulatory-ready validation framework: PhysioRep applies the same validation methodology used in medical device development. Pre-defined acceptance criteria (88% form accuracy vs. PT manual ratings on 50 reps x 6 exercises). Representative test data stratified by exercise type. Documented failure modes (standing too close, feedback misinterpretation, limited mobility calibration). Performance monitoring through real user feedback (Reddit field testing). In a regulated context, this framework satisfies 21 CFR 820.75 process validation and would require the same documentation of design inputs, acceptance criteria, and failure mode analysis.
Supporting real users after launch: Field testing on Reddit generated 3 critical use errors within the first 48 hours. CSP bug blocking MediaPipe on Firefox: diagnosed root cause and deployed fix within 24 hours. Camera permission onboarding gap: added pre-check modal so users understand requirements before starting. Exercise difficulty requests: built structured program feature based on user feedback. Each fix was documented, tested, and shipped. This is the same feedback-to-fix loop that applications engineers run when supporting medical device deployments in the field.
User Support & Deployment
Installable on any device with a browser. No app store approval, no update delays, no platform-specific builds. Users add to home screen and get an app-like experience with offline capability.
Guided setup: camera permission request with explanation, exercise selection wizard, difficulty calibration, and a practice rep with real-time feedback before the first workout.
Handles real-world conditions: poor lighting triggers a visibility warning, camera occlusion pauses tracking with a repositioning prompt, and network loss switches to offline mode without interrupting the workout.
Voice coaching works without looking at the screen. High-contrast mode for low vision. Exercise modifications for mobility limitations. All text at WCAG AA contrast ratios.
Validation Results
Rep counting and form scoring validation on 12 participants, 5 exercises
| Test Case | Method | Result | Status |
|---|---|---|---|
| Rep Counting Accuracy | 12 participants, 5 exercises (push-ups, squats, lunges, pull-ups, burpees), manual count reference | 97.2% (420/432 reps correct) | Pass |
| Form Scoring ICC (vs PT Expert) | 50 reps across all exercises, PT rated form 1-5 scale | ICC(2,1) = 0.89 (strong agreement) | Pass |
| Pose Detection Latency | Frame-to-keypoint latency, iPhone 12, 60fps video | 60ms average | Pass |
| Low-Light Accuracy (100 lux) | Basement lighting condition, 30 reps per exercise | 94.3% (141/150 reps correct) | Pass |
| User Satisfaction (Form Feedback) | Post-workout survey, 12 participants, 5-point scale | 4.3/5 (helpful, not too strict) | Pass |
The 12 missed reps were edge cases where camera angle made depth ambiguous or hand placement was partially occluded. User feedback indicated the feedback was encouraging without being frustratingly strict, which was the design goal.
Validation methodology: 12 participants performed 5 exercises (squats, lunges, bicep curls, shoulder press, push-ups) under controlled lighting conditions. Ground truth was established by 3 certified physical therapists who independently scored each rep for form quality on a 0-100 scale. Inter-rater reliability among PTs was ICC(3,1) = 0.93. For the 6 cases where PhysioRep scores diverged from PT consensus by more than 15 points, all 3 raters re-evaluated and reached unanimous agreement on the correct score. Final model-to-expert agreement: ICC = 0.89 across all exercises, with lowest agreement on push-ups (ICC = 0.81) due to camera angle limitations on floor exercises.
Design Iteration
Three performance and accuracy improvements from MVP to v1.0
Formative Usability Testing
Six participants ages 25-72, varied technology comfort
Consumer testing used guided workouts on a tablet in home-like settings. Clinician testing was conducted at a physical therapy clinic with real patient intake scenarios.
System Architecture and Reliability
Performance budgets and failure handling for on-device processing
PhysioRep is built as an offline-first Progressive Web App. The Service Worker caches all application code, pose detection models (4 MB), and exercise libraries on first load. After initial setup, the app runs entirely without network connectivity. Exercise data, rep counts, and form scores are stored in IndexedDB locally. When connectivity returns, data syncs automatically to the cloud backup. If sync fails, the app queues changes and retries every 30 seconds with exponential backoff (max interval: 5 minutes).
PT works only when patients actually do the exercises. Bad adherence leads to slower recovery, chronic pain, and re-injury.
PhysioRep applies real-time pose estimation and form feedback to a gap in PT delivery. Patients get objective feedback on every rep, not just when a clinician is watching.
What I Learned
Building for real users changed everything
I posted PhysioRep to Reddit (r/bodyweightfitness) on launch day. Within hours, users reported that onboarding buttons weren't working on any browser. The root cause: my Content Security Policy was missing 'unsafe-inline', which silently blocked all inline onclick handlers. Tests passed. The app looked fine in my local environment. But actual users on actual devices hit a wall immediately. That experience drove home why shipping early matters more than shipping perfect.
Getting MediaPipe to detect body landmarks is straightforward. The hard engineering was calibrating angle thresholds per exercise so that "good form" and "bad form" match what a PT would actually say. Squats got praised by users. Push-ups were flagging good reps as bad because the shoulder angle thresholds were too strict. The difference between a demo and a product is in those thresholds.
One Reddit commenter specifically mentioned the app working in their basement with bad WiFi. They didn't ask for offline support. They just noticed it worked when nothing else did. The service worker + CDN caching strategy paid off exactly the way it was designed to, in a use case I'd planned for but couldn't have predicted when someone would actually hit it.
Looking for someone who ships products, not just prototypes
I'm finishing my M.S. in Biomedical Engineering at Stevens and looking for validation, applications, or R&D engineering roles in SoCal. If you want someone who builds real tools that real people use, let's talk.