All Insights
#SundayCoffeeAndCode
June 2026

Sunday Coffee & Code: Dry Run of the Vibe Coding Done Properly Course, and Converting FitBit data to Garmin

Today's project: run through the course with Taylor Harris and migrate ~8 years of Fitbit data into Garmin after switching devices. The problem to tackle as part of the course sounded simple enough: export the data, do a bit of finagling, then import it into Garmin, then, as usual, reality showed up.

By Steve Harris

Todayโ€™s project: run through the course with Taylor Harris and migrate ~8 years of Fitbit data into Garmin after switching devices. The problem to tackle as part of the course sounded simple enough: export the data, do a bit of finagling, then import it into Garmin, then, as usual, reality showed up.

We were helped by Simone Primarosa online version of fitbit2garmin (which is very cool), but the export still needed a fair bit of investigation (https://lnkd.in/g_US4rKS)

  • Each metric folder - Steps, Calories, Distance - had its own mix of JSON and CSV files. ๐—ก๐—ผ ๐—ฐ๐—ผ๐—ป๐˜€๐—ถ๐˜€๐˜๐—ฒ๐—ป๐˜ ๐—ณ๐—ผ๐—ฟ๐—บ๐—ฎ๐˜ across an export thatโ€™s supposedly from one system.

  • Distance came as a CSV with its own column names. Other data was JSON with totally different field names. ๐—ฆ๐—ฎ๐—บ๐—ฒ ๐—ฐ๐—ผ๐—บ๐—ฝ๐—ฎ๐—ป๐˜†, ๐˜€๐—ฎ๐—บ๐—ฒ ๐—ฒ๐˜…๐—ฝ๐—ผ๐—ฟ๐˜, ๐˜๐˜„๐—ผ ๐—ฑ๐—ถ๐—ณ๐—ณ๐—ฒ๐—ฟ๐—ฒ๐—ป๐˜ ๐˜€๐—ต๐—ฎ๐—ฝ๐—ฒ๐˜€.

  • ๐—ง๐—ต๐—ฒ ๐—ฟ๐—ฒ๐—ฎ๐—น ๐—ณ๐—ถ๐—ป๐—ฑ: at least in this export, Fitbitโ€™s JSON timestamps looked like local time but behaved like UTC, with no timezone marker to tell you so. Our calculated daily totals were off - not garbage, just wrong by a believable amount. The kind of wrong thatโ€™s easy to ship and never notice.

We confirmed it the only way that counts: pull the raw file, manually sum one specific dayโ€™s steps two different ways, and checked both against the Fitbit app, with Claude helping repeat the check. One method landed dead on and the other was off by ~1,500 steps for that day - ๐—ฟ๐—ฒ๐—ฐ๐—ผ๐—ป๐—ฐ๐—ถ๐—น๐—ถ๐—ฎ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐—ฎ๐—ฟ๐—ฒ ๐˜๐—ต๐—ฒ๐—ฟ๐—ฒ ๐—ณ๐—ผ๐—ฟ ๐—ฎ ๐—ฟ๐—ฒ๐—ฎ๐˜€๐—ผ๐—ป.

๐—ฉ๐—ถ๐—ฏ๐—ฒ ๐—–๐—ผ๐—ฑ๐—ถ๐—ป๐—ด, ๐——๐—ผ๐—ป๐—ฒ ๐—ฃ๐—ฟ๐—ผ๐—ฝ๐—ฒ๐—ฟ๐—น๐˜† initial course run is now under my belt, Claude Code performed amazingly and the project solved a real, and messy problem rather than an example.

๐—ฆ๐˜๐—ฎ๐˜๐˜‚๐˜€: code is documented, weight data is imported into Garmin, activity data import testing begins tomorrow, and the GitHub repo is updated and public. (https://lnkd.in/g5pQCw5y)

Back to the coffee.

Want to Discuss This Topic?

Steve is always happy to have a direct conversation.