Full-stack engineer
LunarComm — Delay-Tolerant Lunar Mesh
- Role
- Full-stack engineer
- Built with
- Python · FastAPI · NetworkX · NumPy · React · TypeScript · Three.js · Zustand

A mission-control simulation for ISRO–JAXA LUPEX operations around Shackleton’s south pole. Rovers lose line-of-sight inside Permanently Shadowed Regions, so the system does not assume a continuous radio link. It builds a breadcrumb relay mesh, stores RFC-style bundles until a hop reopens, and renders the crater from a NASA LOLA heightfield. The interesting part is not the 3D viewport but the connectivity problem underneath it: when a hop dies, who holds the data, how the mesh is extended, and what the rover is allowed to do in the seconds after blackout.
Problem
Crater geometry breaks RF. An exact, always-on mesh is not the operating regime: links appear and vanish with terrain, range, and solar-flare attenuation. The practical question is how to keep science data moving under intermittent connectivity, and how to let an operator keep driving for a bounded window after signal loss without stranding the rover beyond recovery.
Approach
The backend runs a 10 Hz physics tick: bilinear LOLA sampling for line-of-sight, RSSI from free-space path loss plus terrain attenuation, NetworkX for the RF graph, and DTN FIFOs aligned with RFC 9171 (QUEUED → IN_TRANSIT → DELIVERED / FAILED, TTL, burst flush on reconnect). Auto-beacons drop when RSSI crosses a threshold, subject to cooldown, spacing, and inventory. Live Demo pauses that feed and becomes client-authoritative: BFS over lander, relays, and both rovers as transceivers; exact-perimeter drops only on the 0.95R–R rim (R = 300 m); a 29 s speculative probe on blackout with a 35 s pose FIFO, then autonomous reverse if no hop is found. Solution quality was judged in demo rehearsal (mesh re-acquire, probe timeout, chaos flare) rather than against a published DTN benchmark, so no delivery-ratio figure is claimed.
Screens







Watch the walkthrough on YouTube Walkthrough: nominal mesh, blackout, speculative probe, and reacquire.
End-to-end architecture

Describe the diagram
The full LunarComm system. On the left, the actors and peripherals: the operator's dashboard, a gamepad, a phone trigger, a keyboard failsafe, and a one-off offline bake of NASA PDS elevation data. That bake produces a single terrain file consumed byte-identically by both halves of the system. The backend container runs a FastAPI process on a 10 Hz tick — a simulation engine for kinematics and auto-breadcrumbs, an RF model computing RSSI from free-space path loss minus terrain attenuation, a terrain context that raycasts line of sight against the elevation model, and a DTN layer holding RFC-style bundles in per-node FIFOs with TTL and a burst flush on reconnect. The frontend container runs React and react-three-fiber: an app shell, a scene graph of visual, entity and UI layers, and two stores. A mode switch decides which store is authoritative — the telemetry store ingesting backend snapshots, or the Live Demo store which pauses that feed and solves the mesh client-side. A shared terrain contract keeps the frontend's sampling identical to the backend's, so both agree on where the ground is.