All work

HarpFi

Cross-border payments, FX & stablecoins, Entities & balances

A business payments and FX platform. Companies collect, hold, convert and pay out across African and international currencies, and now stablecoins, from one wallet. I work on business onboarding, entities, conversions and balances.

Company
HarpFi
Years
2025–now
Platform
Web dashboard + payments API
My role
Software Engineer
Kit
Nuxt 3, Vue 3, TypeScript, Express, MySQL, Redis, BullMQ
Fiat currencies, from NGN, KES and XOF to USD, GBP and EUR, plus stablecoins
14
Ways to pay out: bank, mobile money or another wallet
3
Wallet, dashboard and API for all of it
1

The problem

Banks make international payments slow and expensive, and most tools stop at “send money”. A business paying suppliers across currencies needs more: balances it can actually spend, a rate that doesn’t move while someone reviews the payment, a second person to approve large payouts, and a record of who did what. Underneath, every country has its own banks, account details, limits, fees and compliance rules.

What I built

  1. Business onboarding

    A guided flow that verifies a business and the businesses it pays on behalf of, saving drafts as it goes and showing exactly what’s left.

  2. Business entities & representatives

    Set up the businesses a company pays on behalf of, and verify the people behind them, each with their own documents and status.

  3. Conversions & exchange orders

    Convert between fiat and stablecoin balances at a live rate, or request a rate for a larger trade and accept or decline the counter-offer before it expires.

Key decisions

  • A new currency is configuration, not new code

    Payout forms, fees, limits and which partner handles a route are all data. The payment flow picks the right strategy for the currency and destination, so opening a new market means adding settings, not rewriting how money moves.

  • Rates you can trust

    Money is never calculated with floating point. Rates are cached with an expiry, the dashboard waits for you to stop typing before asking for a quote, and the quote is refreshed before you confirm, so a stale rate is never executed.

  • Controls a payments company needs

    Roles and permissions are checked in one place by both the pages and the buttons, and large payments can require one or more approvers above an amount you set. Every action lands in an audit log.

  • Sessions that stay safe and up to date

    2FA, idle timeouts, quiet token refresh and a notice when the same account signs in elsewhere. Open tabs also learn when a new version ships, so finance teams aren’t stuck on an old build.

  • Heavy work stays off the request

    Partner calls, webhooks, statements and end-of-day reconciliation run on queues. Large reports stream straight to CSV, and reconciliation skips accounts that haven’t changed since the last run.

Outcome

  • Businesses collect, hold, convert and pay out from one wallet, in fiat and stablecoins, by local bank transfer, mobile money, SWIFT or wallet to wallet.
  • New currencies and payout partners go live through configuration instead of new payment code.
  • Teams can plug payouts and collections into their own products through the API and webhooks, and try it all first in a separate test mode.

Let’s talk.

Hiring, building something, or just want to talk shop? Send me an email. It’s the quickest way to reach me, and I read every one.

GitHubLinkedIn