← Baltic Sonar live dashboard
◈ About Baltic Sonar
“Awareness is power.”
Baltic Sonar is an experimental, fully automated open-source activity index for the Baltic region —
Estonia, Latvia, Lithuania, the Baltic Sea, and adjacent areas. It reads public news around the clock,
organises it into a single picture, and publishes the result as this site. No humans curate the output.
⚠ This is NOT verified intelligence. It is automated aggregation of public reporting with
AI-generated analysis. Not affiliated with any government, military, or NATO. Research and education only.
How the data flows
- ~50 public sources: national broadcasters (LSM, ERR, LRT, Yle, SVT), CERTs (CERT.LV, CERT Polska, RIA),
ministries of defence, EUvsDisinfo, investigative and think-tank feeds (Re:Baltica, ICDS, OSW, CEPA, Bellingcat,
DFRLab), plus topical news queries and the GDELT archive for history.
- Deduplication by content hash, then a relevance filter drops everything that is not Baltic-security related.
- Classification — 100% local AI. Every item is read by a Qwen-class large language model running on
our own hardware via Ollama. It assigns one of 11 categories (military, cyber, GNSS/EW, naval, air, hybrid,
critical infrastructure, border, diplomatic, information ops, NATO response), a severity estimate (0–100),
a confidence score, and an attribution status. Claims are labelled CLAIMED vs CONFIRMED based on source
tier and count — a social-media claim is never promoted to fact.
- Hard rules: the system never invents sources, coordinates, events or attribution. If a location is not
in public reporting, the event maps to a country centroid and is labelled with its geo-precision.
- Semantic search uses a local multilingual embedding model (bge-m3) — your query is embedded on this
server and matched against events; it works across languages.
- Daily & weekly briefs, narratives, correlation clusters are generated by the same local model,
with correlation explicitly flagged as not causation.
Architecture — one-way by design
All collection, analysis and translation runs on private infrastructure (Apple Silicon, local Ollama —
no cloud AI APIs, no data leaves the pipeline). The public server you are reading now only ever receives a
one-way push of a static snapshot (JSON + HTML). It holds no database, no credentials, and no path back
into the analysis pipeline — there is simply nothing on it worth hacking. The only live endpoint is the tiny
search-embedding service, which sees your query text and nothing else.
Built with
- Hardware: a single Mac Studio M3 Ultra with 256 GB unified memory and NVMe SSD storage —
the entire analysis pipeline (classification, correlation, briefs, translation, embeddings) runs on this
one machine. No GPU cluster, no cloud inference, no per-token bills: just electricity.
- Docker — the whole stack (n8n orchestration, PostgreSQL, PDF rendering, web front ends) runs as
containers on that machine; the public server is a separate small VM that only receives a static snapshot.
- Ollama + Qwen (local LLM) — classification, briefs, narratives, translation into 7 languages
- bge-m3 (local embeddings) — multilingual semantic search and cross-source deduplication
- PostgreSQL — event store · MapLibre GL + ECharts — map and charts (self-hosted, no trackers)
- Claude (Anthropic) — engineering and design copilot used to build and operate the system
Honest caveats
- Severity, attribution and correlation are automated estimates, not analyst judgements.
- The index reacts to reporting volume; treat trends, not absolute values, as the signal.
- Translations are machine-made, locally. The English source text is authoritative.
Who runs this
Baltic Sonar is an independent, self-funded experiment by Andris Gailītis — see
gailitis.ceo for other projects and writing.
It is not operated by, funded by, or affiliated with any government, military, alliance,
political organisation or employer. Everything here is built and hosted privately, and the
analysis pipeline runs on the author's own hardware.
Contact & feedback: via gailitis.ceo.