Public transport in Kigali is a daily source of uncertainty. Commuters do not know when the next bus will arrive, which route to take, whether a bus is full, or if a delay or disruption is affecting their journey. Static schedules (where they exist) rarely match reality, and information is fragmented across operators, stops, and languages. The result is wasted time, missed appointments, and a transport system that feels chaotic even when the buses are running.
HanoBus brings real-time visibility to Kigali's public transport network. It shows live bus positions on a map, estimates arrival times for each stop, suggests the best route between any two points, and alerts users to delays or disruptions β all in Kinyarwanda, French, or English. Whether you're a student, a commuter, or a visitor, HanoBus turns the city's bus network into something you can actually plan around.
- πΊοΈ Live GPS bus tracking β see every bus on the map, updated in real time
- β±οΈ Real-time arrival estimates β know exactly when your bus will reach your stop
- π§ Intelligent route planning β shortest, fastest, and least-crowded routes
- π Multi-language β Kinyarwanda, French, and English
- π Push notifications β delays, detours, and service disruptions
- β Favorites β save your frequent stops and routes
- π΄ Offline-first β core features work without a connection
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | React 19 + TypeScript + Vite | Fast, modern SPA with type safety |
| Styling | Tailwind CSS v4 | Utility-first, responsive UI |
| State | Zustand | Lightweight global state |
| Routing | React Router v7 | Client-side navigation |
| Maps | Google Maps + Leaflet | Live map rendering and bus overlays |
| Backend | Firebase | Serverless backend platform |
| Database | Cloud Firestore | Real-time sync of bus positions and routes |
| Auth | Firebase Auth | Email/password + Google Sign-In |
| Functions | Firebase Cloud Functions | Server-side logic and scheduled jobs |
| Notifications | Firebase Cloud Messaging (FCM) | Push notifications for delays and alerts |
| PWA | vite-plugin-pwa + Workbox | Installable, offline-capable web app |
| AI | Google GenAI (Gemini) | Smart assistance and natural-language search |
- Node.js 20 or newer
- npm 10 or newer
- A Firebase project (Firestore, Auth, FCM enabled)
- A Google Maps API key
# 1. Clone the repo
git clone https://github.com/<your-org>/hanobus.git
cd hanobus
# 2. Install dependencies
npm install
# 3. Configure environment variables
cp .env.example .env.local
# then fill in your Firebase + Google Maps keys in .env.local
# 4. Start the dev server
npm run devThe app will be available at http://localhost:3000.
| Script | Description |
|---|---|
npm run dev |
Start the Vite dev server |
npm run build |
Build the production bundle |
npm run preview |
Preview the production build locally |
npm run lint |
Type-check the project with tsc |
npm run format |
Format the codebase with Prettier |
hanobus/
βββ public/ # Static assets (icons, banner, manifest)
βββ scripts/ # Build / seeding scripts
βββ src/
β βββ components/ # Reusable UI components
β β βββ BottomNav.tsx
β β βββ Map.tsx
β β βββ Onboarding.tsx
β β βββ ...
β βββ pages/ # Route-level screens
β β βββ Home.tsx
β β βββ RoutesPage.tsx
β β βββ AlertsPage.tsx
β β βββ ...
β βββ data/ # Static route/stop data
β βββ i18n/ # Kinyarwanda / French / English strings
β βββ services/ # Firebase + API services
β βββ store/ # Zustand stores
β βββ utils/ # Helpers
β βββ firebase.ts # Firebase initialization
β βββ App.tsx # App shell
β βββ main.tsx # Entry point
βββ firestore.rules # Firestore security rules
βββ vite.config.ts
βββ package.json
π hanobus.vercel.app
| Document | Description |
|---|---|
| Project Overview | One-page summary of HanoBus for judges and new visitors |
| Architecture | System design and data flow |
| API Reference | Cloud Functions documentation |
| Database Schema | Firestore collections and structure |
| Setup Guide | Detailed developer setup |
| Deployment | How to deploy to production |
| Testing | Testing strategy and checklist |
| Security Policy | Data handling and vulnerability reporting |
Contributions are welcome! Please read CONTRIBUTING.md before opening a pull request.
This project is licensed under the MIT License β see the LICENSE file for details.
Built for the Tech Builder Program Hackathon 2026 π·πΌ
Made with β€οΈ in Kigali, Rwanda.


