How Kovura works: the engines under the hood: 23 engines do all the real thinking
Every score traces back to a formula you can actually read. Published training-load research. Not a black box. Full citations →
Load
WorkloadCalculator / ACWR.swiftEvery logged set contributes a daily load number. Kovura compares a fast-moving acute average of that load against a slow-moving chronic average to estimate injury risk. Same logic behind the training-load tools used in professional sport.
acute = load · λa + acute · (1 − λa) short lookback chronic = load · λc + chronic · (1 − λc) long lookback chronic = max(chronic, floor · peak chronic) floor, only ever raises ratio = acute / chronic
Muscle Readiness
MuscleReadinessEngine.swiftA simplified two-term impulse-response model, run independently for all 16 muscle regions, estimating a readiness score from 0 to 100 for each one.
fatigue, fitness = Σ RPE × contribution % × e^(−hours ago / τ) readiness = 50 + fitness fraction · 50 − fatigue fraction · 100 (clamped 0 to 100)
Muscle Soreness
MuscleSorenessEngine.swiftEvery muscle's recovery time constant starts generic, then quietly learns from you. Kovura compares what the model predicted you would feel against what you actually reported, then nudges. A small explainable rule rather than a fitted model.
error = (reported severity / 5 × 100) − predicted soreness if |error| is large: learned hours += a bounded step (bounded, drifts, never snaps)
Recovery
RecoveryEngine.swiftA systemic score built primarily from HRV, z-scored against your own trailing 14-day baseline, blended toward yesterday with a one-day half-life so a single noisy morning reading never whipsaws the number.
score = 50 + z × 20 fallback = 0.7 × resting heart rate + 0.3 × sleep vs an 8h target
Readiness
ReadinessEngine.swiftComposes the Recovery engine's systemic score with average Muscle Readiness into one forward-looking number, weighted by a five-option persona that self-calibrates. Load is deliberately excluded. Readiness looks forward, Load looks back. The app never lets one contaminate the other.
readiness = persona weight × systemic + (1 − persona weight) × muscular confidence tier counts which signals are actually present
Suggests increase / hold / decrease per exercise from the average readiness of its target muscles.
Rules-based insight cards: deload suggestions, sleep commentary, RPE auto-regulation tips.
Re-runs every engine across day windows for every chart. Plus streaks, PRs, and balance scores.
Camera HRV Scan
PPGProcessor.swift / HRVScanSession.swiftNo watch? Hold a fingertip over the camera and flash for 60 seconds. Each heartbeat dims the red channel slightly, and Kovura turns those dips into beat-to-beat intervals and rMSSD, a standard HRV measure. Most of the code is quality control: unclear beats are dropped, and a scan with too many asks for a redo. It only counts on days with no watch HRV, and it's compared against your own earlier scans, never mixed with watch readings.
10 s to settle, then 60 s on the camera's frame clock band-pass 0.7–3.5 Hz → beats → drop any 20% off the median rMSSD = √ mean(Δ interval²) over 10% dropped → redo score = z of ln rMSSD vs your earlier scans (after 7)
Turn it on in the daily check-in or Settings → Data & Privacy → Beta Features. Free.
Sleep-Adjusted Recovery
SleepRecoveryEngine.swiftLast night's total sleep, from Apple Health sleep times, nudges each muscle's recovery clock: a short night runs it a little slower, a long night barely faster. The effect is deliberately small and capped. How much sleep matters starts at a default and is then tuned from your own soreness check-ins, down to no effect if sleep makes no difference for you.
ratio = last night ÷ your 14-day average (held to 0.6–1.2) speed = 1 + k × (ratio − 1) (held to 0.8–1.1) k starts at 0.5, then learned from 20+ soreness check-ins
Turn it off anytime in Settings → Data & Privacy → Beta Features. Free.
Suggests increase / hold / decrease per exercise from the average readiness of its target muscles.
Rules-based insight cards: deload suggestions, sleep commentary, RPE auto-regulation tips.
Re-runs every engine across day windows for every chart. Plus streaks, PRs, and balance scores.
Reads HRV, RHR, sleep, VO₂ max. Writes back one thing: Kovura's own completed workouts.
Flags a just-typed weight as a likely typo if it sits more than three standard deviations from recent history.
An on-device language model wrapped in hard-coded sports-science rules, with a silent keyword fallback.
Tells you whether a trend graph is improving, worsening or flat, and why, with a rules-based fallback for older devices.
Paste a coach's plan as plain text and it becomes a structured routine, fuzzy-matched to the real exercise catalog, never silently guessed.
Authors today's workout from your actual recovery and readiness numbers, grounded in your data, built only from real catalog exercises.
Training nudges from engine output, including an instant alert the moment your load ratio crosses into the high-risk zone.
One-tap local backup and restore of your entire training history. No cloud, no account.
Exports every logged session to CSV: your data, in a format any spreadsheet opens.
Tracks which muscles get trained together, so paired programs get realistic recovery expectations.
Silent consistency checks over your history, so a bad edit can't quietly corrupt the engines' inputs.
Cleans up sessions abandoned after a crash or force-quit, so nothing logs twice and nothing is lost.
Reports failed saves with enough context to recover, so a failed write never eats a set you just logged.
Built on peer-reviewed sports-science methodology: 8 core mechanics, 14 published papers behind them.
