Home / Case Studies / RunFlo
Fitness · RunningMobile2024Consumer

Personalized running plans that adapt to how you actually run.

RunFlo gives runners plans that react to their real-world performance — adapting for travel, illness, and bad days rather than treating missed sessions as failures. We built the adaptive training engine, GPS tracking, and the social layer that keeps runners accountable to each other.

RUNFLO / HOME Dashboard TODAY Active 64% 5k improvement rate METRIC 94% GROWTH ↑ 28% Top item Just now Second item 3 min ago Third item 8 min ago Home Feed Profile More RunFlo LIVE 2,847 ↑ 18% this week STATUS · ACTIVE 64% 5k improvement rate TIMELINE 16 weeks View full report → Analytics USERS 2.4k RATE 94.2%
Client
RunFlo
Industry
Fitness · Running
Surfaces
iOS · Android
Timeline
16 weeks
Outcome
64% 5k improvement rate
The Problem

Most running apps either give you a static plan (ignore missed days) or shame you for deviating from it.

~60%
Runners who miss a plan week
~40%
Plan abandonment after miss
$200-800/mo
Coaching cost (human coach)

Most running apps either give you a static plan (ignore missed days) or shame you for deviating from it. Elite runners train with coaches who adapt in real time — but coaching costs hundreds of dollars a month. RunFlo's thesis: adaptive coaching should be democratised.

The technical challenge: a training plan that adapts well needs to understand context. Was yesterday's missed run a rest day, an illness, or a schedule conflict? The same input (missed session) requires different plan adjustments.

The product also needed class-leading GPS accuracy, offline-first operation, and social features that motivate without creating toxic comparison culture.

What We Designed

Coaching intelligence for every runner.

40 runners
Interviewed pre-design
Zero failure states
Core UX principle
4 plan types
5k, 10k, HM, Marathon

We ran structured interviews with 40 runners — from 5k beginners to ultra-marathon finishers. The universal finding: runners quit plans not because they're unfit, but because one bad week makes the plan feel unreachable. The UI had to make adaptation feel like support, not failure.

What We Built

GPS tracking meets adaptive AI.

Flutter
iOS + Android native GPS
Nightly rebuild
Fresh plan every morning
Offline-first
Routes cached before runs

Flutter handles iOS and Android with native GPS integration and background tracking. The adaptive engine runs server-side — a rule-based planner seeded with VO2 max estimates, HRV data, and context from user check-ins. Plans are regenerated nightly and available offline by morning.

Core Features

What ships in the product.

01

Adaptive training plans

5k to marathon plan types. Missed a run? The plan reshuffles forward — never marks days red, always moves ahead.

02

GPS route tracking

Sub-meter GPS accuracy with automatic pause/resume, split times, elevation, and post-run route replay.

03

Heart rate zones

Zone 2 vs. threshold vs. VO2 max workouts. Connects to Apple Watch, Garmin, Polar, and chest straps.

04

Coach check-ins

Weekly 3-question check-in (legs, energy, motivation) feeds the adaptive engine and triggers plan adjustments proactively.

05

Running buddy matching

Matches users running at similar paces and schedules for virtual or in-person accountability runs.

06

Race predictor

Estimates finish times for goal races based on recent training data. Updates weekly as fitness improves.

07

Offline maps

Routes are cached before runs — no signal required on trail. Syncs data when reconnected.

08

Injury prevention flags

Flags overtraining signals (HRV drops, pace regression, sleep-quality decline from wearable data) before injury risk peaks.

09

Community challenges

Monthly community events: virtual races, distance challenges, and club leaderboards. 30% of users join at least one per month.

Tech Stack

Production-grade from week one.

Flutter
Core frontend
Node.js
Web layer
TimescaleDB
Data store

We chose the boring, battle-tested options where it mattered and innovated where it gave the product a real edge.

FlutterNode.jsTypeScriptPostgreSQLTimescaleDBRedisMapBoxApple HealthKitGarmin SDKAWSGitHub ActionsSentryAmplitude
I went from a 34-minute 5k to 26:40 in 12 weeks. The plan adapted around two weeks of travel and one week of a cold — and still got me there.
RunFlo user · intermediate runner
Challenges Solved

What it took.

  • GPS accuracy in mixed environments. Tunnels, tall buildings, and tree cover all degrade GPS. We implemented a Kalman filter with accelerometer fusion — position errors dropped 60% in challenging environments.
  • Adaptation that feels like coaching, not automation. Early users knew the plan was computer-generated and trusted it less. We added a 'coach reasoning' tooltip for each adaptation — 'You ran harder than planned on Tuesday, so we've shifted Thursday's tempo to Saturday.'
  • Background GPS battery drain. Continuous GPS tracking on a 2-hour long run drains battery significantly. We built an adaptive sampling rate that increases precision during fast sections and reduces it during steady-state running — saving 28% battery with no perceptible accuracy loss.
  • Wearable data normalisation. Heart rate, HRV, and sleep data come in different formats from Apple, Garmin, Polar, and Fitbit. We built a normalisation layer with quality scoring — low-confidence readings are flagged rather than silently poisoning the adaptive engine.
Business Value

What changed.

0%
Users improve their 5k PB within 12 weeks
0%
Day-60 retention (industry avg: 15%)
-0%
Self-reported injury rate vs. prior plan
0/5
App Store rating · 2,100+ reviews
App Screens

Key screens, detailed.

A closer look at the core user flows built for this product.

01 / DASHBOARD Today's Run TEMPO RUN · 6.4 KM 5:12 /km pace Zone 3 · 148–162 bpm target WEEKLY KM 38.2 STREAK 14d UPCOMING Thu · Easy run 8 km Zone 2 · 55-65% max HR Sat · Long run 18 km Zone 2 · Target 5:40/km Start Today's Run
02 / EXPLORE Browse Search… ALL ITEMS First result Subtitle Second result Subtitle Third result Subtitle + Add
03 / DETAIL Detail View ACTIVE Field one Value A Field two Value B Status ● Active Take action →
04 / MESSAGES Chat ● Online now Hello! How can I help you today? I need help with my account please. Sure — I can see your account. All looks good! Type a message…
Build with us

Building something like RunFlo?

RunFlo gives runners plans that react to their real-world performance — adapting for travel, illness, and bad days rather than treating missed sessions as failures. Send us a brief and we'll scope it within 24 hours.

Book a Free Strategy Call →Estimate Project Cost
Call us nowBook a strategy callEmail usChat with our team