An open-source ride-sharing platform where drivers keep 82% of every fare.
Real GPS. Real maps. Real transparency. Built for iOS, Android, and the web from a single codebase.
Most ride-hailing apps hide how the money is split. RideFlow does the opposite β every fare is transparent, and drivers keep 82% by default (the platform fee is fully configurable from the admin panel). It ships with three real, role-aware experiences and uses native device capabilities instead of mock data.
- πΊοΈ Real maps & GPS β
react-native-mapson mobile, Leaflet/OpenStreetMap on web, live location viaexpo-location. - πΈ Transparent compensation β riders, drivers, and admins all see exactly how a fare breaks down.
- π₯ Three real roles β riders ride, drivers drive and ride, admins run the whole platform.
- β Ratings & reviews β star ratings with private, admin-only review notes.
- π§± One codebase, three targets β iOS, Android, and web from a single Expo project.
- πΎ Durable by default β Redis with append-only-file persistence; data survives restarts.
Riders get a clean, map-first interface: see nearby drivers, drop a pin, and book a ride.
Drivers see today's earnings, go online with one tap, and β crucially β see exactly what share of every fare they keep.
A hidden super-admin panel (revealed via a 5-tap on the version label) with platform revenue, live fleet stats, ride history, user management, and a fully configurable fare engine.
Role-aware login, with administration access kept out of the way of everyday users.
ββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β Expo / React Native app β REST β Express.js backend β
β (iOS Β· Android Β· Web) β βββββββΊ β (TypeScript, tsx) β
β β JSON β β
β β’ Expo Router (file routes) β β β’ Auth, rides, fares, events β
β β’ React Query (server state) β β β’ Static landing page β
β β’ React Context (auth) β β β β
β β’ AsyncStorage (persistence) β β βΌ β
β β’ react-native-maps / Leafletβ β ββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββ β β Redis (AOF persist)β β
β ββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββ
- Frontend keeps as much logic as possible client-side; the backend is a thin persistence + API layer.
- Backend auto-starts a local Redis instance with AOF persistence on boot β no separate DB to provision in dev.
| Layer | Technology |
|---|---|
| App framework | Expo SDK 54 Β· React Native 0.81 Β· React 19 |
| Routing | Expo Router (file-based) |
| Server state | TanStack React Query |
| Local state | React Context + AsyncStorage |
| Maps | react-native-maps (mobile) Β· Leaflet + OpenStreetMap (web) |
| Location | expo-location (native) Β· Web Geolocation API |
| Backend | Express 5 Β· TypeScript Β· tsx |
| Data store | Redis (ioredis) with append-only-file persistence |
| Validation | Zod + shared schema (shared/schema.ts) |
| Typography | Inter (Google Fonts) |
- Node.js 20+
- Redis available on your machine (the backend will auto-start
redis-serveron127.0.0.1:6379if it's installed and on yourPATH) - Expo Go app on your phone (optional, for testing on a physical device)
npm installcp .env.example .env
# Edit .env if you need to change the port or backend URL.npm run server:devThe Express server boots on port 5000, starts Redis, and seeds the admin account on first run.
In a second terminal:
npm run expo:dev- Press
wto open the web app, or - Scan the QR code with Expo Go to run it on your phone.
The frontend talks to the backend via
EXPO_PUBLIC_DOMAIN(defaultlocalhost:5000). When testing on a physical device, set it to your machine's LAN address, e.g.EXPO_PUBLIC_DOMAIN=192.168.1.20:5000.
On first boot the backend seeds a single super-admin account:
| Role | Username | Password |
|---|---|---|
| Admin | admin |
admin123 |
Change this immediately for any real deployment. Riders and drivers register themselves through the app's sign-up flow.
To reach the admin login: on the welcome screen, tap the version label (v1.0) five times to reveal the hidden admin entry.
- Riders β ride only. Map, booking, live tracking, and post-ride reviews.
- Drivers β drive and ride. Earnings dashboard, online/offline toggle, ride acceptance & navigation, plus a one-tap switch into rider mode.
- Admins β full platform control: stats, ride oversight, user management (suspend/delete), and the fare engine. Admins can also view the platform as a driver or rider.
Fares are computed from a configurable model (editable live in Admin β Settings):
| Parameter | Default |
|---|---|
| Base fare | $2.50 |
| Per mile | $1.75 |
| Per minute | $0.35 |
| Minimum fare | $5.00 |
| Driver share | 82% |
| Surge pricing | Toggle |
The remaining 18% is the platform fee β change the Driver Share % to whatever your business model requires.
rideflow/
βββ app/ # Expo Router screens (file-based routing)
β βββ index.tsx # Welcome / role selection (hidden admin 5-tap)
β βββ login.tsx # Role-aware login
β βββ register.tsx # Registration
β βββ rider.tsx # Rider interface (map, booking, tracking)
β βββ driver.tsx # Driver dashboard (earnings, rides, navigation)
β βββ admin.tsx # Admin control center
βββ components/ # Shared UI (maps, modals, error boundary, ...)
βββ constants/ # Theme colors
βββ lib/ # Auth context + API/query client
βββ server/
β βββ index.ts # Express bootstrap + CORS
β βββ routes.ts # All REST endpoints
β βββ storage.ts # Redis-backed storage (IStorage)
β βββ templates/ # Static landing page
βββ shared/
β βββ schema.ts # Shared types & Zod validation
βββ docs/screenshots/ # README imagery
βββ .env.example
βββ LICENSE # GPLv3
Auth
POST /api/auth/registerΒ·POST /api/auth/login
Users
GET /api/user/:idPUT /api/user/:id/locationΒ·PUT /api/user/:id/onlineGET /api/drivers/nearby?lat=&lng=&radius=
Rides
POST /api/ridesΒ·GET /api/rides/:idPUT /api/rides/:id/acceptΒ·PUT /api/rides/:id/statusGET /api/rides/rider/:idΒ·GET /api/rides/driver/:idGET /api/rides/rider/:id/activeΒ·GET /api/rides/driver/:id/activeGET /api/rides/availableGET /api/fare/estimate
Events
GET /api/events/:userIdΒ·PUT /api/events/:eventId/read
Admin
GET /api/admin/statsΒ·GET /api/admin/ridesΒ·GET /api/admin/users
Contributions are welcome! Please open an issue to discuss substantial changes before submitting a pull request. By contributing, you agree your contributions will be licensed under the GPLv3.
RideFlow is released under the GNU General Public License v3.0 (or later). See LICENSE for the full text.
You are free to use, study, share, and modify this software. If you distribute it or a derivative β including over a network as part of a larger work β you must keep it under the same license and make your source available.
Built with Expo, Express, and a belief that drivers deserve a bigger slice. ππ




