Inspiration
Walking alone at night on a college campus can feel unsafe — especially after late study sessions, events, or nights out. We wanted to build something that actually addresses that anxiety in a practical way. Inspired by the UCSD Safe Ride program and the growing need for personal safety tools, we created WalkBack: a real-time safety navigation app designed specifically for students walking alone or in groups at night.
What it does
WalkBack is a mobile safety companion for campus pedestrians. It offers two modes:
- Solo Walk — Calculates the safest walking route to your destination using well-lit corridors and high-traffic paths, then guides you with live GPS tracking. A one-tap SOS button instantly alerts your emergency contact with your current location if something goes wrong.
- Buddy System — Matches you with nearby students heading in the same direction so you can walk together. Your group is visible on a shared map, and everyone has access to the SOS feature.
Both modes feature a real-time Google Maps blue dot, turn-by-turn route overlays, and estimated walk time and distance pulled from our safety-aware routing backend.
How we built it
- Frontend: React Native with Expo SDK 54 and Expo Router for file-based navigation. NativeWind (TailwindCSS) for styling with a custom dark theme.
- Maps:
react-native-mapswith the Google Maps provider, custom dark map styling, and live GPS tracking that keeps the map centered on the user during an active walk. - Backend: FastAPI (Python) deployed on Render, exposing a
/api/safest-routeendpoint that computes optimized pedestrian routes prioritizing well-lit, populated paths. - Routing logic: Frontend retries the backend up to 6 times with 5-second intervals to handle Render free-tier cold starts. Route data is persisted in memory so the preview and active walk screens always show the same route.
- Profile & Emergency Contacts: Saved directly on the user's device so no account or internet connection is required. Emergency contact info surfaces in the SOS flow.
Challenges we ran into
- GPS + route consistency: Early versions of the app fetched routes before the GPS fix was resolved, causing it to calculate from the default UCSD coordinates instead of the user's real location. We fixed this by gating the fetch on the
locationLoadingstate from ouruseLocationhook. - Route persistence across screens: Passing large route coordinate arrays through URL params caused data loss. We replaced this with a module-level route store, ensuring the route calculated on the preview screen is pixel-for-pixel identical on the walking screen.
- React Native Maps coordinate order: The backend returns coordinates as
[lat, lng]but MapView expects[lng, lat]. This caused routes to render in the middle of the ocean until we caught and fixed the swap. - *Making data consistent for multiple libraries *: Online crime data had data formats that were inconsistent and didn't include lat/lon coordinates, which were needed for most routing APIs. We had to develop a program to parse through the thousands of lines of data and reformat it to work for routing APIs and geocode the addresses into lat/lon coordinates.
- *Optimizing route calculation and amenity searching *: We were running into issues where using more complex AI to help calculate the safest route and search online for amenities was slowing down requests significantly. We had to optimize the logic by instead using statistical techniques to account for the different possibilities in crime data, and also different APIs to find nearby amenities.
Accomplishments that we're proud of
- A fully functional safety routing pipeline from GPS → backend → live map overlay, running on real hardware.
- The buddy matching system with a group view and shared SOS access — making safety social.
- A polished dark-mode UI that feels like a real production app, not a hackathon prototype.
- Graceful degradation: the app always shows a useful state (loading, retrying, error) and never silently fails.
What we learned
- How to handle real-world GPS latency and async race conditions in a mobile app.
- The importance of designing for failure — cold starts, network drops, and permission denials all need to be first-class states.
- How pedestrian routing differs from driving routing, and why safety-aware path scoring matters more than shortest distance at night.
- How to coordinate a shared in-memory state between screens in Expo Router without a full state management library.
What's next for WalkBack
- Live buddy tracking: Show each group member's real-time GPS position on the shared map during a buddy walk.
- Safety heatmaps: Overlay incident report data and lighting infrastructure to visually show users which paths are safest at a given time of night.
- Push notifications: Alert emergency contacts automatically if a user deviates from their planned route or the walk takes significantly longer than estimated.
- Campus partnerships: Integrate with university safety offices to pull real-time data on blue light phone locations, security patrol routes, and reported incidents.
- Cross-campus expansion: Generalize the routing backend beyond UCSD to support any university campus.
Built With
- fastapi
- google-maps
- graphhopper
- nativewind
- python
- react-native
- supabase
- typescript

Log in or sign up for Devpost to join the conversation.