Project Info
Overview Resililink is a node-based mesh network leveraging LoRa technology to facilitate communication in disaster-prone regions where traditional infrastructure, such as cell towers and internet services, is unavailable. The system is designed to operate in low-power environments and cover long distances, ensuring that essential communication can still occur when it is most needed. A key feature of this network is the integration of a "super" node equipped with satellite connectivity (via Skylo), which serves as the bridge between local nodes and a centralized server. The server processes the data and sends SMS notifications through Twilio to the intended recipients. Importantly, the system provides acknowledgment back to the originating node, confirming successful delivery of the message. This solution is aimed at enabling individuals to notify loved ones or emergency responders during critical times, such as natural disasters, when conventional communication channels are down. Project
Inspiration
The inspiration for Resililink came from personal experiences of communication outages during hurricanes. In each instance, we found ourselves cut off from vital resources like the internet, making it impossible to check on family members, friends, or receive updates on the situation. These moments of helplessness highlighted the urgent need for a resilient communication network that could function even when the usual infrastructure fails. System Capabilities Resililink is designed to be resilient, easy to deploy, and scalable, with several key features: Ease of Deployment: The network is fast to set up, making it particularly useful in emergency situations. Dual Connectivity: It allows communication both across the internet and in peer-to-peer fashion over long ranges, ensuring continuous data flow even in remote areas. Cost-Efficiency: The nodes are inexpensive to produce, as each consists of a single LoRa radio and an ESP32 microcontroller, keeping hardware costs to a minimum. Development Approach The development of Resililink involved creating a custom communication protocol based on Protocol Buffers (protobufs) to efficiently manage data exchange. The core hardware components include LoRa radios, which provide long-range communication, and Skylo satellite connectivity, enabling nodes to transmit data to the internet using the MQTT protocol. On the backend, a server hosted on Microsoft Azure handles the incoming MQTT messages, decrypts them, and forwards the relevant information to appropriate APIs, such as Twilio, for further processing and notification delivery. This seamless integration of satellite technology and cloud infrastructure ensures the reliability and scalability of the system. Key Challenges Several challenges arose during the development process. One of the most significant issues was the lack of clear documentation for the AT commands on the Mutura evaluation board, which made it difficult to implement some of the core functionalities. Additionally, given the low-level nature of the project, debugging was particularly challenging, requiring in-depth tracing of system operations to identify and resolve issues. Another constraint was the limited packet size of 256 bytes, necessitating careful optimization to ensure efficient use of every byte of data transmitted. Achievements Despite these challenges, we successfully developed a fully functional network, complete with a working demonstration. The system proved capable of delivering messages over long distances with low power consumption, validating the concept and laying the groundwork for future enhancements. Lessons Learned Through this project, we gained a deeper understanding of computer networking, particularly in the context of low-power, long-range communication technologies like LoRa. The experience also provided valuable insights into the complexities of integrating satellite communication with terrestrial mesh networks. Future Plans for Resililink Looking ahead, we plan to explore ways to scale the network, focusing on enhancing its reliability and expanding its reach to serve larger geographic areas. We are also interested in further refining the underlying protocol and exploring new applications for Resililink beyond disaster recovery scenarios, such as in rural connectivity or industrial IoT use cases.
Calhacks 11.0
This is our project for Calhacks 11.0.
We won:
Overview
Resililink is a node-based mesh network leveraging LoRa technology to facilitate communication in disaster-prone regions where traditional infrastructure, such as cell towers and internet services, is unavailable. The system is designed to operate in low-power environments and cover long distances, ensuring that essential communication can still occur when it is most needed. A key feature of this network is the integration of a "super" node equipped with satellite connectivity (via Skylo), which serves as the bridge between local nodes and a centralized server. The server processes the data and sends SMS notifications through Twilio to the intended recipients. Importantly, the system provides acknowledgment back to the originating node, confirming successful delivery of the message. This solution is aimed at enabling individuals to notify loved ones or emergency responders during critical times, such as natural disasters, when conventional communication channels are down.
Project Inspiration
The inspiration for Resililink came from personal experiences of communication outages during hurricanes. In each instance, we found ourselves cut off from vital resources like the internet, making it impossible to check on family members, friends, or receive updates on the situation. These moments of helplessness highlighted the urgent need for a resilient communication network that could function even when the usual infrastructure fails.
System Capabilities
Resililink is designed to be resilient, easy to deploy, and scalable, with several key features:
- Ease of Deployment: The network is fast to set up, making it particularly useful in emergency situations.
- Dual Connectivity: It allows communication both across the internet and in peer-to-peer fashion over long ranges, ensuring continuous data flow even in remote areas.
- Cost-Efficiency: The nodes are inexpensive to produce, as each consists of a single LoRa radio and an ESP32 microcontroller, keeping hardware costs to a minimum.
Development Approach
The development of Resililink involved creating a custom communication protocol based on Protocol Buffers (protobufs) to efficiently manage data exchange. The core hardware components include LoRa radios, which provide long-range communication, and Skylo satellite connectivity, enabling nodes to transmit data to the internet using the MQTT protocol.
On the backend, a server hosted on Microsoft Azure handles the incoming MQTT messages, decrypts them, and forwards the relevant information to appropriate APIs, such as Twilio, for further processing and notification delivery. This seamless integration of satellite technology and cloud infrastructure ensures the reliability and scalability of the system.
Key Challenges
Several challenges arose during the development process. One of the most significant issues was the lack of clear documentation for the AT commands on the Mutura evaluation board, which made it difficult to implement some of the core functionalities. Additionally, given the low-level nature of the project, debugging was particularly challenging, requiring in-depth tracing of system operations to identify and resolve issues. Another constraint was the limited packet size of 256 bytes, necessitating careful optimization to ensure efficient use of every byte of data transmitted.
Achievements
Despite these challenges, we successfully developed a fully functional network, complete with a working demonstration. The system proved capable of delivering messages over long distances with low power consumption, validating the concept and laying the groundwork for future enhancements.
Lessons Learned
Through this project, we gained a deeper understanding of computer networking, particularly in the context of low-power, long-range communication technologies like LoRa. The experience also provided valuable insights into the complexities of integrating satellite communication with terrestrial mesh networks.
Future Plans for Resililink
Looking ahead, we plan to explore ways to scale the network, focusing on enhancing its reliability and expanding its reach to serve larger geographic areas. We are also interested in further refining the underlying protocol and exploring new applications for Resililink beyond disaster recovery scenarios, such as in rural connectivity or industrial IoT use cases.
Packet Specification
syntax = "proto3";
message Packet {
// Unique identifier for the packet (UUID4 format)
string packet_uuid = 1;
// Enum to specify the type of packet
PacketType packet_type = 2;
// Oneof to hold different types of messages
oneof payload {
NetworkMessage network_message = 3;
AckMessage ack_message = 4;
DiscoverMessage discover_message = 5;
AnnounceMessage announce_message = 6;
}
}
// Enum to represent different packet types
enum PacketType {
NETWORK_MESSAGE = 0;
ACK_MESSAGE = 1;
DISCOVER_MESSAGE = 2;
ANNOUNCE_MESSAGE = 3;
}
message NetworkMessage {
// Unique identifier for the node sending the message
string node_id = 1;
// Timestamp for when the message was sent, in UNIX format
uint32 timestamp = 2;
// GPS coordinates (latitude and longitude) of the node (optional)
Location sender_location = 3;
// Actual text message being sent
bytes message_content = 4;
// Destination: could be either a node UID or telephone number
string destination = 5;
}
// Message type for acknowledgment
message AckMessage {
// Unique identifier for the original message being acknowledged
string message_id = 1;
// Unique identifier of the node sending the ACK
string node_id = 2;
// Timestamp for when the ACK was sent, in UNIX format
uint32 timestamp = 3;
}
// Message type for discovery request
message DiscoverMessage {
// Timestamp for when the discover message was sent, in UNIX format
uint32 timestamp = 1;
}
// Message type for node announcement
message AnnounceMessage {
// Unique identifier of the node announcing itself
string node_id = 1;
// Timestamp for when the announce message was sent, in UNIX format
uint32 timestamp = 2;
// Optional location information of the announcing node
Location node_location = 3;
}
// Structure to capture location details
message Location {
double latitude = 1;
double longitude = 2;
}
Architecture

