← All work

BSX Insight

Hardware-paired app for endurance athletes. Guides a lactate-threshold field test using a wearable muscle-oxygenation sensor and turns the result into personalized training zones.

BSX Insight cycle dashboard with real-time training insights
BSX Insight wearable muscle-oxygenation sensor hardware

Overview

BSX Insight was the consumer app for the BSX Insight wearable, a calf-worn muscle oxygenation sensor that let cyclists and runners run a lab-grade lactate threshold test from anywhere: a track, a road, an indoor trainer. The app drove the entire test protocol: it onboarded the athlete, calibrated the sensor over Bluetooth LE, walked them through staged power or pace targets, captured live SmO2 and heart-rate data, and computed the resulting training zones once the test completed.

I worked on this app at Mutual Mobile, the agency that built and maintained it for BSX Athletics. The app shipped on iOS and Android and was a core part of the BSX hardware experience for a multi-year stretch.

At a glance

Role
Engineer at Mutual Mobile
Era
2014–2016
Platform
iOS · Android · Hybrid (Cordova)
Stack
JavaScript · Lavaca MVC · Bluetooth LE · ANT+ · Objective-C plugins
Cyclist on indoor trainer, the core BSX use case
BSX Insight login screen with brand identity
Assessment history showing prior endurance test results

Key features

  • Real-time assessment flow. Multi-stage endurance test with live target power (cycling) or pace (running), per-stage countdown, and a full-screen dial UI showing the active target and elapsed time.
  • Live biometric overlay. Heart rate and SmO2 streamed from the sensor, displayed during the test and persisted as part of the result.
  • Training zone computation. The app calculated anaerobic capacity (LT power or LT speed) and derived five personalized training zones, Active Recovery through VO2 Max, for both power and heart rate.
  • Test history. Athletes could browse prior assessments scoped by sport and revisit the resulting zones.
  • Sport-aware UI. Cycling tests in watts; running tests in m/s, displayed as min/mile or min/km depending on locale.
  • Smart trainer integration. The app could pair with a Wahoo KICKR over Bluetooth and automatically set resistance to match each stage's target wattage, so the athlete just rode while the trainer held the load.
Runner on treadmill for BSX Insight running mode
Results screen showing 245 watts anaerobic capacity and power training zones
Active assessment screen: Stage 1, 100 watts, hold to end

Technical highlights

  • Dual wireless protocol support. The app spoke both BLE (for the BSX sensor) and ANT+ (for accessory devices: heart rate straps, cycling power meters). ANT+ is the dominant protocol in competitive cycling and triathlon gear, so supporting it alongside BLE meant athletes could use their existing equipment ecosystem rather than buy new hardware.
  • BLE protocol work. Parsing the BSX device's status characteristic, which encoded test state, sensor health, battery, and live readings into a packed binary buffer. Built defensively around the realities of consumer BLE: dropouts, partial reads, reconnects.
  • Wahoo KICKR ERG control. When a KICKR smart trainer was detected via ANT+, the assessment view polled it on a 10-second interval and called setLoad() to push the target wattage for each stage. The trainer held the load automatically. That's a meaningfully better experience than asking an athlete to manually hold a power target for several minutes mid-test.
  • Hybrid architecture. Worked inside a JS app that had to behave like a native one: Hammer.js touch events, custom navigation, fixed scroll regions, careful memory hygiene because Cordova's UIWebView didn't forgive leaks.
  • Stateful test orchestration. The assessment view coordinated several long-running concerns at once: BLE keepalive, stage timing, anticipated-stage tracking, "hold to end" cancellation, data buffering for upload, and a fallback path for connection loss mid-test.
  • Dial UI. The full-screen ring display for the active stage was an early pass at the kind of focused, single-purpose moment-of-truth UI I'd later return to in personal projects.