<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gowri </title>
    <description>The latest articles on DEV Community by Gowri  (@gowri213).</description>
    <link>https://dev.to/gowri213</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3949135%2F929a8d00-df61-4a08-90e0-1787375067a4.png</url>
      <title>DEV Community: Gowri </title>
      <link>https://dev.to/gowri213</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gowri213"/>
    <language>en</language>
    <item>
      <title>SafeTrackHer : From a 2024 Hackathon Pitch Deck to a Live Women's Safety App</title>
      <dc:creator>Gowri </dc:creator>
      <pubDate>Thu, 04 Jun 2026 07:47:05 +0000</pubDate>
      <link>https://dev.to/gowri213/safetrackher-from-a-2024-hackathon-pitch-deck-to-a-live-womens-safety-app-432l</link>
      <guid>https://dev.to/gowri213/safetrackher-from-a-2024-hackathon-pitch-deck-to-a-live-womens-safety-app-432l</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SafeTrackHer&lt;/strong&gt; is a full-stack women's personal safety platform built with React, Node.js, and Twilio. It gives women real tools to stay safe — not just an app that looks good in screenshots.&lt;/p&gt;

&lt;p&gt;Here's what it actually does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚨 &lt;strong&gt;Hold-to-SOS&lt;/strong&gt; — Press and hold 2 seconds to send real SMS alerts with live GPS location to trusted contacts. Hold-to-trigger was a deliberate design decision to prevent accidental triggers.&lt;/li&gt;
&lt;li&gt;📍 &lt;strong&gt;Live Location Sharing&lt;/strong&gt; — Starts a real tracking session via the backend. Generates a shareable link that opens a live map page, auto-refreshing every 10 seconds as your coordinates update.&lt;/li&gt;
&lt;li&gt;🗺️ &lt;strong&gt;Safe Journey Mode&lt;/strong&gt; — The feature I'm most proud of. You set your destination and travel time. If you don't arrive, the app doesn't immediately blast your contacts with panic alerts. Instead it uses a &lt;strong&gt;3-step intelligent escalation&lt;/strong&gt;: gentle check-in → grace period → emergency alert. This solves a real flaw in most safety apps — false alarms make people stop trusting them.&lt;/li&gt;
&lt;li&gt;📞 &lt;strong&gt;Fake Call&lt;/strong&gt; — Simulate an incoming call to escape uncomfortable situations. Set a delay (now, 10s, 30s, 1 min), trigger it, and get a full-screen realistic incoming call UI.&lt;/li&gt;
&lt;li&gt;🔋 &lt;strong&gt;Low Battery Alert&lt;/strong&gt; — When your phone drops below 10%, your trusted contacts get an SMS with your last known location before you go offline.&lt;/li&gt;
&lt;li&gt;👥 &lt;strong&gt;Trusted Contacts&lt;/strong&gt; — Add up to 5 people who receive every alert. Each contact can also have location shared with them individually.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tech Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: React + Vite + Tailwind CSS&lt;/li&gt;
&lt;li&gt;Backend: Node.js + Express&lt;/li&gt;
&lt;li&gt;SMS: Twilio API&lt;/li&gt;
&lt;li&gt;Location: Browser Geolocation API + custom tracking backend&lt;/li&gt;
&lt;li&gt;Storage: localStorage (frontend) + in-memory sessions (backend)&lt;/li&gt;
&lt;li&gt;Deployment: Netlify (frontend) + Railway (backend)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;strong&gt;Live App:&lt;/strong&gt; &lt;a href="https://safetrackher.netlify.app" rel="noopener noreferrer"&gt;safetrackher.netlify.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎥 &lt;strong&gt;Demo Video:&lt;/strong&gt; &lt;a href="https://youtu.be/RYNOOZ7BuGA?si=8wMNiX_6tmxSvc2h" rel="noopener noreferrer"&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dashboard — Safety at a glance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mgdiwxwy80x1rh2hdtq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mgdiwxwy80x1rh2hdtq.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contacts UI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnod6mmc2j8n3shvsy63o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnod6mmc2j8n3shvsy63o.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SOS Alert Sent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpzkt8le6tjtdfw1xumn7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpzkt8le6tjtdfw1xumn7.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;SOS Alert Received&lt;/em&gt;*&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yrn4gbw6ey95icdlzzo.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yrn4gbw6ey95icdlzzo.jpeg" alt=" " width="800" height="1710"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Safe Journey Mode — 3-step escalation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vukuckvgexejs28zcn8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vukuckvgexejs28zcn8.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuib0yn11dq5lozoimtnm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuib0yn11dq5lozoimtnm.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Location Tracking Page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8w9jbh3qforu0ncbpd71.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8w9jbh3qforu0ncbpd71.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vpia4s2yt5i4k81o7mz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vpia4s2yt5i4k81o7mz.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7jo4cuwrb47su09r5kg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7jo4cuwrb47su09r5kg.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fake Call UI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8d2fbvkkc7hs92409dh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8d2fbvkkc7hs92409dh.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftg2cd3uxg9pq09dl7kb4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftg2cd3uxg9pq09dl7kb4.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Settings UI&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rz3crcrlc3j44ydg6dn.png" alt=" " width="800" height="450"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;In early 2024, I pitched SafeTrackHer at a college hackathon.&lt;/p&gt;

