⚡ ML-Powered · Built with XGBoost + FastAPI

Know your next PR
before you hit it.

A personal 1RM predictor trained entirely on your own workout history — not population averages.

localhost:8000
PR Predictor
⚡ ML-POWERED
Exercise
Bench Press (Barbell)
Weight
80 kg
Reps
5
Normal
Warmup
Dropset
⚡ Predict My PR
Predicted 1RM
93.5 kg
206.1 lbs
vs your PR
+2.8 kg 🎉
Log PR
90.7
Epley
93.3
Range
88–98
47+
Exercises supported
99%
R² on personal data
<2ms
API response time
100%
Your data, local only
Features

Everything your gym app doesn't have

Trained on your history, not someone else's. Every prediction is personal.

🧠
Personal ML Model
XGBoost trained exclusively on your workout logs. The more you train, the smarter it gets.
📈
PR Comparison
Every prediction is stacked against your real log best — see exactly how close you are to breaking it.
🎯
Confidence Range
Not just a number — a calibrated low/high range so you know how certain the model is.
Instant Predictions
FastAPI backend serves predictions in under 2ms. Type, click, done.
🔍
Smart Autocomplete
Start typing any exercise name and the app pulls from your exact log — no mis-matches.
🔒
Fully Local
Your workout data never leaves your machine. Train locally, predict locally, stay private.
How it works

Three steps to your PR

From raw CSV to ML-powered predictions in minutes.

1

Drop in your CSV

Export your workout log from any tracker app. Place it in app/data/ and you're ready.

2

Train the model

Run python train_model.py. XGBoost learns your personal strength patterns in seconds.

3

Predict your PR

Start FastAPI, open the app, enter your set — get your predicted 1RM instantly with full context.

Tech Stack

Built on solid foundations

🐍 Python 3.10+
FastAPI
🌲 XGBoost
🔬 scikit-learn
🐼 Pandas
🔢 NumPy
💾 Joblib
📋 Pydantic
🌐 Vanilla JS
🎨 CSS Animations
API Reference

Clean, fast REST API

Two endpoints. No auth. No setup. Just predictions.

POST
/predict/pr
{ "exercise_title": "Bench Press (Barbell)", "weight_kg": 80.0, "reps": 5, "set_type": "normal", "set_index": 2 }
GET
/exercises
{ "exercises": [ "Bench Press (Barbell)", "Squat (Barbell)", "Deadlift (Barbell)", "... 44 more" ], "count": 47 }
Open Source · Free Forever

Start predicting your PRs today.

Clone the repo, drop in your CSV, run two commands.