Overview
A cross-platform mobile application created for and used by a defense client to configure digital optics. The app connects to a digital optic's firmware over Bluetooth or USB, lets users load weapon profiles holding three separate reticle configurations, edit those reticles, and save changes back to the optic. A ballistic data library drives bullet-drop compensation lines on each reticle.
Role
Mobile developer
Platforms
iOS & Android (cross-platform)
Stack focus
Flutter, JSON-RPC, Method Channels, BLE/USB serial
Domain
Firmware integration & ballistics
Gallery
The Challenge
Configuring a digital optic in the field demands precision and reliability across hardware, with no room for a flaky connection or a mis-saved reticle. The app had to talk directly to optic firmware over multiple transport types and present complex ballistic data in a way that is fast and unambiguous to operate.
The Solution
The app speaks to the optic's firmware over Bluetooth and USB serial using JSON-RPC, with native bridges handled through Method Channels. Weapon profiles — each carrying three reticle configurations — are stored locally with Hive and managed with Riverpod, so edits are responsive and survive disconnects. A ballistic data library computes bullet-drop compensation lines that render directly onto the reticle before being written back to the device.
Key Features
- Connects to digital optic firmware via Bluetooth or USB serial
- Load weapon profiles with 3 separate reticle configurations
- Edit reticles and save changes back to the optic
- Ballistic data library for bullet-drop compensation lines
- Android support
- Offline-capable local storage of profiles
Tech Stack
My Role
I built the Flutter application, implementing the JSON-RPC firmware communication layer over Bluetooth and USB through native Method Channels, the profile and reticle editing flows with Riverpod and Hive, and the ballistic-driven reticle rendering.