DashNav

DashNav — Flutter Developer Portfolio

DashNav

Turn-by-turn navigation, mirrored live to a KTM motorcycle’s Gen3 TFT dashboard.

Role
Flutter Developer
Platform
iPhone, iOS 26+
Hardware
KTM motorcycles with a Gen3 TFT dashboard (BLE)
Appstore

Project Overview

DashNav is a premium iOS navigation companion for KTM riders: it mirrors turn-by-turn guidance straight onto the motorcycle’s own Gen3 TFT dashboard over Bluetooth, so the next turn is in front of the rider, not buried in a phone mount. Google Maps stays the planning tool — a rider shares a route into DashNav, it downloads once, and the ride runs completely offline from there: no signal needed on the road.

The standout engineering work is the KTM BCCU protocol itself — reverse-engineered, reimplemented from scratch in native Swift, and verified by rendering live encrypted turn icons, distances, and road names on a real KTM Adventure 250’s dashboard.

Features Built

BLE Pairing & Handshake
Encrypted TFT Rendering
Auto-Reconnect
Offline Navigation
Offline Rerouting
Google Maps Route Import
Route Library & Backup
Saved Places
Voice Guidance
Directional Turn Beeps
Dashboard Volume Control
Ride Recording & GPS Tracks
Home Screen Widget
Live Activities
Siri & Shortcuts
Home Screen Quick Actions
Riding Weather (WeatherKit)
Motion-Based Ride Detection
Local Ride Notifications
Bottom Tab Navigation
Hidden Developer Mode

My Responsibilities

  • Full product build: 24+ milestones end to end — BLE discovery, protocol reverse-engineering, an offline navigation engine, a route library, native iOS integrations, a premium design pass, and a navigation redesign — from a single Flutter + Swift codebase.
  • Reverse-engineered the KTM BCCU protocol: implemented the challenge/response handshake, AES-128-CBC control-plane encryption, and SHA-512 session-key derivation natively in Swift, matching the real dashboard byte-for-byte and proven by rendering live encrypted content on the TFT.
  • Offline-first navigation engine: a pure-Dart NavigationEngine drives turn-by-turn guidance, off-route detection with automatic rerouting, and route progress tracking — entirely on-device once a route is downloaded, no network required.
  • Native iOS integration layer: CoreBluetooth and CoreLocation in Swift (Flutter never touches CoreBluetooth directly), a WidgetKit home-screen widget, ActivityKit Live Activities, App Intents for Siri & Shortcuts, and Home Screen Quick Actions — all funneling through one shared pending-action pipeline so a voice command, a widget tap, and a quick action can never disagree.
  • Backend: a Node/Express service that proxies Google’s motorcycle-aware Routes API, keeping the Google API key server-side and never shipping it in the app.
  • Design system & UX: a dark-only Material 3 theme with a KTM-orange accent, custom CustomPainter maneuver glyphs instead of generic map icons, and a bottom tab-bar navigation redesign with a regrouped, decluttered Settings screen.
  • Monetization iteration: shipped, tested, and ultimately retired two different paid models (a one-time unlock, then credit-metered routing) before landing on a fully free app, with the dormant purchase code cleanly left in place rather than ripped out mid-flight.
  • Release engineering: App Store submission under the DashNav brand, privacy manifest, TestFlight, and a live, published, free release.

Tech Stack

CategoryTools / Libraries
FrontendFlutter, Dart, Material 3, go_router (StatefulShellRoute), custom CustomPainter graphics
State & Persistenceflutter_bloc / Cubit, HydratedBloc, equatable
Native iOSSwift, CoreBluetooth, CoreLocation, WidgetKit, ActivityKit, App Intents, AVSpeechSynthesizer
BackendNode.js (Express) on cPanel, Google Routes API (Compute Routes)
ProtocolReverse-engineered KTM BCCU BLE protocol, AES-128-CBC, SHA-512 key derivation
DiagnosticsFirebase Crashlytics, Analytics, Remote Config
Dev Toolsflutter analyze, widget & unit tests, Xcode, xcrun simctl

Architecture Highlights

  • Strict ownership boundary: Flutter owns UI, state, and the navigation engine; Swift owns CoreBluetooth and the KTM protocol; a backend owns the Google API key. Flutter never talks to CoreBluetooth or Google directly.
  • One pending-action pipeline: Siri, the home-screen widget, Live Activities, and Quick Actions all funnel into the same coordinator, so every entry point resolves a destination identically.
  • Protocol discipline: every BLE finding is labeled Confirmed / Observed / Hypothesized / Unknown rather than assumed, and verified on real hardware before being marked complete.
  • Documented decision log: 50+ dated architecture decisions with reasoning and consequences, kept append-only so the “why” behind a design never gets lost as the app evolves.
  • Offline-first by construction: once a route downloads, guidance, rerouting, and progress tracking need nothing from the network.

Outcome / Highlights

  • Shipped and free: published on the App Store as DashNav — for KTM Gen3 TFT, with no purchase, subscription, or account required.
  • Proven on real hardware: BLE pairing, the encrypted handshake, and live turn-by-turn rendering all confirmed on a KTM Adventure 250’s Gen3 TFT dashboard.
  • Genuinely offline: a downloaded route navigates fully without a signal — background BLE and location keep the dashboard updating with the phone locked and pocketed.
  • Reliability-first: automatic reconnect after a dropped connection, offline rerouting on deviation, and a documented turn-arrival hold tuned from real ride feedback.

Skills Demonstrated

Flutter / Dart Native iOS (Swift, CoreBluetooth) Protocol Reverse Engineering BLE & Bluetooth Protocol Design Offline-First Architecture Bloc / Cubit GoRouter & Navigation Shells Backend (Node / Express) App Store Release Design Systems
  • Reverse-engineering and reimplementing a proprietary hardware protocol from captured traffic and reference research, verified on physical hardware
  • Building offline-first navigation engines with real-time rerouting and progress tracking, entirely on-device
  • Integrating deep native iOS capabilities — BLE, widgets, Live Activities, Siri, Quick Actions — behind one consistent app-level abstraction
  • Iterating a monetization model in production and retiring it cleanly without breaking what already shipped
  • Designing and redesigning UX with a documented, decision-logged rationale rather than ad hoc changes

Work With Me

I specialize in Flutter apps with deep native integrations — Bluetooth hardware, background location, and polished, offline-first mobile experiences.

Let’s build your next Flutter app

Description