Skip to content
FintechFlutterGroup SavingsPeer LendingMobile MoneyWalletsAfricaBilingual

Ohana Africa

Client: Ohana Africa (Haagbo Inc.) — delivered at Bixosoft
Visit Live Product
Ohana Africa
3
Launch markets
4
Payment rails
10K+
Google Play installs
EN / FR
Languages

Technologies & Architecture Stack

FlutterDartREST APIsWebSocketsTMoneyM-PesaEcobankCard payments

Overview

Ohana Africa, built for Haagbo Inc., turns the informal savings group into software. Across West and East Africa, families, churches, funeral committees, cooperatives and workplace groups have pooled money the same way for generations — by hand, on paper, on trust. The structure works. The ledger does not.

Ohana keeps the social structure and replaces the bookkeeping. A group is created, managers are appointed, contribution pools are opened, and members pay in and withdraw through mobile money. On top of that sits peer lending priced against a TrustScore built from a member's own contribution behaviour, and a savings-goal feature that lets members save towards a specific merchant purchase.

It runs in Togo, Kenya and Nigeria, in English and French, across four payment rails — TMoney, M-Pesa, Ecobank and cards — with more than 10,000 Play Store installs.

My role: Team Lead at Bixosoft. I built this alongside my team, with the team working under my supervision.

The Challenge

Most fintech assumes money belongs to a person. This one does not. The balance belongs to a group, several people can act on it, and every member has to be able to see that nothing has gone missing.

  1. Trust is the product. Informal savings groups run on paper ledgers and memory. Disputes about who contributed what are common, and they are corrosive — they break up the group. Transparency is not a feature here, it is the entire reason to switch.
  2. Balances are not personal. User wallets, group wallets, pool balances and sub-accounts all coexist, and money legitimately moves between them. Every one of those movements has to be modelled explicitly, because an ambiguous transfer is an accounting hole.
  3. Three markets, four rails. TMoney, M-Pesa, Ecobank and card payments each have their own confirmation semantics, their own latency and their own failure modes. A payment that is 'pending' means something different on each.
  4. Credit without credit history. Peer lending needs a basis for trust, but most users have no formal credit record to draw on.
  5. Connections drop mid-transaction. A retried withdrawal that debits twice would end the product. On these networks, retries are not an edge case — they are normal operation.
  6. Two languages, three regulatory environments. English and French across markets that differ in payment behaviour and in the rules governing it.

Solution & Architecture

Multi-balance model

  • User wallets, group wallets, pool balances and sub-accounts modelled as distinct balance types rather than one generic account.
  • An explicit transfer matrix defines which balance can move money to which — anything not on the matrix is not a valid operation.
  • Every movement is attributable, which is what makes the group ledger auditable by its own members.

Transaction safety

  • Withdrawal handling hardened so a retry after a dropped connection can never debit twice.
  • Operations designed to be idempotent, because on these networks the client will retry.
  • Offline-resilient sessions so a connection drop does not lose the user's place or their in-flight action.

Governance encoded in software

  • A minimum of two managers per group, so no single person can move the group's money alone.
  • Manager approval required for withdrawals, expenses and disbursements.
  • Supervisors for organisational groups such as churches and cooperatives, which have a real hierarchy to respect.

Transparency by default

  • Contributions and withdrawals visible to the group, which is precisely what the paper ledger failed to deliver.
  • Pool balances and member contributions readable at any time without asking the treasurer.

Four rails behind one interface

  • TMoney, M-Pesa, Ecobank and card payments normalised into a single payment abstraction.
  • Each rail's confirmation semantics and failure modes handled explicitly rather than assumed to be equivalent.
  • Adding a market means adding a rail implementation, not reworking the payment flow.

TrustScore lending

  • A credit signal derived from a member's own contribution behaviour inside the platform.
  • Members who save consistently become eligible for larger loans, which turns participation into creditworthiness.
  • Peer lending priced against that score rather than against a formal credit record that most users do not have.

Bilingual Flutter client

  • One cross-platform client for Android and iOS, fully localised in English and French.
  • Published to both Google Play and the App Store from a single codebase.

Real-time support

  • In-app support chat over WebSockets, including voice messages for users who would rather talk than type.
  • Support built into the product because for a first-time digital-finance user, a stuck transaction needs a human quickly.

Results & Outcomes

Three launch markets:
Live in Togo, Kenya and Nigeria, with payment rails matched to each market.
10K+ Google Play installs:
Published on both Google Play and the App Store.
Fully bilingual:
English and French across the app and the marketing site.
Double-withdrawal risk eliminated:
Hardened withdrawal handling means a retry on a dropped connection cannot debit a member twice — the failure mode that would have ended the product.
An auditable group ledger:
Distinct balance types and an explicit transfer matrix make every movement of group money attributable and reviewable by the group itself.
Four rails, one payment flow:
Adding a market is an integration task rather than a rewrite, because rail differences are contained behind a single abstraction.
Financial correctness under bad conditions:
Building a ledger that stays correct on unreliable networks, where retries are routine rather than exceptional.
Governance as code:
Encoding a group's real social rules — manager quorum, approval gates, supervisor roles — into software controls.
Leading a team on a fintech build:
I built this with my team working under my supervision, on a product where a correctness bug costs a user their savings.

Key Takeaway

  1. Model the balances you actually have. Collapsing user, group, pool and sub-account balances into one generic account type would have been faster and would have made the ledger unauditable. Distinct types plus an explicit transfer matrix is what makes group money reviewable.
  2. On these networks, idempotency is not optional. Retries are normal operation, not an edge case. Withdrawal handling had to assume the client would retry, because it will.
  3. Encode the governance the group already has. Two-manager minimums and approval gates were not invented for the software — they are how these groups already work. Putting them in code is what earned the trust to digitise the ledger at all.
  4. Participation can substitute for credit history. TrustScore turns consistent saving inside the platform into a basis for lending, which is how you extend credit to users the formal system has no record of.
  5. Transparency was the reason to switch. The feature that displaced the paper ledger was not the wallet or the loans. It was every member being able to see, at any moment, that the money is all still there.

Have a similar system to build or scale?

Let's discuss your engineering goals, architecture, and timeline.