Overview

Premium chauffeur travel for executives, diplomats and corporate clients is booked by the hour, the day or the week, not by the trip, and the vehicles belong to partners, not the platform. We built the customer app, the chauffeur app, the admin console, the API and the marketing site as a single asset-light marketplace.

The marketing site: vehicle classes, hourly and daily hire, no fare negotiation.
The marketing site: vehicle classes, hourly and daily hire, no fare negotiation.
Client
Executive mobility startup, Ghana
Industry
Luxury transport marketplace

The challenge

  • Ride-hailing patterns don't fit hourly and multi-day hire, where the booking is a block of time with a vehicle class attached.
  • The whole promise is no fare negotiation and no payment conversation at the car door, which pushes payment out of the vehicle and into a wallet.
  • Some journeys are sensitive: destination and passenger should not sit in a chauffeur's trip history or an analytics dashboard.
  • Pre-launch, a keyed maps provider and a live payment gateway both mean billing accounts and credentials the client did not yet have.

Approach

Rate cards are editable in the admin console and quotes read them live, so no redeploy is needed to change a price. Bookings tagged “Private” are hidden from chauffeur history and analytics.
Rate cards are editable in the admin console and quotes read them live, so no redeploy is needed to change a price. Bookings tagged “Private” are hidden from chauffeur history and analytics.
  1. 01

    Wallet first, negotiation never

    Bookings quote against rates held in the database, charged to a wallet, with per-trip receipts and refunds to wallet on cancellation. Admins edit per-class hourly and daily rates live; quotes pick up new rates with no redeploy.

  2. 02

    Maps without a billing account

    MapLibre GL with free Carto tiles replaced the keyed maps provider the spec assumed: full-bleed maps, a live driver marker, route line, status stepper and ETA across both apps, with no API key and no maps bill.

  3. 03

    Private mode as a product feature

    Destination and passenger are hidden from chauffeur history and from admin analytics; during the trip the chauffeur gets navigation only. Discretion is enforced by the data model, not by policy.

  4. 04

    Providers behind an interface

    Payments and SMS sit behind provider abstractions, so development runs on mock providers and a signature-verified, idempotent webhook path is already built and tested for the day real keys arrive.

What shipped

5

surfaces: customer app, chauffeur app, admin, API, website

36

end-to-end backend tests passing

0

map API keys or maps billing required

Live

pricing: admins edit rates without a deploy

Admin console over the marketplace: users, chauffeurs, completed revenue and revenue by vehicle class.
Admin console over the marketplace: users, chauffeurs, completed revenue and revenue by vehicle class.

Stack

  • React Native
  • Expo
  • Next.js
  • NestJS
  • TypeScript
  • Drizzle ORM
  • PostgreSQL
  • MapLibre GL
  • Paystack
  • Expo Push