&lt;p&gt;The slides looked great.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5drmisfch9frsfx8mss.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5drmisfch9frsfx8mss.jpeg" alt=" " width="718" height="1421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The pitch had everything — Flutter app, Firebase backend, TensorFlow Lite for gesture recognition, accelerometer, even heart rate sensors. The "Prototype &amp;amp; MVP Status" slide said &lt;em&gt;"In Progress."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It was never in progress. I had an idea and a deck. The app didn't exist.&lt;/p&gt;

&lt;p&gt;After the hackathon it went straight into my Google Drive. I moved on. College happened. DSA practice happened. The folder sat there for over a year untouched.&lt;/p&gt;

&lt;p&gt;Then I saw the GitHub Finish-Up-A-Thon.&lt;/p&gt;




&lt;h3&gt;
  
  
  What the project looked like before this contest
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SafeTrackHer/
  SafeTrackHer_Pitch.pptx   ← a dream
  UI_Mockups.fig             ← never implemented  
  Notes.txt                  ← "TODO: start coding"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zero lines of code. Just slides and intentions.&lt;/p&gt;




&lt;h3&gt;
  
  
  What I changed, fixed, and built
&lt;/h3&gt;

&lt;p&gt;I made a conscious decision to &lt;strong&gt;simplify the vision and actually ship it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The original pitch had Flutter + TensorFlow Lite + heart rate sensors. That's a 6-month project for an experienced team. I'm a college student with 2 weeks.&lt;/p&gt;

&lt;p&gt;So I cut everything that wasn't essential to the core problem: &lt;em&gt;a woman is in danger and needs to alert people fast.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Everything I built serves that one problem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 1 — Core frontend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built the entire React app from scratch — 6 screens, responsive sidebar navigation, mobile-first layout&lt;/li&gt;
&lt;li&gt;Designed the hold-to-SOS button with a 2-second circular progress animation — accidental taps are dangerous in a safety app&lt;/li&gt;
&lt;li&gt;Built Safe Journey Mode with the 3-step escalation logic&lt;/li&gt;
&lt;li&gt;All state persisted in localStorage so the app survives page refreshes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Week 2 — Real backend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built Node.js + Express API with 10 endpoints&lt;/li&gt;
&lt;li&gt;Integrated Twilio for real SMS delivery&lt;/li&gt;
&lt;li&gt;Built the live location tracking page — a self-contained HTML page with embedded Google Maps that auto-refreshes every 10 seconds&lt;/li&gt;
&lt;li&gt;Connected frontend to backend — SOS button now sends real SMS&lt;/li&gt;
&lt;li&gt;Journey check-in and grace period trigger real SMS alerts to contacts&lt;/li&gt;
&lt;li&gt;Low battery alert sends SMS with last known location&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The most important design decision — Safe Journey Mode&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most safety apps have a simple timer: time runs out → immediately alert everyone. This causes false alarms constantly. Someone gets stuck in traffic, their contacts get panicked, they lose trust in the app.&lt;/p&gt;

