Running has truly changed my life: I've made lifelong friends, explored beautiful places, and more importantly invested into my own health and fitness, which I'm starting to see the positive benefits as I get older.
The stack is pretty simple: a NextJS app, with a Postgres database to keep all my running data, and all the stats are pre-computed and cached in Redis, so I effectively only hit the database once a day when a new run is ingested. On the fronted, I toyed with the idea of using D3 or pre-existing data viz libraries, but ended up rolling my own using SVGs directly, it gave me more control on the visualizations.
I used the Strava bulk export to pre-populate the database, and I'm using their webhook API to do incremental updates. I have to tap into OpenWeatherMap and OpenCageDate to enrich the running data a little bit.
Happy to answer anything about the stack, data pipeline, or how I stayed motivated for 10 years!
[1] https://www.runeveryday.com Run Streak Association rules: ≥ 1 mile per day
After about two years the streak became part of my identity, which might sound a little unhealthy. It’s easier to just head out and jog a mile or two than to let the number go back to zero.
This being said, it’s made for interesting conversations with medical professionals – I needed a cardiac ablation a couple of years ago and my electrocardiologist came to an “agreement” (as in she didn’t forcefully dissuade me from doing it) that I could jog a slow slow slow mile late in the evening the day after the procedure, as long as I kept my heart rate down and I made sure I was being mindful of my puncture sites.
And hey, great run in Japan! (Tokyo here!) I love the map visualization too.
The only thing I ever really cared about was keeping the streak going, everything else has come second. I dropped out of a trail running trip after a fall because I felt that even though I could continue, putting too much mileage on my knee would jeopardize the streak.