It's a lot.
The problem is that there isn't a single place where you can get both the holistic metrics and the plan in a way that most users will want (which almost mandates a Strava interface). Apps like Veloviewer or Elevate already have this, but both either fall very short functionally or specifically only target a subset of features.
When I complete a run or ride, the first thing is to check Garmin to see how it related to, or impacted, my physiological health metrics, since I rely on Garmin for things like sleep quality, training readiness, and load tracking. Then to Strava to see how it went compared the previous times on the route and look at segments, or perhaps to give kudos to someone I was with. Then to intervals.icu to dig into the performance metrics (power, HR).
Intervals.icu is great because it handles workout planning, too, but the one big thing it's missing is routes & segments for IRL activities. Veloviewer has this, but it is missing all of the training/planning/fitness features. Imho, the killer app in the space is going to be whoever is able to augment the planning/tracking pieces, which are largely grunt work to develop, with the social bits that Strava has. The existential risk for indy devs is that your product is just a feature for Strava, and you could easily become disintermediated (or they shut down or charge exorbitant rates for API access -- it's already highly rate limited).
You're doing great work, but I'll keep paying for intervals.icu, Strava & Veloviewer for now because they all do slightly different things, even if there's significant overlap.
Those who want to use fitness trackers but are put off by trade off with privacy, Gadgetbridge and self-hosted applications like Workout Tracker are great alternatives.
I wrote a Python script that iterates through all of my activities there and downloads the `.gpx` for each - I could share the code if interested! Not sure how you'd integrate it into your app - maybe a "import from Strava" page could handle the Strava API auth?
I also love this idea of self-hosting some web apps (especially if they're containerized). I setup a `util.` subdomain and have started putting a few things there at different root directories. It's fun!
Use your old PC, a Raspberry Pi, an EC2 instance, whatever you like, a single small Docker Compose file with Watchtower for auto-updating the container image when new one published etc. I've got self-hosted services that have ran untouched for years this way at home from a handful of lines of YML. Docker Compose will also take care of restarting the service on reboot/powercut if thats a concern.
Given the ubiquity of container images, you can run largely any web application this way and the container image likely already exists - this project also has a Dockerfile and would run fine this way too.
Edit: this app would probably make for a great Sandstorm app.
I think there's still a world in which you can buy an rPi with software preinstalled and updaters packaged without much effort though.
If that could take off, you could easily have this type of service. However, I think it falls apart because you need to govern the app store and that is expensive and difficult.
Umbrel is just plug-and-play with an app store, haven't personally tried it but looks very cool.
I've been slowly moving everything to self hosted to reduce the pain if/when I'm ever randomly banned from Google or some other huge network and can't get it re-enabled.
The downside is that I'm now my own IT department and need to perpetually monitor these things.
Virtual android device in the cloud might be a great model for it since Android has good built-in security and process isolation.
It might be an interesting experiment to have the UI be installable as PWA and thereby not need the electron stack to achieve the common functionality offered by these apps.
It doesn't seem to track any indoor activities like weight lifting.
Diet trackers (Calorie Counters) are also almost universally a pain in the ass, but at least they’re tolerable.
There is not a single combined lifestyle experience that is any “good” IMO.
I built a weightlifting tracker primarily for myself a little while ago and also published it. I tried to keep the UX as simple as possible. If you're ever looking to try out another app, give it a shot! https://titangymapp.com.
Clean UI, too. Interested to hear your thoughts on HTMX when you get around to eval-ing it
$ kubectl get deployments.apps | wc -l
25
Minus the header, looks like ~24. I use a single-node Kubernetes cluster running Talos [1]. Running a single-node cluster is kinda dumb architecturally, but adding a new service takes <10 minutes most of the time, which is nice. I've standardized on Cuelang [2] for my configs, so adding a new service is some DNS/Caddy config fiddling, then: deployment: <service>: spec: template: spec: {
containers: [{
ports: [...]
command: [...]
volumeMounts: [...]
}]
volumes: [...]
}
And then running: cue export \
--out yaml \
--expression 'deployment.<service>' \
--expression 'service.<service>' \
kube.cue <service>/<service>.cue | kubectl apply -f -
Where `kube.cue` sets reasonable defaults (e.g. image is <local registry>/<service>). The "cluster" runs on a mini PC in my basement, and I have a small Digital Ocean VM with a static IP acting as an ingress (networking via Tailscale). Backups to cloud storage with restic, alerting/monitoring with Prometheus/Grafana, Caddy/Tailscale for local ingress.Edit: Currently eyeing GPSLogger: https://gpslogger.app/
Any chance of some kind of social features? I want to control my data, but I also do want to be able to share my fitness stats & journey with a specific self-selected group of people: friends, running club mates, etc
Thank you for making this!
Any chance you plan for it to work with .fit files?
Thanks for making this!
I use an app called FitoTrack (also FOSS), which records my location while running. It stores my GPS position every few seconds. When I'm done, it auto-exports a GPX file to a folder on my phone, which is synced via syncthing. Then I (manually, for now) upload the file to my self-hosted workout tracker.
The GPX file contains some data per measurement point; this is the second point in some random GPX file:
<trkpt lat="x" lon="y">
<ele>56.72105575919558</ele>
<extensions>
<speed>1.8200000524520874</speed>
<wstxns2:TrackPointExtension xmlns:wstxns2="gpxtxp"/>
</extensions>
<time>2024-02-28T09:28:26Z</time>
</trkpt>
So it contains speed (average since previous point), elevation, location and time (offtopic: it took me a while to understand that this elevation is not the actual elevation above sea level; only yesterday I figured that out and fixed it in the code!).The Go GPX library some of this information, and some extras (like max and min elevation, max speed, total up and down, etc. over the whole track). Then I perform some more calculations (like putting the points in buckets per km and per minute), and calculate the estimated location using a geocoder library.
Then, finally, to estimate the difference between walking, running, or cycling, I take the average speed and guesstimate from there. This may be wrong some times for some people, and could be improved on. Or maybe I should include an AI here? (just kidding)
[1] https://github.com/tkrajina/gpxgo
[2] https://github.com/tkrajina/gpxgo/blob/5e7c336e94dac3583a07c...
I love fancy graphs for my endurance work but for lifting, I feel like this is pretty much all I really need.
eg. Exercise | SetsReps | Feb 26 | Mar 1
----------------------------------------------------------
Dumbbell Chest Press | 3 x 8 | 65, 8 8 8 | 70, 8 8 5
Dumbbell Chest Fly | 3 x 8 | 16, 8 8 8 | 20, 8 8 6
Exercise | Sets x Reps | Feb 28 | Mar 3
----------------------------------------------------------
Knee Jumps | 3 x 8 | BW, 8 8 8 | BW, 8 8 8
Pull-ups. | 3 x AMRAP | 4, 3, 2. | 3, 3, 2
KB Swings | 10M EMOM | (216) 10M | (2*16) F@7M
Bent DB Row | 3x8. | (swap cable row) 60, 8 8 8 | 40, 8 8 8
Agree with you though, pen and paper is hard to beat and cheaper.
What if you want to graph tonnage?