-
-
Age breakdown in context
-
Personalized Breakdown
-
Graph of change in age trends
-
Start scree
-
Definitions for the user
-
Biggest contributor to biological ages
-
-
Popular wearable connections
-
Disclaimer + Context
-
Real age, Scan age, Biological age, and Combined Age from data
-
Long-term health plan
-
Context + Info

Inspiration
Wearables already collect sleep, HRV, and resting heart rate. What they rarely do is turn a post-workout body into something you can see next to the calendar: is my heart recovering like someone younger or older than I am, and what should I do tonight?
We wanted a phone-camera scan after activity, honest ages that do not jump on one noisy reading, and a plan that is specific enough to follow. The name is the brief: outrun your age.
What it does
The main page lets the user take a new Presage camera scan post-activity. Underneath, a graph shows Real, Biological, Cardiac, and Pulmonary ages we calculate on-device from that scan and their wearable, all from one shared model the rest of the app reads.
Next, personalized Insights uses the Gemini API on demand so we can show how that data factors into biological age. The app returns a plan of aerobic training, recovery, supplements, dietary gaps, and quality-of-life changes that can lower biological age over time and quantify a longer healthspan — while local models, not Gemini, own the math.
On Data, the user can go in-depth: peer risk from published recovery science, raw wearable and Presage numbers, and how many years each factor adds or removes. History, settings, and add-wearables sit on that same saved state, so they can drop errant scans by day, week, or all time. roadrunner answers “where is this?” locally for free, and interpretive questions with a daily Gemini cap.
How we built it
We designed the code as a thin SwiftUI shell over one observable recovery state. Tabs do not recompute ages. Dash, Data, Insights, History, and Add all read and write the same model, which persists as a Codable snapshot per account.
A Presage SmartSpectra session captures heart-rate recovery, respiratory rate, camera heart rate, signal quality, and Baevsky stress. HealthKit (read-only) supplies sleep, HRV, resting HR, steps, and energy. Demo scenarios fill in when Health is unavailable (simulator).
Biological age is a local blend of cardiac age, pulmonary age, chronological age, and lifestyle years from sleep and movement:
$$ B = 0.50\,C + 0.30\,P + 0.20\,R + L $$
Each new scan is compounded with history and clamped around chronological age so one bad take cannot explode the number. If Gemini suggests an adjusted age, we blend it with the engine (\(0.55\) local, \(0.45\) model) and still clamp it.
Peer risk uses published relative-risk functions (HRR, resting HR, HRV, age acceleration) rather than a black box. Gemini only sees numbers, never video.
Challenges we ran into
Camera HRR is not a treadmill test. Resting rPPG is easy to over-read as elite recovery. We only treat peak-minus-camera as HRR when Health shows a real effort spike.
Language models like to be helpful — and expensive. Auto-running Gemini on Insights open burned tokens and invented confidence. We made Insights idle until Repopulate or a finished scan, routed “where is X” locally, capped Gemini asks at 8/day, and refused to persist chat.
The model must not own the age. Early drafts let Gemini pull biological age younger than the scan supported. The blend-and-clamp layer was the fix.
HealthKit vs simulator. Live vitals need a device. We built a demo injector so judging and development still have a full path.
What we learned
A recovery app is only as trustworthy as who is allowed to change the number. Putting published physiology in a local engine, and using Gemini as a planner on top of that engine, was the design that survived the weekend. We also learned that “explain this screen” is a product feature, not a prompt: most of roadrunner never needs an API.
What’s next
Tighter Presage–Health fusion on-device, a real Garmin/Fitbit path beyond HealthKit, and a licensed Tiempos / Styrene face for the type system we already structured around headings vs body. Still not a diagnosis — a clearer picture of recovery, and a plan you can actually run.
Log in or sign up for Devpost to join the conversation.