Skip to content
Al Shakib E Elahi
04Booking platform

Resid+

Resid+ is a booking platform serving six African countries, shipping on iOS and Android. I built the backend and the payments integration - which in this market means supporting the wallets people actually use rather than assuming a card.

Year
2024
Role
Backend, payment gateway integration
Context
Client product
Category
Marketplace
Resid+ property listings

Listings across six markets.

01The problem

Card penetration is low across the target markets. A booking flow that ends at a card form ends at abandonment. The platform had to accept Orange, Wave, Moov and other regional methods, and hold inventory correctly while a payment on any of those rails was still in flight.

02The approach

Payments route through Paydunya, which fronts the regional wallet networks behind a single integration. Bookings hold inventory on a provisional state, confirmed only on a verified payment callback and released automatically if the payment never lands. Authentication is JWT-based, and Socket.IO delivers booking and payment updates without the client polling.

03Architecture

How the pieces fit.

  1. API

    Express.js services for listings, bookings and payment orchestration.

  2. Payments

    Paydunya covering Orange, Wave, Moov and other regional methods.

  3. Data

    MongoDB for listings, availability and booking records.

  4. Auth

    JWT-based authentication with scoped tokens.

  5. Realtime

    Socket.IO for booking confirmations and notifications.

04Tech stack
Express.jsMongoDBPaydunya APISocket.IOJWTNginx

Deployment

  • Hosted on DigitalOcean
  • Domain registered with Namecheap and connected via DNS
  • Nginx as reverse proxy and for server management
05Key features
  • Regional payment methods - Orange, Wave, Moov and others - through one gateway integration
  • Provisional inventory holds released automatically when payment does not complete
  • JWT authentication with scoped access
  • Real-time booking and notification updates over Socket.IO
06Challenges

The parts that were not obvious at the start.

  1. 01

    Holding inventory against a slow payment

    Mobile money confirmations are not instant. Confirming a booking optimistically risks double-selling a property; blocking until settlement risks losing the customer. Provisional holds with automatic expiry gave both sides a bounded, predictable window.

  2. 02

    Six countries, one product

    Currency, available payment methods and settlement behaviour all vary by market. Keeping that variation in configuration rather than in branching logic kept the booking code readable as the country list grew.

07Results
  • Live on the App Store and Google Play
  • Serving bookings across six African markets
08What I took from it
  • Localisation is a payments problem before it is a language problem.
  • An expiring provisional state solves more consistency problems than a distributed transaction would have.