Case study

DropTaxi

Multi-tenant taxi booking SaaS for Indian taxi operators. One deployment serves every tenant with branded websites, custom domains, and per-operator SEO.

164

tests passing

5

car types supported

0

deploys to add a tenant

DropTaxi tenant booking page showing the fare calculator and city selection interface

The challenge

Taxi operators needed branded websites without per-tenant infrastructure costs

Small taxi operators across India run their businesses on phone calls and WhatsApp. They have no web presence. The ones who do pay for a custom-built site that costs thousands of rupees per month in hosting, and updating fares or adding cities means calling a developer.

The client wanted a platform where any operator could get a branded, SEO-optimized booking website by pointing a domain and filling out a form. No code changes. No redeployment. The booking sites had to calculate fares for one-way and round-trip routes across five car types, send booking notifications through Telegram, and rank on Google for each operator's target city.

The constraint: all of this had to run on a single deployment. One server. One codebase. Every tenant served from the same infrastructure.

What we built

A full SaaS platform, from booking engine to admin dashboard

Per-tenant branded websites

Each operator gets a website with their brand name, logo, theme colors, and custom domain. The SSR layer reads the Host header on every request, resolves the tenant from Turso, and renders the correct branding. Visitors see a complete booking site. They never know it shares infrastructure with dozens of other operators.

DropTaxi features section showing per-tenant branding capabilities
DropTaxi fare calculator showing route selection, car type picker, and fare breakdown

Shared fare engine

One fare calculation engine handles every tenant's pricing. It supports one-way and round-trip routes across five car types: Hatchback, Sedan, SUV, Innova, and Innova Crysta. Each tenant sets their own per-kilometer rates through the admin dashboard. The engine pulls the correct rates at request time and returns an instant fare breakdown to the user.

Super admin dashboard

The dashboard at taxi.savibm.com gives the platform owner full control. Create tenants, configure theme colors, set fare rates per car type, manage city routes, and view bookings across all operators. Every change takes effect on the live tenant site within seconds, with no deployment required.

DropTaxi platform reference showing the booking interface

Telegram notifications

Each tenant connects their Telegram bot. When a customer books a ride, the operator gets an instant notification with route details, car type, and fare. No app to install, no dashboard to monitor.

Per-tenant SEO

Every tenant site generates its own meta tags, Open Graph images, structured data, and sitemap. When someone searches "taxi booking [city name]," the operator's branded site appears, not a generic platform page.

Zero-deploy onboarding

Adding a new taxi operator takes three steps: create the tenant in the admin dashboard, configure their branding and rates, point their DNS. The platform picks up the new domain on the next request. No code changes, no CI pipeline.

Architecture

One deployment, many brands

The request flow

  1. 1 A customer visits svdroptaxi.com. The request hits a single Fly.io machine running Astro 5 in SSR mode.
  2. 2 Hono middleware extracts the Host header and queries Turso (via Drizzle ORM) to resolve the tenant by domain.
  3. 3 The tenant's configuration (brand name, colors, logo, fare rates, city routes) loads into the request context.
  4. 4 Astro renders the page with the tenant's branding. React components handle the fare calculator and booking form on the client side.
  5. 5 On booking submission, the API route validates with Zod, writes to Turso, and fires a Telegram notification to the operator's bot.

Turborepo monorepo

The codebase splits into packages: the tenant-facing Astro app, the admin dashboard, shared database schemas, and the fare calculation engine. Turborepo caches builds across packages, so a change to the fare engine only rebuilds what depends on it.

Turso at the edge

Turso provides embedded SQLite replicas close to users. Tenant resolution queries take single-digit milliseconds. Drizzle ORM gives us type-safe queries with Zod schema validation at the boundary, and 164 Vitest tests cover the fare engine, tenant resolution, and booking flow.


Tools

Turborepo Turborepo Astro Astro React React Hono Hono Turso Turso Drizzle ORM Drizzle ORM Tailwind CSS Tailwind CSS shadcn/ui shadcn/ui Zod Zod Vitest Vitest Fly.io Fly.io

Results

164

tests covering fare engine, tenant resolution, and booking flow

0

deployments needed to onboard a new taxi operator

5

car types with independent per-tenant fare rates

1

Fly.io machine serving all tenants from a single deployment

Get in touch

Start a conversation

Tell us about your project. We'll respond within 24 hours with a clear plan, estimated timeline, and pricing range.

Based in

UAE & India