Raw data flows through 26 sources → Live →
Why it's open

The transparency principle

Accountability requires visibility. If the numbers aren't public, it's just a journal. Publishing everything — the bad weeks, the stalled progress, the failed experiments — is what makes this a real experiment rather than a highlight reel.

The data is also useful. Other builders can use the schema, the methodology, or the correlation analysis as a starting point. N=1 data is limited — but it's honest, and the infrastructure for collecting it is open.

What's public
Daily aggregated vitals · Weekly summary stats · Character sheet scores · Correlation findings · Architecture reviews · Experiment results
What's private
Raw API payloads · Journal entries · Genome data · Anything identifiable about others · Full lab report PDFs
Live feeds

Static JSON endpoints

Two static JSON files are regenerated daily by the Life Platform pipeline and served via CloudFront. No authentication, no rate limiting, no API key.

public_stats.json Updated daily ~11am PT

The primary public feed. Aggregated daily vitals, weight journey, training load, and platform stats. This is the file that powers the homepage ticker, sparklines, and Day 1 vs. Today comparison.

View raw JSON → Live API: /api/vitals →
FieldTypeDescription
vitals.weight_lbsnumberMost recent weigh-in in pounds
vitals.hrv_msnumberHRV in milliseconds (Whoop overnight)
vitals.hrv_trendstringHuman-readable HRV trend (7d avg vs 30d)
vitals.rhr_bpmnumberResting heart rate in BPM
vitals.recovery_pctnumberWhoop recovery score 0–100
vitals.sleep_hoursnumberTotal sleep last night in hours
journey.start_weight_lbsnumberStarting weight (Feb 22, 2026)
journey.goal_weight_lbsnumberGoal weight (185 lbs)
journey.progress_pctnumberPercent of total weight-loss goal achieved
journey.projected_goal_datestringISO date of projected goal attainment at current rate
training.ctl_fitnessnumberChronic Training Load (fitness signal, 42d EMA)
training.atl_fatiguenumberAcute Training Load (fatigue signal, 7d EMA)
training.zone2_this_week_minnumberZone 2 cardio minutes in current week
training.zone2_target_minnumberWeekly Zone 2 target (150 min)
platform.mcp_toolsnumberTotal MCP tools currently registered
platform.data_sourcesnumberActive data source integrations
platform.lambdasnumberLambda functions deployed
trends.weight_dailyarray30-day weight readings: [{date, lbs}]
trends.hrv_dailyarray30-day HRV readings: [{date, ms}]
trends.recovery_dailyarray30-day recovery scores: [{date, pct}]
_meta.generated_atstringISO timestamp of last pipeline run
character_stats.json Updated daily ~10am PT

Character Sheet data — gamified health scoring across 7 pillars. Used by the /character/ page. See the full scoring methodology on the Character Sheet page.

View raw JSON →
FieldTypeDescription
character.levelnumberOverall character level (1–50+)
character.tierstringNamed tier: Foundation / Momentum / Discipline / Mastery / Elite
character.xpnumberTotal XP accumulated
character.days_activenumberDays the platform has been tracking
pillars[*].namestringPillar name: sleep · movement · nutrition · metabolic · mind · relationships · consistency
pillars[*].levelnumberPillar-level score (1–10)
pillars[*].raw_scorenumberComputed raw score 0–100 before level mapping
pillars[*].trendstring7-day trend: up / stable / down
pillars[*].xp_deltanumberXP change from previous day
// Fetch example (browser or Node.js)
// Get today's vitals — no auth required const res = await fetch('https://averagejoematt.com/public_stats.json'); const data = await res.json(); console.log(data.vitals.hrv_ms); // e.g. 66.2 console.log(data.vitals.recovery_pct); // e.g. 89 console.log(data.journey.progress_pct); // e.g. 12.4 // Or use the API endpoints directly const vitals = await fetch('https://averagejoematt.com/api/vitals'); const journey = await fetch('https://averagejoematt.com/api/journey');
How the numbers are made

Methodology docs

Every score, correlation, and algorithm is documented. If you're going to use this data, you should understand how it's computed.

Correlation Analysis
Weekly Pearson correlation across 23 metric pairs with Benjamini-Hochberg FDR correction at α=0.05. Minimum 14-day windows. Results labeled with r, p-value, and sample size.
See correlation explorer →
Character Sheet Scoring
7-pillar composite scoring system. Each pillar aggregates 3–8 source metrics using domain-specific weights. Raw scores (0–100) map to levels (1–10) via tiered thresholds. Full weighting table and input signals published.
See scoring methodology →
Training Load (ACWR)
Acute:Chronic Workload Ratio using 7-day (ATL) and 42-day (CTL) exponential moving averages. Sweet spot: 0.8–1.3. Sources: Garmin, Strava, Apple Health activity rings.
See platform architecture →
HRV Trend Analysis
7-day rolling average vs 30-day baseline, sourced from Whoop overnight HRV. Trend directional signals use ±3% threshold to distinguish meaningful change from noise.
See live dashboard →
Deficit Sustainability
Caloric deficit tracking with protein adequacy, weekly rate validation, and adaptive ceiling to prevent metabolic adaptation. Sources: MacroFactor + Withings.
See nutrition protocol →
Architecture Reviews
Monthly AI-graded code reviews using 12 expert personas (Linus, Kelsey, Martin, etc.). Grades A–F on 8 dimensions. All reviews published unredacted.
Read all reviews →
Storage schema

DynamoDB table design

All normalized metrics are stored in a single DynamoDB table using a composite key pattern. Raw JSON payloads live in S3.

// DynamoDB single-table: "life-platform" (us-west-2) // No GSIs — all access via composite key pk: "USER#matthew#SOURCE#{source}" // e.g. "USER#matthew#SOURCE#whoop" sk: "DATE#{YYYY-MM-DD}" // e.g. "DATE#2026-03-20" // S3 raw storage path convention "raw/{source}/{datatype}/{YYYY}/{MM}/{DD}.json" // e.g. "raw/whoop/recovery/2026/03/20.json" // Active sources (26 total) whoop · eight_sleep · withings · garmin · strava · apple_health macrofactor · habitify · notion · todoist · dexcom · genome labs · dexa · weather · travel · blood_pressure · supplements · state_of_mind
Full architecture docs →
N=1 disclaimer

This is one person's data. Correlations in this dataset are not universal truths — they describe patterns in my physiology during a specific period of intentional change. Statistical significance thresholds (p < 0.05 with FDR correction) are noted on all correlation findings, but small n limits generalizability.

Use this data as a methodology reference, not a prescription. If you're building something similar, the schema and architecture are worth borrowing. The specific numbers are mine.

Ask the data anything → About the project → Platform architecture →

The Measured Life

Get the data, every week.

Real numbers from 26 data sources. No highlight reel. Every win and every failure, in your inbox on Wednesdays.
See a sample issue →