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