
A Flutter banking app with multi-currency wallets, cards, savings and group wallets that move money only when enough admins approve.

381
Commits merged to main
48
Release builds
2
Live markets
10
Months on the app
BMONI is a stablecoin-powered banking alternative from BKEY Inc., live in Nigeria and Mexico. The mobile app holds Naira and USD wallets, global cards, savings plans, chat and shared group wallets. I joined the Flutter team in December 2025 and have shipped to production since then, mostly on group wallets, identity verification, chat and the release pipeline.
The product
BMONI is not a bank. It works with licensed partners to offer bank-like services without the usual fees and limits. In the app you hold Naira and USD wallets, fund them by bank transfer or by sending stablecoins, send money, and swap between currencies. There are virtual and physical Mastercard cards, fixed and target savings plans, and a chat where you can message contacts and move money in the same thread. Group wallets let several people share a balance.
Group wallets
Most of my work sits here. A group wallet spends only when enough admins approve, so every request, swap, admin invite, admin removal and threshold change is a proposal with its own card in the group chat and a Requests tab. I worked on the rules around those cards: who sees Approve, who sees a declined invite, what happens while a leaving signer's removal is pending, and when a request counts as approved. I also added group swaps with a quote window and rate protection, and a face scan before sensitive approvals. Much of the work was closing the gaps QA found between what a card says and what the wallet is actually doing.
Identity and onboarding
Signing up means proving who you are, and the rules differ by country. I built and fixed large parts of the KYC flow: a guided in-app document camera with quality checks and a crop step, per-country ID rules such as no-expiry national IDs and a second-country ID option, upload progress, retry paths that do not burn a one-shot retry, and USD and external-wallet verification gates. For Mexico I added the tax-ID capture. I also worked on account recovery and the first-run onboarding screens.
Chat, cards and the rest of the app
In chat I shipped WhatsApp-style replies and reactions, the list of who reacted, collapsed long messages behind Read more, and fixes for mentions, character limits and the connecting state after sign-in. I rebuilt the cards section as reusable widgets with swipe, freeze and details, worked on the savings tab, added a two-tab notification centre, and reworked transaction narration and the transaction details sheet. The app is localised in English, Spanish (with a Mexico variant), French and Chinese.
Security and shipping
At the product level, the app locks itself when it goes to the background, sensitive actions ask for a face scan, and signing sessions are opt-in. Because the app moves real money, I treated error copy and edge states as part of each feature. I also kept the release path moving, with 48 build bumps across TestFlight and staging QA builds, and removed 54 unreachable files from the codebase.
Highlights
- Naira and USD wallets, funded by bank transfer or stablecoins, with in-app swaps
- Group wallets where every request, swap, invite and threshold change needs admin approval
- Approval and request cards in group chat, with the Approve action shown only to eligible signers
- Group swaps with a quote window and rate protection
- Guided KYC document camera with quality checks, crop and per-country ID rules
- Reactions, replies and Read more in chat
- Cards section with swipe, freeze and details
- Localised in English, Spanish, French and Chinese





