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