Skip to content
Health & Fitness IntelligenceĀ·

Dab Bod — Health & Fitness Intelligence

Connects Garmin and Apple Health data to reveal fitness patterns over time.

Core idea

I’ve been swimming a bunch at Cal’s Spieker Pool. Dab Bod brings together health and fitness data scattered across Apple Health, Garmin Connect, and Strava in an interface I’ve designed around how I want to use it, with the option to share data with ChatGPT or my local LLM for analysis and feedback.

Photo: Jay Adwere-Boamah

01 Aura

Aura health dashboard Aura expanded health view

Aura is the app’s landing page, bringing HRV, blood pressure, sleep, weight, body composition, and daily activity into one place. Until recently, these measurements relied on daily synchronization between Garmin and Apple Health, introducing delays and unnecessary friction.

Thanks to the open-source garmin-ble project, I’m beginning to retrieve wellness measurements directly from my watch over Bluetooth. What started as days of playing Marco Polo with my Garmin has turned into immediate results, with heart rate, stress, and Body Battery now reporting in-app on launch.

02 Fishmaxx

Fishmaxx weekly progress Fishmaxx swim history Fishmaxx individual swim statistics

Fishmaxx presents my Garmin swims in a denser interface, with less jumping between screens than other apps.

Metrics like average pace, stroke count, and consistency are intended to reveal where fatigue begins to affect performance.

I’ve also added a button that copies my swim and daily health data into a format I can paste into ChatGPT or, eventually, feed into my local LLM for text and text-to-speech responses. I plan to reuse my earlier ALL-LLLM work on WebSocket-based voice interaction so I can speak directly to my local machine and get a response. Fun times.

The most interesting finding so far is that my opening 25-yard length is often significantly slower than subsequent lengths. Whether that’s a genuine pacing pattern or an artifact of Garmin’s lap-detection algorithm remains an open question.

03 Mog Log

Mog Log is a visual journal of how my body changes over time. Before COVID, progress selfies were a surprisingly strong motivation to keep exercising.

The trouble was finding those photos later and figuring out when I’d taken them. Mog Log puts them in one chronological record, alongside my swimming, strength training, and health measurements.

04 LiveWhale

LiveWhale is the calendar platform UC Berkeley uses to coordinate campus events and facility schedules.

UC Berkeley publishes lap swim hours, but those hours don’t always account for other activities taking place in the pool. A facility can technically be open for lap swimming without having much room to swim.

So I integrated the published hours with known swim-team and water-polo schedules, along with facility announcements, to flag potential conflicts before I head over.

It’s a small feature, but it solves a real inconvenience—and, ironically, it’s the one thing that hasn’t broken throughout app development.

05 Technical

Go Fish 🐠 — Direct Garmin Sync

The RSF locker room is a primordial black hole for cellular signal and Wi-Fi. Normally, I have to wait 5–10 minutes until I’m back inside the gym before I can review my swim logs.

No longer!

v1 — Garmin Cloud

My original GitHub Actions and Supabase pipeline worked, but retrieving a swim took 50–110 seconds and required an internet connection.

v1 Garmin cloud synchronization log

v2 — Go Fish 🐠

Direct Garmin Bluetooth synchronization, bypassing Garmin Connect. One transfer took 13.5 seconds, including discovery, transfer, and FIT decoding—approximately 3.7–8.1Ɨ faster in the observed runs.

v2 Go Fish direct Bluetooth synchronization

Using Garmin’s BLE file-transfer protocol, Go Fish finds activity files, decodes FIT records, checks for duplicates in SwiftData, and lets me review new swims before importing them.

The BLE connection is still brittle, and there’s plenty of work ahead. I’m also exploring direct access to other Garmin measurements, including heart rate, stress, and Body Battery.