← All apps Retisense

GaitAnalysisPLUS

A cross-platform app that streams pressure data from BLE smart insoles — or analyses gait straight from the camera — runs the biomechanics math on-device in WebAssembly, and coaches patients with live audio-visual biofeedback.

Role
Vision modality + biofeedback · long-term maintenance
Platform
iOS + Android · Ionic / Angular / Cordova
Status
In production on the App Store
Links
GaitAnalysisPLUS (App Store)

The hard problem

Take a sensor-heavy clinical platform and make it live on a phone: stream two BLE insoles simultaneously (left/right, kept in sync), run gait-cycle analytics on-device, give the patient feedback while they walk — and keep all of it working offline in a clinic with no Wi-Fi.

What I built

  • The vision modality — camera-based gait analysis (TensorFlow.js + MediaPipe BlazePose), so the app delivers value without any insole hardware.
  • Live biofeedback — real-time audio and visual cues for load distribution and step cadence, plus balance-training rehabilitation tools, driven directly from the live sensor stream.
  • Long-term maintenance — years of production work across iOS and Android: bug fixes, performance optimization, raw-data export formats, calibration refinements.

The BLE streaming layer and the C→WASM analytics engine predate me on this product; my work was the vision path, the biofeedback system, and keeping the app healthy in production.

How the system works

  • Inputdual BLE insoles · or camera (BlazePose)
  • AnalyticsC → WASM engine, on-device
  • Feedbacklive heat maps + audio cues
  • ReportsPDF + zipped CSV raw data
  • Syncoffline-first → Parse backend

Everything latency-critical happens on-device: the WASM engine computes gait cycles, stress distribution and Kalman-filtered joint angles in real time, so biofeedback cues fire while the step is still happening — not after a server round-trip. Sessions queue locally and sync when connectivity returns.

Stack

IonicAngularCordovaTypeScript BLE (ble-central)TensorFlow.js / BlazePose WebAssembly (C)RxJSParse