An interactive web application for visualizing Earth Observation satellite coverage paths and predicting upcoming satellite passes, primarily for humanitarian response planning.

The Earth Observation sector is highly fragmented, making it difficult to know when the next satellite observation will occur over a specific area of interest. For humanitarian organizations responding to disasters and crises, having access to the most up-to-date information about upcoming satellite passes is critical for mission planning, damage assessment, and resource allocation.
EO Predictor addresses this challenge by providing a visualization of satellite coverage paths, enabling humanitarian teams to anticipate when high-resolution imagery will be available for their areas of operation.
Important
This provides predicted satellite paths and possible Earth Observation captures, but does not guarantee that an image/observation will become available.
- Interactive Map Visualization: Globe projection showing satellite coverage paths over 48-hour prediction windows
- Real-time Filtering: Filter satellites by constellation, operator, sensor type, spatial resolution, and data access
- Time-based Controls: Interactive timeline to visualize satellite passes at specific times
- Satellite Details: Click on coverage paths to view detailed satellite specifications
- Mobile Responsive: Optimized interface for both desktop and mobile devices
- Humanitarian Focus: Emphasis on satellites relevant for disaster response and humanitarian monitoring
- React 19 with TypeScript for type-safe component development
- MapLibre GL for interactive globe visualization and vector tile rendering
- Zustand for reactive state management
- shadcn/ui design system built on Radix UI primitives
- Tailwind CSS for responsive styling
- Vite for fast development and optimized builds
- Python 3.11+ with async/await patterns for concurrent data processing
- Skyfield for precise orbital calculations and satellite positioning
- GeoPandas for geospatial data manipulation and coverage polygon generation
- PMTiles vector tiles for efficient satellite path visualization
- Celestrak API for real-time Two-Line Element (TLE) data
- Node.js 18+ and pnpm
- Python 3.11+ via uv
- tippecanoe (for vector tile generation)
-
Clone the repository
git clone <repository-url> cd eo-predictor
-
Install frontend dependencies
pnpm install
-
Install Python dependencies
cd scripts uv sync
-
Generate satellite data
uv run python generate_satellite_paths.py
-
Start development server
cd .. pnpm dev
The application will be available at http://localhost:5173
The application tracks a curated database of Earth Observation satellites organized in individual constellation files in scripts/satellites/
, including:
- Open Data Satellites: Sentinel-1/2/3, Landsat-8/9, NISAR
- Commercial Satellites: Planet SkySat, PlanetScope, Maxar WorldView, ICEYE SAR
- Sensor Types: Optical, SAR, and Hyperspectral sensors
- Technical Specifications: Spatial resolution, swath width, data access policies
- Reference URLs: Links to official constellation information pages
Note
Some of the information was collected using ChatGPT Deep Research, and has not been fully independently verified.
- TLE Source: Real-time Two-Line Element data from Celestrak
- Update Frequency: Satellite positions calculated every 5 minutes over 48-hour windows
- Coverage Calculation: Swath polygons generated based on satellite altitude and sensor characteristics
pnpm dev # Start development server
pnpm build # Build for production
pnpm lint # Run ESLint with TypeScript
pnpm preview # Preview production build
cd scripts
uv sync # Install Python dependencies
uv run python generate_satellite_paths.py # Generate satellite path data
uv run python validate_satellites.py # Validate constellation files
src/
├── components/
│ ├── ui/ # shadcn/ui components
│ ├── customized/ # Project-specific components
│ ├── Controls.tsx # Satellite filtering interface
│ ├── Header.tsx # Navigation header
│ └── TimeSlider.tsx # Time range selection
├── store/
│ └── filterStore.ts # Zustand state management
├── utils/
│ └── mapUtils.ts # PMTiles and MapLibre utilities
└── App.tsx # Main application component
scripts/
├── satellites/ # Individual constellation files
├── template-constellation.json # Template for new constellations
├── validate_satellites.py # Constellation validation tool
├── generate_satellite_paths.py # Data processing pipeline
└── pyproject.toml # Python dependencies
- TLE Fetching: Async requests to Celestrak API for orbital data
- Orbital Calculations: Skyfield computes satellite positions over 48-hour windows
- Coverage Processing: Generate swath polygons based on satellite specifications
- PMTiles Generation: Convert geospatial data to optimized vector tiles
- Interactive Visualization: MapLibre renders tiles with real-time filtering
- Zustand Store: Manages satellite filters and computed derived state
- Filter Hierarchy: Driver filters (sensor type, resolution) constrain constellation/operator options
- MapLibre Integration: Dynamic filter expressions update visualization without data re-fetching
-
Copy the template:
cp scripts/template-constellation.json scripts/satellites/new-constellation.json
-
Edit constellation details: Update constellation name, operator, technical specifications, and NORAD IDs
-
Validate: Run
uv run python scripts/validate_satellites.py
to ensure data integrity
pnpm version < major | minor | patch >
git push
gh release create --generate-notes
- Create new tag
MIT