&lt;p&gt;SafeTrackHer does it differently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Time runs out
    ↓
"Are you safe?" popup (30 seconds to respond)
    ↓ no response
Grace period starts (5-15 min, configurable)
    ↓ still no response  
THEN contacts are alerted
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also added "Extend Time" — tap +15 or +30 minutes if you're running late. No alert sent, journey continues. This is how a real safety tool should work.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;I used GitHub Copilot throughout this project and it changed how fast I could build.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it helped most:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Boilerplate elimination&lt;/strong&gt;&lt;br&gt;
The backend has 10 API endpoints. Writing the basic Express route structure, error handling, and response formatting for each one manually would have taken hours. Copilot suggested the full structure after seeing the first endpoint — I just filled in the business logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Twilio integration&lt;/strong&gt;&lt;br&gt;
I'd never used Twilio before. Copilot suggested the correct &lt;code&gt;twilioClient.messages.create()&lt;/code&gt; syntax, the error handling pattern, and even the SMS message format on the first try. What could have been 30 minutes of documentation reading was 5 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The live tracking HTML page&lt;/strong&gt;&lt;br&gt;
The &lt;code&gt;/track/:id&lt;/code&gt; endpoint serves a self-contained HTML page with embedded Google Maps and auto-refreshing JavaScript. Generating clean, self-contained HTML with inline CSS and JS from a Node.js string template is tedious. Copilot wrote most of the HTML structure, which I then customized for SafeTrackHer's design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Timer logic debugging&lt;/strong&gt;&lt;br&gt;
The Safe Journey timer had a particularly nasty bug — React's &lt;code&gt;useEffect&lt;/code&gt; with &lt;code&gt;setInterval&lt;/code&gt; and stale closures. The timer kept running even after clicking "I Arrived Safely" because state updates are async. Copilot suggested using &lt;code&gt;useRef&lt;/code&gt; to hold a mutable flag (&lt;code&gt;activeRef.current = false&lt;/code&gt;) that the interval checks on every tick. That's the kind of React internals fix that would have taken me much longer to figure out alone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. CSS layout&lt;/strong&gt;&lt;br&gt;
Building a responsive sidebar + main content layout that collapses to a hamburger menu on mobile involves a surprising amount of CSS. Copilot handled most of the responsive breakpoints, which let me focus on the actual features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I learned about working with Copilot:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The best results came when I was specific. "Write a React hook for location sharing" gave generic results. "Write a React useEffect that calls navigator.geolocation.getCurrentPosition every 15 seconds, stores the locationId in state, and calls the updateLocation API function" gave exactly what I needed.&lt;/p&gt;

&lt;p&gt;Copilot is a multiplier, not a replacement. I had to understand every line it suggested — especially the timer bug fix, where I needed to understand &lt;em&gt;why&lt;/em&gt; useRef solves stale closures before I could trust the solution.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next for SafeTrackHer
&lt;/h2&gt;

&lt;p&gt;This isn't going back into Google Drive.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v2:&lt;/strong&gt; Real database (PostgreSQL) to replace in-memory location storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v2:&lt;/strong&gt; WebSocket for truly real-time location updates (sub-second)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v2:&lt;/strong&gt; React Native mobile app so it runs as a proper phone app with background processes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v3:&lt;/strong&gt; Offline SMS fallback for areas with poor internet (the original hackathon vision)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v3:&lt;/strong&gt; Community-reported unsafe area alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hackathon pitch had the right vision. It just needed to be built one step at a time.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with React, Node.js, Express, Twilio, and GitHub Copilot.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;From a Google Drive slide deck to a live full-stack app — that's the comeback story.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;Frontend:&lt;/strong&gt; &lt;a href="https://github.com/Gowri213/safetrackher" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;br&gt;&lt;br&gt;
⚙️ &lt;strong&gt;Backend:&lt;/strong&gt; &lt;a href="https://github.com/Gowri213/safetrackher-backend" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