Analysis
View
Metric
No commits on this project resolved to a GitHub account.
Technology
- HTMLIn code
- JavaScriptIn code
- PythonIn code
- ReactClaimed
3 of 4 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
703 KB
Source files
16
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
12458/calhacks
20 files · 785 KB · @ 1bb26dd
Structure
Interface
1 file · 5%Screens, components and styles rendered to the user.
Application logic
13 files · 65%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- JavaScript89%
- Python9%
- HTML1%
- Markdown1%
Share of indexed source by file size. Binary and vendored files are excluded.
Feature verification
AES message encryption/decryptionVerified
Messages are encrypted in transit and decrypted at the server
Claimed on readmehigh confidencesuper_node/chat.py:30— aes_encrypt/aes_decrypt implement AES-CBC with PKCS7 padding and random IVrelay_server/relay.py:42— server aes_decrypt reverses the CBC encryption on received content
LoRa long-range radio communicationVerified
Nodes communicate over long distances using LoRa radios (RYLR998)
Claimed on Devposthigh confidencesuper_node/rylr998.py:54— RYLR998 driver issues AT+SEND/AT+PARAMETER/AT+BAND commands over serial to a LoRa modulesuper_node/chat.py:70— initialize_lora sets address, network id, RF parameters and band on the RYLR998 radio
Message acknowledgment back to senderVerified
System provides acknowledgment back to the originating node confirming delivery
Claimed on Devposthigh confidencesuper_node/chat.py:177— send_ack builds an AckMessage packet referencing the received packet_uuid and transmits itsuper_node/chat.py:156— process_ack_message marks the acknowledgments dict True when an ACK is received
Node discovery and announcementVerified
Nodes discover peers on the mesh network
Claimed on Devposthigh confidencesuper_node/chat.py:190— send_discover_message/send_announce_message and process_discover/announce handlers implement discovery, retransmit announces and populate discovered_nodes
Protocol Buffers custom protocolVerified
Custom communication protocol based on protobufs manages data exchange
Claimed on readmehigh confidencesuper_node/spec.proto:3— proto3 definitions for Packet, NetworkMessage, AckMessage, DiscoverMessage, AnnounceMessage, Locationsuper_node/chat.py:94— spec_pb2 messages are constructed, SerializeToString'd and ParseFromString'd for over-the-air packets
Twilio SMS notification deliveryVerified
Server sends SMS notifications to intended recipients through Twilio
Claimed on Devposthigh confidencerelay_server/relay.py:115— send_sms instantiates twilio.rest.Client and calls messages.create with body/from_/to
Web chat user interfaceVerified
Users compose and send messages through an interface
Claimed on Devposthigh confidencenormal_node/web_chat.py:17— Flask+SocketIO app exposes send_message/discover handlers wired to the LoRa chat modulenormal_node/templates/index.html:13— HTML UI with message/destination inputs and send/discover buttons
256-byte packet chunking optimizationCode-supported
Careful optimization for the 256-byte packet size limit
Claimed on readmelow confidencerelay_server/relay.py:59— split_message chunks server responses into 45-byte pieces before sending, indicating size-constrained transmission, though no explicit 256-byte enforcement exists
Duplicate packet suppression / mesh relayingCode-supported
Node-based mesh network relays messages peer-to-peer over long ranges
Claimed on Devpostmedium confidencesuper_node/chat.py:124— received_packets set deduplicates by packet_uuid; discover/announce packets are retransmittedsuper_node/chat.py:141— process_network_message retransmit path exists but the actual send_packet retransmit call is commented out, so network-message relaying is not fully wired end-to-end
GPS location captureCode-supported
Nodes include GPS coordinates (latitude/longitude) in messages
Claimed on Devpostlow confidencesuper_node/spec.proto:34— NetworkMessage defines optional sender_location (Location) fieldnormal_node/templates/index.html:25— UI provides latitude/longitude inputs and Get Current Location; however send_message in chat.py never populates the protobuf location field, so it is not wired end-to-end
Server-side MQTT ingestion, decryption, and forwardingCode-supported
Azure server handles incoming MQTT messages, decrypts them, and forwards to APIs like Twilio
Claimed on readmemedium confidencerelay_server/relay.py:128— paho MQTT client connects to broker, subscribes, and on_message parses the packet, AES-decrypts content and dispatchesrelay_server/relay.py:66— on_message decrypts NetworkMessage content and routes to SMS or Gemini; no Azure-specific hosting code present
Super node MQTT-over-modem (Skylo) uplinkCode-supported
A super node with Skylo satellite connectivity bridges local nodes to the server using MQTT
Claimed on Devpostmedium confidencesuper_node/skylo.py:110— SerialWrapper issues AT%MQTTCFG/AT%MQTTCMD modem AT commands to configure, connect, subscribe and publish MQTT over a cellular/satellite modemsuper_node/chat.py:154— relay SMS packets are published to MQTT via wrapper.mqtt_publish through the modem
ESP32 microcontroller nodesClaimed only
Each node consists of a single LoRa radio and an ESP32 microcontroller
Claimed on Devpostmedium confidenceMicrosoft Azure server hostingClaimed only
Backend server hosted on Microsoft Azure
Claimed on readmemedium confidenceReact + Vite frontendClaimed only
Built with react and vite
Claimed on Devposthigh confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.