🌟 Inspiration
Trace: turn your city’s whispers into a safety signal. Group chats can share your location, but they can’t tell you if the walk home feels safe. Street harassment is under-reported and buried across feeds; walking apps still optimize for minutes, not peace of mind. Trace changes that.
With one-tap, anonymous reporting, Trace turns individual experiences into a live safety layer: hotspots glow on the map, nearby crowds and open, well-lit places are highlighted, and safer walking routes detour around recent incidents: automatically. Export any route straight to Google Maps with a tap. No account, no tracking; we fuzz precise locations to protect privacy.
Built by students for students, Trace helps female students, late-night commuters, and shift workers make informed choices in real time. The more the community contributes, the clearer the safety picture becomes; and the easier it is to get home confidently.
🧭 What it does
- Report incidents in seconds with a modern, low-friction modal (no account required).
- Choose safer routes using a risk-aware path score that balances time vs. reported risk.
- Dark/Light theme that also switches the basemap styling for legibility at night.
- Live location (opt-in) for quick reporting and origin updates, never uploaded, fuzzed for privacy.
- Access links to resources in a separate tab
🛠️ How we built it
Front End
- Leaflet for interactive maps and layers (routes, hotspots, reports).
- OpenStreetMap tiles (light) + Stadia Alidade Smooth Dark (dark), with CSS filters to fine-tune contrast at night
- HTML/CSS/JS with a small design system (CSS variables) for instant themeing and consistent components. Backend: Node.js, Express.js Database: SQLite Hosting: Render
Challenges we ran into
Deploying from localhost → Render: wrangling CORS, environment variables, static asset paths, and SQLite persistence on a hosted container (plus cold-starts and HTTPS/mixed-content quirks)
A stable, functional safer-routing algorithm: balancing time vs. risk, enforcing hard no-go zones, fixing “zero-risk” bugs with proper numeric coercion, choosing sampling radii, and generating reliable detours + consistent multi-route alternatives
Accomplishments that we're proud of
... our cool features :D
- One-click Google Maps export (walking-only): open any selected route in GMaps for turn-by-turn nav, with smart waypoints to keep it faithful
- Clean, fast UI: crisp dark/light themes, clear route tabs with colored badges, and readable step-by-step directions
- Tap-anywhere reporting: drop an anonymous report just by clicking the map (or use the 📍 quick-report), with privacy jitter built-in
- Real-time safer routing: walking routes are ranked by a balanced time-vs-risk score, not just distance
- Live location support: optional on-device GPS that updates origin + routes without uploading your position
- Usage of 2 unique APIs: Using both an interactive map and allowing for location enabling using two different APIs (OpenStreetMap API and HTML5 Geolocation API) allowed us to learn more about combining different tools.
- Completing a working prototype in limited time: With approximately two days to complete the challenge, we were able to work on several different aspects including brainstorming, designing, implementing, and testing. Following a software development practices, we were able to accomplish many of the goals, including laying down the foundation and enhancing the UI later on.
What we learned
- Deploying on Render: how to structure a tiny Express + SQLite app, handle CORS/static files, and deal with cold starts & timeouts
- Ship the MVP first: break the problem into small wins (reports → hotspots → safe routing → detours → export) and iterate fast
- Make metrics visible early: exposing the risk score surfaced bugs and made tuning (weights, radii, decay) much easier
- Cache & guardrails matter: simple client-side caching and strict no-go checks improved reliability
🚀 What's next for Trace
- Smarter safe routing: Multiple safer routes for each start-end point. For every trip we’ll generate several reasonable routes (e.g., 3–5) and then create a safer sibling for each one. You’ll see pairs like R1/S1, R2/S2… where “S” is the same general path but pushed farther from risk and closer to well-lit, open areas
- Anonymous community presence (“CrowdSense”) Routes get a small bonus for passing through tiles with healthy, recent foot traffic, especially after dark. In the UI: A subtle “Nearby crowd: Low / Med / High” indicator and a slider to favor populated streets more strongly at night
- Enhanced security precautions: implementing rate-limiting or flagging suspicious activity to reduce the number of potentially false incident reports. This could be implemented using cookies to uniquely identify a browser and limit the number of reports that are made at a time from that device.
Built With
- cors
- css
- express.js
- gdelt
- geolocationapi
- html5
- ipapi.co
- javascript
- leaflet.js
- node.js
- nominatim
- openstreetmapapi
- render
- sqlite
- stadia
Log in or sign up for Devpost to join the conversation.