Multi-tenant SaaS for shuttle (Sacco) booking in Kenya — route/trip scheduling, seat booking, per-company data isolation.
# ShuttleConnect
A multi-tenant SaaS platform for passenger shuttle (Sacco) booking in Kenya. Transport companies onboard themselves, define routes and vehicles, schedule trips, and accept seat bookings — all through a shared platform with strict per-company data isolation.
---
## Table of Contents
- Overview
- Tech Stack
- Project Structure
- Getting Started
- Environment Variables
- Database Setup
- API Reference
- Roles & Permissions
- Data Isolation
- Future Integrations
---
## Overview
ShuttleConnect connects passengers with shuttle operators (Saccos) across Kenya. Key capabilities:
- **Multi-tenant**: Each Sacco's data is fully isolated at the API and database (RLS) layer
- **Booking workflow**: Passengers search trips, reserve seats, and receive booking confirmations
- **Atomic seat management**: Postgres RPC functions prevent double-booking under concurrent load
- **Role-based access**: Six roles from Super Admin down to Customer, each with scoped permissions
- **AI assistant**: Gemini-powered chat widget with live route/trip context
- **USSD & SMS ready**: Africa's Talking integration hooks for feature-phone users
- **M-Pesa ready**: Daraja API integration points for mobile money payments
---
## Tech Stack
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite 6, Tailwind CSS 4, Motion |
| Backend | Node.js, Express 5, TypeScript |
| Database & Auth | Supabase (PostgreSQL + OTP Auth) |
| Validation | Zod |
| AI | Google Gemini API |
| SMS / USSD | Africa's Talking |
| Payments | Safaricom Daraja (M-Pesa) |
| Package Manager | pnpm |
---
## Project Structure
```
shuttleconnect/
├── Frontend/ # React + Vite SPA
│ ├── src/
│ │ ├── api/ # Service classes (auth, bookings, trips …)
│ │ ├── components/ # UI components
│ │ ├── context/ # ApiContext — global auth state
│ │ ├── hooks/ # Custom React hooks
│ │ ├── lib/ # Navigation utilities
│ │ └── pages/ # …