Inspiration

Seelawathie is 78. She uses a wheelchair. Tonight the water is at her door, and she cannot climb onto the roof.

Her granddaughter sends a WhatsApp message. Her daughter, in another town, sends another. A neighbour forwards a third. Two hours later, her grandson texts: "Water is now waist deep inside. Still 2 of us, grandmother and me."

On the duty officer's desk, that's four messages and three phone numbers. It looks like four different emergencies. And somewhere in the same pile, a mother is typing that her six-year-old's inhaler has run out. Her message sits below all four.

That's the real crisis. The problem isn't a lack of information. It's too much of it, and none of it connected. When Cyclone Ditwah and the floods that followed hit Sri Lanka, we watched the same thing happen over and over: alerts, hotlines, WhatsApp groups and NGO efforts, each working alone. Officers called the same family again and again while others waited. Fake "Ministry" appeals asked frightened people for OTP codes and bank deposits.

In a crisis, everyone wants to help. They just can't see each other. We built CrisisConnect so that nobody gets lost in the noise.

What it does

CrisisConnect puts every SOS in one trusted queue.

  • Merges: messages from SMS, WhatsApp, hotlines and the web, in English, Sinhala, Tamil and Singlish, become one verified household record when they share a phone number, a full name or a house.
  • Ranks: the most vulnerable come first. Elderly people, children, medical cases and pregnant women rise to the top, and every rank says why in plain words.
  • Verifies: a division officer claims the case and confirms it by phone. A missed call never counts as verification.
  • Delivers: relief requests go to registered groups that offer what's needed in that area. If one declines, the request moves to the next. When help arrives, the family can see it.
  • Protects: citizens can paste a suspicious appeal and check it against official bulletins and the relief registry before they pay or share it.

It has four portals (Citizen, Division Officer, Relief Group and District Coordination) that all share one picture of the crisis.

How we built it

CrisisConnect is written entirely in Jac and runs on Jaseci, backend and frontend alike.

A household in a crisis is a graph: messages, phone numbers, names, calls, relief requests and appeals, all connected. So we built on one. Everything lives in a persistent graph anchored on root.shared:

  • A Blocker walker hops from each new message to its phone and name nodes to find candidate households.
  • A Resolver walker uses visit [->:Candidate:->] by llm to let the model choose the most plausible household. A typed by llm function then scores that match independently.
  • Typed by llm functions, guided by sem notes, handle intake, matching and relief choices, and return structured objects rather than free text.
  • Referee rules in plain Jac (R1–R14) decide what can actually be written. A model can never lower the priority of a medical, child or elderly case. A case can't be confirmed without a logged call. Rumours never enter the call queue. Model tools are read-only.
  • Every change is saved as a Decision node recording which agent acted, what it did and why. commit() makes each finished unit visible to every portal at once.

Our principle fits in one line: AI proposes. Rules referee. People decide.

Challenges we ran into

  • Same name, different family. Two Perera households on nearby roads are not the same people. A wrong merge can hide a whole family, so we taught the system that a shared surname or road is never enough.
  • Four languages in one night. Sinhala, Tamil and Singlish messages had to land in the same fields as English ones, including names spelled differently in different scripts.
  • Scams without false accusations. We had to flag dangerous appeals without ever calling an unverified appeal a scam on its own.
  • Keeping AI honest. We kept asking: what if the model is wrong? Every answer became a rule, a human checkpoint or an audit trail.

Accomplishments that we're proud of

On a 94-message storm night we wrote to test it:

  • 94 messages became 40 real households
  • 24 repeat calls avoided: 24 more calls for someone still waiting
  • 100% merge precision: no two families were wrongly combined
  • 0 messages failed to process, at a median of 1.4 seconds per message

To be honest about these numbers: this is our own development set, not an independent benchmark. We deliberately chose precision over recall. A missed merge costs one extra phone call. A wrong merge could cost a life.

What we learned

The hardest part of crisis response isn't technology. It's trust. Officers need to know why the system ranked a case first. Citizens need to know their message was heard. Relief groups need to know a request is real.

We also learned that graphs are a natural fit for crises: connections are the data. Jac let us write the AI, the rules and the interface in one language, close to how we think about the problem.

What's next for CrisisConnect

  • Pilot with one divisional secretariat and its Grama Niladhari officers
  • Verified registries of real relief groups, accounts and official bulletins
  • Real channels: an SMS short code, WhatsApp Business and hotline intake
  • Authenticated roles for every portal
  • Beyond floods: landslides, cyclones and any crisis where people need to be found, verified and reached

Because somewhere, someone is typing "please help" right now. They deserve to be heard the first time.

Built With

Share this project:

Updates

Submission history