Genuinely local, by construction
“Localization-first” is an architecture, not a translation pass. One canonical preset table — backend/src/markets/country-presets.ts — is the single source of truth for every market's currency, timezone, dial code, distance unit, payment rails, tax engine, top-up presets and languages. Seeding, the installer and both mobile apps derive from it, so backend and apps can never drift apart.
14 languages the apps actually ship
Rider and driver apps carry 14 catalogs (Arabic, Bangla, English, Español, Gujarati, Hindi, Indonesia, Kannada, Marathi, Português, Tamil, Telugu, Thai, Việt); the admin carries 15. Arabic renders true right-to-left layouts, not mirrored English. Parity tests fail the build if a new string ships in English only.
Each market lists the languages it offers (English first), and the clients read that list from the server — adding a language to a market is data, not an app release.
Money formatted like a local, stored like an accountant
Currency formatting respects each currency's true minor units — including zero-decimal JPY and three-decimal KWD, a bug class this codebase found, fixed and now tests against. Distances render in km or miles per market. Dates render in the market's timezone and locale while storage stays UTC.
Local emergency numbers and safety conventions
The SOS flow carries each market's real emergency numbers in market config — the button in Nairobi doesn't dial 911. Phone placeholders, dial codes and national number lengths come from the same preset table.
Government e-invoicing where it's law (4 engines)
India GST e-invoicing · Brazil NFS-e (municipal ISS) · Mexico CFDI 4.0 · Saudi ZATCA (TLV QR). Each engine is credential-gated: with GSP/PAC/authority credentials configured it files for real; without them it issues a deterministic local invoice and says so — invoicing never blocks a completed ride, and gapless invoice numbering holds either way.
The market wall
Every chip below is parsed from the preset table at build time — flag, currency, lead rail, dial code, RTL. Hover for the full rail list.