Hi all ![]()
I’ve been building a self-hosted Observation Review Workbench for SatNOGS, and before I take it further I’d really value feedback from the people who actually run stations and review observations.
It’s a small, read-only web dashboard that pulls together three analysis engines so that reviewing an observation becomes: open it, read the evidence panels, decide. It only ever reads from SatNOGS — it never writes anything back to the network.
Note: this is an unofficial community project, not affiliated with the SatNOGS / Libre Space Foundation team. It’s early, so expect rough edges.
What it is
Four small pieces that run as four Docker containers:
-
satnogs-dashboard — the web app (on port 8000) that ties everything together and shows the review UI.
-
satnogs-signal — ML signal/noise triage; scores new observations and fills the review queue (about every 15 minutes).
-
satnogs-id — Doppler-based object identification; runs on demand.
-
satnogs-decoder — decoder validation and maintainer-review evidence; runs on demand.
How it works
-
satnogs-signal continuously scores fresh observations into a review queue.
-
You open one and hit Identify or Decode — the matching engine runs and its result is cached, so you only pay the cost once.
-
You read the evidence panels (signal, identity, decode, related passes) and make the call.
That’s the whole loop. Nothing is written back to the network — it’s purely a review/triage aid.
Running it
You only clone one repo. Docker builds the three engine images straight from their GitHub repos, so there’s nothing else to check out or install.
Prerequisites: git and Docker. Linux, macOS, or WSL2 (native Windows works too).
Linux / macOS / WSL2:
git clone https://github.com/RYASTRA/satnogs-dashboard.git
cd satnogs-dashboard
./scripts/setup.sh
Native Windows, in PowerShell:
git clone https://github.com/RYASTRA/satnogs-dashboard.git
cd satnogs-dashboard
powershell -ExecutionPolicy Bypass -File .\scripts\setup.ps1
The setup script asks for three optional API tokens (press Enter to skip any), writes them to a local .env, then brings up all four containers. The first run takes a few minutes while the engine images build. Then open the dashboard at http://localhost:8000.
Prefer to do it by hand? Plain docker compose up works too, and runs everything tokenless.
API tokens (all optional)
Everything starts without tokens; add them for full functionality:
-
satnogs_network_api_key — queue polling. Find it in your SatNOGS Network account profile (the API key field).
-
satnogs_db_api_key — decoder evidence frames. Find it in your SatNOGS DB account profile (the API key field).
-
HUGGING_FACE_HUB_TOKEN — ML model downloads. Create one in your Hugging Face account under Settings → Access Tokens.
The single local .env feeds all four containers, so you configure keys once.
Honest caveats
-
The signal triage model is validated on a limited satellite set — scores for satellites outside that set are unreliable. Treat it as a triage hint, not ground truth.
-
The signal and decoder engines pull ML models from Hugging Face on first use (cached afterward).
-
It’s early. Things will break, and the review UX is still evolving — which is exactly why I’m posting.
Stack & license
Python 3.14, FastAPI + uvicorn, Jinja2, SQLite, Docker. MIT licensed.
Repo (clone URL is in the commands above): github.com/RYASTRA/satnogs-dashboard
What I’d love feedback on
-
Does it build and run cleanly on your setup? (Which OS / Docker version?)
-
Is the open → read evidence → decide workflow actually useful for how you review?
-
Which satellites / decoders should I prioritize for the signal and decode engines?
-
Anything about the review UI that would make triage faster?
Do not hesitate to give me an honest opinion on whether something like this is useful to the community. Thanks for taking a look — happy to answer anything here. ![]()
