Inspiration
Brampton's existing 311 system relies on phone calls and web forms — slow, one-directional, and disconnected from the community. We wanted to give residents a voice and let the crowd surface what actually matters, not just what gets reported first.
What it does
Residents report neighborhood issues (potholes, broken streetlights, graffiti) by snapping a photo and dropping a pin. Reports appear on an interactive map and a TikTok-style feed where the community upvotes and comments. City officials get a real-time admin dashboard to filter, prioritize, and resolve issues — with the most upvoted problems rising to the top.
How we built it
- Mobile app: Expo (React Native) with TypeScript, featuring GPS auto-detection, camera integration, and anonymous Reddit-style usernames
- Admin dashboard: Vite + React + Tailwind CSS with Recharts for analytics and Leaflet for interactive maps with marker clustering
- Backend: Firebase Auth, Firestore, and Storage for real-time data and media
- Deployment: Vercel for the web dashboard, Expo for mobile
Challenges we ran into
- Getting reliable GPS within Brampton boundaries while handling edge cases and fallback positioning
- Building a smooth media feed that handles both photos and videos without jank
- Designing a status update flow (Open → In Progress → Resolved) that keeps residents informed without overwhelming them
- Syncing real-time data across the mobile app and admin dashboard simultaneously
Accomplishments that we're proud of
- A fully functional two-sided platform — resident app and admin dashboard — built end to end during a hackathon
- Community-driven prioritization that actually works: upvotes directly influence what officials see first
- Clean, intuitive UX on both sides — residents can submit a report in under 30 seconds, and admins can triage at a glance
What we learned
- How to structure a real-time Firebase backend that serves two very different frontends
- The UX tradeoffs between anonymity (encouraging honest reports) and accountability
- How map clustering and geo-filtering make or break the usability of location-based apps at scale
What's next for 311.2Brampton
- Push notifications so residents get alerted when their report's status changes
- AI categorization to auto-tag reports from photos
- Ward-level analytics so council members see issues specific to their district
- Expansion beyond Brampton — the platform is city-agnostic by design
Built With
- auth
- css
- expo.io
- firebase
- firestore
- javascript
- leaflet.js
- maps
- native
- node.js
- react
- recharts
- storage
- tailwind
- typescript
- vercel
- vite
Log in or sign up for Devpost to join the conversation.