Inspiration
Campus commutes in Singapore depend on buses, yet the most stressful part is not knowing if a stop is calm or packed until you arrive. We wanted a lightweight way for students to help each other make smarter, faster choices on the ground. CampuStop is our attempt to turn real-time, student-sourced observations into practical, immediate decisions.
What it does
CampuStop lets commuters report crowd levels at any Singapore bus stop using the official 5-digit code. It aggregates recent reports into a live crowd status, shows nearby stops on a map, and surfaces trust signals from report recency and likes. Users can also view bus arrivals (where LTA DataMall access is enabled) and a short personal trail of recently reported stops to help decide whether to walk or switch to another stop.
How we built it
We built a Node.js + Express backend with SQLite for local caching and crowd-report storage. LTA DataMall provides official bus stop metadata and live arrivals, while the frontend uses Leaflet and OpenStreetMap to visualize nearby stops with crowd indicators. The system aggregates reports in a 20-minute window, calculates a trust score, and applies rate limits, session-based cooldowns, and abuse controls to keep data reliable.
Challenges we ran into
The biggest challenge was balancing freshness with trust: we needed recent updates without being overly sensitive to single reports. We also had to handle missing metadata when the cache is cold, enforce strict input validation for bus stop codes, and design the UI to be fast on mobile without overwhelming users.
Accomplishments that we're proud of
We shipped an end-to-end experience: live reporting, map discovery, arrivals, and insights in one place. The trust scoring, rate limiting, and admin tools make the system resilient, and the interface stays clear even with dense data. We also added a “recent bus trail” to help commuters make quick next-step decisions.
What we learned
Reliable crowd data requires both good UX and guardrails. We learned how to design aggregation logic that feels fair, build defensive APIs, and integrate external transport data while keeping the app responsive. We also learned that small context cues (distance, trust, recency) dramatically improve decision-making.
What's next for CampuStop
We want to add route-based suggestions, not just user trails, by linking stops to actual bus service paths. We also plan to add MRT station crowd inputs, campus shuttle routes, and richer accessibility info. Longer term, we want to partner with campus transit offices to expand coverage and data quality.
Built With
- express.js
- html
- leaflet.js
- lta-datamall-api
- node.js
- openstreetmap
- sqlite
Log in or sign up for Devpost to join the conversation.