NairaFlow
A currency exchange ledger where no one can approve their own money.
The Problem
A currency exchange business takes in foreign cash (USD, GBP, EUR) from agents, credits them a naira float, and pays out to receivers. Done on spreadsheets, balances drift, one person can enter and approve their own transaction, and nobody can say who changed a number or when.
The Solution
I built NairaFlow, a ledger where every movement is captured as pending and only posts once a different person approves it. Naira values are calculated on the server, balances can't be edited by hand, and every change leaves a trail.
- Maker-checker approvals: self-approval is blocked in the policy, the UI and the domain model.
- Atomic posting: approval locks the account, re-checks the balance and posts inside one database transaction.
- No overdrafts: payouts are validated against the agent's float when captured and again when approved.
- Five roles: Admin, Finance Manager, Transaction Approver, Customer Manager and Audit Viewer.
- Before/after audit trail on transactions and customers, plus CSV export of any filtered view.
What I Focused On
Money software has to be boring and correct. I put the rules in the domain model rather than the forms, so no screen, import or shortcut can break them.
- Posted transactions are immutable; corrections are new entries, never edits.
- A nightly reconciliation command checks every balance against approved deposits minus payouts.
- Operator-friendly forms: a live naira preview while typing and inline "create agent/receiver".
- A dashboard with total float, the approval queue, 30-day volume and currency mix.
Outcome
Every naira has an owner, a maker, a checker and a timestamp. Balances reconcile automatically, and the finance team can answer "who approved this?" in one click. The public demo replays about 45 days of trading through the real domain code and resets hourly.
Gallery
Service Tracker
Laravel · Web · In progress
Service and attendance tracker for a church with three congregations, with scoped access and comparison reports.
Bookshelf
Laravel · Web · In progress
Personal web-novel library with reading statuses, tags, a REST API and an importer that translates a twkan.com bookshelf.
HR Management System
Laravel · Web · Archived
Laravel and Filament HRMS covering employees, attendance, leave, payroll with PDF payslips, and recruitment.
Need something like this?
Tell me about your workflow and I will bring the code craft, structure and care.
Start a project conversation