Selected case
Mitt Spor — GPS Dog Tracking App
I helped move Mitt Spor from React Native to Flutter while connecting trackers, live maps, and release automation.

The problem
The pet-tracking app needed a Flutter migration while keeping tracker hardware, live location events, and maps connected.
Constraints
- BLE connected the mobile app directly to tracker hardware for data exchange and operating-mode control.
- WebSockets carried live locations and events between the backend and mobile app.
- Map data, local persistence, GPS, and IoT state had to work together during the migration.
My decisions
- Help migrate the production app from React Native to Flutter using explicit Flutter and BLoC flows.
- Implement tracker controls over BLE and adaptive operating-mode selection.
- Build WebSocket location and event flows with Isar persistence, live maps, and GitLab CI/CD.
Trade-offs
- The mobile scope covered the React Native-to-Flutter migration, BLE tracker controls, WebSocket live locations and events, Isar persistence, live maps, and GitLab CI/CD.
Shipped work
- BLE tracker controls, WebSocket locations/events, Isar persistence, and live map rendering were implemented in the mobile product.
- GitLab CI/CD and the complete mobile release process were built from scratch on self-hosted runners.
Result
I helped migrate the production app from React Native to Flutter and implemented tracker controls over BLE, live location updates over WebSockets, Isar persistence, live maps, and the mobile GitLab CI/CD pipeline.
Mitt Spor had two realtime boundaries that could not be treated as the same connection: BLE handled tracker hardware, while WebSockets delivered live locations and events from the backend. I helped migrate the app from React Native to Flutter, implemented those flows, and built the release process around them.
The mobile scope also included Isar persistence, live maps, and GitLab CI/CD.