Original Reddit post

After a decade building ML systems—from financial crime detection at Dow Jones, to AI governance at News Corp, to anti-fraud at scale—I immediately recognised a pattern in AI fitness apps: most rely on a single LLM call with minimal personalisation, repackaged as so-called “personalisation.” So I built one properly. Iron Church is an AI personal training app that actually delivers on its claims. The technical problem with “generate me a workout”: A single prompt has no state. It doesn’t know what you did last Tuesday, that your shoulder is inflamed, that you only have dumbbells, or that you’re in week 3 of a periodised mesocycle. It generates something plausible but generic. That’s not coaching — that’s autocomplete for exercise lists. What I built instead: 7 separate AI pipelines, each handling a different part of the coaching process: Plan generation — 4-week cycles with progressive overload by structure, not merely reps. Session generation — calibrates workouts using fatigue, history, 1RM, and equipment. Exercise swapping — biomechanically aware substitutions when equipment isn’t available, or an injury flares up. Not just “swap bench for push-up” — it considers muscle activation patterns and loading requirements. Warmup/finisher— tailored to the main session’s focus Post-session feedback —reviews logs and gives tailored cues Mesocycle commentary — weekly Brodin voice (the AI coach persona) that reflects on your actual training data Goal voice — translates your training goal into session-specific motivation. 19 training disciplines that actually programme differently: This is where most apps fail hardest. They offer “styles” that just change the rep range, not the underlying methodologies. Iron Church codifies each discipline’s specific programming philosophy and techniques, so the workouts reflect the core differences between bodybuilding, strength training, callisthenics, marathon prep, and more. German Volume Training demands 10×10 at 60% 1RM with 90s rest. Deviations aren’t variations — they’re a different programme. 5/3/1 cycles specific percentages of a training max across 4-week waves. The AI has to know which week you’re on before generating a single set. Callisthenics has no weights to increase — progressive overload is expressed through lever progressions and tempo. Marathon prep mixes running sessions (tempo, intervals, long runs) with supplementary strength work to prevent injury. Each discipline’s unique programming guide is injected into the prompt, not just its name. For example, strength disciplines use percentage-based loading, callisthenics emphasises movement progression, and marathon prep combines running plans with strength routines. This ensures every plan respects how training should differ between disciplines. Why one prompt fails: Monolithic prompts degrade when you stack too many constraints. Ask a single call to handle periodisation + volume tracking + equipment filtering + injury constraints + discipline-specific rules + motivational coaching, and you get something that half-follows each instruction. The multi-pipeline approach lets each stage focus on one thing well. The stack: React + Vite + Firebase + Gemini 2.5 Flash/Pro + Vercel serverless. Input sanitisation for prompt injection. Structured JSON output with schema validation. Server-side rate limiting via Firestore transactions. I wrote a full technical deep dive on the architecture: https://www.linkedin.com/pulse/why-most-ai-fitness-apps-just-marketing-how-i-built-one-james-bell-59xje Happy to answer questions about the architecture, the prompt engineering approach, or any trade-offs. submitted by /u/bashomatsuo

Originally posted by u/bashomatsuo on r/ArtificialInteligence