← All systems
SYS-PFY production

PayFyre

Mobile wallet and merchant QR payments, with passwordless auth and enforced identity verification.

StatusRegulated fintech · production
https://payfyre.com/
PayFyre — consumer wallet landing page, live at payfyre.com

PayFyre — consumer wallet landing page, live at payfyre.com — scroll to see more

The problem

Regional users faced a real gap in digital payments: major card processors have historically had poor reliability and high decline rates for local bank cards, and there was no consumer-friendly wallet built around local currency, local banks, and local retail. Any product moving money also has to solve identity verification properly — as a real, auditable gate before funds can move, not an afterthought.

What was built
  • Passwordless authentication — email one-time code, then a 4-digit PIN for everyday access, trading forgotten-password support burden for a critical email-delivery dependency that's monitored accordingly.
  • Three-layer KYC enforcement — a client-side flag for smooth UX, a server-side middleware so no request can bypass it, and the verification vendor's own configuration as source of truth. Registration is never blocked by verification; only money-movement is gated.
  • Verification credentials isolated behind a proxy service — the mobile app never holds the vendor's client secret, and the backend independently re-verifies results server-side rather than trusting the client.
  • QR-based merchant payments — scan, confirm the exact amount and merchant name, pay with a PIN, settle wallet-to-wallet instantly — with defensive parsing for QR codes printed from PDFs, which often render hyphens as visually similar Unicode characters.
  • A full payment-gateway migration from an unreliable generic processor to a direct regional integration with full 3D-Secure support.
The outcome

A working mobile wallet with passwordless onboarding, enforced identity verification, and both online and in-person payment paths — architected so identity checks can't be bypassed by tampering with the client, and so card payments actually authorize reliably for the market it's built for.

Engineering highlights
  • KYC enforcement is redundant on purpose — three independent layers checking the same thing defend against three different failure modes: a stale build, a malicious client, or a misconfigured backend.
  • A currency-formatting bug taught a debugging lesson — a padded database column was silently inserting invisible whitespace into every displayed price, only found by checking the raw byte length of a value rather than its character count.
  • Payment and verification credentials never touch the client — sensitive secrets live server-side only, with intermediary services holding no long-lived secrets of consequence.
Stack

React Native · Laravel (modular architecture) · PostgreSQL · Redis · JWT + Sanctum · Firebase Cloud Messaging · Regional payment gateway (3D-Secure) · Native identity verification SDK

Screenshots

See it in action.

— loading —
scroll →