Selected work · 2023 – 2024
Espay


Type
VTU platform
Duration
6 months
Year
2023 – 2024
Role
Frontend Developer
Outcome
Failure and recovery states designed as first-class interface, not afterthoughts
Tools
- AngularJS
A VTU platform for buying mobile data and airtime at a discount. Three surfaces built in AngularJS: the landing page, a user dashboard for transactions and wallet balance, and an admin dashboard behind it. Payments mean the failure states matter as much as the happy path.
Espay is a VTU platform: mobile data and airtime bought at a discount, which in Nigeria is a genuinely high-frequency transaction rather than an occasional one.
Three surfaces in AngularJS, the landing page, a user dashboard for transactions and wallet balance, and an admin dashboard behind it. On a product where money moves in small amounts many times a day, the interesting work is not the purchase flow but everything around it: what the interface says when a payment half-succeeds, and how someone gets their money back.
Inside Espay

A product people open several times a week
Espay sells mobile data and airtime at a discount, which in Nigeria is a high-frequency purchase rather than an occasional one. That frequency shapes the whole screen: wallet balance in the header, the two things anyone came for as cards with the real price on them, and the referral bonus beside them. Recent Transactions sits underneath even when empty, because on a product where money moves in small amounts many times a day, the transaction list is the trust surface. Hiding it until it has rows would remove the reassurance exactly when a new user needs it most.

Removing the ways this can go wrong
Network as four logos rather than a dropdown, a number, an amount, and an optional schedule. Tabs split airtime from data. Continue stays disabled until the form is valid, which on a payments product is the cheapest possible safety feature: the failed transaction you prevent is the refund nobody has to process and the support conversation nobody has to have. On a VTU platform the failure states are the product, and most of the work went into the paths where money has already left the wallet.

Limits and exits, stated rather than buried
Account tier with its daily transaction cap and maximum wallet balance written out, not left in the terms. Notification preferences are per event, including when a flagged transaction is resolved, which turns the failure path into something a user can opt into being told about. Deactivation and deletion sit on this page instead of behind a support request. On anything holding a balance, how easily somebody can leave is part of whether they trust you enough to stay.