🚽 SFU RateMyToilet: Hybrid Sanitation Management System
The Pitch
"A clean stall for students, a data-driven route for janitors. Powered by Gemini AI to map the campus's hygiene in real-time."
Inspiration
At SFU, washroom conditions are a gamble. Students waste time wandering from the AQ to the SUB only to find "incidents," while our hardworking janitorial staff follow fixed schedules without knowing which stalls need the most urgent attention. We built SFU RateMyToilet to break this information asymmetry, using Gemini AI to turn student reports into an actionable, high-priority task list for staff.
What it does (The Dual-Mode Experience)
- Student Mode: "Know Before You Go" AI-Powered Reporting: Students can "Scan an Incident." A photo is sent to our Python/Flask backend, where Gemini 2.5 Flash-Lite instantly classifies the mess. It assigns an "Urgency Level" and generates a witty, AI-curated roast or comment about the situation.
Manual Reviews: Students can also leave traditional text and star-rating reviews without the camera, allowing for a diverse database of campus restroom quality.
- Janitor Mode: "Smart Dispatch & Efficiency" Real-Time Task Queue: Any incident flagged by Gemini as "Urgent" (Level 7+) is immediately pushed to the Janitor's dashboard as an ASAP Task.
Precision Mapping: Instead of guessing which floor is messy, janitors see a live heatmap. By navigating the Native Android Map, they can prioritize their route based on real-time student needs.
How we built it (The Tech Stack)
The Backend: We developed two primary scripts. One handles the heavy lifting, interfacing with the Gemini API for image reasoning, while the second manages the Flask API that stores student reviews and maintains the live janitor task queue. The reason why we decided to use Android Studio is that it allows us to build for multiple platforms at once
The Frontend (Android Studio): A native application designed for high-performance hardware access and easier implementation.
Challenges
The Policy Pivot: We encountered a major policy collision where Geolocate & Navigate APIs restricted high-precision GPS serving for Web models. By building a Native Android app, we leveraged the Android Location Service to ensure janitors could find the exact coordinates.
Networking: We used OkHttp to bridge the gap between the mobile camera and our local Mac server.
Challenges we ran into
The Model 429 Struggle: Hit a hard quota limit mid-hackathon. We pivoted to Gemini 2.5 Flash-Lite, optimizing our prompts to keep the analysis fast and the costs (and latency) low.
The Networking Tunnel: We mastered the art of the 10.0.2.2 loopback to ensure our Android Emulator could "talk" to our Flask backend running on a MacBook Air over the campus Wi-Fi.
Accomplishments that we're proud of
We created a closed-loop system where a student's 2-second photo report directly creates a workplace efficiency gain for campus staff. We expect this application to reduce the hallway traffic and work inefficiency.
What's next for SFU RateMyToilet
Gamification: Rewarding "Top Reporters" with campus coffee vouchers to keep the hygiene data fresh and accurate. Full Integration between the detector using the Gemini API and the full feedback system.
Built With
- dart
- flutter
- gemini
- gemini-api
- google-directions
- python
Log in or sign up for Devpost to join the conversation.