We've been running for a couple of years. Not seriously โ no races, no strict plans โ just using it to clear our heads and stay active. Like most runners, we tried all the popular apps: Strava, Nike Run Club, Garmin Connect. They're great apps, but none of them felt like they were actually coaching us in real time.
The Problem
Most running apps track your data and give you a summary after the fact. You finish a 5K, you see your pace, heart rate zones, and cadence. That's useful, but it's not coaching. Real coaching happens during the run โ "slow down, your heart rate is too high," or "you've been in zone 2 for 10 minutes, push for 5."
The Idea
We wanted an app that would talk to us during a run. Not just play music or read back split times โ actually analyse what was happening in real time and give relevant guidance. That meant combining GPS, Bluetooth heart rate, and an AI model that understood running physiology.
The Stack
We chose Flutter because we wanted one codebase for Android and web (iOS would come later). For the AI layer, we used Google's Gemini API โ it handles the coaching prompts and voice responses. For voice output, we integrated text-to-speech so the coach actually speaks to you mid-run.
// Core coaching loop โ simplified
Stream<CoachEvent> coachingStream() async* {
await for (final snapshot in stateStream) {
final prompt = buildPrompt(snapshot);
final response = await gemini.generate(prompt);
yield CoachEvent(message: response, metrics: snapshot);
}
}
The Result
RunCompanion is now live as an Android APK and a web app. The AI coach gives you real-time feedback, your heart rate and pace are overlaid on a live map, and the app learns your baseline over time. It's the running app we always wanted but couldn't find.
If you want to try it โ the web app is free at runcompanion.mlebotics.com.
MLE