FACIA — FAst Cat Impact Analytics
Turns a weather signal into insured-impact intelligence in minutes, not hours of spreadsheet work. A carrier ingests a portfolio; the system monitors wind/hail/rainfall thresholds against gridded NOAA data, detects material events, synthesizes exposure footprints with confidence scoring, classifies policies as directly or adjacently impacted, and hands operators a live map + exportable impact package — target under 30 minutes from threshold breach to report.
- < 30 min target
- Threshold breach → impact report
- 6
- Independent agents
- 5 mi (~8,046 m, geography-based)
- Adjacent-impact radius
The problem
After severe weather, catastrophe and claims teams still rely on manual, fragmented workflows: watching external alerts, sketching affected areas by hand, hunting for insured properties in those areas, then handing static spreadsheets to operations — slow, incomplete, and opaque while an event is still unfolding.
The challenge
Prove that a carrier can ingest a portfolio, monitor wind/hail/rainfall thresholds against full NOAA weather grids, detect material events, and produce a map-backed impacted-property list in an operationally useful window — targeting under 30 minutes from threshold breach to impact report — while keeping every step auditable and restartable mid-event.
Constraints
- Full NOAA MRMS/URMA GRIB2 grid evaluation, not zone-level alerts, for defensible threshold detection
- Distances must use geography/meters (ST_DWithin), never degree-based geometry — a silent source of corrupted impact lists
- Confidence scoring and review queues for low-confidence geocodes and synthetic footprints
- Agents must not call each other directly — durable database records make the pipeline restartable and auditable
- MVP scope excludes automatic claim creation, native mobile, multi-tenant SaaS admin, predictive modeling, and imagery-based damage
The solution
A vertical-slice build, hardened after: PostGIS schema and a synthetic Florida portfolio first, then six independently testable CrewAI agents (geocoding, weather, footprint, impact, reporting, supervisor) connected by FastAPI background workflows. A GIS cockpit (Mapbox layers, virtualized impact table, KPIs, drill-down) gives operators a live map and exportable impact package, with an OpenAI tool-calling assistant for grounded Q&A and map navigation under hard token/rate limits.
Architecture
- React/TypeScript/Vite/Mapbox GL frontend with TanStack Query for server state and Zustand for UI state, kept deliberately separate
- Python FastAPI backend under /api/v1/ for uploads, workflow triggers, exports, and org-scoped auth
- Six CrewAI + Pydantic agents coordinating through durable database records, not agent-to-agent messaging
- Supabase Postgres + PostGIS + Realtime + Storage as the source of truth, with spatial RPCs and raster PNGs in event-rasters
- NOAA MRMS/URMA S3 GRIB2 as the primary weather source, with OpenWeather/NWS alerts as fallback
- Anthropic Claude for narrative prose only — every number in every report comes from the database
Product decisions I owned
- Made the database — not agent-to-agent messaging — the orchestration bus, so every run is restartable, auditable, and independently testable
- Switched from NWS zone alerts to full NOAA MRMS/URMA grids, making threshold detection and footprint synthesis measurable and testable
- Built provider abstraction for weather/geocoding early, unlocking parallel frontend and agent work before live APIs were wired in
- Scoped the MVP tightly — CSV/JSON export and a live dashboard close the operational loop; PDF export and claims-system integration wait
Design laws
Six auditable agents coordinate through the database, not each other
The LLM writes the narrative; every number comes from the database
Pipelines are auditable and restartable mid-event
Stack
React · TypeScript · Vite · Mapbox GL JS · FastAPI · CrewAI + Pydantic · Supabase PostgreSQL + PostGIS + Realtime · NOAA MRMS/URMA GRIB2 · OpenAI (chat) · Anthropic Claude (narrative only) · Vercel/Render
Key learnings
- Gridded weather beats alert polygons for impact work — cell counts plus policy materiality make a testable dual trigger
- The database is the orchestration bus — persisting observations, events, footprints, impacts, and agent_runs beats tight agent-to-agent coupling for retries, audit, and independent testing
- Geospatial bugs are product bugs — degree-based ST_DWithin, wrong SRID assumptions, or missing geography casts silently corrupt impact lists; fixtures with known inside/adjacent/outside points are non-negotiable
- Confidence must be first-class — low-confidence geocodes and footprints need review queues and visible labels
- State separation keeps the UI sane — mixing server-state and UI-state libraries makes map-table sync brittle
Screenshots and a walkthrough video are coming.