Nongor
Offline crisis companion for Bangladesh floods. Signed phone-to-phone SOS, flood-avoiding shelter routing, first aid and emergency translation for six languages Google Translate doesn't carry — no internet, no server, no account. Gemma 4 runs on the handset.
Install / Use
npx skills add AuvroIslam/NongorInstalls into whichever agent you are using.
README
An offline crisis companion for Bangladesh
No internet. No account. No server. No signal required.
Nongor (নোঙর) means anchor — what holds when everything else is moving.
</div>Nongor keeps flood victims and volunteers connected with no internet: signed phone-to-phone SOS, offline shelter maps, first aid and triage, AI on-device.
<div align="center">
▶ Watch the demo
youtu.be/9GsZ_ATN0ZQ · 3 minutes · recorded in aeroplane mode
Read the slide deck (PDF)
⬇ Install it
Download the APK · 32 MB · Android 12+
No sign-in and no first-run download — everything except the optional AI works the moment it opens.
And the person on the other end never needs it. With no peer in range an SOS collapses into one 160-character SMS that reads on a button phone; with no data network at all, 999 and the official BD short codes are bundled in the APK and dial straight from the app.
</div>Why this exists
Two Julys
In July 2024 we lost close to 1,500 brothers and sisters. And while it was happening the state cut the internet, so the country could not see it, could not count it, and could not call for help. What survived was the oldest layer of the network — 2G voice and SMS — and whatever two phones could say to each other directly. যোগাযোগ · Jogajog, people relaying for each other with no infrastructure in between, is the reason this hackathon exists.
July 2026. Fifty-one more. Not to firing this time. Not to a dictator. To water.
<img src="GithubSlides/2.png" alt="51 people died in Bangladesh floods this July alone. 39 injured, 1,000,000+ affected, 7 districts." width="100%">Those are the confirmed figures from Bangladesh's Ministry of Disaster Management for July 2026 alone (BSS). Cox's Bazar lost 28 people, Chattogram 13, Bandarban 6, Rangamati 3, Moulvibazar 1.
Two different Julys, one thing in common: when it mattered, the network was not there. In 2024 it was taken away on purpose. In 2026 the towers went under with everything else. A blackout does not need a government — and it does not care which one it was.
So Nongor assumes it is gone. No server, no account, and no point at which the app asks the internet for permission to help you.
Bangladesh's disaster response is not short of helicopters or volunteers. The gap is the last two hundred metres — where a rescuer physically reaches a person and still cannot help.
<img src="GithubSlides/3.png" alt="The Last 200 Meters — the districts that lost the most people are exactly where Rohingya, Chakma, Marma and Kokborok are spoken." width="100%">Read that casualty list against a language map. The districts that lost the most people — Cox's Bazar, Bandarban, Rangamati, Khagrachhari — are precisely where Rohingya, Chakma, Marma and Kokborok are spoken. Cox's Bazar alone holds the world's largest Rohingya settlement.
A volunteer from Dhaka reaches a family there and cannot ask "are you hurt?". Google Translate carries none of those languages, and would need a tower if it did.
That is the shape of the problem Nongor is built around.
What it does
<img src="GithubSlides/4.png" alt="Nongor home screen in Bangla, captured in aeroplane mode." width="100%">Every screenshot in this README was captured in aeroplane mode, on a ৳8,000 handset. That is the design constraint, not a marketing line.
Emergency Translation
<img src="GithubSlides/5.png?v=2" alt="Emergency Translation — 127 phrases, 276 sourced lines, 6 languages." width="100%">No offline translator covers these languages, so Nongor does not pretend to be one. It ships a fixed set of the questions that matter in a rescue — 127 phrases, 276 sourced translation lines, six languages — and makes the conversation completable even where the phrasebook is silent.
| | Chakma | Rohingya | Kokborok | Santali | Marma | Garo | | --- | ---: | ---: | ---: | ---: | ---: | ---: | | sourced lines | 51 | 50 | 50 | 50 | 39 | 36 |
The hand-over card is split down the middle and the top half is drawn upside down: lay the phone flat between you and the other person reads their half across it. Every phrase carries a pictogram and a tap-reply — Yes / No / Don't know, a number pad, a 1–5 pain scale, a body-part list — so the exchange completes even when there is no line at all for that language. That is the real innovation: the fallback is not a worse translation, it is a protocol that needs no shared language.
Ten guided questions build a structured hand-over note — bleeding: yes, breathing: no, four people, one child — triaged by the same engine as the rest of the app and sendable straight over the mesh. A volunteer who speaks no Chakma still walks away holding a medical record.
On the minority-language lines. Bangla and English are authored. Everything else is either drawn from a published corpus (MELD, GATITOS, both CC BY 4.0) and shown with the English sentence it was actually translated from, or marked যাচাই হয়নি · unverified every single time it appears. Neither is presented as verified, and the pictogram protocol never depends on either. Details in
docs/PHRASEBOOK.md.Gemma is never used to translate these languages. It has almost no training data for them and would produce fluent, confident, wrong output — the one failure mode a rescue phrasebook cannot have. Where the model is installed it does one narrow job: reading a free-text description and picking which existing phrases to show. It selects ids; it never writes a word of any language, and a hallucinated id is discarded.
SOS — mesh, then SMS
<img src="GithubSlides/6.png" alt="SOS: mesh + SMS. Ed25519-signed, relayed phone to phone, with an outbox and a 160-character SMS fallback." width="100%">Hold the button and the phone sounds a siren and pushes an Ed25519-signed SOS to every Nongor phone in Bluetooth / Wi-Fi Direct range, relayed onward hop by hop. Forged envelopes are quarantined, never merged into the trusted set — a fake report must not be able to distort rescue priority.
Nobody in range? It goes to an outbox and flushes the moment a peer appears; "queued" never silently means "lost". No data network at all? The same SOS collapses into one 160-character SMS line that reads on a button phone and can be pasted back into Nongor at the other end.
When someone actually opens your SOS, you find out — a signed read receipt travels back over the same mesh. The screen is careful about what that means: your message got through, not help is coming.
And when it is over, you can say so. "I am safe now" stops the alarm and pushes a signed stand-down along the same relay, so every phone that heard the call learns it has ended. In a flood the scarce resource is boats and people; a rescuer steering toward an SOS that was resolved an hour ago is capacity taken from someone still waiting. Cancelling has to travel as far as the call did.
Two details that matter. The stand-down is its own green button rather than a second meaning for the red circle — someone shaking on a roof should not have to work out that "STOP" is the thing that tells their family they are alright. And the call stays on the log, marked resolved, rather than vanishing: a responder already moving needs to see it was stood down, because "it disappeared" and "they are safe" are very different things.
The map reads the board
<img src="GithubSlides/7.png" alt="Dijkstra flood-avoiding routing over OpenStreetMap graphs, 9,525 shelters across all 64 districts." width="100%">9,525 shelters across all 64 districts, with flood-avoiding pedestrian routing (Dijkstra over real OpenStreetMap road graphs) in the detailed packs.
The part that makes it more than a map: a neighbour posts "this road is blocked" to the community board over the mesh, and the map assistant takes that into account when you ask for a safe route. Local knowledge, minutes old, with no internet in the loop.
And the neighbourhood can correct itself. Every report carries "I see it too" and "Not what I see". Votes are signed and spread over the same mesh, and the counts reach Gemma with the report — so the assistant can say "four people nearby confirm this", or flag that a claim is disputed more than it is confirmed and refuse to route you on it alone. One eyewitness is a claim; five who walked past the same road is close to a fact, and five who say the road is fine is a reason to doubt it.
Deliberately not a like button. A thumbs-up says how you feel; nobody's feelings should move a rescue route. And votes are stored as sets of signed voter identities, not counters, so a vote relayed over two hops cannot count twice and a single handset cannot manufacture a cons
Related Skills
node-connect
385.5kDiagnose OpenClaw Android, iOS, or macOS node pairing, QR/setup code, route, auth, and connection failures.
blender-python-addon
40.5kBlender Python add-on rules for operators, panels, properties, registration, testing, and API-safe scripting
flutter-development-guidelines-cursorrules-prompt-file
40.5kCursor rules for Flutter development with MVVM architecture, Riverpod state management, Material widgets, and Dart style guidelines.
commit-push-pr
140.7kCommit, push, and open a PR
