The localization-first
ride-hailing platform
One config-driven codebase that ships as a genuinely local product in 37 preset markets — local payment rails, 14 languages with RTL, local emergency numbers, local fare conventions. Not a currency-symbol swap. Four verticals: city rides, parcels, rentals, intercity.
cards rendered from backend/src/markets/country-presets.ts at build time — the same table the product seeds from
A person, a package, an hour, or another city
All four run on the same dispatch, ledger, pricing and safety spine — each with the domain logic that actually makes it work, not a renamed ride type.
City rides
- Fixed upfront quotes or inDrive-style bidding, per market
- Multi-stop (up to 3) with per-leg fare + driver stop progression
- Women-only rides, market-gated, fails closed before pricing
- Fare integrity: recompute from actuals, waiting meter both sides watch
Parcel delivery
- OTP at both ends + photo proof of delivery, codes hidden from courier
- Priced failure paths: free retry → return-to-sender at 60%
- Chain of custody in the admin, per-market size/weight tiers
- Courier paid for both legs on a return
Hourly rentals
- Package ladder (1h/10km … 12h/120km) seeded from each market's own economy fare
- Live overage meter mirrored in rider and driver apps
- Mid-trip destination edits, package-expiry sweeper
- Rider-ends-the-trip semantics
Intercity / outstation
- One-way 1.3× · round-trip 0.85× with a 250 km/day floor
- Driver daily/night allowances, tolls + permits as line items
- Driver opt-in is a dispatch predicate — no surprise long-hauls
- 30-minute dispatch lead on scheduled departures
37 markets that each feel local — because they are
One canonical preset table drives currency, timezone, dial code, distance unit, payment rails, tax engine, top-up amounts and languages for every market — seeding, the installer and both apps read the same source, so nothing drifts. Launching a country is a config row and an admin toggle, not a fork.
14 app languages, parity-tested
العربية · বাংলা · English · Español · ગુજરાતી · हिन्दी · Bahasa · ಕನ್ನಡ · मराठी · Português · தமிழ் · తెలుగు · ไทย · Tiếng — with true RTL layout enforced by parity tests so a new key can't silently ship English-only.
Local emergency numbers
The SOS button dials the right number in every market — not a hardcoded 911 shipped to Nairobi.
4 government e-invoicing engines
India GST e-invoicing · Brazil NFS-e (municipal ISS) · Mexico CFDI 4.0 · Saudi ZATCA (TLV QR) — credential-gated with a deterministic local fallback; invoicing never blocks a ride.
South Asia
1 marketsSoutheast Asia
5 marketsMiddle East
6 marketsAfrica
7 marketsLatin America
7 marketsOther
11 marketsThe rails people actually pay with — on a double-entry ledger
In Nairobi the norm is M-Pesa; in São Paulo it's Pix; in Manila, GCash. Every rail sits behind one provider interface with an async-outcome path for instruction-then-confirm rails, and the resolver prefers each market's local rail over cards.
Read the amber pills. 5 newer rails declare integration: 'unverified-adapter' in code until they clear a real transaction against the live provider — and the admin panel shows operators exactly that, never a fake "Connected". With no keys configured, every market falls back to cash and nothing crashes. That honesty is a feature you inherit.
Every movement balances to zero
Settlements, refunds, credit notes, payouts and promo discounts post as double-entry journal lines in each currency's true minor units — JPY and KWD included, because that bug class was found and killed.
Refunds that respect reality
Wallet debit first, then the gateway leg with compensation on failure; refuses over-refunds stating the max refundable. Corporate rides get credit notes — there's no gateway leg to reverse.
Uncertainty never moves money
Payout reconciliation returns driver funds only on confirmed failure. Rails degrade to cash with no keys configured. DB-level ledger invariants reject corrupting writes.
The unglamorous parts are the product
Safety centre
- Trusted contacts + SOS fan-out SMS with a live-trip link
- Automatic ride check-in: long-trip & stationary signals escalate
- Tokenized public trip sharing — identity, phone and money structurally excluded
- Women-only rides, market-gated
Corporate accounts
- Book on the company account, credit limit enforced at booking
- Org settlement is a first-class ledger account — negative balance is the invoice
- Org-owner portal inside the rider app
- Admin billing console: credit notes, company payments
Driver retention
- Destination mode (2/day, dropoff must close ≥25% of distance)
- Trip preferences + auto-accept through the normal accept path
- Quests/incentives with idempotent ledger-backed awards
- Instant-payout limits with honest settlement estimates
Operator console
- Zero-UUID dispatch: search riders, click the map, assign by name
- Driver/rider 360°, KYC queue, zones, surge editor, payout queue
- Audit log with before-state snapshots
- RBAC with a last-super-admin lockout guard
This codebase tells you the truth about itself
Unverified means unverified
Payment adapters that haven't cleared a live transaction declare it in code, and the admin shows operators an amber pill — never a fake "Connected". You'll see the same honesty in the docs and this site.
Dormant by default
Anything that moves money or files with a government is credential-gated: no keys → deterministic local behavior (cash rail, local invoice), loudly logged, never a crash and never a silent fake success.
No fake anything
No invented testimonials, no sales counters, no fabricated logos here. Claims link to their proof: the live demo, the docs, the changelog, and test counts computed from the repo at build time.
Operator console & both apps
Frames are placeholders on purpose — no mocked-up UI pretending to be the product. The real thing is one click away on the live demo; capture instructions for this wall live in site/scripts/capture-screens.md.
Own the platform. Launch your market.
One-time purchase, full source for all four surfaces, docs included, license key signed to you. Try everything on the live demo first.