💡 Inspiration
Every 90 seconds, a woman somewhere is harassed, followed, or assaulted — and most of the time, her phone is already in her hand. We kept asking ourselves: why does it still take 4 taps, an unlock, and a steady hand to call for help?
We were inspired by stories from friends, family, and strangers — people who survived dangerous moments not because the right tool existed, but because they got lucky. SafeHer was built for the moments where luck shouldn't be the deciding factor.
We also drew inspiration from the limitations of existing safety apps: they're loud, obvious, require accounts, demand a signal, and assume the user has both hands free and the privacy to use them. None of that is true in a real emergency.
🛡️ What it does
SafeHer is an all-in-one personal safety platform with 20+ integrated features organized into six pillars:
🚨 Emergency Response One-Tap SOS — Instantly notifies trusted contacts via SMS with live GPS location Multi-Modal Triggers — Manual, shake-to-alert, voice keyword, fake calculator unlock, offline siren, fake incoming call Live Stream & Tracking — WebRTC video + real-time GPS via unauthenticated public links (recipients don't need an account) Post-Incident Support — Guided recovery, evidence packaging, and reporting workflows 🗺️ Smart Awareness Safety Map — Crowdsourced incident heatmap with safe-zone overlays (Leaflet + Leaflet.heat) Safe Routes — Routes weighted by community safety ratings Safe Havens — Verified pharmacies, police stations, hospitals, shelters Geofencing — Auto-alert when entering or leaving custom safe zones 👥 Community Safety Circles — Share live location with trusted groups via invite codes Bystander Alerts — Broadcast to nearby SafeHer users for immediate help Community Feed — Tips, alerts, and discussions Wellness Check-ins — Scheduled mood logs that ping your circle if missed 🧠 AI-Powered Safety Assistant — Conversational AI for de-escalation and resource guidance Threat Assessment — Calibrated risk scoring for any situation Smart Suggestions — Context-aware nudges based on time, location, and history 🥷 Discretion & Stealth Disguise Mode — App skins as a working calculator Privacy Mode — Blurs sensitive data on shared screens Fake Call — Realistic incoming call to escape uncomfortable situations Safe-Word SMS — Single-keyword panic message 📂 Evidence Evidence Locker — GPS-tagged photos/audio in encrypted storage Journey Mode — Auto-SOS on route deviation or missed ETA Location History — Personal timeline Auto-Generated Reports — Police-ready incident reports
🏗️ How we built it
Frontend React 18 + TypeScript + Vite for a fast, type-safe SPA Tailwind CSS + shadcn/ui for an accessible, theme-able design system Leaflet + Leaflet.heat for interactive maps and incident heatmaps Framer Motion for calm, purposeful micro-interactions PWA with service worker, web push, and offline-first design Backend (Lovable Cloud / Supabase) Postgres with strict Row-Level Security on every table Auth with email + Google OAuth, plus a separate user_roles table to prevent privilege escalation Realtime subscriptions for live location, circles, and stream signaling Storage for evidence (encrypted, user-scoped buckets) Edge Functions (Deno): sos-notify — Twilio SMS dispatch with location + tracking link safety-chat — AI conversational safety assistant threat-assess — Structured risk scoring safe-word-reply — Inbound SMS panic handler AI Communications Twilio for SMS dispatch (SOS, safe-word, check-in alerts) WebRTC with Supabase Realtime as the signaling channel for live video streaming to public viewer links Sensors & Detection DeviceMotion API for shake detection Web Speech API for voice-keyword activation Geolocation API with high-accuracy continuous tracking TensorFlow.js for on-device pattern detection (planned)
🧗 Challenges we ran into
Race conditions in SOS state — Cancelling an active SOS while the user navigated away caused the UI to get stuck. We added navigation guards and an explicit post-incident flow to make state transitions deterministic. Maps crashing the app — Leaflet + react-leaflet version mismatches caused full-app crashes on map routes. We pinned react-leaflet@^4.2.1 and wrapped every map in a MapErrorBoundary. Unauthenticated tracking links — Recipients of an SOS shouldn't need to sign up to see the victim's location. We designed a public read-only signed-link pattern that exposes only the active stream/location, with auto-expiry. Privilege escalation risk — Storing roles on the profiles table is a known Supabase footgun. We moved roles to a dedicated user_roles table with a SECURITY DEFINER has_role() function to keep RLS policies non-recursive. Stealth that actually works — A "disguise" mode is useless if a single back-button reveals the real app. We rebuilt navigation so Disguise Mode is a true alternate entry point with its own routing tree. Designing under stress — Every interaction had to work one-handed, in low light, while panicking. We standardized on huge tap targets, calm colors, and zero confirmation dialogs on the SOS path.
🏆 Accomplishments that we're proud of
Shipped 20+ deeply-integrated features in a single coherent product — not a feature dump Built a truly offline-capable SOS (siren + cached contacts) for areas with no signal Achieved sub-2-second SOS dispatch from tap to SMS sent Designed an unauthenticated tracking link pattern that respects both safety and privacy Created a disguise mode that is convincing enough to fool a casual onlooker Maintained full Row-Level Security on every table — no data leaks possible across users AI threat assessment with calibrated, non-alarmist risk scoring
📚 What we learned
Safety UX is the opposite of growth UX — no confirmation modals, no onboarding gates, no decoration on critical paths RLS is non-negotiable — every shortcut around it becomes tomorrow's data breach WebRTC signaling over Postgres realtime is surprisingly elegant for low-volume video sessions Edge Functions + Twilio is the fastest path from "user taps button" to "SMS lands on a phone" Gemini Flash is the right model for safety: fast enough for live chat, cheap enough to run continuously, smart enough to de-escalate The hardest part of a safety app isn't the tech — it's earning the trust that it'll work the one time you really need it
🚀 What's next for SafeHer
Wearable integration — Apple Watch / Wear OS one-press SOS Smart Triggers — On-device ML to detect screams, glass breaking, or aggressive voices Verified Responder Network — Partner with NGOs and local police for direct dispatch End-to-End Encrypted Evidence — Client-side encryption so even we can't read it Multi-language Support — Starting with Hindi, Spanish, Arabic, and Mandarin Group Travel Mode — Live shared map for friends walking home together Insurance & Legal Partnerships — Free legal aid lookup and incident-to-claim workflows Open SOS Protocol — Publish our SOS schema so other apps can interoperate
🛠️ Built With
react typescript vite tailwindcss shadcn-ui framer-motion leaflet leaflet.heat supabase postgresql deno edge-functions twilio webrtc gemini lovable-ai-gateway pwa web-push service-worker tensorflow.js web-speech-api geolocation-api devicemotion-api

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