← All projects
Bornomala
JH26-ZC9RDU_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.