Follow the decision tree. Dashed = conditional path. Click any node to highlight its branch.
// 1. About You
Units
Pounds & Inches or Kg & Cm
units_preference
Weight
Current weight in lbs or kg
weight_kg
Height
Height in inches or cm
height_cm
Sex
Male, Female, Other, or Prefer not to answer
sex
Activity Level
Sedentary to Very Active
activity_level
// 2. Your Goals
How do you want to train?
Full Program, Strength, Hypertrophy, Endurance, Weight Loss, Mobility, General Fitness
goal[]
Experience Level
Beginner, Intermediate, Advanced
experience
Training History
Just starting, <6 months, 6–12 months, 1–2 years, 2+ years, Returning
training_history
// 3. Your Schedule
Days Per Week
2–6 active days
days_per_week
Minutes Per Session
20, 30, 45, 60 min
minutes_per_session
Workout Location
Free text — gym name or "Home" (optional)
workout_location
// 4. Your Setup
Gym Type
Full Gym, Planet Fitness, Home Gym, Bodyweight Only
gym_type
Available Equipment
Barbell, Dumbbells, Cable, Machines, Bands, Kettlebells, Bodyweight
equipment[]
// 5. Your Style
Primary Training Style
Traditional Weight Training, Powerlifting, Bodybuilding, HIIT, Cardio
workout_modality
Additional Activities
Cardio, HIIT, or None — just my primary style
modality_secondary[]
Q15 = None?
If no secondary activities selected, skip cardio detail block
modality_secondary == ["none"]
Yes — has cardio/HIIT
How to Organize Cardio
Together, Separate days, Mostly primary
modality_mix
"single" removed
Cardio Timing
Warmup 10/15/20, Finisher 15/20, HIIT Finisher, Separate day
cardio_timing
Lifting-Day Cardio Type
None, HIIT, Steady State, Walking, Distance, Mixed
incorporated_cardio_type
Standalone Cardio Type
None, HIIT, Steady State, Walking, Distance, Mixed
cardio_type
Cardio Days Per Week
0–7 dedicated cardio days
cardio_days_per_week
No — skip to Q21
Q16–Q20 skipped
modality_mix, cardio_timing, incorporated_cardio_type, cardio_type, cardio_days_per_week
Skipped
// 6. Split & Build
Split Style
Full Body, Upper/Lower, Push/Pull/Legs, Body Part Split
focus
Skipped in Custom mode
Build Mode
Pre-built Template or Custom Builder
build_mode
// 7. Your Progress
Starting Progression
Linear, Double, or Percentage
progression_type
// 8. Safety
Limitations / Injuries
None, Shoulder, Knee, Back, Wrist, Limited Mobility, High-Impact Aversion
limitations[]
// 9. Backend: Normalize → UserProfile
normalize_questionnaire()
Converts raw answers → typed UserProfile dataclass
UserProfile
// 10. UserProfile Fields & Effects
goals[]
Sets volume and intensity curves
equipment
Filters exercise pool
workout_modality
Routes to template builder
modality_secondary[]
Populates secondary activity days
modality_mix
Together / Separate / Mostly / Single
cardio_timing
Warmup / Finisher / Separate day
incorporated_cardio_type
Cardio type attached to lifting days
cardio_type
Cardio type for dedicated days
cardio_days_per_week
Number of dedicated cardio days
training_history
AI uses for split switch recommendations
progression_type
Linear, Double, or Percentage
focus
Split style selector
limitations[]
Excludes painful exercises / ROM
// 11. Backend: Generate Workout
generate_workout()
Routes to correct builder based on modality + focus
_build_weight_training_days()
_build_weight_training_days()
Selects template rotation based on focus
_FULL_BODY / _UPPER_BODY / _PPL / _BPS
// 12. Templates — Slot-Based Exercise Selection
Full Body
5 slots: push, pull, squat, accessory, core
Upper Body
5 slots: push compound, pull compound, shoulder, back, arm
Push / Pull / Legs
3 templates, rotates by day
Body Part Split
5 templates: chest/tris, back/bis, legs, shoulders, arms
// 13. Slot Filling — For Each Day
_pick_exercise_for_slot()
Filters exercise library by:
• Movement pattern (push, pull, squat, hinge, core)
• Tier (1=compound, 2=secondary, 3=accessory, 4=isolation)
• Equipment match
• Limitations exclusion
Best 3 options
Randomized selection from top 3 matches
// 14. Day Building
Per slot
Based on experience + goals
Beginner: 3-4 sets × 8-12 reps
Intermediate: 4-5 sets × 6-10 reps
Advanced: 4-6 sets × 4-8 reps
Per exercise
User-selected: Linear, Double, or Percentage
// 15. Output
Deterministic JSON
Same inputs always produce the same plan
{ name, groups[], description }
Week View
Day cards, exercise lists, video links
// 16. AI Coach Layer (Future)
Explains questions
"What's the difference between Upper/Lower and Push/Pull/Legs?"
Reconciles answers
"You said 4 days + 1 HIIT → let's make it 5"
Builds week_schedule
Structured day-by-day modality map
Recommends switches
"6 months on body part split → try PPL for 6 weeks"
Does NOT generate workout content
Updates profile → backend regenerates