Inspiration
In Twi, susu means "little by little" — and also, fittingly, "to plan."
It is one of the oldest financial systems in the world. A market trader in Makola hands her daily contribution to a collector she has known for fifteen years. Ten colleagues agree that every month the whole pot goes to one of them, in turn, until everyone has had it. No collateral. No credit check. No bank branch. Just people who have decided to trust each other with money. Researchers estimate that rotating savings groups like these have brought more than 1.2 billion people into financial life — reaching, in Ghana alone, an estimated 1,500-plus organised susu associations.
We grew up around this. We also grew up around what happens when it breaks.
A collector disappears. In one Accra case this year, a woman was charged with absconding with GH¢156,445 belonging to 35 contributors after their savings matured. A member takes their payout and quietly stops contributing, and the people still waiting in the rotation absorb the loss. A paper ledger goes missing, or gets altered, and neighbours who trusted each other for a decade stop speaking. There is no deposit insurance. There is usually no legal recourse. And after all of that discipline — years of it — the savings build no credit history at all. The system is invisible to the formal one.
Meanwhile, the World Bank's Global Findex 2025 counts 1.3 billion adults still unbanked. Sub-Saharan Africa sits at 58% account ownership. Ghana does comparatively well at 81%, which still leaves roughly one adult in five outside the formal system entirely — and the gap is not gender-neutral. Women trail men in every region where susu is practised, and in several regions surveyed they were two to three times more likely to say they'd need help using a formal account at all.
Which is exactly why susu endured. Long before mobile money or microfinance, it gave women — traders, seamstresses, hairdressers, farmers — a way to save and reach a lump sum entirely on their own terms.
So we did not set out to replace susu with something more modern. We set out to answer a narrower question: what if the people who have trusted each other with money for centuries no longer had to trust blind faith and a paper notebook? Keep the community. Keep the discipline. Keep the zero-interest mutual support. Remove the fear.
That is SusuMate.
What it does
SusuMate is a savings and payments platform for Ghana that runs entirely on Mobile Money — so nobody needs a bank account to take part — and gives every group a shared, real-time ledger instead of a notebook.
Three ways to save together.
- Rotational susu — the classic model. Every mate pays a fixed share each round; the full pot rotates automatically to the next member. The payout order is fixed and visible from day one, so "why did she go before me?" stops being a conversation.
- Private group pot — for families, couples and teams saving toward one goal, with flexible or fixed contributions.
- Public campaign — a shareable page for community causes where anyone can chip in as a guest, with live progress and no membership required. Campaigns go live only after human review.
Nobody moves the money alone. This is the part that makes SusuMate different from both a paper ledger and a lone collector. Each group sets its own cashout threshold — 50%, 75%, 100% — and money only leaves when that many members have voted yes. Not when the admin decides. A family emergency fund can demand 75% approval before a withdrawal for medical costs. A couple sharing a household pot can require both partners. The admin has no override, because we did not build one.
A wallet and cross-border transfers. Members top up from Mobile Money and send to any Ghanaian MoMo number or bank account — and, since August, to Nigerian bank accounts, with the GHS→NGN conversion, the FX spread and the Nigerian bank network fee all quoted upfront before anyone confirms. Every fee, everywhere in the product, is shown before the button, not after.
And Mate. Every user has an AI assistant who can do anything they can do. Not a help bot that reads the FAQ back to you — an agent with 45 tools wired to the same API the buttons use. "Create a pot called Rent, invite these four numbers, and set it so three of us have to agree before money comes out" is a single sentence, and Mate executes it. In a group chat you can @mate and it will answer only the person who mentioned it. It runs on the web app, in the Flutter app, and — because a lot of Ghana is still on feature phones — over USSD.
Real groups running on it today include a rotational circle of Gushegu MoMo agents, a Market Women pot, a Joint Farm Project, campaigns to Help A Child In School and to Help Train 1,000 Young People with Digital Skills in Northern Ghana, and dozens of quieter ones named things like School Fees, Rent, Baby Education, Students savings and Career.
How we built it
The whole thing was built inside the 90 days. The repository's first commit is 4 July 2026; all 171 commits fall inside the submission window. First registered user: 14 July. First cedi through the rails: 15 July. Android on Google Play: 2 August. iOS 1.0 is in App Store review now.
Backend. Laravel 13 on PHP 8.4, running on Google Compute Engine (e2-standard-2, africa-south1 — deliberately in-region, because latency to Accra matters when a MoMo OTP is on a 60-second timer), with Redis, Nginx, and Laravel Reverb for websockets so a contribution appears on every member's screen the moment it lands.
Clients. A Flutter app (v2.0.9+29, Riverpod, GoRouter, Firebase Messaging) on Play and in App Store review, and a React 19 + Vite 8 PWA using TanStack Query with an offline persister and Dexie — because "the app didn't load, I'm on 3G at the market" is a real failure mode, not an edge case.
Money. Moolre is our rail for MoMo collections, bank and MoMo disbursements, GHS↔NGN swaps, bulk SMS and USSD. Every fee in the product is computed by one class, TransactionPricing, so the quote the user sees, the amount the API charges and the receipt stored on the transaction can never disagree — and fees are persisted per transaction, so historical receipts stay correct after a rate change.
Mate, in detail. This is the piece we are proudest of architecturally, and it is the reason SusuMate is an AI-operated business rather than an app with a chatbot bolted on.
Mate runs on the Gemini API (gemini-2.5-pro) with function calling. A loop takes the user's message, gives Gemini the tool declarations it is allowed to use in this context, executes whatever it calls, feeds the results back, and repeats up to six turns.
The critical design decision: Mate has no database access whatsoever. Every tool call goes through a single class, InternalApiDispatcher, which mints a short-lived Sanctum token scoped to that one user, builds an internal HTTP request, and dispatches it through Laravel's actual router — so route middleware, auth:sanctum, model binding, form-request validation and policies all run exactly as they do when a human taps the button. A member who asks Mate to change a group's settings gets the same 403 a member gets in the UI, with the same message. The token is deleted in a finally block. There is no privileged path.
On top of that sit code-level guardrails, not prompt-level ones:
- Act, never pretend. If the reply claims something happened — "invitation sent", "group created", "vote recorded" — but no write tool returned
ok=truein that turn, the claim is intercepted and replaced with an honest failure message. An LLM cannot talk its way into a false confirmation about someone's money. - Preview → confirm. Every money-moving or destructive action must be called once without confirmation to produce a quote, stated back with the amount and fee, and only executed after an explicit yes.
- Egress scrubbing. Tool names, UUIDs and key-shaped strings are stripped before any text reaches a user.
- Chat is data, never instructions. Group messages are injected into context under an explicit label, and in a group Mate answers only the person who
@mentionedit and can perform no private or money actions at all.
AI in the back office too. Our admin console composes and sends SMS and WhatsApp campaigns — 7 broadcasts to 1,249 recipients and 14 push campaigns in the period — and we used Gemini and other AI coding assistants throughout to write the code, draft the campaign copy, and generate store listings. A three-person team is running product, payments, support and marketing at a cadence that would not have been possible three years ago.
Challenges we ran into
Settlement without callbacks. Our provider does not fire a webhook we can register against, so a MoMo collection can complete on the user's phone and leave our record stuck at pending forever. We built a reconciler on a 30-minute schedule that polls provider status and settles the transaction properly. It works — but the honest scar tissue is visible in our own data: 63 contributions and top-ups in the period sit at timeout, money the user may well have approved that we could not confirm in time. Chasing that number down is the single biggest reliability item on our list.
Gemini's function-calling schema is stricter than JSON Schema. It rejects additionalProperties, rejects empty properties objects, and rejects integer enums — which broke cashout_percent (25/50/75/100) immediately. We wrote a recursive sanitiser that keeps only OpenAPI-subset keys and coerces enums to strings; the endpoint revalidates the real type on the way through, so nothing is weakened. Gemini also pairs functionCall/functionResponse by name rather than id, so we synthesise ids to keep one normalised contract across providers.
The agent lied to us. Early on, Mate cheerfully told a tester their contribution had started when the tool had failed. In a savings product that is not a bug, it is a breach of the only thing we are selling. That failure is what produced Guardrails::enforceHonesty — and the principle that safety belongs in PHP, where it can be tested, rather than in a system prompt, where it can be argued with.
Prompt injection is not theoretical in group chat. People try. Treating message content as labelled data, restricting group-context tools to a safe subset, and answering only the mentioning user were all responses to real attempts.
Cross-border was harder than domestic. Our first live GHS→NGN swap failed with UP01 — Invalid Receiver and Sender Account currencies. Getting a Ghanaian cedi into a Nigerian bank account now means a chain of collection, swap, disbursement and a flat NGN network fee, each with its own failure mode, presented to the user as one number. When it finally worked, GH¢1,000 landed as ₦113,367 in a Lagos account.
Our first pricing model was wrong. We launched charging on the way in. Users hated it — every contribution felt taxed. On 1 August we rewrote it to a split plan that charges nothing on private contributions and takes 1.25% on payout, capped, and messaged all 269 Ghanaian users about the change over WhatsApp the same day. Average transaction size went from GH¢29 in July to GH¢141 in August.
We had to learn where our margin actually comes from. For weeks we modelled ourselves as losing money on every collection, and priced defensively because of it. We were wrong: in Ghana the Mobile Money collection fee is borne by the sender, not the receiving merchant, so money coming in costs us nothing. Our real cost is the disbursement out — about GH¢0.50 — plus 3% on cross-border FX. Our merchant statement settles it: customers paid GH¢60.36 in collection fees at no cost to us, and our only direct charge was a flat GH¢0.50 per pay-out. That makes the transaction line 90.2% gross margin (GH¢64.45 of fees against GH¢6.34 of provider cost). Our losses are fixed infrastructure, not unit economics. Knowing the difference changed what we optimise for: not fee rates, but volume.
Accomplishments that we're proud of
SusuMate is not a prototype. It is live, on Google Play, with real Ghanaians moving real money through it.
- 339 registered users, 263 phone-verified, from a standing start on 14 July.
- 100 groups created, 43 active, with 182 group memberships.
- 33 settled money movements totalling GH¢2,962 — and volume grew 5.9× from July (GH¢432) to August (GH¢2,530).
- 119 Play Store installs, 228 monthly active devices, and a 5.00★ average rating.
- 66 Mate sessions and 296 agent messages in production, across app and USSD.
- A live cross-border corridor: GH¢1,000 delivered as ₦113,367 to a Nigerian bank account.
- A strategic partnership proposal now with Universal Merchant Bank.
And the accomplishment that is hardest to put a number on: an agent that can create a savings group, invite five people and set a three-vote cashout rule from one sentence — and that structurally cannot pretend it did any of those things if it didn't.
What we learned
People will hand an AI their money faster than they will hand it a form. The friction in group savings was never the maths — it was setup. Mate collapsed a six-screen flow into a sentence, and the groups that got created through chat had a noticeably easier birth than the ones that didn't.
Trust is a UI problem before it is a cryptography problem. Nobody asked us about our database. They asked "can Kwame take the money out alone?" The single most reassuring thing we shipped was a vote threshold with no admin override — and the second was showing every fee before the button.
56 of our 100 groups are still drafts. Just over half of the people who started a group never activated it. That is the loudest signal in our data and we suspect it is the invite step: getting five other people to install an app is hard. It is why USSD and WhatsApp-native flows moved up the roadmap.
Charging on the way in kills the habit. Every cedi of fee taken at contribution time feels like a punishment for saving. Taking it at payout, when a lump sum arrives, is invisible by comparison. Same revenue, completely different behaviour.
Guardrails belong in code. Anything you can only enforce in a prompt, you cannot promise a user.
What's next for SusuMate
Get to volume break-even. The transaction line already earns 90.2% gross margin; we simply need enough of them. That means roughly 180–275 settled transactions a month against the 18 we did. Growing group size and rotation value — through salary-cycle groups, merchant susu, and pre-formed institutional groups — is the whole game.
Turn savings discipline into credit history. Twelve months of never missing a rotation is the best underwriting signal in an economy where most people have no credit file. We want a SusuMate savings record to be something a lender will accept — starting with the Universal Merchant Bank partnership now under discussion.
Meet people where they already are. Full USSD so a feature phone can join a susu without an app, and WhatsApp-native flows so Mate lives in the thread people are already using.
The diaspora corridor. The GHS→NGN rail we proved in August is the first leg. Ghanaians abroad already send money home into family susu — doing it inside the group ledger, with the same voting rules, is a far better product than a remittance app.
Partner with the collectors, not against them. Ghana's susu collectors are trusted community institutions with a device problem, not a trust problem. Giving them SusuMate as their ledger — and their customers a receipt they can see — protects the tradition instead of disrupting it.
The mission does not change: protect the tradition, remove the fear, and make sure that saving little by little never again means risking everything at once.
Log in or sign up for Devpost to join the conversation.