Real-time parking availability and predictions for Melbourne CBD, powered by City of Melbourne sensor data.
ParkWhere takes the guesswork out of finding parking in Melbourne CBD. Instead of just showing you what's available right now, it predicts what will be available by the time you actually arrive, using an exponential-decay forecasting model built on a rolling 24-hour history of sensor readings.
- Predictive availability — forecasts bay status at your estimated arrival time using a per-bay exponential-decay model, so you're not navigating to a spot that filled up while you were driving
- Live sensor data — 4,800+ City of Melbourne parking sensors, polled every 2 minutes
- Zone-level forecasts — aggregated availability for parking zones with per-bay breakdown
- Interactive map — colour-coded heatmap and tappable bay markers
- Restriction timeline — parking rules, time slots, and applicable days displayed per bay
- Arrival notifications — background geofence monitor fires a local notification when you reach your destination
- ETAs — driving and walking estimates via Google Directions with haversine fallback
- Search — Google Places autocomplete, recent destinations, and saved favourites
- Navigation handoff — one-tap handoff to Apple Maps, Google Maps, or Waze
- Adaptive UI — Cupertino on iOS, Material 3 on Android
Deployed on Fly.io (Sydney region).
- Ingestion — delta-polls the City of Melbourne Parking Sensor API every 2 minutes; full sync runs daily
- Prediction engine — per-bay exponential decay (
lambda_occupy/lambda_free) computed from a 24-hour rolling history window - Zone prediction — aggregated zone-level forecasts
- Persistence — SQLite in WAL mode with automatic history pruning
- Google API proxy — Places autocomplete, Place Details, and Directions are proxied server-side so API keys are never exposed to clients
Targets iOS and Android.
- Map screen — flutter_map with manual hit-testing, bay detail bottom sheet, live GPS blue dot
- Search screen — Places autocomplete, recents, and favourites with predictive availability badges
- Zone detail screen — full restriction timeline, per-bay predictions, availability summary
| Layer | Technology |
|---|---|
| Backend language | Go 1.23 |
| HTTP router | Gorilla Mux |
| Database | SQLite (WAL mode) |
| Mobile framework | Flutter 3.9+ |
| Map rendering | flutter_map 8.2 + latlong2 |
| Location | geolocator 13 |
| Notifications | flutter_local_notifications |
| Data source | City of Melbourne Open Data — Parking Sensor API |
| External APIs | Google Places API, Google Directions API |
| CI/CD | Codemagic (iOS to TestFlight, Android to Google Play) |
| Deployment | Fly.io (Sydney region) |
Parking sensor data is sourced from the City of Melbourne Open Data platform and is made available under the Creative Commons Attribution 4.0 International licence.
This project is licensed under the MIT License. See LICENSE for the full text.