Safe On Orbit · Space industry · 2025–2026
COSMOS
A platform that warns when a satellite is at risk of collision and helps plan the avoidance maneuver.
- Status
- Live
- Context
- Safe On Orbit product
- My role
- Sole developer of the current platform: Next.js front end, Django back end and Google Cloud infrastructure, with CI/CD.
- Stack
- Next.js
- TypeScript
- Django
- PostgreSQL
- Google Cloud Run
- Cloud Run Jobs
- Cloud SQL
- Three.js
- Orekit
- SGP4
- Redis
- Docker
- Terraform
- GitHub Actions

Overview
COSMOS (Collision Safety Management Orbital System) is the main product of Safe On Orbit, a space-industry company, built for satellite owners and operators. Every day it crosses the orbital data of the operator’s fleet with the public catalog of objects in orbit, picks out the relevant close approaches and computes the miss distance and probability of collision for each one.
I was the sole developer of the current platform. I replaced the old interface, built with Django templates, with a Next.js front end, developed most of the back end and put everything into production on Google Cloud. The orbital methods were defined by the company; the code that runs them on the platform is mine.
Problem
Satellite operators need to know, days in advance, when another object — a satellite, a rocket body or a piece of debris — will pass too close to one of their satellites, so they can decide whether to maneuver.
The public catalog has tens of thousands of objects. Comparing every pair precisely is expensive, and orbital data changes all the time, so events already found have to be recomputed.
Approach
The computation works like a funnel: a fast filter discards most pairs, and only the candidates go through the precise analysis. Each pair of objects has a single event that gets a new assessment on every recomputation, so you can see how the risk evolves and notice when a satellite has maneuvered.
Heavy processing runs in scheduled jobs, outside the API; the API and the interface only read the results. The interface is built for operations: color-coded risk, a fleet timeline and the encounter in 3D.
How it works
Orbital data
The back end downloads orbital elements (TLEs) from the public Space-Track catalog and accepts ephemerides uploaded by the operator, which are more precise.
Screening
A pre-filter using SGP4, the standard orbit propagation model, selects the pairs of objects that may come close. It runs in parallel across several processes.
Refined analysis
For each candidate, the system finds the time of closest approach (TCA) and computes the miss distance and probability of collision, with high-fidelity propagation through Orekit.
Recomputation
Active events are recomputed with the latest data, up to 14 days ahead. An event becomes “resolved” when the risk goes away and “concluded” once the TCA has passed.
Operations and maneuvers
The operator follows events on the dashboard and in the 3D simulation, gets real-time alerts and can simulate an avoidance maneuver or ask the system for the optimal one.
Google Cloud
The back end and front end run on Cloud Run; batch processing runs in Cloud Run Jobs triggered by Cloud Scheduler. Deploys go out from GitHub Actions, which reaches Google Cloud without a long-lived key (Workload Identity Federation).
- Data
- Code
- Person
- Outcome
- Catalog and ephemerides (Data)Public TLEs and operator files
- Daily job (Code)Scheduled, outside the API
- SGP4 screening (Code)Fast filter, in parallel
- Orekit analysis (Code)TCA, distance and probability
- Maneuver optimization (Code)Genetic algorithm
- Operator decision (Person)Dashboard and 3D simulation
- Event closed (Outcome)Resolved or concluded, with history
Heavy computation runs in batch jobs; the API and the interface only read the results.
Key decisions
Scheduled jobs instead of workers
The project started with Celery and moved scheduled processing to Cloud Run Jobs. It became more efficient: the heavy computation only runs when triggered and scales separately from the API.
One event per pair of objects
Each recomputation adds an assessment to the same event instead of creating a new record. That avoids duplicates, keeps the full history and makes it possible to notice when a satellite has maneuvered.
A cheap filter before the precise math
High-fidelity propagation is too expensive for the whole catalog. So SGP4 does the screening, and Orekit only runs on the candidates.
Result
COSMOS is live, in production on Google Cloud, with automated deploys and CI pipelines that run linting, tests, security scanning and image builds.
Besides the conjunction pipeline, I delivered the maneuver module with distributed genetic-algorithm optimization, a versioned public API with access keys and OpenAPI docs, the 3D orbital simulation in the browser, and automated tests on the back end and front end.
What I took from it
Start with the simplest thing, especially in the cloud. And build what the client asks for, not what you think adds value.
Screenshots





Links
COSMOS requires a login and has no public demo. The source code is private.