The starting point
The Bosch eBike Flow app can export a ride, but into two separate files. FIT holds the sensor data (power, cadence, heart rate and speed), usually without GPS. GPX has the route and elevation, but no sensors. Neither file alone tells you where on the trail you pedalled how hard.
The solution
A web app where the rider simply drops both files. The app pairs them by name and, for every point of the route, finds the nearest sensor reading within ±5 seconds. Then it cleans the data: it drops impossible speed spikes above 80 km/h and smooths the elevation profile, where the bike's GPS is noisy. The same ride can't be uploaded twice.
What the app does
- Ride overview and detail with a chart and a map that move together on hover
- Side-by-side comparison of two rides
- Activity calendar and a heatmap of the most ridden areas
- Battery usage estimate based on power and ride duration
- Bike, service and maintenance reminder management
- Sharing a ride or profile via link, friends and a leaderboard
How it was built
It took 3 days from the first commit to a working beta (1–3 March 2026). Stack: Next.js, Supabase (login, database, storage), Leaflet maps and Recharts charts. This project is where my pre-deployment checklist was born: database schema → data permissions → storage → code. The goal is for every new version to work the first time.
The beta runs with a limited number of sign-ups. Free accounts can store 10 rides; premium access can be earned by referring friends.
The result
Two mismatched exports become one ride with a map, charts and statistics, with no manual data merging.
Try the beta