Inspiration

Every second counts. That's not a slogan — it's biology.

After a cardiac arrest, survival drops 10% for every minute without CPR. The average ambulance takes 8 to 12 minutes. By the time it arrives, for too many people, it is already too late. Not because the paramedics weren't fast enough. Not because anyone failed. Simply because the distance was too great and the clock ran out.

We couldn't stop thinking about the people in that gap. The ones who didn't make it home. The families who lost someone not to an incurable illness, but to minutes. To the fact that nobody trained happened to be nearby.

And then we thought about the other side of that gap — the thousands of doctors, paramedics, nurses, and trained first responders who are nearby. Who are within 300 metres of someone's worst moment and don't know it. Who could have been there in time, if only someone had told them.

That's the problem we set out to solve. Not with new infrastructure or expensive hardware — with the technology that already exists, finally connected the way it should have been all along.

What it does

RoadGuardianAI is an end-to-end emergency response platform with three layers:

Prevention — Before a citizen even leaves home, our system scores every road segment from 0 to 100 for risk using 16 live data signals: flooding alerts, traffic speed drops, blackout zones, EMAS breakdown reports, and more. The route map lights up green, orange, or red. A live camera strip pulls frames from CCTV along the route, and our ResNet-18 model — trained on traffic accident imagery at 96% model confidence — flags accidents in real time before traffic reports catch up.

Detection — When something goes wrong, a citizen hits one-tap SOS. Their live GPS location is captured instantly, and their full medical profile — blood type, allergies, cardiac risk level, current medications — is automatically attached to the alert. The system begins escalating outward: first to trained responders within 300 metres, then 400, 600, then all available responders if needed.

Response — The nearest trained responder receives the full patient briefing on their screen before they've moved. Not just "emergency nearby" — they know the patient's name, blood group, medications, and cardiac risk. They accept, navigate to scene, and mark attended. The citizen sees "Help is on the way" in real time. The admin command centre has full situational awareness throughout.

How we built it

  • Frontend: Vanilla HTML, CSS, JavaScript — three role-based dashboards (citizen, responder, admin) and a login page, all communicating via localStorage for real-time cross-tab synchronisation
  • Route intelligence: Singapore LTA traffic segment data served via a Node.js API, with a spatial grid index for fast segment matching against OSRM-routed paths
  • Camera feed: Singapore LTA Traffic Images API, with live frames piped to our Python backend for CNN inference
  • Accident detection model: ResNet-18 fine-tuned on traffic accident imagery, served via a Python/Flask backend deployed on Railway, running at 96% model confidence
  • Mapping: Leaflet.js with CartoDB tiles, OSRM for routing, Nominatim for geocoding
  • Deployment: Python backend on Railway, Node.js API on Railway, frontend as static HTML

Challenges we ran into

The hardest problem was real-time cross-role synchronisation without a persistent backend. Getting the citizen dashboard, three responder tabs, and the admin panel to all reflect the same emergency state — including tier escalation every 5 seconds — required careful localStorage architecture with polling intervals tuned per role.

Matching OSRM route coordinates to LTA road segment IDs was non-trivial. We built a spatial grid index to avoid brute-force nearest-segment searches across thousands of segments on every route render.

The ResNet-18 model required careful dataset curation — traffic accident imagery from dashcam footage is highly imbalanced, with far more normal frames than accident frames. We applied class weighting and augmentation to get to reliable confidence scores.

Accomplishments that we're proud of

Getting three completely separate user roles — citizen, responder, and admin — to operate in real time on the same emergency without a WebSocket backend was something we didn't think would work cleanly. It does.

The patient information pipeline is something we're genuinely proud of. A paramedic arriving on scene already knowing the patient's blood type, allergies, cardiac risk level, and medications is not a small thing. That used to take 2–3 minutes on arrival. We eliminated it.

The ResNet-18 model hitting 96% confidence on live LTA camera frames — cameras that were never part of the training data — validated that the approach generalises.

What we learned

That the hardest part of building emergency response tools isn't the AI. It's the workflows. Understanding how a paramedic actually thinks when they receive an alert, what information they need first, what slows them down — that shaped almost every design decision in the responder dashboard.

We also learned that real data humbles you fast. Working with live LTA segments, live camera feeds, and real Singapore road geometry exposed edge cases that clean demo data never would.

What's next for RoadGuardianAI

  • Vehicle type classification: Expanding the ResNet-18 model to identify the type of vehicle involved in a detected collision — motorcycle, car, lorry, bus. A motorcyclist down is a completely different clinical situation to a bus collision, and responders need to know before they arrive.
  • Integration with national emergency services: Working alongside 995 , not replacing it — surfacing RoadGuardianAI responder acceptance status directly to dispatch operators.
  • Global deployment: The LTA API is swappable for any city's traffic camera feed. OpenStreetMap segment data replaces LTA segments. The core platform is city-agnostic.
  • Wearable SOS trigger: Removing the need to unlock a phone and tap a button. A single press on a paired wearable fires the full SOS pipeline.

Built With

Share this project:

Updates