AMT
Back to Projects

SAPOT Platform

A LAN-first communication platform enabling reliable data sync and coordination for emergency response and remote areas without internet access

Jan 2026 - PresentFull-Stack Developer
Next.jsArduinoDockerGitHub ActionsGitHubWebRTCReact NativeExpoJestPytestEASFigmaSentryLayered ArchitectureFeature-First Architecture

Problem

During disasters or in remote areas where internet and cellular infrastructure is unavailable, teams and individuals still need a reliable way to communicate, coordinate, and share information.

Goals

  • Develop a robust mobile application capable of functioning seamlessly both with and without a central server
  • Implement offline-first capabilities to ensure reliable communication for on-the-ground responders during internet outages
  • Design a user interface that gracefully transitions between online and offline modes without disrupting the user experience
  • Integrate local networking protocols to facilitate peer-to-peer data synchronization and communication when a server is unreachable

Approach

Mobile Client

Designed a React Native mobile application for on-the-ground rescuers

Development Workflow

Elevated development speed and collaboration by heavily utilizing GitHub features, including Actions for CI/CD, Issues for task tracking, and structured Pull Requests, alongside Docker for easier setup

Security

Implemented a robust end-to-end encryption mechanism to ensure that sensitive emergency messages are encrypted strictly on the user's device, guaranteeing they can only be read by the intended recipients and not by any intermediary server

Networking

Utilized WebRTC for peer-to-peer data, voice, and video transmission strictly over the local network, and used TCP sockets and mDNS for local discovery

Deployment

Implemented deployment in a way that it can be executed offline

Decisions

WebRTC for Media

Why: Chosen to allow direct peer-to-peer communication over the LAN without relying on external internet servers

Tradeoff: More complex to establish connections offline compared to simple centralized WebSockets

React Native / Expo

Why: Selected to ensure the mobile client could be quickly deployed across various responder devices from a single codebase

Tradeoff: Potential performance overhead compared to native apps

Strict CI/CD Workflows

Why: Relied on GitHub Actions and robust PR reviews to maintain high code quality while iterating quickly

Tradeoff: Slight overhead in setting up and maintaining the pipeline initially

Challenges

End-to-End Encryption over LAN

Designing and implementing a robust end-to-end encryption mechanism for peer-to-peer offline communications proved to be highly complex, handled via custom localized key exchange

Offline WebRTC

Establishing connections without traditional external STUN/TURN servers required creating a custom signaling system over the isolated LAN

Data Synchronization

Resolving data conflicts and ensuring data consistency across multiple independent offline nodes

Outcomes

Working Proof-of-Concept

System Status

Successfully demonstrated a system capable of secure message and media transmission without internet access

Accelerated Delivery

Velocity

Established a highly efficient development pipeline that accelerated feature delivery

Learnings

The Technical Deep-Dive (WebRTC & Networking)

Building offline WebRTC taught me the intricacies of local network discovery. Without traditional STUN/TURN servers, I had to deeply understand mDNS and TCP sockets to build a custom signaling system from scratch.

The Architecture/Mindset Shift (Offline-First Data)

Designing a strictly offline-first system completely changed how I approach state management. I learned that handling data synchronization and conflict resolution across independent nodes requires a fundamentally different architecture than standard client-server applications.

The Workflow/Process Angle (CI/CD & Velocity)

Setting up strict CI/CD pipelines, Docker, and structured PR reviews early on wasn't just overhead—it was a velocity multiplier. It taught me that investing heavily in your development workflow upfront is critical for maintaining code quality while iterating quickly.