Every metric in Vitra is a rule or a statistic — never a black-box score. This page lists, for each surface in the app, what's shown, how it's computed, and the published study it draws from.
No machine-learning model. No data leaves your computer. If we can't point to a paper for it, it isn't in the app.
What you see in the app. A nightly HRV number, a personal-normal band on the chart, and trend flags when HRV is suppressed or destabilising.
How it's computed. Vitra reads the rMSSD value Oura computes from your overnight recording, builds a 60-day personal baseline (mean ± standard deviation), and flags readings that fall more than ~1 SD below that mean for two consecutive nights. Day-over-day coefficient of variation (CV) is tracked separately as an early-instability signal — the approach used in elite endurance monitoring.
What you see in the app. Nightly lowest resting heart rate, your personal baseline band, and alerts when RHR climbs.
How it's computed. Vitra uses Oura's lowest-nightly resting heart rate, computes a 60-day rolling mean, and flags an elevation when today exceeds the baseline by approximately one standard deviation. Sustained elevation alongside other markers (temperature, low HRV) escalates to a compound illness/overreach flag.
What you see in the app. Your nightly skin-temperature deviation from your personal mean, and an early-warning flag when it climbs.
How it's computed. Oura provides nightly skin-temperature deviation; Vitra surfaces it as-is and combines it with RHR elevation to flag possible illness onset 1–3 nights before symptoms appear, following the validation work below.
What you see in the app. Total sleep, a personalised optimal-sleep estimate, and a rolling sleep-debt number.
How it's computed. Optimal duration is inferred from your own best-performing nights (top-quartile readiness over a multi-month window). Sleep debt is the cumulative shortfall over the last 14 days, decayed daily — broadly mirroring the cumulative-cost model from the foundational Penn paper.
What you see in the app. Time in deep and REM sleep, with low-night flags when either drops below your usual share.
How it's computed. Vitra inherits Oura's stage classification (accelerometer + PPG-derived stages) and applies your personal 30-day median as the reference point, not a population norm. Two consecutive low nights raise a flag rather than acting on a single outlier.
What you see in the app. Bedtime drift, a sleep-regularity index, and a forward-looking wind-down window.
How it's computed. Regularity is computed as the average minute-to-minute agreement of sleep/wake state across recent 24-hour cycles — Phillips' Sleep Regularity Index (SRI). Bedtime drift uses a 14-day rolling median against your personal target.
What you see in the app. An estimated VO₂ trajectory and a fitness-trend flag.
How it's computed. Vitra uses Oura's VO₂ max estimate (derived from your sub-maximal heart-rate response to walking and pace data) as the raw input, and reports change relative to your 90-day baseline — never against a population percentile.
What you see in the app. An acute-to-chronic workload ratio (ACWR) and an overreaching/under-loading flag.
How it's computed. Computed as 7-day exponentially-weighted load divided by 28-day exponentially-weighted load. Values above ~1.3 are flagged as overreaching risk, below ~0.8 as detraining — thresholds drawn from the Gabbett/Hulin sports-science literature.
What you see in the app. Step count with a low-day flag and an active-minute trend.
How it's computed. Daily steps as reported by Oura, with a personal 30-day rolling target rather than a fixed 10,000-step heuristic.
What you see in the app. Phase context applied to HRV, temperature and sleep flags.
How it's computed. Vitra uses Oura's cycle-phase classification (follicular / ovulatory / luteal / menstrual) to widen the personal-normal band for metrics that are known to shift across the cycle — particularly skin temperature and HRV in the luteal phase.
What you see in the app. Every metric chart shows a shaded ‘normal-for-you’ band, not a population norm.
How it's computed. For each metric Vitra maintains a 60-day rolling mean and standard deviation. The band on the chart is ± 1 SD. Flags fire on direction-correct deviations, never on a single outlier, and back off automatically when you tell Vitra you're injured, sick or travelling.