Skip to content

Ride-hailing application, 2026

Bike Taxi

Rider and driver Android apps plus a web admin panel, from one Flutter codebase on Firebase with real road routing.

Bike Taxi rider app: a road route from pickup to drop, a $4.30 fare and a Book Bike button

Overview

A bike-only taxi MVP. Riders set pickup and drop on a map, see the fare and book. Drivers register, wait for approval, go online, accept and run the trip. An admin approves drivers and oversees rides from the web. It is a portfolio demo: no real riders, drivers or trips are behind it, and the screenshots show sample data.

Engineering approach

  • One Dart codebase builds three apps: Android flavors for rider and driver, and a web build for admin.
  • Security lives in Firestore rules, not in the clients, and the rules have their own test suite against the emulator.
  • A single decision to book: one vehicle type, so no tiers and no picker.

The life of a ride

  1. Requested
  2. Accepted
  3. Started
  4. Completed

Stack

Flutter, Dart, Firebase Auth (phone OTP), Cloud Firestore, Security rules tests, flutter_map, OpenStreetMap, Valhalla routing

Technical challenges

A fare the client cannot fake

Problem
The rider app routes and prices the trip, and anything a client sends can be forged.
Solution
Firestore rules reject a ride unless the road distance is plausible for the pins (no shorter than the straight line less 300 m, no more than four times it plus 2 km) and the fare matches the published formula.
Result
The rules check plausibility, not the exact route. A production launch should route and price in a Cloud Function.

Only one driver gets the ride

Problem
Several approved drivers can see an open request at once.
Solution
The rules allow one transition, requested to accepted, and require the driver to take it as themselves, with name, plate and phone matching their record.

Keeping three roles apart

Problem
Riders, drivers and admins share one database.
Solution
Read and write access is scoped per role and per ride state. Drivers cannot approve themselves, and strangers cannot read a ride. Nine rules tests cover these cases.

Routing failures a rider can act on

Problem
A routing service fails in ways that mean nothing to a rider.
Solution
Valhalla error codes become plain instructions such as "Move the pin closer to a street", and a timeout gives a clear message instead of a stuck screen.

Gallery

Driver app: a trip in progress with its steps and an End Trip button
Driver app, trip in progress.
Admin panel on a phone: network status and the latest rides
Admin panel on a phone.
Admin panel on desktop: network status and a table of the latest rides
Admin panel on desktop.

Outcome and status

A complete demo that runs against the Firebase emulators, with an MIT licence and a documented path to going live.

Known limits

  • No address search, online payment, push notifications or ratings.
  • Driver location is shared only while the app is in the foreground.
  • Routing uses a public demo server by default. A real launch needs its own Valhalla.