Inspiration A campus facilities team gets a rainfall reading and asks a very practical question: should we check the drainage? Weather data is everywhere, but it rarely connects to an operational decision anyone can act on. We wanted to close that gap — turn station observations into a documented, reviewable inspection decision instead of another dashboard people glance at and ignore. What it does CrisisWatch AI replays a JKUAT Conduit weather export, estimates trailing 24-hour rainfall from the cumulative rainfall counter, and compares it against an adjustable inspection threshold. When a reading crosses the line, a proposed facilities user can save a historical drainage-inspection drill — with the source fingerprint, observation, threshold, and calculation evidence attached. Outcomes and follow-up notes append to history, and the whole thing exports as an evidence brief. A separate dashboard aggregates external crisis reports (GDACS, USGS, NASA FIRMS, ReliefWeb, WHO, ACLED, Open-Meteo) with a provider-health panel. It's a deterministic workflow — not a hype-driven flood predictor. How we built it

  • Backend: Python 3.12, FastAPI, SQLAlchemy + SQLite, pandas for the rainfall calculations, httpx for provider ingestion.
  • Frontend: Next.js, React, TypeScript, Tailwind, React-Leaflet for maps, Recharts for charts, TanStack Query for data fetching.
  • Data: The 2,943-observation Conduit export (Apr–May 2026) plus seven external crisis feeds with background refresh, dedup, and bad-row isolation.
  • ML: Experimental severity/text classifiers, forecasting and clustering — with fallbacks so the core workflow never depends on model availability.
  • Tests & CI: Unit suites for counter resets, gaps, window boundaries, dedup and source-hash validation; GitHub Actions CI. Challenges we ran into
  • Counter semantics: rainfall is inferred from increases in a cumulative counter — resets, invalid values, and long gaps all had to be detected or the estimate would silently mislead. Missing history intentionally withholds an assessment.
  • Provenance honesty: the CSV has no station ID, coordinates, or embedded proof of origin. We built source-hash fingerprinting and refused to claim organizer-approved eligibility or live API access we don't have.
  • Seven flaky external feeds: every provider behaves differently; we built per-adapter health reporting so failures are visible instead of silent. Accomplishments that we're proud of
  • A defensible, transparent rainfall calculation with an adjustable threshold and full evidence trail.
  • A complete drill workflow: assign owner + location, save evidence, append outcomes, export a brief.
  • Clean separation between deterministic station evidence and experimental ML — no overclaiming.
  • Engineering hygiene: XSS escaping, source-hash validation, duplicate prevention, and a passing test suite. What we learned
  • Honesty is a feature: stating what a system does not prove builds credibility with judges and users.
  • The hard part of climate-tech isn't modeling — it's messy, unverified field data and turning observations into decisions people can document and trust. What's next for CrisisWatchAI
  • Validate thresholds and response procedures with real facilities staff and run a pilot.
  • Verify CSV provenance and negotiate data rights with JKUAT Conduit.
  • Add user-level authorization, migrations, and durable scheduling for shared deployment.
  • Connect inspection outcomes back into the dashboard as feedback.

Built With

Share this project:

Updates

Submission history