beef
A workout tracker that actually understands strength training
Epley e1RM formula
ACWR load monitoring
Claude AI coaching
MediaPipe CV integration
01The Problem
Most workout apps are glorified spreadsheets. They track what you lifted but don't help you understand whether you're getting stronger, training too hard, or recovering well. I wanted a tool grounded in sports science — one that could analyze your training the way a knowledgeable coach would.
02The Approach
Built a full-stack mobile-first PWA with Supabase for auth and data persistence. The coaching layer uses the Epley formula for estimated 1-rep maxes, Banister ACWR for training load monitoring, and RPE-based fatigue detection. Post-workout AI analysis hits Claude to generate personalized feedback based on the actual session data.
03Architecture Decisions
Supabase for real-time data + auth
Workout sets, exercises, and personal records are stored in Postgres via Supabase. Row-level security ensures users only see their own data. Real-time subscriptions could power live coaching in future.
e1RM tracking with Epley formula
Every logged set contributes to the estimated 1-rep max calculation (weight × (1 + reps/30)). The Records page surfaces PRs across all exercises and tracks progress over time — giving objective evidence of adaptation.
AI coach with session context
The post-workout AI analysis passes the full session data (exercises, sets, weights, reps, RPE) to Claude. The prompt is structured to produce specific, actionable feedback — not generic 'good job' responses.
Computer vision rep counter integration
Integrated the Rep Sensor (MediaPipe-based CV rep counter) directly into the workout logging flow. You can use camera-based rep counting mid-set and sync the count to the workout log.
Mobile-first with PWA install
Designed for thumb operation — large tap targets, bottom nav, no hover-only interactions. The layout adapts from gym-floor phone use to desktop review mode.
04Key Insight
The hardest part wasn't the code — it was structuring the AI prompt to give useful feedback. Generic prompts return generic answers. The breakthrough was passing structured JSON of the full session (not just a text summary) and asking for analysis in a specific format: what went well, what to watch, and one concrete suggestion for next session.
05Why It Matters
The project that most directly reflects my sports science background. It's the intersection of domain expertise and engineering — built by someone who understands training physiology, not just software.