All projects
Live

beef

A workout tracker that actually understands strength training

Built in 4 weeks
Next.jsSupabaseTypeScriptSports ScienceTailwind CSS

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.