Real-time public bus tracking for Kigali, Rwanda. Built with Expo, Redux Toolkit, React Navigation, Axios, react-native-maps, and Firebase Realtime Database.
# SmartBisi
Real-time public bus tracking for Kigali, Rwanda. Built with Expo, Redux Toolkit, React Navigation, Axios, react-native-maps, and Firebase Realtime Database.
The app runs in **demo mode** until you add Firebase credentials. Simulated buses still move on the map so you can try Search, Live Map, and bus details without a backend.
## Run the app
```bash
npm install
npx expo start
```
Scan the QR code with **Expo Go SDK 54** (this project targets SDK 54). Google Maps tiles on Android need `EXPO_PUBLIC_GOOGLE_MAPS_API_KEY`. iOS Expo Go uses Apple Maps; Google Maps on iOS needs a development build.
## Optional: live Firebase feed
1. Copy `.env.example` to `.env` and fill in your Firebase web config plus a Google Maps API key.
2. In Firebase, enable Realtime Database. For local development only, rules can be:
```json
{
"rules": {
".read": true,
".write": true
}
}
```
Do not ship open rules to production.
3. Seed routes, then start the GPS simulator:
```bash
npm run sim:seed
npm run sim:run
```
The simulator updates 4 buses every 4 seconds on two corridors:
- **107 Remera – Masaka** via Mulindi
- **305 Kimironko – Nyabugogo** via Amahoro Stadium, Chez Lando, and Kacyiru
## Try it
Search **Remera → Masaka** or **Kimironko → Nyabugogo**. Open Live Map, tap a bus marker, and (optional) watch a bus for a local notification when it is about 5 minutes from your stop.
ETA v1 is straight-line (haversine) distance divided by speed (~25 km/h if missing). Route-polyline distance is left for v2.