Case study 01 · Velofi
Fintech railswhere retries cannever pay twice.
Role
Backend Software Engineer
Timeline
2026 — present
Engagement
Hybrid · contract
Stack
TypeScript · Node.js · PostgreSQL · Redis · Docker · Jenkins
0
duplicate financial operations from retries or network failures
1
device per account; new devices need email approval and a WhatsApp code
E2E
onboarding, from registration to a funded-ready account
Auto
partner notifications via ZeptoMail, replacing manual email
The situation
Velofi is a fintech platform: people sign up, get verified, receive an account and invest — with monthly and annual returns paid out on schedule. Every one of those steps moves real money or real identity data, across a microservices architecture and several external financial partners.
I built the backend paths that carry users from first registration to a funded-ready account, and the investment workflows that pay them — designed so that a retry, a timeout or a flaky network can never produce a second financial operation.
Onboarding, payouts & device security
Simplified
Onboarding
1 · Register & auth
registration + login
2 · BVN verification
identity check
3 · Customer tiering
assign tier
4 · Funded-ready account
provisioned via financial processors
Investment returns
1 · Scheduled payout
monthly · annual
2 · Idempotency key
one operation per intent
3 · Processor call
safe to retry
4 · Notify
ZeptoMail · webhooks
Signing in on a new device
1 · New-device sign-in
correct password
2 · Email approval
owner allows or blocks
3 · WhatsApp code
one-time verification
4 · Device swapped
new token in Redis · old revoked
What I changed
- 01
Onboarding & provisioning
ProblemUsers had to be verified and given usable accounts, through external financial processors, without manual steps.ResultRegistration, auth, BVN verification, customer tiering and account provisioning — end to end, to a funded-ready account. - 02
Idempotent payouts
ProblemScheduled monthly and annual returns are exactly where retries and network failures cause double payments.ResultInvestment and returns workflows built on idempotency keys, so no retry ever produced a duplicate financial operation. - 03
One device at a time
ProblemA stolen password shouldn't be enough to get into someone's account and money.ResultEach sign-in gets a device token held in Redis. A new device needs the owner's email approval and a one-time WhatsApp code; then it's trusted and the old device is signed out. Operations teams get granular admin roles. - 04
Partner APIs & notifications
ProblemExternal partners needed programmatic access, and customer emails were being handled by hand.ResultAPI-key and webhook integrations across the microservices, and automated ZeptoMail notifications that removed the manual email work.
What I learned
“In fintech the happy path is the easy part. The real design work is deciding what happens on the second attempt — and making sure the answer is always "nothing".”
Next case study
Fixr — Backend Software Engineer