Endurain: Take Control of Your Fitness Data
The Problem
Fitness tracking apps like Strava and Garmin Connect are great—until you realize you’re handing over all your personal data to someone else’s server. Want privacy, customizations, or control over how your data is stored or shared? Too bad. Unless you’re cool with giving Big Fitness™ your location, workout history, and heart rate data, you’re out of luck.
What This Does
Endurain is like Strava, but self-hosted. You own your data, you control the hosting, and you get to decide who sees your post-run victory lap. It’s built with FastAPI (see backend/app for the magic), uses PostgreSQL for storing all those sweaty .gpx and .fit files (backend/app/core/database.py), and even integrates with platforms like Strava and Garmin Connect (backend/app/garmin/*). There's also support for manual uploads if you're rocking old-school GPS devices.
The project is Docker-friendly (docker-compose.yml.example), and configuration is handled via environment variables (.env.example). Want to set up custom activity types or tweak the rate limiter? Check out backend/app/core/config.py—it's all there. Observability nerds will appreciate the basic Jaeger tracing setup in backend/app/core/tracing.py.
And yeah, it’s not just for you. Endurain supports multi-user setups, so you can bring your friends along for the ride (or run, or swim). The backend/app/auth folder handles authentication, identity providers, tokens, and even MFA. Fancy.
Real-World Use
Let’s say you’re a privacy-conscious athlete who’s sick of sharing your data with strangers for the privilege of being spammed with ads. You could spin up an Endurain instance using the provided docker-compose.yml.example file, tweak your .env variables, and be running your own fitness tracker in minutes.
Want to import your old Strava data? Just link your account using the backend/app/auth/security.py setup or use the manual upload option for .gpx, .tcx, and .fit files. Oh, and if you’re a dev, you can fork the project and add custom features—check out backend/app/activities to see how the activity tracking is structured and start hacking away.
The Bottom Line
If you’re into self-hosting and value privacy, Endurain is awesome. It’s got solid tech (FastAPI, PostgreSQL, and Docker), decent documentation, and actual practical use for fitness enthusiasts. That said, it’s not beginner-friendly—setting up Docker, managing environment variables, and configuring CI/CD in GitHub Actions isn’t for the faint of heart. But for those willing to dig in, it’s a great way to tell Strava, “Nah, I’m good.”