Set-based exercise logging for gym sessions. Fully designed in SYNTHESIS §10.2 based on research of Hevy, Strong, Liftosaur, and workout-cool.
Tables
exercise_templates (JSON-seeded reference data)
- 500+ exercises with slug, name, category, exercise_type, modality
- Primary/secondary muscle mappings as TEXT arrays (~20 anatomical groups)
- Equipment requirements as TEXT array
- Seeded from
packages/seed-data/exercises.json
exercise_sets (per-set logging)
- FK to
activities — a strength activity has N exercise_sets
exercise_slug references exercise_templates
- Completed values: reps, weight_kg, duration_seconds, distance_meters, RPE (6-10), RIR (0-4+)
- Target values: target_reps, target_reps_min/max (rep ranges), target_weight_kg, target_rpe, target_rir
- Set classification: warmup, working, dropset, failure, amrap
- Superset grouping:
superset_group varchar ('A', 'B', etc.)
- Exercise type: weight_reps, bodyweight_reps, duration, distance_duration, etc. (Hevy's 8 types)
Key design decisions
- Flat table (one row per set), not nested exercise→set hierarchy — simpler queries
sort_order determines global order within the activity, superset grouping via shared superset_group value
- Separate target vs completed fields (Liftosaur pattern) for plan adherence tracking
- RPE and RIR both stored — RPE 10 = RIR 0, used by different training methodologies
Depends on
Schema Migration, Seed Data Pipeline (exercises.json)
Reference
See docs/api-research/SYNTHESIS.md §10.2 (Set-Based Exercise Logging).