Security hardening
Payment, API and device safeguards on Android and iOS.
Electric vehicle charging · Mobile app
Reworking an inherited EV charging app: a stronger UI, repaired navigation and state handling, and tighter payment and device safeguards across Android and iOS.
Improved an existing app
Payment, API and device safeguards on Android and iOS.
Persistent tab journeys and corrected session/search state.
Consistent screens, feedback and wallet/charging journeys.
Tests for important business logic and failure states.
01 / The challenge
I joined an existing development team and contributed to a shared product, rather than working as its sole developer. My focus was the Flutter mobile experience: understanding the inherited implementation, improving the areas I took responsibility for, and building on the work of other contributors.
I inherited an existing Flutter EV-charging app that needed substantial work on its UI, navigation, state management and security-sensitive flows. My role went beyond adding features: I reworked the interface, corrected disruptive navigation and state behaviour, and strengthened client-side safeguards for Android and iOS.
The supplied V1 already contained station discovery, QR scanning, charging sessions, wallet/Paystack flows, disputes, profiles, RFID requests and Riverpod. The challenge was to repair and improve that foundation—not claim it was built from scratch. Tabs needed stronger navigation continuity, shared search state affected separate views, and session handling needed to account for the complete charging lifecycle.
The problems crossed several layers: saved sessions could be restored without a startup expiry check; notification registration still used a placeholder; station list and map searches shared state; and device-specific storage or biometric failures needed bounded recovery. Wallet, receipt, verification and charging screens also needed clearer states and more complete interactions.
Payment and API boundaries also needed attention. The original checkout loaded its supplied URL directly and used prefix-based callback matching; API credential attachment lacked the later same-origin protection. I added stricter checkout navigation rules, external-request credential scoping and compromised-device checks, while improving authentication recovery and expanding regression coverage beyond the original smoke test.
02 / What I worked on
I worked within the existing Flutter, Riverpod and API structure. The detailed breakdown below distinguishes improvements to inherited features from new functionality I added.
Collaboration & ownership
LumenCharge was a team effort. I worked alongside other developers in an existing codebase, contributing mobile improvements while the wider product continued to evolve. My work connected the Flutter interface with shared API-driven journeys, including authentication, charging sessions, wallet transactions and notifications.
I took responsibility for the mobile UI, navigation, state-handling and security improvements described here. Those contributions formed part of the team’s work—not a claim that I developed every part of LumenCharge.
I worked within the established Flutter, Riverpod and backend integration structure, improving existing journeys and adding functionality alongside other contributors’ changes.
This project demonstrates both sides of how I work: independently investigating and solving mobile problems, while contributing to a shared codebase and a broader team delivery.
Engineering beyond the app
I also built the release workflow using GitHub Actions and Fastlane, connecting code validation with a repeatable beta-distribution process for both platforms.
Flutter analysis and tests run before dependent release jobs. Pull requests validate changes without triggering store distribution.
Fastlane lanes target Google Play internal testing and Apple TestFlight. Distribution is restricted to the dev branch with deployment enabled, and build artifacts are retained for the team.
03 / From the original version to the improved app
A code-backed breakdown of my contributions within the team, comparing the supplied V1 with the current app and checking the relevant development history. Some entries describe later fixes made during the improvement process—not defects present in every version.
04 / Key features
Payment, API and device safeguards on Android and iOS.
Persistent tab journeys and corrected session/search state.
Consistent screens, feedback and wallet/charging journeys.
Tests for important business logic and failure states.
05 / Outcome
The result is a more complete implementation with explicit recovery paths and regression coverage. These are functional outcomes supported by the repository; no crash-rate, conversion or revenue improvements are claimed without production measurements.
Actual store artwork showing the mobile experience.

Ready to build something great?
I’m available for freelance projects and remote development roles.