Skip to content

benajaero/leto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

27 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
LETO

Mission control for satellite emergency response.
Fuse live disaster feeds with satellite access windows, revisit timelines, and downlink planning.

Live Demo CI License

LETO Mission Control Dashboard

What is LETO?

LETO is a browser-first mission control dashboard for satellite emergency response. It answers the critical question:

"Given my satellites and ground stations, which incident can I observe first β€” and how quickly can I get the data down?"

Built for satellite imagery analysts, emergency coordinators, and field operators who need rapid triage under time pressure.

Key Capabilities

Feature Description
πŸ”₯ Live Feeds NASA FIRMS (fires), GDACS (floods/cyclones), NASA EONET (natural events), USGS (earthquakes)
πŸ›°οΈ Orbit Propagation SGP4/TLE propagation for real satellites; circular orbit generator for synthetic constellations
πŸ—ΊοΈ Access Windows AOI imaging passes, station contact windows, revisit gap analysis
⏱️ Time-to-Information TTFO (time to first observation) + TTDL (time to downlink) per incident
πŸ“Š Serviceability Scoring Weighted 0-100 score combining observation latency + downlink latency + gap coverage
🎯 Interactive Map Satellite basemap with ground tracks, footprints, AOI boundaries, incident markers
πŸ“ˆ Gantt Timeline Visual pass schedule with access windows, downlink windows, station contacts
βš™οΈ Scenario Editor Configure AOIs, satellites, stations, horizons, timesteps in real-time

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         DATA SOURCES                             β”‚
β”‚  NASA FIRMS ──►│                                               β”‚
β”‚  GDACS ───────►│  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  NASA EONET β”€β”€β–Ίβ”œβ”€β”€β–Ίβ”‚  Ingestion  │───►│  Satellite Engine   β”‚  β”‚
β”‚  USGS ────────►│  β”‚   + Cache   β”‚    β”‚  (SGP4/Access calc) β”‚  β”‚
β”‚                β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                β”‚                          β”‚                     β”‚
β”‚                β”‚                    β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”              β”‚
β”‚                β”‚                    β–Ό           β–Ό              β”‚
β”‚                β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
β”‚                β”‚              β”‚ Tracks  β”‚  β”‚ Windows  β”‚       β”‚
β”‚                β”‚              β”‚ Access  β”‚  β”‚ Revisit  β”‚       β”‚
β”‚                β”‚              β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜       β”‚
β”‚                β”‚                   β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜             β”‚
β”‚                β”‚                         β–Ό                    β”‚
β”‚                β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚                β”‚              β”‚  Incident Scores β”‚            β”‚
β”‚                β”‚              β”‚   + Serviceabilityβ”‚            β”‚
β”‚                β”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         UI LAYERS                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚Incident Queueβ”‚  β”‚ Tactical Map β”‚  β”‚  Selected Incident   β”‚  β”‚
β”‚  β”‚  + Filters   β”‚  β”‚ + Layers     β”‚  β”‚  + Tabs + Metrics    β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚           Gantt Timeline (Pass Schedule)                  β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Quick Start

# Clone the repo
git clone https://github.com/benajaero/leto.git
cd leto

# Install dependencies
pnpm install

# Run development server
pnpm dev

# Run tests
pnpm test

# Build for production
pnpm build

FIRMS API Key (Optional)

For live fire data from NASA FIRMS, get a free API key at firms.modaps.eosdis.nasa.gov/api/map_key/ and paste it into LETO's settings panel. Without a key, LETO falls back to bundled sample data.


Data Sources

Source Type Latency Auth
NASA FIRMS Active fires (VIIRS/MODIS) ~3 hours Free API key
GDACS Floods, cyclones, earthquakes ~1 hour None
NASA EONET Natural events (fires, storms, volcanoes) ~1 hour None
USGS Earthquakes M2.5+ earthquakes Real-time None

⚠️ Decision-support only. Not a sole source for operational response. All data feeds have latency, coverage gaps, and correction cycles. The UI surfaces timestamps and source status for transparency.


Tech Stack

  • Framework: Next.js 14 (App Router, static export)
  • State: Zustand (split stores: engine + UI)
  • Styling: Tailwind CSS v3 (custom aerospace dark theme)
  • Orbits: satellite.js (SGP4 propagation)
  • Maps: Leaflet + react-leaflet (CartoDB Dark Matter tiles)
  • Testing: Vitest
  • Deploy: Vercel

Roadmap

  • Core engine (SGP4, access windows, revisit)
  • Live data feeds (FIRMS, GDACS, EONET, USGS)
  • Interactive map with satellite basemap
  • Gantt timeline for pass scheduling
  • Scenario editor
  • Mobile-responsive layout
  • 3D globe view (Cesium/Three.js)
  • Weather overlay integration
  • Multi-user collaboration
  • Tasking request generation

Contributing

See CONTRIBUTING.md for workflow, testing, and spec updates. By participating, you agree to the CODE_OF_CONDUCT.md.

License

Copyright 2026 Chukwudiebube Ebenezer Ajaero

Licensed under the Apache License, Version 2.0. See LICENSE for details.

Attribution

  • NASA FIRMS (Active Fire data)
  • GDACS (Global Disaster Alert and Coordination System)
  • NASA EONET (Earth Observatory Natural Event Tracker)
  • USGS Earthquake Hazards Program
  • CelesTrak (TLE data)

About

LETO (Low-Earth Triage & Operations) links live disaster feeds with satellite access timelines for Australia and Africa.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors