⚠️ NOTE: Please check out our technical report!. It's got a ton of great information about the algorithms we're using to avoid jamming / compress messages based on semantics / discover new nodes / etc. It's super cool stuff!
Inspiration
LifeLink is inspired by a simple belief: communication should not disappear when infrastructure does. In disasters, blackouts, and conflict zones, people are often left isolated at the exact moment information matters most. This project is a response to that gap. We envision a low-cost, citizen-built mesh network that helps communities share urgent updates, verify what’s real, and coordinate safely without relying on towers, internet providers, or centralized control. LifeLink exists to turn resilience into something ordinary people can deploy themselves with no technical ability.
What it does
LifeLink is a decentralized emergency communication system that keeps communities connected when traditional infrastructure fails. Using low-cost LoRa nodes and a simple interface on a user’s bluetooth connected device, it enables multi-hop messaging without internet or cell service, prioritizes urgent traffic, and uses trust-based verification between nodes to limit misinformation. Additionally, first-responders can see the hotspots and mesh on a custom app to know where to send help and add new bridge nodes to the grid. To show production level capabilities the project includes a deterministic network simulator that models RF propagation, multi-channel interference, capture effect, FTM-based localization, and adversarial scenarios (jammers, Sybil attacks, blackholes), allowing reproducible testing of delivery rates, collisions, and trust-graph resilience on hundreds of nodes.
How we built it
We approached this as a full-stack hardware/software challenge. On the hardware side, we built solar-powered nodes using ESP32-S3 microcontrollers with LoRa transceivers and CN3065 charge controllers for off-grid operation. For the protocol, we wrote a custom Layer 3 mesh in C++ with epidemic gossip for neighbor discovery and geographic-gradient forwarding for decentralized routing. To maximize LoRa's limited bandwidth, we trained a lightweight decision tree classifier that runs on-device to compress natural language into structured payloads, saving over 90% of airtime. For trust, we implemented a bandit routing algorithm that takes advantage of the decentralized properties of the mesh, ensuring corroboration of information. For the laptop visualizer application (Next.js + Leaflet), each node is able to approximately triangulate its position relative to others using SNR, allowing first responders to find people that need help and to find locations to expand the network. Finally, we built a physics-accurate browser simulator (Next.js + Leaflet) that models signal propagation, capture effects, and collisions, letting us stress-test the protocol without jamming real radios.
Challenges we ran into
This is gonna be a pretty long list.
Firmware: Concurrency bugs when building a layer on top of Bluetooth Packet drop issues on LoRA Many distributed systems design issues Properly maintaining membership list of mesh network
Simulation Software: When you program for collision and other effects, it actually makes the whole network fall apart really easily. For a long time we assumed it was a bug, but really the whole network did in fact need tuning for TTL and package size, showing the simulation’s use!
Hardware: Turns out JST connectors don’t standardize which side is positive and which is negative. We learned that lesson when we plugged in a lipo batter the wrong way into a solar charger circuit and nearly blew the whole thing sky high. It was ridiculously hectic in the PRL so we were in there almost constantly trying to snag open printers to print out as many nodes as possible. We didn’t get the right lipo charger so we had to make do with what we had (For some reason the batteries got shipped fully charged?) Our amazon shipment got lost in the package room so we just couldn’t do much beyond the sim for a day and a half Basically none of the stated dimensions on the amazon website for parts were correct so we had to redesign the board on the fly
Accomplishments that we're proud of
Managing to orchestrate such a large and technically complex project (Hardware, EE, high and low level software) and get it to work! Somehow finding a way out of every issue we found ourselves in, from missing parts to race conditions. Battle tested our system on hundreds of nodes in simulation and with a real network right outside the Jen-Hsun Huang building. End-to-end message delivery across LoRa mesh + BLE phone interface: a user can type on their phone and have the message hop across multiple ESP32 nodes On-device ML inference: the custom-trained decision tree classifier runs directly on the ESP32, compressing natural language into structured packets in real-time Physics-accurate simulator with adversarial testing: models capture effect, multi-channel interference, jammers, Sybil attacks, and blackhole nodes Gossip protocol convergence: nodes discover the full mesh topology within seconds using epidemic heartbeats, with no central coordination Solar-powered off-grid operation: nodes stay alive indefinitely without grid power
What we learned
We explored new topics in RF with both firmware issues and creating the physics simulation for a massive node network. Creating an end-to-end system across multiple communication protocols (BLE + LoRa), proved difficult to manage message processing/resilience bug-free (too many packets were lost to the void 🙁).
Additionally, reading about the many different conflicts and issues that RF has in real life for our physics simulation has made us all far more interested to explore the field in the future!
What's next for Lifelink
We're exploring a custom PCB that consolidates the ESP32 and solar charge controller into a single board to reduce cost and size at scale. We have an initial design but need additional time to manufacture it. On the firmware side, the browser simulator now includes features that haven't been ported to the ESP32 yet: trust-based routing with peer verification, Thompson-sampling bandit tracking for adaptive path selection, and geographic-greedy forwarding. Bringing these from the simulator into the C++ firmware is the next major integration step. Additionally we would like to harden the reliability even further and do additional range testing.
Built With
- additive-manufacturing
- ble
- cpp
- lora
- nextjs
- platformio
- python
- pytorch
- tailwind
- typescript

Log in or sign up for Devpost to join the conversation.