Skip to content
All projects

Fintech · Investments · Aug 2025 – Present

MyEasyVest

Sole backend engineer

An investment platform where individuals and companies fund multi-currency wallets, invest in fixed or flexible plans, earn scheduled interest, buy utilities and withdraw to bank accounts or crypto wallets, run with a licensed securities brokerage.

https://myeasyvest.com
Homepage of MyEasyVest
in deposits processed
$258K+
investors onboarded
487
in profits earned by investors
$131K+

01 / scope

What I built

  • Interest engine for fixed and flexible plans: an hourly scheduler pays each investor exactly on their payout cycle, then returns principal automatically at maturity
  • Biometric KYC and BVN lookup with Smile ID, company onboarding with signatories, and TOTP two-factor auth with backup codes
  • Payments across three providers: KM Payment links, Rolla NGN virtual accounts and Juicyway NGN/USDT payouts, with idempotent webhooks and requery jobs for stuck transactions
  • Utility purchases (airtime, data, cable TV, electricity) through ClubKonnect with atomic wallet debits, automatic refunds on failure, and a margin-tracked rebate system
  • Background workers on BullMQ and Redis for KYC, payments, withdrawals, interest, referrals and email, with retries and exponential backoff so a slow provider never blocks a request
  • Admin back office with role-based permissions, deposit and withdrawal approvals, transaction reports, an event-driven audit trail, Prometheus metrics and real-time notifications

02 / architecture

How it fits together

  1. Clients

    • Investor web app
    • Admin back office
  2. API

    • Express 5 REST API
    • JWT, TOTP 2FA and RBAC
    • Socket.IO notifications
  3. Async work

    • BullMQ workers on Redis
    • Hourly interest and maturity schedulers
  4. Data

    • PostgreSQL
    • Redis
    • MinIO file storage

Third-party services

  • Smile ID
  • KM Payment
  • Rolla
  • Juicyway
  • ClubKonnect
  • eBulkSMS
Request flow: Clients (Investor web app, Admin back office), then API (Express 5 REST API, JWT, TOTP 2FA and RBAC, Socket.IO notifications), then Async work (BullMQ workers on Redis, Hourly interest and maturity schedulers), then Data (PostgreSQL, Redis, MinIO file storage). Integrates with Smile ID, KM Payment, Rolla, Juicyway, ClubKonnect, eBulkSMS.

03 / engineering notes

Problems worth solving

Paying interest at the right hour

A once-a-day job paid everyone at 1 AM, so someone who invested at 2 PM was paid 11 hours early. I moved interest to an hourly scheduler that checks how long each investment has actually been running, so every investor is paid on their own cycle.

Moving money without double-spending

Every payment-provider webhook is stored as a receipt and processed once, even if it arrives twice. Utility purchases debit the wallet atomically before the provider is called and refund automatically on final failure, and requery jobs resolve transactions stuck in a pending state.

Keeping the API fast

KYC callbacks, deposits, payouts, interest runs, referral settlements and emails all happen in background workers with retries and exponential backoff. Each worker runs as its own Docker Compose service, so a slow provider never blocks a request.

04 / stack

Tools I used

  • TypeScript
  • Express 5
  • PostgreSQL
  • Sequelize
  • Redis
  • BullMQ
  • Socket.IO
  • MinIO
  • Prometheus
  • Docker