Skip to main content

MoStrain

"The Load Monitor" — "I measure your body's stress"

Status: ❌ Future

MoStrain will track daily strain and recovery scores from wearable devices.


Purpose

  • Import strain scores from wearables
  • Track daily recovery readiness
  • Correlate strain with training load
  • Provide objective fatigue data

Supported Devices (Planned)

DeviceMetrics Available
WHOOPStrain score, recovery %, HRV
Apple WatchActivity, HRV, cardio fitness
GarminBody Battery, stress, HRV
OuraReadiness score, HRV, sleep stages
FitbitDaily readiness, stress score

Data Model

interface StrainData {
id: string;
userId: string;
date: Date;

// Strain (activity load)
strainScore: number; // 0-21 (WHOOP scale)
activityCalories: number;
activeMinutes: number;

// Recovery
recoveryScore: number; // 0-100%
hrvMs: number; // Heart rate variability
restingHr: number; // Resting heart rate

// Source
source: WearableSource;
externalId: string;

syncedAt: Date;
}

interface HRVTrend {
current: number;
baseline: number; // 7-day average
percentOfBaseline: number;
trend: 'above' | 'at' | 'below';
}

type WearableSource =
| 'whoop'
| 'apple_watch'
| 'garmin'
| 'oura'
| 'fitbit';

Strain Scoring

WHOOP-style Scale (0-21)

ScoreLevelDescription
0-9LightEasy day, good recovery
10-13ModerateTypical training day
14-17HighHard workout
18-21Very HighExtreme exertion

Recovery Score (0-100%)

ScoreLevelTraining Recommendation
0-33%PoorRest or light activity
34-66%ModerateNormal training
67-100%GoodTrain hard, PR attempts

HRV Analysis

Heart Rate Variability is a key recovery indicator:

function analyzeHRV(current: number, baseline: number): HRVAnalysis {
const percentOfBaseline = (current / baseline) * 100;

if (percentOfBaseline < 85) {
return {
status: 'suppressed',
recommendation: 'Consider reducing training load'
};
}
if (percentOfBaseline > 115) {
return {
status: 'elevated',
recommendation: 'Well recovered, train hard'
};
}
return {
status: 'normal',
recommendation: 'Train as planned'
};
}

Planned API Endpoints

EndpointMethodDescription
/api/strainGETGet strain/recovery data
/api/strain/syncPOSTSync from wearable
/api/strain/trendGETGet HRV/recovery trend

Integration Points

Will Receive from:

  • MoWearables (device sync)

Will Provide to:

  • MoFatigue (objective fatigue data)
  • Dashboard (strain/recovery display)
  • MoSuggest (training adjustments)

Implementation Tasks

  • Design strain_data table
  • Integrate with wearable APIs
  • Build HRV analysis
  • Create strain dashboard widget
  • Add strain to fatigue calculation
  • Build sync settings UI