Personal AI Fitness Coach
Modern training data is everywhere and useless. WHOOP knows your overnight recovery, Strava knows what you ran, your lifting notebook is on paper, the weather app is a separate tab, and your training plan lives in your head. None of them talk to each other, and none of them tell you what to do today. The question an athlete wakes up with (given how I slept, how my body recovered, what I ran yesterday, and what’s on the plan, what should this session actually look like?) isn’t answered by any one app.
I built a personal AI coach that lives in Discord and answers exactly that. The moment my overnight WHOOP recovery record lands, the bot fuses it with a 7-day physiology trend, recent Strava activity, weather and air quality, and a RAG knowledge base of running, strength, recovery, nutrition, and periodization literature, then prescribes a specific session: pace, HR ceiling, lift template, fueling notes. It isn’t a generic recommendation; it’s a call grounded in the actual state of the athlete that morning.
Lift logging happens conversationally: type “bench 3x10 at 145” and it parses the set, writes it to SQLite, mirrors it to a five-database Notion journal, and flags PRs. The real design challenge was context. A year of history doesn’t fit in a prompt, and re-fetching from WHOOP/Strava every turn was slow and expensive. So I built a layered context system (7 days of detail, 30 days of aggregate, a 1-year baseline, roughly 1K tokens instead of 90K) and gave Claude tools to pull more on demand.
It runs as a systemd service on a small Ubuntu VPS, ingests WHOOP and Strava via webhooks, and redeploys on push to main. With the coaching engine solid, I’m now wrapping its Python brain in a thin FastAPI layer behind Coach Aurelius, a touch-native iOS front end.
main.