A QR-driven payment resolution engine that picks the right financial rail — wallet, bank, or external network — from the merchant and user preferences.
Nigerian transfers still run on 10-digit account numbers read aloud, mistyped, and trapped inside individual banks. There is no shared way for a small merchant to be paid without giving out their account details.
Four screens carry the whole payment loop. Each one makes a single decision, so the path from opening the app to a settled payment stays short on purpose.
A 60-second walkthrough of the core payment loop: scan, resolve, and settle. Running on the actual React Native build.

Scan → Resolve → Wallet debit → Confirmation
Every NQR code is an EMVCo TLV string: a chain of Tag · Length · Value triplets sealed with a CRC-16 checksum. In the live build this regenerates as you type; here is the engine's output for a static merchant code.
| Tag | Field | Value |
|---|
The whole payment loop is short on purpose. Every screen earns its place; here is what each one is doing and why.



Quantified targets set before build; not retrofitted after. These are the numbers the product is designed around.
QR parsed and routing decision output before the user reads the merchant name.
Internal Anchor ledger transfers. Near-perfect reliability by bypassing bank uptime.
PIN entry to merchant alert dispatch. The standard every design decision defers to.
Async outbound bank payouts via Anchor. Accounted for in UX with async confirmation states.