←back to thread

28 points friggeri | 1 comments | | HN request time: 0.203s | source

Today marks ten years, 3653 consecutive days, of running at least one mile every day under the USRSA rules [1]. To celebrate, I built an interactive dashboard that turns a decade of GPX files into charts you can explore.

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

Show context
ahalimah ◴[] No.44524760[source]
Do you have the source/pipeline available? I love the design and would want to do something similar for my own runs.

Congrats on the decade! Did you ever focus on specific metrics or was it always just about the run?

replies(1): >>44528661 #
1. friggeri ◴[] No.44528661[source]
Unfortunately I ended up winging the data processing, so it was mostly a pile of adhoc scripts. The incremental update pulling from the Strava API is a little cleaner, but would require significant work to open source.

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.