Skip to main content

CASE STUDY · TORY

LIVE · ON-DEMAND

Mobile services,on-demand.

Open the app. Drop a pin. A mobile unit is on its way.

Tory brings mobile services straight to you — to the middle of the city, to a park, to an open-air event, or anywhere a fixed solution simply doesn't exist. Instead of hunting for the nearest public option or holding out until you get home, you open an app, choose a location, and a mobile unit is dispatched.

We built the product from the ground up — a client app, a driver app, and a server-side platform that ties the two together in real time.

apps
2
client · driver
matching
AUTO
Dispatch engine
tracking
REAL-TIME
Live ETA on map
payment
E2E
Secure, in-app

01 / What we built

Three products. One system.

We built the entire stack from scratch — two front-line surfaces, and a server that keeps them in sync in real time.

  • 01Mobile · iOS · Android
    Client app
    A clean surface with one goal — order a service, fast. Map, pin, confirm, track, pay. No long signup. No phone calls.
  • 02Mobile · Field-grade
    Driver app
    A field-grade workspace for the driver: new orders, built-in navigation, and status buttons that update the customer automatically at every step.
  • 03Backend · Realtime · Dispatch
    Server-side platform
    A dispatch engine, real-time sockets, billing, and an ops dashboard. The wire connecting customer to driver and the whole fleet to itself.

02 / Client app

Clean interface. Three actions.

  • Drop a pin on the map and confirm.
  • Watch the driver approach — the same experience as a ride-hailing app.
  • Pay inside the app. No calls, no chat threads, no figuring out who owns what.
Tory client app home screen: choose a service, set the location and request it in three taps

03 / Driver app

A field-grade cockpit for the driver.

  • New orders arrive in real time with location details.
  • Built-in navigation — no jumping between apps.
  • Status buttons that update the customer automatically: en route · arrived · done.
  • No phone calls, no text messages — everything stays inside the system.
Tory app showing a live job with real-time ETA tracking on the map

04 / Auto-dispatch

A dispatch engine that matches by location.

The system reads the customer's location and the available drivers nearby, then routes every order to the driver who'll arrive fastest. ETAs stay short during rush hours and large events alike.

  • Live geolocation
  • Driver availability
  • ETA optimization
  • Manual override

05 / Real-time tracking

The customer sees it. Ops controls it.

The same real-time backbone — two very different surfaces. For the customer: a clean ETA on the map. For ops: the entire fleet on a board, with the power to step in.

  • 01
    Customer view
    The customer watches the driver move on the map with a precise ETA — the same model as a ride-hailing app.
  • 02
    Ops dashboard
    Ops sees the entire fleet on the ground — who's busy, who's free, who's en route, and who's stuck.
  • 03
    Live intervention
    When needed — move a driver, reassign an order, or solve an issue before it ever reaches the customer.

06 / In-app payment

Secure end-to-end payment.

No cash in the field. No credit cards handed to drivers. No invoices to chase. The order closes automatically when the service is complete, and revenue syncs straight to the dashboard.

07 / Technology

The stack behind the scenes

A modern stack chosen for the job — fast to build, stable in production, alive in real time.

Mobile

  • React Native
  • Expo
  • TypeScript

Backend

  • Node.js
  • NestJS
  • Socket.IO

Database

  • PostgreSQL
  • PostGIS
  • Redis

Maps & Routing

  • Google Maps
  • Mapbox
  • Geocoding

Payments

  • Stripe
  • Tranzilla

Cloud

  • AWS
  • CloudFront
  • S3

Observability

  • Sentry
  • Datadog
  • Logflare

Delivery

  • EAS
  • CI/CD
  • OTA Updates

08 / Decisions and constraints

The decisions behind the structure

Everything described above is the result of a few product decisions made early. These are the decisions, and the constraint each one answered.

  • Two apps, not one
    Customer and driver do completely different things: one orders and tracks, the other navigates and updates status. One screen for both would have burdened both. Hence two separate products on the same backend.
  • Matching happens server-side, with a manual override
    An order is matched automatically by customer location and driver availability — but ops can step in: move a driver or reassign an order. Automation that cannot be overridden fails at the first event nobody planned for.
  • Status updates the customer, not a phone call
    Three buttons for the driver — en route, arrived, done — and each tap updates the customer automatically. That is what takes phone calls and SMS out of the process.
  • Payment closes the order
    No cash in the field and no cards handed to the driver. The order closes automatically when the service ends and revenue syncs to the dashboard — so billing is part of the flow, not a separate step after it.
  • Location as a core data type
    Matching, tracking and ETA all rely on location. So it is stored and computed in the database itself (PostGIS), not just displayed on a map — and reaches customer and ops through real-time sockets.
  • Updates without waiting for the store
    Both apps were built with Expo and EAS, with OTA updates — so client-side fixes can reach devices without going through the store review path every time.

09 / What was delivered

What was delivered — and where the responsibility line runs

A good case study also says what wasn't included. This is what Onezero Labs built and delivered in this project, with no unpublished metrics.

ComponentWhat was deliveredNote
Client appiOS and Android: map, location pin, order confirmation, live driver tracking, in-app paymentReact Native · Expo · TypeScript
Driver appReal-time order intake, built-in navigation, status buttons that update the customerReact Native · Expo · TypeScript
Server platformLocation-based dispatch engine, real-time sockets, billing, ops dashboard with live interventionNode.js · NestJS · Socket.IO · PostgreSQL/PostGIS · Redis
PaymentsIn-app payment and automatic order close-out when the service endsStripe · Tranzilla
Infrastructure and operationsCloud, distribution and OTA updates, error and performance monitoringAWS · EAS · Sentry · Datadog
Out of scopeThis page describes the software that was built. Operating the service itself — drivers, mobile units and customer support — is not part of the project described, and the service's operating numbers are not published here.—

Planning a similar on-demand product?

This structure — a customer app, a service-side app and a real-time backend — recurs in most products of this kind. What changes is the scope: how many roles, which integrations, and what must be in the first version.

Got a similar idea?

From the idea to an app that actually moves.

We built Tory from zero — two apps, a real-time backend, end-to-end payments. If you have an on-demand idea waiting to ship, let's talk.

On-demand. In the field. In real time.