← All projects

Bornomala

JH26-ZC9R

DU_RJOY · Dhaka · 1 member · Crisis Tech

Bornomala — an offline Bangla SMS codec that fits 5× more crisis information into every text message, on the network a blackout leaves behind.

The problem

In July 2024 the government shut off mobile internet across Bangladesh. Broadband went dark too. What kept working was the oldest part of the phone network: voice calls and text messages. But text messages were never designed for Bangla. SMS uses an old character set that only covers English. A single Bangla letter switches the whole message to a heavier format: English fits 160 characters, Bangla only 70. Speaking your own language costs more than twice as much, and fails more often when towers are overloaded — exactly when texting is all anyone has left. That cost lands on the people least able to carry it. A volunteer checking on forty households pays it forty times, out of prepaid balance nobody can top up. Most crisis apps answer this by building their own network over Bluetooth. That only helps if both people installed the app before the disaster and stand within about a hundred metres of each other. The people you actually need — family in another district, a rescue control room — are nowhere near that. In July, nobody could build a network.

The solution

Bornomala does not build a new network. It uses the one that already reaches everybody — ordinary text messages and phone calls — and makes it cheaper. Every phone in the country can already receive an SMS: nobody installs anything first, nobody has to be nearby, and it works across operators and districts on 2G with no internet. That is the difference from a Bluetooth mesh app. A mesh reaches the room you are standing in. SMS reaches your mother in another district. Normal — make a message smaller. Type in Bangla and live counters show how many messages it would cost to send today, and how many after compressing. A small Bangla language model inside the app predicts what letter comes next, and the better it predicts, the fewer bits are needed to write it down. The result is a short code that fits the cheap 160-character lane. Press Send and your phone's own SMS screen opens, filled in. Paste a code on the receiver side and the Bangla comes back out. Tested on 5,000 messages the model had never seen, 361 Bangla characters now fit in one SMS instead of 70 — 5.15× more. Ordinary compression like gzip does worse than doing nothing, because it has no idea what Bangla looks like. Emergency — for people who do not have the app. Compression needs Bornomala on both sides, and someone on a roof will not have it. So this tab sends plain Bangla words any phone can display. It asks what is happening in your own words, one of 32 ready-made sentences you fill in (how many people, how urgent, blood group, water depth, shelter space), where you are — a district or your live location — and how long ago. It will not send until those are answered, because a report without a place is not a report. Nine official national numbers including 999 sit underneath: one tap to call, one to text with the message already written. Calls need no internet either. Relay — forty families, one message. A volunteer collects reports and sends them together, with a counter showing how many messages that saved. With no network at all, the message becomes a QR code the next phone can photograph. Everything is bilingual, works offline once installed, and never sends anything to us — there is no server to send it to.

Tech stack

Languages: JavaScript (ES modules, no framework, no build step), HTML, CSS. Python 3 for the offline model-training and benchmark tooling. Frameworks and libraries: none in the shipped app. It has zero runtime dependencies — no React, no jQuery, no CDN, no analytics. The only development dependency is jsdom, used to run the interface test suite headlessly. Written from scratch for this project: the Bangla language model (static PPM with backoff, quantised 16-bit integer frequencies) and the integer arithmetic coder driving it GSM-7 septet packing and segment counting the QR encoder — Reed–Solomon over GF(256), all eight masks, no library the 32-sentence phrasebook, the 64-district table, and the bilingual interface Browser APIs used: Service Worker and Cache Storage (offline install), Geolocation (live location), Clipboard, Web Share Target, sms: and tel: URIs for handing messages to the phone's own apps. Pre-trained models: none. The language model is trained from scratch, by us, on public Bangla text. No third-party model weights are used or redistributed. Training data: OpenSubtitles Bangla and a Bangla Wikipedia dump, both publicly available. Cleaning scripts are in corpus/tools/; the corpora themselves are not redistributed here (554 MB). Emergency numbers are Bangladesh's official public short codes (999, 1090, 102, 16263, 333, 109, 1098, 16430, 106). Hosting: GitHub Pages (static files only). Licence: MIT.

AI tools used (section 5 disclosure)

Disclosure: Claude (Anthropic) was used as a coding assistant throughout the 72-hour sprint — writing and refactoring application code, the test suites, this submission pack and the slide deck, and reviewing the project for claims that did not match the code. All architectural decisions, the compression approach, the product direction and every accepted change were the author's. The language model shipped in the app is not an AI-tool artefact: it is trained from scratch by the tooling in tools/train_model.py, and no generative model runs inside the app or is called at runtime. The app makes no network requests of any kind.