Off-grid municipal commerce: payments, delivery dispatch, and asset tracking that
keep working when the internet doesn't — on a license-exempt LoRa mesh.
Sales, Thai VAT receipts, and PromptPay QR — fully offline, synced when a link returns.
Off-grid dispatch
Optimal driver↔job assignment delivered over the mesh — no cellular required.
Disaster mode
Missing-person priority traffic outranks commerce, with dual-signature government control.
The market, mapped venue by venue
Every dot is a real Udon Thani business (PII-stripped).
Gold pins are venues our own discovery adds beyond public sources.
Food & drink — 3,542 · ★910
Shops & other — 758 · ★97
Lodging — 478 · ★5
Bars & nightlife — 198 · ★30
Attractions — 102
Spa & massage — 76
Shows & fun — 10
Total 5,164· ★1,042 our discovery adds
Live version: the planner's Venues overlay —
toggle ★ Our data to see public data alone.
One dataset, three products
Multi-source discovery, one pipeline: public business listings and open map data,
deduplicated by name-similarity + distance into a single merchant graph.
★ 1,042 venues (+25%) our own discovery adds beyond public sources — and the
pipeline keeps scanning.
Every venue becomes a dispatch destination, a coverage-planning demand point, and a
merchant lead — the same asset works three ways.
Venue records carry no personal fields — name, position, category only.
3,542
food & drink (★910 ours)
478
lodging
198
bars & nightlife (★30 ours)
946
attractions · spa · shops · shows
One gateway brain, three surfaces
🏪 Merchant POS (PWA)
Offline ledger, Thai VAT (ใบกำกับภาษี), PromptPay QR, Ed25519-signed sync. Works on any phone.
🏍️ Driver dispatch
Optimal assignment (Hungarian solver) over real road ETAs, delivered per driver over IP or mesh — with idempotent acks. Built end-to-end.
📡 Mesh + IoT
920–925 MHz LoRa: every frame encrypted (ChaCha20-Poly1305, per-node keys), SX1262 driver built with the legal power/duty limits in the type system. Real silicon is the last mile.
Routing stack: offline OpenStreetMap engine (live-verified in CI — real Udon Thani
tiles, graceful fallback) + time-of-day traffic learned from our own fleet and mesh —
no Google dependency, no per-request fees.
Everything up to the antenna is built and tested today: 300+ automated checks; the
radio driver runs byte-exact against a scripted chip; the full dispatch loop runs under a
simulated RF channel (collisions, capture, replay) on every commit.
Part II · The commercial platform — live today
krobjob.com
“Sell direct. Keep more of every baht.” — commission-free ordering, POS, and Thai
tax compliance for bars & restaurants, live at krobjob.com. Founding merchants
pay 0%, locked in, vs the up to ~30% delivery apps take on standard contracts.
founding commission, locked — ฿0 setup, live in a day
v0.7
deployed on Vercel · 73 back-office screens, 38 modules
EN + TH
bilingual by construction — customer pages, POS, admin
59,493
businesses in the acquisition database · ~19.4k reachable · 77 provinces
KrobJob is a project of its own scale — it now has its own full section of this
showcase: the story, the product tour, the acquisition machine, and the honest roadmap →
open the KrobJob story.
Compliant by design — verified against the primary law
≤ 50 mW e.i.r.p., SDoC self-declaration tier — enforced in software on every device. Duty cycle ≤ 1%/hr per device (10%/hr on the 20-channel FHSS path) — read from the Royal-Gazette text, not assumed.
กำลังส่ง ≤ 50 mW · รอบการส่ง ≤ 1%/ชม. ต่ออุปกรณ์
Privacy (PDPA)
Edge anonymization: only aggregate integers leave a node — enforced by a compile-time guardrail. Venue data carries no personal fields.
The radio math is done — and adversarially verified
Naive config: a 30-node pilot saturates one channel — 2 of every 3 messages collide,
and relays exceed the legal duty limit.
Our capacity ladder — multi-channel FHSS, smart data-rates, event-driven traffic —
buys ~60× headroom: the same pilot drops below 1% load.
Every number cross-checked by independent review agents against the Semtech airtime
formula and the Thai regulation.
Proven on real ground: a full simulated business day (239 orders) over ITM/Longley-Rice
terrain from the actual mast site — 100% delivery, re-verified in CI on every commit.
Proven on real silicon: a live multi-node contention campaign on 8 SX1276 radios
(FIT IoT-LAB testbed) — collision/capture measured across 300 rounds; real hardware held up
better than our model, so we tightened the model to match. The transport works.
100%
pilot-day delivery on real terrain, CI-gated
8 radios
real-hardware contention test — capture 95–99%
60×
capacity headroom, ~$100 of gateway hardware
Beyond commerce · the dormant gates the proven transport opens
One proven mesh. Many public goods.
The hardware test didn't just validate delivery dispatch —
it validated the transport: a sovereign, offline, encrypted, legal-by-construction
multi-node radio network. Commerce is the first tenant. The wire protocol reserved room for
the rest from day one — each is a payload on a transport that now demonstrably works, on the
same ~$150 gateway + ~$30 nodes, no new radio layer.
A network whose entire point is
to work when the internet is down is a warning network. Weather-warning + missing-person
priority frames (types 4, 7) and dual-signature government override already exist in the
protocol. Isaan's floods are the origin story.
⛈️ Weather & environment
Aggregate sensor telemetry — temperature,
rainfall, river level, air quality — as PDPA-clean integers. Frame types 5–7
(density / weather observation / weather warning) are reserved and byte-budgeted today.
👥 Crowd & traffic density
Density sampling (type 5) from
the mesh itself — event safety, market footfall, corridor congestion — with no personal data
ever leaving a node (the compile-time PDPA guardrail).
⚡ Energy & micro-grid telemetry
Grid-anomaly frames
(type 3, a grid_delta_ma field) for off-grid solar/battery monitoring,
load-shedding signals, and theft/outage detection where there is no smart-meter backhaul.
🎯 Search & asset tracking
Target-tracking frames
(type 2) for livestock, high-value assets, or search-and-rescue tags — long-range,
battery-frugal, and independent of cellular coverage.
🚁 Mobile & aerial relays
Drone- or vehicle-borne nodes extend
coverage on demand — flood-zone survey, temporary event mesh — riding the same
duty-gated FHSS transmit path and the same driver. Furthest gate; clearest once nodes fly.
Reserved in the protocol today, not yet
productised — but each is a municipal-scale public good the same infrastructure unlocks, and
each is a reason a government partner funds the mesh before a single order ships.
Where we are, what's next
Built & tested (software-complete)
Authenticated gateway with persistence · encrypted mesh wire (ChaCha20-Poly1305,
byte-identical across Rust, Go, and OpenSSL) · SX1262 radio driver with the legal
power/duty limits enforced at compile time · full dispatch loop closed under a simulated RF
channel, then validated on 8 real SX1276 radios (FIT IoT-LAB) · offline OSM routing
live-verified in CI · offline POS with Thai VAT + PromptPay · 300+ automated checks.
Pilot corridor: validated on real terrain
The planned mast site was run through ITM/Longley-Rice terrain propagation
(30 m grid, 95/95 confidence); the 20-merchant corridor delivered 100% of a simulated
business day (239/239 orders) — a result the CI gate now re-proves on every commit.
Placement is frozen; a ~$200–300 cable bench (real SX1262 silicon over coax +
attenuators, zero airwaves) is the one remaining step before the field pilot.
Step
What
Cost class
Done
Pilot simulated end-to-end on real Udon Thani terrain — 100% delivery, CI-gated
$0
Now
Cable bench: real SX1262 silicon vs the calibrated sim (attenuator rig, no airwaves)
Mesh (Rust, Radxa Zero 3W + SX1262): SecureMeshFrame v1 — every frame
ChaCha20-Poly1305-encrypted under per-node/direction/epoch keys, ≤31 B on air, replay-window
checked · SX1262 driver (byte-exact scripted-chip tests) with a compile-time power
clamp and a type-level airtime-permit TX gate · 24-channel FHSS · loop closed under a
simulated PHY (loss, collisions, capture) in CI; real silicon is the remaining seam.
Calibration without GPS or Google: mesh node contacts → corridor speeds → hourly
traffic profile (medians within ±5% at 10–20 passes, simulated).
Appendix · technical diligence
Airtime & capacity (verified numbers)
Constraint
Value
Source
Legal duty cycle (<50 mW)
1%/hr per device (36 s)
NBTC TS 1033-2560 §2.3.1 (primary text)
FHSS path (≥20 ch, ≤0.4 s dwell)
10%/hr — still license-exempt
§2.3.2
Frame airtime, 24 B
61.7 / 205.8 / 823.3 ms @ SF7/9/11
Semtech ToA formula
Usable channel operating point
G ≲ 0.10–0.15 (pure-ALOHA survival e−2G)
collision math
Capacity ladder
8ch × ADR 2.5× × cadence 3× ≈ 60×
docs/CHANNEL-CAPACITY.md
No dwell / LBT mandates in Thailand
duty-cycle or FHSS only
verified vs RP002 + ARIB + NBTC
Pilot corridor on real terrain (ITM, 30 m)
100% delivery · worst link 138 dB with ~10 dB SF9 margin
testdata/pilot_links.json + CI gate
Appendix · technical diligence
How we verify
300+ automated checks (gateway incl. RF-simulation + pilot gate · POS 71 · Rust mesh
& radio 73+ · tools) in CI with security scanning and a changelog-enforced release gate.
Byte-exact cross-language fixtures: the frame codec (Rust = Go), the crypto
(Rust = Go = OpenSSL), and the airtime/hop math (Rust = Go = independent Python) each replay
the same committed vectors in CI — drift between languages fails the build.
Live engines, not just mocks: the routing stack is verified against a real Valhalla
engine on real OSM tiles in CI (including the fallback drill), and the pilot gate replays a
real ITM terrain export on every commit.
Adversarial review workflows: independent agents recompute every airtime claim,
attempt to refute regulatory findings against primary sources, and Monte-Carlo the demo
numbers before they ship.
Design docs as decisions of record — routing, dispatch, calibration, capacity,
airtime law, pilot ladder — each with verification sections.
Krobjob Grid · Sovereign Airwaves
NBTC ≤50 mW ✓920–925 MHzpilot ✓ real-terrain 100%★ +1,042 via our discoveryKrobJob story →Hardware →Live planner →← → navigate · Home/End jump