HealthPass by TruNord.
Health & fitness app on the App Store.
Built the full Flutter app and bridged it to native Android + iOS health SDKs. Tracks steps, sleep, nutrition, and connects users to doctors via video call.
The story
HealthPass by TruNord is a health and fitness app on the App Store. It tracks your activity, your nutrition, your mental state, and connects you with a doctor when you need one.
The hard part: a phone has its own way of measuring health (Apple Health on iOS, Google Fit on Android), and the partner platform (Aktivo) has a completely different SDK. The app needs to talk to all three, fluently.
What I built
- The complete Flutter app from scratch — onboarding, dashboards, charts, video calling, settings, payments.
- A native bridge layer that lets Flutter talk to platform-specific health SDKs using Method Channels.
- The data pipeline that pulls steps, sleep, and heart rate from the phone and pushes them to Aktivo for scoring.
- Doctor-on-Call — an in-app video calling feature for patients to reach physicians directly.
How it works
Flutter doesn't natively talk to HealthKit or Google Fit. So the app uses Method Channels — a thin layer where Dart sends a message to native Kotlin (Android) or Swift (iOS), which calls the platform's health SDK, and returns the data back to Dart.
On top of that, the Aktivo SDK runs as a separate native dependency. I wired it up so the same activity data feeds into Aktivo's scoring engine, which computes Mind Score and Nutrition Score on its own.
The result: one Flutter codebase, three native integrations, one consistent UI.
Stack
Mobile — Flutter, Dart, GetX (state), go_router (navigation), Method Channels.
Native — Apple HealthKit (iOS 12+), Google Fit SDK (Android), Aktivo SDK (both platforms).
Features — Activity tracking, Mind Score, Nutrition Score, Diet Plan, Doctor on Call (video), in-app subscriptions.
Outcomes
- Live on the App Store for iOS 12+.
- Hundreds of users tracking daily activity.
- Cross-platform consistency on a feature surface that usually requires separate native teams.