On-Demand & Marketplaces

Marketplaces that match supply and demand in real time

We build the matching, dispatch, tracking, and payout systems behind delivery, mobility, and services apps, designed for the minutes when demand spikes and supply does not.

Illustration of a phone showing a delivery route, a scooter, a stopwatch, and a courier avatar

Real time

matching measured in seconds, not batches

Two-sided

customer, provider, and operations as one system

Payout-ready

earnings computed from trip events

The hard part

Three products running on one clock

An on-demand marketplace is three products at once: a customer app, a provider app, and the operations console that keeps them honest. Everything is time-bound, so a matching decision made two minutes late is simply wrong. Add surge, cancellations, multi-stop routing, and split payouts, and the difficulty is rarely the interface. We build the matching and state machinery underneath, then make it observable to the team running the city.

  • Liquidity decides the experience

    Too few providers and customers wait; too many and earnings collapse. Pricing, incentives, and matching have to be tuned together, per market and per hour.

  • Everything expires

    Offers, holds, quotes, and ETAs are all time-bound. Without timers and compensation built into the state machine, the system leaks stuck jobs.

  • The provider app is the product

    Couriers and drivers work one-handed, on cheap devices, in bad signal. Battery drain and a slow screen cost you supply faster than any pricing change.

What we build

Both sides of the market, built as one system

A marketplace only works when the side that orders and the side that delivers are designed against each other. We build them together, with the operations console that arbitrates between them.

Demand side

Getting a customer matched and kept informed

  • Matching and dispatch

    Real-time assignment weighing distance, ETA, capacity, fairness, and acceptance history, tunable per market without a deploy.

    • Assignment
    • Batching
    • Fairness
  • Live tracking and ETAs

    Location pipelines, map matching, and predicted arrival with the accuracy actually measured rather than assumed.

    • Location pipeline
    • Map matching
    • ETA accuracy
  • Pricing, surge, and incentives

    Dynamic pricing and provider incentives as configurable policy, simulated against historical demand before going live.

    • Dynamic pricing
    • Incentives
    • Simulation
Supply side

Keeping providers working, paid, and supported

  • Customer and provider apps

    Two mobile products with different constraints: one optimised for conversion, one for battery, glanceability, and one-handed use.

    • React Native
    • Background location
    • Offline states
  • Payments, wallets, and payouts

    Split payments, tips, adjustments, and instant payouts computed from trip events with a ledger behind every balance.

    • Split payments
    • Instant payout
    • Ledger
  • Operations and trust tooling

    City consoles, live intervention, fraud signals, and support workflows so a human can rescue a job before the customer notices.

    • Ops console
    • Fraud signals
    • Support tools
Technology

What we build marketplaces with

Chosen for decisions made under a deadline, geospatial work that stays cheap at city scale, and earnings that reconcile to the trip that produced them.

Mobile apps

Two audiences, two sets of constraints

  • React Native
  • Expo
  • Swift
  • Kotlin
  • MapLibre

Real-time services

Matching under a deadline

  • Go
  • Elixir
  • WebSockets
  • Redis
  • NATS

Geo and state

Where everything is, right now

  • PostGIS
  • H3
  • Temporal
  • PostgreSQL
  • Valhalla / OSRM

Platform and money

Scales by city

  • AWS
  • Kubernetes
  • Stripe Connect
  • Kafka
  • Grafana
How we work

From job lifecycle to a live city

Every marketplace we have shipped followed the same sequence, because supply is always the constraint and the first city is never the place to test a matching policy.

  • Step 1

    Model the marketplace

    We define the job lifecycle, every timer, and every compensating action before anyone designs a screen.

  • Step 2

    Simulate before you launch

    Matching and pricing policies run against synthetic and historical demand, so the first real city is not the first test.

  • Step 3

    Build for the provider first

    Supply is the constraint. The provider app gets the battery, latency, and clarity work before the customer app gets polish.

  • Step 4

    Launch city by city

    Each market brings its own supply curve and rules. Configuration is per city, with one platform and one operations console behind them.

What changes

A marketplace that can answer for its own decisions

  • Matching decisions made in seconds, with reasons recorded
  • ETA accuracy measured and improved, not estimated
  • Provider earnings that reconcile to trip events
  • Operations able to intervene before a job fails

Services we integrate

  • Stripe Connect
  • Twilio
  • Google Maps Platform
  • Mapbox
  • Checkr
  • Braze
  • Segment
  • Zendesk

Standards we build against

  • PCI DSS
  • GDPR / CCPA
  • SOC 2
  • PSD2 / SCA
  • WCAG 2.2 AA
Questions

What marketplace teams ask us first

  • You cannot match your way out of thin supply. We design for a manual and semi-automated first phase, with an operations console that lets a small team place jobs by hand, then move to automated matching as liquidity builds in a market.

Build the marketplace before the demand arrives

Tell us the job your marketplace has to complete and the market you want first. We will come back with a lifecycle model, a matching approach, and a launch plan for one city.