Mobile app
SafeHer AI
Campus safety app that scores a walking route rather than just drawing it, with a shake-triggered SOS
What I built
- Designed a route-safety model over 10 normalised factors with time-of-day multipliers to 1.8x and three risk profiles
- Built a shake-triggered SOS prefilling an emergency SMS with live GPS coordinates and a maps link
- Fixed an emergency SOS reporting contacts notified when no message had been sent, plus a key-removal crash
How the numbers were measured
Designed a route-safety model over 10 normalised factors with time-of-day multipliers to 1.8x and three risk profiles
Read from code and confirmed on device 2026-09-07: SAFETY_WEIGHTS (src/constants/SafetyWeights.js) defines exactly 10 factors summing to 1.00, all applied in calculateSafetyScore (src/services/safety/safetyScoring.js:43-52); TIME_MULTIPLIERS run 1.0/1.2/1.5/1.8 and RISK_PROFILE_WEIGHTS defines 3 profiles. Live run on the release APK produced 74% for a 0.5km route at 05:55.
Built with
React NativeExpoJavaScriptAlgorithmsReact NavigationExpo SensorsExpo LocationExpo SMSReact Native MapsAsyncStorageReact ContextOpenAIGoogle Maps ApiExpo NotificationsExpo Camera
Why this stack
algorithms. The substance of this project is the weighted scoring model in `src/services/safety/safetyScoring.js`, not the map. Openai at touched: the advisor is one screen calling chat completions, and the build ships without a key. Google-maps-api at touched: tiles and directions only, and the Android build was never configured with a Maps key at all.