Skip to main content

Database Schema

Mo uses PostgreSQL via Neon (serverless) with Drizzle ORM.

For the full schema, see lib/db/schema.ts in the mo-app repository.


Overview​

erDiagram
users ||--o{ workouts : has
users ||--o{ weight_entries : tracks
users ||--o{ personal_records : achieves
users ||--|| streaks : maintains

exercises ||--o{ workout_sets : logged_in
exercises ||--o{ exercise_relationships : relates_to

workouts ||--o{ workout_sets : contains

Tables by Domain​

MO:SELF (Foundation)​

TablePurpose
usersUser profiles and preferences
streaksWorkout consistency tracking
personal_recordsExercise PRs with estimated 1RM
user_preferencesTraining settings, equipment level
user_exercise_defaultsLast used weights per exercise

MO:PULSE (Tracking)​

TablePurpose
workout_sessionsActive/completed workouts
session_exercisesExercises in a session
session_setsLogged sets (weight, reps, RPE)
weight_entriesBody weight tracking
recovery_logsSleep, energy, soreness
warmup_logsWarmup completion tracking

MO:COACH (Intelligence)​

TablePurpose
fatigue_logsDaily fatigue scores with component breakdown
deload_periodsDeload week tracking

MO:CONNECT (Library)​

TablePurpose
exercisesExercise library (~750 exercises)
exercise_relationshipsVariations, alternatives, progressions
program_templatesPPL template structure
template_daysDays within a program
template_slotsMovement pattern slots
warmup_templatesWarmup protocols by day type
warmup_phasesWarmup phase definitions
warmup_phase_exercisesExercises in each warmup phase

Key Concepts​

Movement Patterns​

Exercises are categorized by pattern for smart substitutions:

PatternExamples
horizontal_pushBench press, push-up
vertical_pushOverhead press
horizontal_pullRows, face pulls
vertical_pullPull-ups, lat pulldown
squatBack squat, goblet squat
hingeDeadlift, RDL
lungeWalking lunge, split squat
corePlank, dead bug

Exercise Relationships​

TypeDescriptionExample
variationSame movement, different setupIncline vs Flat Bench
alternativeDifferent exercise, same musclesBench Press vs Push-Up
progressionHarder versionPush-Up → Weighted Push-Up
regressionEasier versionPush-Up → Knee Push-Up

Session Status​

StatusDescription
plannedSession created but not started
warmupWarmup in progress
in_progressMain workout active
completedSession finished
skippedSession was skipped

Equipment Levels​

LevelDescription
full_gymCommercial gym with all equipment
home_gymBarbell, dumbbells, bench, rack
bodyweightNo equipment needed

Enums​

// Exercise categorization
exerciseUse: 'training' | 'warmup' | 'both'
slotType: 'primary' | 'secondary' | 'accessory' | 'optional'
dayType: 'push' | 'pull' | 'legs' | 'upper' | 'lower' | 'full_body'

// Warmup phases
warmupPhaseType: 'general' | 'dynamic' | 'movement_prep'

// User settings
equipmentLevel: 'full_gym' | 'home_gym' | 'bodyweight'

// Session tracking
sessionStatus: 'planned' | 'warmup' | 'in_progress' | 'completed' | 'skipped'

// Training intelligence
deloadType: 'volume' | 'intensity' | 'full_rest'
fatigueLevel: 'fresh' | 'normal' | 'elevated' | 'high' | 'critical'

Learn More​