Inspiration
On a campus of 30,000 people, reporting an incident is weirdly hard. There's OneStop for facilities, a campus security hotline, the hall Telegram group, and an email to "some office." Every kind of incident has its own channel, none of them talk to each other, and crucially none of them tell you what happened after you report. That broken feedback loop is why people stop reporting at all. We wanted one front door for campus safety, and a back office that actually closes the loop.
What it does
Mynas@NTU lets any student report an incident (for e.g., medical, fire, theft, harassment, a hazard) in under a minute, from the web or straight from a Telegram bot. The moment a report lands, an AI triage engine reads it and assigns a severity from SEV-1 to SEV-4 in milliseconds, along with the responsible department and a target response time.
Meanwhile, campus security runs everything from a single live Security Operations Centre: every active incident on a colour-coded campus map (with a heat-map view), one-click priority filters, AI-summarised photo/video evidence, an SOP-referenced response plan, and an editable duty roster. Officers update status, reassign severity, and dispatch, and when they resolve an incident, the student sees it update instantly. The loop is finally closed.
How we built it
- Frontend: React + Vite single-page app, React-Leaflet for the live campus map and heat map, deployed on Vercel.
- Backend: Django + Django REST Framework on Render, PostgreSQL on Supabase, Cloudinary for evidence (direct browser upload via short-lived signatures, so media never transits our server).
- The triage brain: a deterministic ITIL engine (not a black-box LLM!). A category sets a baseline Impact × Urgency, then nine explainable signals (critical keywords, panic/distress language, mass-impact words, late-night timing, isolated locations, report clustering) can only ever escalate the score. The final Impact × Urgency cell maps to a SEV tier, and if confidence drops below 65% it escalates one tier and flags for human review. Same input, same output, every time with a full reasoning trace.
- Vision: Reka vision AI summarises attached photos/videos so dispatchers see what the evidence shows before opening it. It informs the human, while the deterministic engine decides the severity.
- Telegram: a bot for reporting and status updates, plus a controller "Broadcast" toggle that pushes genuine public-interest emergencies to a group channel (and can delete them) while keeping sensitive reports private.
What we learned
- For safety-critical triage, explainability and determinism beat raw model cleverness. A human can reproduce any result by hand, which is what earns an operator's trust.
- Webhooks vs. polling, signed direct-to-cloud uploads, and "fail safe, escalate on doubt" are the kinds of design decisions that decide whether something is demo-ware or deployable.
- The product feature that matters most isn't the AI, it's closing the loop back to the reporter.
Built With
- cloudinary
- css
- django
- django-rest-framework
- gunicorn
- html
- javascript
- leaflet.js
- postgresql
- python
- react
- react-leaflet
- react-router
- reka-ai
- render
- supabase
- telegram-bot-api
- vercel
- vite
- whitenoise
Log in or sign up for Devpost to join the conversation.