Back

QPay

An operations first cross-border payment platform giving Nigerian businesses stronger control, visibility, and reliability when moving money.

ReactTypeScriptNode.jsExpressPrismaPostgreSQLREST API
QPay dashboard screenshot

2 apps

Product Surfaces

1 backend

Shared Core

Ops-first

Operating Model

Double-entry

Ledger Model

Overview

A B2B fintech platform that brings beneficiary management, KYB, FX quotes, approvals, compliance review, provider execution, reconciliation, and auditability into one controlled payment workflow.

The Problem

  • Business payment initiation, approvals, compliance checks, and status tracking were fragmented across separate tools and manual conversations
  • Cross-border provider outcomes can arrive asynchronously, leaving finance and operations teams uncertain about transaction state
  • Unrestricted payment execution creates governance, duplicate submission, and financial integrity risks
  • Customer workflows and internal operational controls require fundamentally different permissions and information density

The Solution

  • Built separate customer and admin applications around distinct business-user, compliance, and operations workflows
  • Centralized authentication, accounts, payments, workflow state, notifications, observability, and provider integrations in a shared backend
  • Modeled payments as explicit approval, compliance, provider-submission, webhook, and reconciliation stages
  • Introduced durable outbox processing, idempotency handling, and controlled retry paths for asynchronous provider operations

Architecture Overview

High level architecture of the application.

Key Highlights

Business onboarding and KYB workflows
Beneficiary and payout-rail management
FX quote and cross-border payment creation
Threshold and policy based approvals
Compliance review queues
Double-entry ledger and balance snapshots
Provider webhooks and reconciliation
Operational health, metrics, and audit logs

Challenges

  • Designing a payment lifecycle that remains understandable across approvals, compliance gates, providers, and delayed callbacks
  • Preventing duplicate financial execution during user retries, worker retries, and webhook redelivery
  • Keeping the customer workspace simple while giving operators the dense controls required for incident response
  • Maintaining reliable financial state when external provider outcomes do not resolve within the original request cycle

Results

  • Established clear product boundaries between business payment activity and privileged internal operations
  • Created an auditable workflow from beneficiary selection and FX quotation through provider execution and reconciliation
  • Made approval, compliance, funding, provider health, and operational incidents visible through dedicated control surfaces
  • Built an extensible foundation for multi-currency wallets, bulk payouts, scheduled payments, invoices, and ERP integrations

What I Learned

  • Payment products must design the operational workflow around money movement, not only the transfer action
  • Asynchronous provider work requires durable processing that can outlive the initiating HTTP request
  • Separating user and operator interfaces improves security, information architecture, and task clarity
  • Reliability means being able to explain what happened, what is delayed, and what can be retried safely