Five specialized AI agents coordinate in real-time to scout threats, triage severity, match resources, and dispatch multilingual alerts β all triggered by a single ZIP code.
Built for HackUSF 2026, focused on Tampa-area
Developed by Knight Hacks & Hack@UCF Members
Uploaded onto Devpost, live at Crisis-Net.tech
π HackUSF 2026 Winner for Best Use of .tech Domain
| Layer | Technology |
|---|---|
| Frontend | Next.js 16, React 18, TypeScript, Tailwind CSS 3 |
| Backend | Python Β· FastAPI Β· Uvicorn |
| Agent Orchestration | Google ADK (Agent Development Kit) β SequentialAgent, ParallelAgent, LlmAgent |
| LLM | Google Gemini (gemini-2.5-flash-lite default) via google-genai |
| Database / Auth | Supabase (Postgres + anonymous auth + Row Level Security) |
| Mailgun (alerts, opt-in confirmations, webhook-based unsubscribe) | |
| Maps | Leaflet + React-Leaflet, MapLibre GL |
| Charts | Recharts |
| UI Primitives | Radix UI, Lucide icons, Framer Motion, cobe (3-D globe) |
| Deployment | Vercel (frontend β Next.js framework preset) |
- National Weather Service (NWS) β active & recent alerts by state
- US Census Bureau β 2020 population by ZIP code
- pgeocode / Nominatim β ZIP β lat/lng + county FIPS geocoding
- Shelter dataset β pre-geocoded JSON of emergency shelters (
shelters_geocoded.json)
ββββββββββββ Frontend (Next.js on Vercel) βββββββββββββ
β Landing Β· Dashboard Β· About β
β /api/* β rewrites to backend β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β HTTPS
ββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββ
β Backend (FastAPI) β
β β
β /scout β NWS alert ingestion & filtering β
β /population_size β Census population lookup β
β /resourceMatcher β Nearest-shelter matching β
β /translate β Gemini-powered translation β
β /agent-status β Live agent state β
β /activity-stream β Ring-buffer event log β
β /summarize β AI Q&A over alerts + shelters β
β /incidents/report β User reports + AI triage β
β /alerts/send β Mailgun alert dispatch loop β
β /comms β On-demand alert send β
β /auth/anon β Supabase anonymous auth β
β /user-stuff β Preference CRUD (email/opt-in) β
β /mailgun/webhook β Bounce/unsub handler β
β /snowflake/historical β Static hurricane history β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ
β Agent System (Google ADK) β
β β
β Coordinator (root SequentialAgent / LlmAgent) β
β ββ Scout Agent β calls /scout β
β ββ AnalysisPhase (ParallelAgent) β
β β ββ Resource Agent β calls /resourceMatcher β
β ββ Comms Agent β calls /translate β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Agent | Role |
|---|---|
| Scout | Monitors NWS, FEMA & local feeds; returns active and recent alerts filtered to the target county or Tampa Bay metro area. |
| Triage | Scores severity using storm category, Census population density, and NOAA historical damage data (P1 / P2 / P3). |
| Resource | Matches shelters and aid programs to affected ZIP codes using haversine distance against the geocoded shelter database. |
| Comms | Drafts and dispatches multilingual alerts via Mailgun; translates using Gemini. |
| Coordinator | Orchestrates the full pipeline β runs Scout, then parallel analysis, then Comms β via Google ADK's agent primitives. |
βββ backend/
β βββ main.py # FastAPI application (all endpoints)
β βββ shelters_geocoded.json # Pre-geocoded shelter data
β βββ requirements.txt
β βββ agent_system/
β βββ agent.py # Google ADK agent definitions
βββ frontend/crisisnet/
β βββ next.config.js # API rewrite to backend
β βββ src/
β β βββ app/ # Next.js App Router pages
β β β βββ page.tsx # Landing page (globe, agent cards)
β β β βββ dashboard/ # Live ops dashboard
β β β βββ about/ # How-it-works + timeline
β β βββ components/
β β β βββ dashboard/ # Map, feeds, agent panel, reports
β β β βββ ui/ # Reusable animated UI primitives
β β βββ context/ # React context (language toggle)
β β βββ lib/
β β βββ api.ts # Backend fetch wrappers
β β βββ agents.ts # Static agent metadata
β β βββ types.ts # Shared TypeScript interfaces
βββ vercel.json # Vercel deployment config
βββ requirements.txt # Root Python dependencies
- Node.js β₯ 18 and npm
- Python β₯ 3.11
Create backend/.env:
GEMINI_API_KEY=...
CENSUS_API_KEY=...
SUPABASE_URL=...
SUPABASE_KEY=...
SUPABASE_SERVICE_KEY=...
MAILGUN_API_KEY=...
MAILGUN_DOMAIN=...
MAILGUN_FROM=...
MAILGUN_SIGNING_KEY=...
# Optional
GEMINI_MODEL=gemini-2.5-flash-lite
ALLOWED_ORIGINS=http://localhost:3000
ALERTS_POLL_SECONDS=0cd backend
pip install -r requirements.txt
uvicorn main:app --reload --port 8080cd frontend/crisisnet
npm install
npm run dev # http://localhost:3000Next.js rewrites /api/* to the backend at http://127.0.0.1:8080 by default (configurable via BACKEND_URL).
cd backend/agent_system
# Requires FASTAPI_SERVER_URL pointing at the running backend
python -c "from agent import root_agent; print(root_agent)"The frontend deploys to Vercel using its built-in Next.js framework detection (vercel.json sets "framework": "nextjs"). The backend can be deployed to any Python ASGI host (e.g., Railway, Render, Cloud Run) exposing port 8080. Set the BACKEND_URL env var in Vercel to point to the live backend.
See LICENSE.