Open Source · MIT

Build on the
METAQUANTICS platform

METAQUANTICS aggregates aviation, maritime, seismic, conflict, cyber, and OSINT feeds onto a single GPU-rendered map — and exposes every one of them as a plain HTTP endpoint. This is the same API the dashboard runs on. There is no separate, privileged internal tier.

186
Endpoints
20+
Live feeds
0
Keys required
Guide

Overview

Every data point on the map is rendered through WebGL via MapLibre GL, which is what lets the interface hold thousands of concurrent entities at 60fps. The application is a Next.js app: the map and HUD run in the browser, and each live feed is normalised by a route under /api before it reaches the client.

That boundary is deliberate. Upstream sources disagree about formats, rate limits, and CORS policy, so the API layer absorbs those differences and hands back consistent JSON.

No credentials needed
Aviation, maritime, satellites, fires, earthquakes, weather, news, and CVE data all come from public keyless feeds. Keys only matter for the optional RECON scanner and for raising rate limits.
Guide

Quick Start

Every read endpoint is a plain GET returning JSON. Nothing below needs authentication — paste any of it into a terminal.

curl -s https://ispeia-geointel.vercel.app/api/flights | jq '.commercial_flights | length'

If you only need magnitudes rather than geometry, /api/stats is the right endpoint to poll — it collapses the heavy feeds into a handful of counters.

Aggregate counters
curl -s https://ispeia-geointel.vercel.app/api/stats
# { "stats": { "flights": 9241, "sats": 2043, "cctv": 2117,
#              "weather": 58, "nuclear": 191, "incidents": 412 },
#   "timestamp": "2026-07-29T12:00:00Z" }

The OSINT lookups each take one subject, so they compose cleanly in a pipeline:

Passive subdomain enumeration
curl -s "https://ispeia-geointel.vercel.app/api/osint/certs?domain=example.com" | jq -r '.subdomains[]'
Try before you write code
Every GET endpoint in the reference below has a Send request button that runs it against this instance and shows the live response.
Guide

Self-Hosting

METAQUANTICS needs Node 20+ and no database. A local instance is three commands:

Local development
git clone https://github.com/Metaquantics-Technologies/GeoIntel.git
cd metaquantics
npm install
npm run dev        # http://localhost:3000

For a production build, or to run the checks:

Build and test
npm run build && npm start
npm run lint
npm test           # vitest
npm run test:live  # includes tests that hit live upstream feeds

A Dockerfile and docker-compose.yml ship with the repository. The container always listens on port 3000 internally; METAQUANTICS_PORT controls the host port it is published on.

Docker
cp .env.example .env
docker compose up -d
Guide

Configuration

Copy .env.example to .env. Read that file before filling anything in — most of the keys it lists are reserved for future sources and are not consumed by the current code.

Read by the application

SCANNER_URL / SCANNER_KEY
Points at the separate RECON scanner backend. SCANNER_KEY must equal that backend’s METAQUANTICS_KEY. Leave both empty to disable RECON — /api/scanner then returns 503 by design.
SDK_INGEST_KEY
Shared secret for /api/sdk/ingest. The endpoint fails closed: while this is unset, ingestion is disabled and returns 503.
METAQUANTICS_TELEGRAM_CHANNELS
Comma-separated public Telegram channel names (no @) for the Telegram OSINT layer, overriding the curated default set.
METAQUANTICS_PORT
Host port the UI is published on. The container itself always listens on 3000.

Optional — higher rate limits only

FIRMS_API_KEY, OPENSKY_CLIENT_ID, OPENSKY_CLIENT_SECRET, N2YO_API_KEY, AIS_API_KEY. The public keyless feeds are used unless you extend the code to prefer these.

Secrets hygiene
Generate secrets with openssl rand -hex 32. Never commit a populated .env — only .env.example belongs in version control.
Guide

Interface Guide

The map fills the viewport and every control floats above it. Panels are toggles rather than destinations, so you can build up exactly the picture you need and drop the rest.

Layer Panel
The left rail. Switches individual feeds on and off, and carries the theme selector. Each row shows a licence badge (NC: non-commercial source; PENDING: licence not yet reviewed). In a commercial deployment those layers are switched off, with the reason on hover, and a footer over the map credits the sources of the layers that are on.
RECON Toolkit
DNS, WHOIS, certificate transparency, IP and ASN enrichment, breach checks, sanctions, CVE lookup, port scanning.
Intel Feed
A running stream of incoming events across every enabled feed.
Region Dossier
Double right-click the map for a composite summary of that location from every feed covering it.
Entity Graph
Link analysis, expanding one node at a time into its neighbours.
Status Bar
Community and docs links on the left, then a live ticker of prices and significant seismic events.
Guide

Keyboard Shortcuts

Press ? at any time inside the application to bring up this list.

FToggle fullscreen
SShare current view
LToggle layer panel
MToggle markets panel
IToggle intel feed
RReset to global view
?Show help
ESCClose panels / popups

Outside the interactive map, ⌘K / Ctrl+K opens the command palette (modules, countries, layers, widgets, sources, actions, OSINT and these docs) and ? lists every shortcut. Neither fires while you type in a field.

API Reference

Conventions

All routes live under /api on whatever origin serves the application. Reads are GET, writes are POST with a JSON body. Nothing requires authentication except /api/sdk/ingest and /api/github-webhook.

Errors
Failures return a non-2xx status with an `error` key, often alongside `detail` carrying the upstream message. Most routes proxy third parties, so treat upstream failure as normal — check response.ok before reading the body.
Caching
Routes set their own Cache-Control TTLs: typically 45–60s for fast-moving feeds, up to a day for static reference data. Polling faster than the TTL gains nothing but load. Where a route advertises refreshInterval, use it.
Rate limits
The three AI endpoints allow 5 requests per minute per IP and return 429 beyond that. Other routes are bounded indirectly by their upstream sources.
Timestamps
Every timestamp field is ISO 8601 in UTC.
Responsible use
The RECON scanner and /api/osint/sweep generate traffic against the targets you name. Only point them at infrastructure you own or have written authorisation to test. The remaining OSINT routes are passive and query third-party datasets rather than the subject itself.
API Reference

System

Liveness and aggregate counters. Safe to poll from monitoring.

API Reference

Aviation & Space

Aircraft, orbital objects, and heliophysics.

API Reference

Earth & Environment

Seismic, fire, atmospheric, and orbital-imagery feeds.

API Reference

Geopolitical

Conflict zones, frontlines, event streams, and country-level risk.

API Reference

Media & Markets

News aggregation, live broadcast streams, and financial instruments.

API Reference

Surveillance & Infrastructure

Camera networks, fixed infrastructure, maritime traffic, and tile/stream proxies.

API Reference

Cyber Threat

Vulnerability, attack, and malware telemetry.

API Reference

OSINT Toolkit

The lookup tools behind the RECON panel. Every route takes a single subject and returns a normalised result, so they compose well in scripts.

API Reference

Recon Scanner

Active scanning, delegated to a separate backend so the web tier never runs scans itself.

API Reference

Entity Graph

Link analysis over entities surfaced elsewhere in the platform.

API Reference

AI Analysis

Gemini-backed correlation over feed data you supply. All three are POST, all three are rate limited to 5 requests per minute per IP.

API Reference

Polybolos SDK

Push entities from an external platform into the Common Operating Picture, and stream the merged picture back out.

API Reference

Alerts

Server-side alert channels (Web Push and signed webhook) of one device, authenticated by a device token.

API Reference

Public API (v1)

Read-only data API behind the PUBLIC_API_ENABLED flag (off by default): admin-issued keys, 60 requests/min per key, OpenAPI 3.1 generated from the operation contract, license and attribution of every source in the response.

API Reference

Agents (MCP)

Model Context Protocol server behind the MCP_ENABLED flag (off by default): JSON-RPC 2.0 over POST, 10 read-only tools over the public API v1, public API key and daily quota per key.

API Reference

Map embed

Read-only METAQUANTICS map to embed in third-party sites via iframe, behind the EMBED_ENABLED flag (off by default); only /embed/* can be framed, and layers are filtered by source license.

API Reference

Webhooks

Inbound hooks from external services.

Console (Clone)

Widgets

Every Console widget, with its purpose, real data sources, technologies, refresh interval and known limitations. This page is generated from the same registry that feeds the panel tooltips.

World Map

Widgetworld-map

Shortcut to the full interactive world map, which lives on the GLOBAL tab.

How it works

This card does not embed the map: the interactive map (MapLibre GL, with aircraft, earthquake, fire, conflict and other layers) lives on the GLOBAL tab, and the button takes you there. Embedding the map inside the Console grid is planned for a later phase. The card works as an anchor in the deck for people who arrange their panel around the map, as in the "Map Focus" template.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Technologies

  • MapLibre GL 6.7.0 (aba CUSTOM)
  • Next.js Link

Limitations

  • The interactive map is not embedded in the grid yet; this card only links to the GLOBAL tab.

Air Radar

Widgetair-traffic-radar

Circular radar of aircraft around a point, filterable by radius and type. Open ADS-B data, refreshed every 30 s.

How it works

Shows, on an SVG radar, the aircraft returned by the /api/flights route (ADS-B positions from adsb.fi, complemented by the OpenSky Network). The widget computes distance (Haversine) and bearing from the center to each aircraft and plots those inside the chosen radius (5, 25, 50 or 100 miles), colored by type: commercial, military, helicopter or private. The default center is São Paulo; your location is only used if you click "Use my location" and allow it in the browser. Radius, type and sweep run entirely in the browser over the data already downloaded. The widget polls the route every 30 s (pausing while the tab is hidden) and the server keeps a short cache.

Refresh every 30 s

Sources

SourceInternal routeLicense
adsb.fi Open Data (ADS-B)/api/flightsnot cataloged
OpenSky Network/api/flightsnot cataloged

Technologies

  • useFeed (polling)
  • Next.js Route Handler
  • SVG
  • requestAnimationFrame
  • Haversine (src/lib/geo)
  • Geolocation API (opt-in)

Limitations

  • Coverage depends on volunteer ADS-B receivers: aircraft without a transponder, switched off or out of coverage do not appear, and positions can be seconds old.
  • Server and CDN caching (tens of seconds to a few minutes) means updates can lag beyond the widget interval.
  • No history source: shows only the current state; nothing is stored to query past series.
  • The license of some of these sources has not yet been reviewed in registry/sources (license-gate); review before any commercial use.

Daily Briefing

Widgetdaily-briefing

AI-generated intelligence summary built from recent earthquakes, news and cyber alerts. On demand and unverified.

How it works

When you click "Generate briefing", the widget sends only the language to /api/ai/briefing; the server builds the context from the same closed list of public feeds as AI Analysis (news, USGS quakes and volcanoes, tsunami bulletins, NHC storms, CISA KEV and advisories, level 3-4 travel advisories, NOAA space-weather scales) and never accepts context from the browser. With a server Gemini key, the text cites only sources present in that context; links and unlisted source names written by the model are removed; the same answer is cached for 10 minutes and a daily call quota applies. Without a key, if the provider fails or the quota runs out, the widget shows NO AI and a deterministic synthesis of the same feeds, with the list of sources that responded. The text is shown by a minimal Markdown renderer with no HTML, with a copy option. It is AI output and does not replace checking a primary source.

Refresh On demand or no automatic polling

Sources

SourceInternal routeLicense
BBC World (RSS)/api/newsnot cataloged
The Guardian World (RSS)/api/newsnot cataloged
Al Jazeera (RSS)/api/newsnot cataloged
The Times of Israel (RSS)/api/newsnot cataloged
TASS (RSS)/api/newsnot cataloged
Anadolu Agency (RSS)/api/newsnot cataloged
South China Morning Post (RSS)/api/newsnot cataloged
CNA - Channel NewsAsia (RSS)/api/newsnot cataloged
Africanews (RSS)/api/newsnot cataloged
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
USGS Volcano Hazards Program/api/volcanoesUS Government public domain
NOAA Tsunami Warning Centers (tsunami.gov)/api/tsunamisnot cataloged
NOAA National Hurricane Center/api/hurricanesnot cataloged
CISA Known Exploited Vulnerabilities/api/cyber-threatsnot cataloged
CISA Cybersecurity Advisories/api/cisa-advisoriesnot cataloged
US State Department travel advisories/api/travel-advisoriesnot cataloged
NOAA SWPC space weather scales/api/space-scalesnot cataloged
Google Gemini API/api/ai/briefingnot cataloged

Technologies

  • Next.js Route Handler
  • zod
  • Google Gemini API (opcional)
  • analyst (src/lib/ai/analyst)
  • providers (src/lib/ai)
  • markdown-lite (sem HTML)

Limitations

  • Generated only on demand: it does not refresh itself or keep a briefing history.
  • AI-generated text: may contain errors and omissions and is not verified.
  • Without a server AI key (or if the provider fails) the answer is a deterministic synthesis marked NO AI, not model prose.
  • Feed text reaches the model as delimited data and goes through an instruction-injection pattern filter (en/pt/es): ignore/forget/override previous instructions, "you are now", "act as", "new instructions:" and requests to reveal the prompt, only as an imperative at the start of a clause (the match becomes "[removido]"). The filter is a set of regular expressions and does not cover every phrasing: paraphrases, other languages and an injection mid-sentence without punctuation or conjunction get through — an accepted residual risk, mitigated by grounding the answer (links and sources outside the context are removed).
  • Telegram channels are shown with a link and never sent to the AI analyst or to the Alerts AI summary: the Telegram terms prohibit AI use, so only agency (RSS) items from /api/news reach the model.
  • Never sent to AI: source.imf.portwatch-chokepoints (IMF PortWatch, chokepoint flow). Its terms do not allow the data to be used to train language models, so the feed list of the AI Analysis and the Daily Briefing does not include it and the MCP server withholds it (DM-18), even with the non-commercial flag on.
  • Never sent to AI: source.telegram.public-channels (Telegram public channels). The platform terms prohibit scraping and AI use, so the channels are only shown with a link; the AI Analysis and Daily Briefing context drops every channel item, the Alerts AI summary (the AI OVERVIEW button of the Alerts panel, POST /api/ai/overview in alerts mode) also drops anything that came from a channel on the server and only sends agency items to the model, and the MCP server withholds the source (DM-18).
  • No history source: shows only the current state; nothing is stored to query past series.
  • The license of some of these sources has not yet been reviewed in registry/sources (license-gate); review before any commercial use.

Conflict Monitor

Widgetconflict-monitor

Conflict headlines grouped by zone and type (strike, embargo, siege, terror). Unverified OSINT content.

How it works

The /api/conflicts route keeps a fixed list of known conflict zones (Ukraine, Gaza, Sudan, Red Sea, etc.) and matches headlines from public RSS feeds (BBC, Al Jazeera and NYT) to each zone by keyword. The widget classifies each headline with keyword rules into strike, embargo, siege, terror or other, sorts by zone severity and lets you filter by type and by country. The Zones tab lists the zones with severity, event count and a reference link. Matching is heuristic: a headline can land in the wrong zone or be classified imprecisely. Refreshes every 5 min.

Refresh every 5 min

Sources

SourceInternal routeLicense
BBC World (RSS)/api/conflictsnot cataloged
Al Jazeera (RSS)/api/conflictsnot cataloged
The New York Times World (RSS)/api/conflictsnot cataloged
Liveuamap (reference links only, not queried)/api/conflictsLinks de referência; conteúdo não consultado nem copiado (termos do site)

Technologies

  • useFeed (polling)
  • Next.js Route Handler
  • RSS
  • conflict-classify (palavras-chave)
  • Radix Tabs (shadcn/ui)

Limitations

  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.
  • Matching headlines to zones and classifying them by type uses keywords and can be wrong.
  • The "Xs ago" times show when the browser collected the data, not when the event happened at the source.
  • No history source: shows only the current state; nothing is stored to query past series.
  • The license of some of these sources has not yet been reviewed in registry/sources (license-gate); review before any commercial use.

News Feed

Widgetnews-feed

Unified OSINT news and alert feed: public Telegram channels plus agencies and newspapers via RSS. Unverified.

How it works

The /api/news route aggregates public Telegram OSINT channels (t.me/s pages) and RSS feeds from agencies and newsrooms across several blocs (BBC, Guardian, Al Jazeera, Times of Israel, TASS, Anadolu, SCMP, CNA and Africanews), folds repeated reports into one and classifies each item as news, event or rocket; places mentioned are geocoded via Nominatim. The widget sorts newest first, filters by category (tabs) and by local search over title and source, and opens the original link in a new tab. The mix includes state-run and declared-bias sources: order does not indicate credibility. Refreshes every 5 min.

Refresh every 5 min

Sources

SourceInternal routeLicense
Telegram public channels (t.me/s)/api/newsnot cataloged
BBC World (RSS)/api/newsnot cataloged
The Guardian World (RSS)/api/newsnot cataloged
Al Jazeera (RSS)/api/newsnot cataloged
The Times of Israel (RSS)/api/newsnot cataloged
TASS (RSS)/api/newsnot cataloged
Anadolu Agency (RSS)/api/newsnot cataloged
South China Morning Post (RSS)/api/newsnot cataloged
CNA - Channel NewsAsia (RSS)/api/newsnot cataloged
Africanews (RSS)/api/newsnot cataloged
OpenStreetMap Nominatim (geocoding)/api/newsODbL (OpenStreetMap contributors)

Technologies

  • useFeed (polling)
  • Next.js Route Handler
  • RSS
  • Telegram t.me/s (HTML publico)
  • Nominatim
  • Radix Tabs (shadcn/ui)

Limitations

  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.
  • Includes state-run and declared-bias sources; feed order says nothing about credibility.
  • Server and CDN caching (tens of seconds to a few minutes) means updates can lag beyond the widget interval.
  • No history source: shows only the current state; nothing is stored to query past series.
  • The license of some of these sources has not yet been reviewed in registry/sources (license-gate); review before any commercial use.

Markets

Widgetmarkets

Quotes for indices, commodities, crypto and FX, with the day's change. Refreshes every 60 s.

How it works

The /api/markets route queries the Yahoo Finance chart endpoint (unofficial) for a fixed list of instruments: indices and references (S&P 500 and Nasdaq 100 via futures, VIX, dollar index, 10-year yield, DAX, FTSE, Euro Stoxx 50, Nikkei, Hang Seng), oil and gas, gold, silver, copper, wheat, corn, Bitcoin, Ethereum, Solana, XRP and currency pairs (EUR/USD, USD/JPY, GBP/USD, USD/CNY). The widget groups them into Indices, Commodities (including oil), Crypto and Currencies and shows price and percentage change with a direction indicator. The server keeps a 60 s cache.

Refresh every 1 min

Sources

SourceInternal routeLicense
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot cataloged
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB dados abertos (atribuicao ao BCB; licenca exata por confirmar)
U.S. EIA, precos spot (API v2, com chave)/api/marketsnot cataloged
IMF Primary Commodity Prices via DBnomics (mensal)/api/marketsnot cataloged
Yahoo Finance (chart API, nao oficial; reserva rotulada)/api/marketsnot cataloged

Technologies

  • useFeed (polling)
  • Next.js Route Handler
  • US Treasury / BCB PTAX / EIA / DBnomics (oficiais)
  • Yahoo Finance chart API (reserva rotulada)

Limitations

  • Source without an official API (Yahoo Finance): unofficial use, license not yet reviewed (decision D-10); it may change or fail without notice.
  • Some indices use futures contracts as a proxy (e.g. S&P 500 and Nasdaq 100) and quotes may be delayed.
  • No history source: shows only the current state; nothing is stored to query past series.
  • The license of some of these sources has not yet been reviewed in registry/sources (license-gate); review before any commercial use.

Severe Weather

Widgetsevere-weather

Active severe weather events worldwide (cyclones, tornadoes, floods, heat, dust), by severity. Refreshes every 5 min.

How it works

The /api/weather route combines three public sources: NASA EONET (open natural events), active US National Weather Service alerts and the GDACS RSS feed (UN and European Commission). The widget sorts by severity (high, medium, low) and date, classifies each event into a tab by type or title (tropical, tornado, flood, heat, dust, other) and offers a "Details" link to the original source. NWS alerts cover only the US, and the tab classification is text-based: it can be wrong on ambiguous titles. The server keeps a 2 min cache.

Refresh every 5 min

Sources

SourceInternal routeLicense
NASA EONET v3/api/weathernot cataloged
NOAA National Weather Service (api.weather.gov)/api/weatherUS Government public domain
GDACS (UN / European Commission)/api/weathernot cataloged

Technologies

  • useFeed (polling)
  • Next.js Route Handler
  • CAP / RSS / JSON
  • weather-data (classificacao por texto)
  • Radix Tabs (shadcn/ui)

Limitations

  • NWS alerts cover only the United States; for the rest of the world only GDACS and EONET apply.
  • Tabs are derived from the event type/title text and can misclassify.
  • Server and CDN caching (tens of seconds to a few minutes) means updates can lag beyond the widget interval.
  • No history source: shows only the current state; nothing is stored to query past series.
  • The license of some of these sources has not yet been reviewed in registry/sources (license-gate); review before any commercial use.

Country Map

Widgetcountry-map

Focused map view of a single country with all overlay layers.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Market Analytics

Widgetmarket-analytics

Market breadth indicators, earnings calendar, circuit breaker status and global market hours.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 60 min

Sources

SourceInternal routeLicense
Alternative.me (Crypto Fear & Greed Index)/api/fear-greedAlternative.me terms (attribution next to the data)
CFTC Commitments of Traders (Legacy, futures only)/api/cftc-cotno terms published (unverified)

Technologies

  • useFeed
  • JSON
  • Socrata SODA

Federal Finance

Widgetfederal-finance

Federal contract awards and central bank holdings: tracking QT/QE pace.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Global Central Banks

Widgetcentral-banks

ECB, BOJ and PBOC balance sheets: assets, policy tools, QT/QE tracking and FX reserves.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 60 min

Sources

SourceInternal routeLicense
European Central Bank — euro reference exchange rates (EXR)/api/fxFree reuse with citation ("Source: ECB statistics."); statistics and metadata not modified

Technologies

  • useFeed
  • SDMX-JSON
  • Table (shadcn/ui)

Prediction Markets

Widgetprediction-markets

Real-time odds from prediction markets with probability charts.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

National Debt Clock

Widgetnational-debt-clock

Interpolated national debt for 200+ countries with ticking counters.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 360 min

Sources

SourceInternal routeLicense
US Treasury Fiscal Data (Debt to the Penny)/api/us-treasury-debtUS Government public domain

Technologies

  • useFeed
  • JSON

Political Intelligence

Widgetpolitical-intelligence

UN Security Council sessions, global elections, travel advisories, executive orders and court decisions.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Press Freedom

Widgetpress-freedom

World press freedom rankings and journalist detention and killing alerts worldwide.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Sanctions & Trade

Widgetsanctions-trade

Countries ranked by records on the US Treasury OFAC SDN sanctions list, with programs and new designations in the last 7 days (aggregates only, no names).

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 360 min

Sources

SourceInternal routeLicense
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending

Technologies

  • useFeed
  • CSV (SLS)
  • Intl.DisplayNames

Global News Browser

Widgetglobal-news-browser

Browse 200+ RSS news feeds from around the world organized by region, including state-sponsored media tracking.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Military Aircraft

Widgetmilitary-aircraft

Live military aircraft tracking from open ADS-B data with callsign identification.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 3 min

Sources

SourceInternal routeLicense
adsb.fi Open Data (ADS-B)/api/flightsnot cataloged
OpenSky Network/api/flightsnot cataloged

Technologies

  • useFeed
  • ADS-B

Defense Intel

Widgetdefense-intel

NATO, missile threat, arms control and defense ministry news feeds.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Military Postures

Widgetforce-posture

Military posture in 6 theaters: level, aircraft by type (ADS-B), naval presence (AIS), strike package and trend.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 5 min

Sources

SourceInternal routeLicense
METAQUANTICS force posture (derived from ADS-B + AIS)/api/force-posturenot cataloged
adsb.fi Open Data (ADS-B)/api/flightsnot cataloged
OpenSky Network/api/flightsnot cataloged
aisstream.io (AIS)/api/maritimenot cataloged

Technologies

  • useFeed
  • src/lib/intel/posture.ts

Naval Forces

Widgetnaval-forces

Global naval fleet database with vessel classes, hull designations and AIS tracking status.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Pentagon Pizza Index

Widgetpentagon-pizza-index

Military HQ food venue OSINT: restaurants and cafes near military headquarters worldwide.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Nuclear Threat Monitor

Widgetnuclear-threat-monitor

Doomsday Clock, nuclear arsenals, test detection and treaty compliance tracking.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

CBRN Monitor

Widgetcbrn-monitor

Chemical, biological, radiological and nuclear incidents, radiation monitoring and reactor status.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Humanitarian Crises

Widgethumanitarian-crises

Disaster alerts and global disaster monitoring from humanitarian agencies.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 30 min

Sources

SourceInternal routeLicense
OpenFEMA (Disaster Declarations Summaries)/api/fema-disastersOpenFEMA terms (attribution; not endorsed by FEMA)

Technologies

  • useFeed
  • OData JSON

Refugee & Asylum

Widgetrefugee-asylum

Displacement data, refugee flows and asylum application statistics.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 360 min

Sources

SourceInternal routeLicense
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0

Technologies

  • useFeed
  • JSON

Social Indicators

Widgetsocial-indicators

World population clock, income inequality rankings and major global migration corridors.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Food & Water Security

Widgetfood-water-security

Famine alerts, water stress rankings, food price index trends and food forecasts.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Health & Biosecurity

Widgethealth-biosecurity

Disease outbreaks, food recalls, drug shortages and wastewater surveillance data.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 360 min

Sources

SourceInternal routeLicense
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain (credit the CDC; not endorsed)
CDC Travelers' Health — Travel Notices/api/health-noticesUS Government public domain (credit the CDC; not endorsed; content unaltered)

Technologies

  • useFeed
  • Socrata SODA
  • RSS

Immigration Statistics

Widgetimmigration-statistics

Immigration flows: green cards, visa admissions, origin countries, destination states and enforcement data.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Earthquake Tracker

Widgetearthquake-tracker

Recent seismic activity worldwide.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 5 min

Sources

SourceInternal routeLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain

Technologies

  • useFeed
  • GeoJSON

Natural Hazards

Widgetnatural-hazards

Active disaster events: floods, volcanoes, wildfires, droughts and cyclones.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 5 min

Sources

SourceInternal routeLicense
GDACS (UN / European Commission)/api/gdeltnot cataloged
USGS Volcano Hazards Program (HANS API)/api/volcanoesUS Government public domain
NOAA/NWS Tsunami Warning Centers (tsunami.gov Atom)/api/tsunamisno explicit license on the site (NWS content; unverified)

Technologies

  • useFeed
  • RSS
  • JSON
  • Atom

Climate Monitor

Widgetclimate-monitor

Sea surface temperatures, coral reef bleaching alerts and polar ice extent anomaly tracking.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 360 min

Sources

SourceInternal routeLicense
NOAA NCEI NOAAGlobalTemp (Climate at a Glance)/api/global-tempdataset citation required
NOAA Global Monitoring Laboratory — CO2 at Mauna Loa (weekly)/api/co2US Government public domain (credit NOAA GML; no endorsement implied)

Technologies

  • useFeed
  • JSON
  • CSV
  • CSS bars
  • SeriesView

Carbon & Emissions

Widgetcarbon-emissions

Facility emissions, global CO2 data and carbon credit registries.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 360 min

Sources

SourceInternal routeLicense
NOAA Global Monitoring Laboratory — CO2 at Mauna Loa (weekly)/api/co2US Government public domain (credit NOAA GML; no endorsement implied)
Our World in Data — energy dataset/api/energy-mixCC BY 4.0 (OWID); third-party data (Energy Institute, EIA, Ember) keeps its original terms

Technologies

  • useFeed
  • CSV
  • SeriesView
  • Radix Tabs (shadcn/ui)

Water Resources

Widgetwater-resources

Streamflow gauges, drought severity and reservoir levels.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Power Plants & Grid

Widgetpower-plants-grid

Global power plant database with 34,900+ facilities, plus electricity grid capacity.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 1440 min

Sources

SourceInternal routeLicense
Our World in Data — energy dataset/api/energy-mixCC BY 4.0 (OWID); third-party data (Energy Institute, EIA, Ember) keeps its original terms

Technologies

  • useFeed
  • CSV
  • Radix Tabs (shadcn/ui)
  • Select (shadcn/ui)

Weather Monitor

Widgetweather-monitor

Global city weather conditions, wind speeds, jet stream, UV index and fog or visibility monitoring.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 5 min

Sources

SourceInternal routeLicense
NOAA National Hurricane Center (CurrentStorms)/api/hurricanesUS Government public domain (not to be modified and presented as official)

Technologies

  • useFeed
  • JSON

Oil & Gas Infrastructure

Widgetoil-gas-infrastructure

Rig counts, strategic reserve stocks, petroleum data, offshore platforms and heating or cooling degree days.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Infrastructure & Logistics

Widgetinfrastructure-logistics

Food supply disruption alerts, water infrastructure warnings and internet outage monitoring.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Innovation & IP

Widgetinnovation-ip

Patent grants with assignee analysis and global intellectual property statistics.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Supply Chain Intel

Widgetsupply-chain-intel

Chokepoint flow tab: daily ship transits per strait vs the previous 7 days (IMF PortWatch, non-commercial flag only). Snowpack and semiconductor lead times stay COMING SOON (no source).

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 10 min

Sources

SourceInternal routeLicense
METAQUANTICS chokepoint status (derived from conflict RSS + AIS + NGA MSI navigational warnings, not endorsed by NGA; IMF PortWatch transits when the non-commercial flag is on — Source: International Monetary Fund, PortWatch)/api/chokepointsnot cataloged
IMF PortWatch (Daily Chokepoints Data) — Source: International Monetary Fund, PortWatch/api/portwatchIMF Copyright and Terms — reuso não comercial com atribuição; comercial só com permissão

Technologies

  • useFeed
  • Radix Tabs (shadcn/ui)
  • src/lib/intel/chokepoint-flow.ts

Traffic Camera

Widgettraffic-camera

Live traffic camera feeds from thousands of road cameras: filter by state, county and road type.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Live Cameras

Widgetlive-cameras

Public live cameras from the UK network (TfL) with names, locations and links to the stream.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 60 min

Sources

SourceInternal routeLicense
Transport for London (TfL) cameras/api/cctvnot cataloged

Technologies

  • useFeed

Meshtastic Network

Widgetmeshtastic-network

Live Meshtastic mesh radio network: node map, role distribution, hardware stats and regional coverage.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Ham Radio Repeaters

Widgetham-radio-repeaters

Amateur radio repeater directory: locations, frequencies, modes and emergency communication networks.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Lighthouses

Widgetlighthouses

Global lighthouse directory with coordinates, island references and activation counts.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Cyber Intelligence

Widgetcyber-intelligence

CISA known exploited vulnerabilities from the last 30 days, with vendor, product and remediation due date.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 10 min

Sources

SourceInternal routeLicense
CISA Known Exploited Vulnerabilities/api/cyber-threatsnot cataloged

Technologies

  • useFeed
  • CISA KEV JSON

Cloudflare Radar

Widgetcloudflare-radar

DDoS attack intelligence, global internet health, top services and AI bot traffic analytics.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Aviation Alerts

Widgetaviation-alerts

Aviation spectrum by country: EASA conflict-zone bulletins, GPS interference inferred from ADS-B and FAA GNSS NOTAMs, flagging strong jamming with no bulletin.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 15 min

Sources

SourceInternal routeLicense
METAQUANTICS airspace spectrum by country (derived, in-process)/api/airspace/spectrumnot cataloged
EASA Conflict Zone Information Bulletins (CZIB) — reused with attribution; not endorsed by EASA/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB
adsb.fi Open Data (ADS-B)/api/flightsnot cataloged
OpenSky Network/api/flightsnot cataloged
FAA NOTAM API (GNSS-interference NOTAMs; off until FAA_NOTAM_CLIENT_ID / FAA_NOTAM_CLIENT_SECRET are set; not endorsed by the FAA)/api/airspace/spectrumFAA API portal terms not read (commercial use unknown); omitted in commercial mode

Technologies

  • useFeed
  • Table + Badge + ScrollArea (shadcn/ui)
  • src/lib/intel/airspace-spectrum.ts
  • src/lib/ops/airspace-spectrum-data.ts
  • Intl.DisplayNames

Maritime Intelligence

Widgetmaritime-intelligence

Chokepoint risk, AIS vessel tracking and the world ports catalog.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 10 min

Sources

SourceInternal routeLicense
aisstream.io (AIS)/api/maritimenot cataloged

Technologies

  • useFeed
  • AIS WebSocket

Aircraft Directory

Widgetaircraft-directory

Directory of all tracked aircraft with callsign, model and altitude.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 3 min

Sources

SourceInternal routeLicense
adsb.fi Open Data (ADS-B)/api/flightsnot cataloged
OpenSky Network/api/flightsnot cataloged

Technologies

  • useFeed
  • ADS-B

Space Launches

Widgetspace-launches

Upcoming rocket launches with live countdown timers and military launch filtering.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Space Intelligence

Widgetspace-intelligence

Geomagnetic Kp index and storm level, solar flares and NOAA space weather alerts.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 10 min

Sources

SourceInternal routeLicense
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain
NASA/JPL CNEOS (Fireball and Close Approach APIs)/api/meteorsno terms published (unverified)

Technologies

  • useFeed
  • NOAA SWPC JSON
  • NASA JPL JSON

TV: US News

Widgettv-us-news

Live US major news streams from the main networks.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

TV: International

Widgettv-international

Live international news streams from broadcasters around the world.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

TV: Political

Widgettv-political

Live political news and commentary from legislature and independent channels.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

TV: Financial

Widgettv-financial

Live financial news streams from the main business channels.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

TV: Protest/Unrest

Widgettv-protest-unrest

Live streams covering protests, civil unrest and on-the-ground reporting from independent journalists.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

World Clock

Widgetworld-clock

Global financial center times in the selected timezone.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh On demand or no automatic polling

Sources

SourceInternal routeLicense
Browser Intl API—API do navegador (sem dado de terceiros)

Technologies

  • Intl.DateTimeFormat

Data Feed Status

Widgetdata-feed-status

Live health overview of the data feeds with quick access to the full Sources & Status panel.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 1 min

Sources

SourceInternal routeLicense
METAQUANTICS feed probe (sondagem de saúde do servidor)—MIT (repositório METAQUANTICS); mede rotas do próprio app

Technologies

  • useFeed
  • Promise.allSettled

Election Dashboard

Widgetelection-dashboard

Brazil's 2026 presidential election (2nd round, TSE): national count, candidates and the leader of each state (UF). With no count published it says so: nothing is estimated.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 1 min

Sources

SourceInternal routeLicense
Tribunal Superior Eleitoral (TSE) — presidential election results (not affiliated with or endorsed by the TSE)/api/elections/brBrazilian government open data (TSE electoral results: public information, Lei 12.527/2011); host-specific reuse terms not located in automated reading; human review pending

Technologies

  • useFeed
  • Progress + Badge + ScrollArea (shadcn/ui)
  • src/lib/feeds/tse.ts
  • src/lib/ops/election-data.ts
  • Intl.NumberFormat

Election Map

Widgetelection-map

Choropleth election results map with party-colored regions and candidate breakdown.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

FEMA Dashboard

Widgetfema-dashboard

FEMA disaster declarations and emergency alerts: federally declared disasters and public alert history.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Timeline

Widgettimeline

News, weather, earthquakes and cyber threats merged into one chronological stream, grouped by age, with search and category filter.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh On demand or no automatic polling

Sources

SourceInternal routeLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
CISA Known Exploited Vulnerabilities/api/cyber-threatsnot cataloged
GDACS (UN / European Commission)/api/gdeltnot cataloged
METAQUANTICS correlation engine (derived, 3 declarative adapters)/api/correlationnot cataloged

Technologies

  • useFeed
  • src/lib/ops/timeline-data.ts
  • Intl.DateTimeFormat

Social Feeds

Widgetsocial-feeds

Live OSINT feed from monitored social accounts with topic classification and geolocation badges.

How it works

Catalog widget listed for parity with the original Console. It is not connected to a data source yet and says so, instead of showing made-up data.

Refresh On demand or no automatic polling

Sources

No external data source: interface element.

Instability Event Index

Widgetinstability-event-index

Country ranking from an editorial instability baseline, adjusted by live earthquake magnitude from USGS.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 60 min

Sources

SourceInternal routeLicense
METAQUANTICS editorial baseline + USGS/api/country-risknot cataloged

Technologies

  • useFeed

Convergence

Widgetconvergence

Places where 3+ distinct event domains (conflict, unrest, military air/naval, quake, fire, cyclone, radiation) meet within 110 km of each other in 24 h.

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 5 min

Sources

SourceInternal routeLicense
METAQUANTICS convergence detector (derived)/api/convergencenot cataloged
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
adsb.fi Open Data (ADS-B)/api/flightsnot cataloged
aisstream.io (AIS)/api/maritimenot cataloged

Technologies

  • useFeed
  • src/lib/intel/convergence.ts
  • grade 1° x 1°

Military Postures

Widgetcorrelation-posture

Military air and naval activity next to conflict or unrest within 150 km in 24 h (declarative adapter; /api/correlation).

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 5 min

Sources

SourceInternal routeLicense
METAQUANTICS correlation engine (derived, 3 declarative adapters)/api/correlationnot cataloged
adsb.fi Open Data (ADS-B)/api/flightsnot cataloged
aisstream.io (AIS)/api/maritimenot cataloged

Technologies

  • useFeed
  • src/lib/intel/correlation
  • componentes conexos (150 km)
  • sessionStorage (fallback da tendencia)

Escalation

Widgetcorrelation-escalation

Conflict or unrest with an internet outage, censorship, travel advisory, sanction or health notice in the same country within 48 h (/api/correlation).

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 5 min

Sources

SourceInternal routeLicense
METAQUANTICS correlation engine (derived, 3 declarative adapters)/api/correlationnot cataloged
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending
CDC Travelers' Health — Travel Notices/api/health-noticesUS Government public domain (credit the CDC; not endorsed; content unaltered)

Technologies

  • useFeed
  • src/lib/intel/correlation
  • agrupamento por pais
  • sessionStorage (fallback da tendencia)

Disaster cascade

Widgetcorrelation-cascade

Quake, tsunami, cyclone, radiation, volcano, flood and fire chained within 250 km in 72 h (/api/correlation).

How it works

Catalog widget backed by a real GeoIntel route. It polls the route while the tab is visible and shows the response as is; the figures belong to the cited sources.

Refresh every 5 min

Sources

SourceInternal routeLicense
METAQUANTICS correlation engine (derived, 3 declarative adapters)/api/correlationnot cataloged
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
NOAA/NWS Tsunami Warning Centers (tsunami.gov Atom)/api/tsunamisno explicit license on the site (NWS content; unverified)
NOAA National Hurricane Center (CurrentStorms)/api/hurricanesUS Government public domain (not to be modified and presented as official)

Technologies

  • useFeed
  • src/lib/intel/correlation
  • componentes conexos (250 km)
  • sessionStorage (fallback da tendencia)
Console (Clone)

Menus and panels

Menus in the top bar and in the Console toolbar, and the panels they open.

CONSOLE

Menutopbar-ops

Opens the Console, the grid panel of global monitoring widgets: map, air radar, news, markets, weather, conflicts and briefing.

How it works

This is the mode tab in the top bar that goes to /console and stays highlighted while you are there. The GLOBAL tab (/global) is the full interactive map; the other tabs (Stress, World Live, Ripple, OSINT and Connectors) open their modules.

Sources

No external data source: interface element.

Technologies

  • Next.js Link
  • usePathname

AI Analysis

Menusubbar-analyst

Opens the AI Analysis panel for questions about the global situation.

How it works

Opens the AI Analysis drawer with three tabs: Chat (active), Who matters now (coming in W2) and Forecasts (coming in W3). In Chat, your question goes to /api/ai/analyze, which builds the context on the server from a closed list of public feeds (news, USGS earthquakes and volcanoes, tsunami bulletins, NHC storms, CISA KEV and advisories, State Department advisories level 3-4, NOAA space weather scales) and never accepts context from the browser. With a Gemini key on the server, the answer cites only sources present in that context; links and unlisted source names written by the model are removed. Without a key, or if the provider fails, the panel shows NO AI and a deterministic synthesis of the same feeds.

Sources

SourceInternal routeLicense
METAQUANTICS World News (agency RSS only)/api/newsnot cataloged
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
USGS Volcano Hazards Program/api/volcanoesUS Government public domain
NOAA Tsunami Warning Centers (tsunami.gov)/api/tsunamisnot cataloged
NOAA National Hurricane Center/api/hurricanesnot cataloged
CISA Known Exploited Vulnerabilities/api/cyber-threatsnot cataloged
CISA Cybersecurity Advisories/api/cisa-advisoriesnot cataloged
US State Department travel advisories/api/travel-advisoriesnot cataloged
NOAA SWPC space weather scales/api/space-scalesnot cataloged
Google Gemini API/api/ai/analyzenot cataloged

Technologies

  • Radix Sheet (shadcn/ui)
  • Next.js Route Handler
  • zod
  • Google Gemini API (opcional)
  • analyst (src/lib/ai/analyst)

Limitations

  • AI-generated text: may contain errors and omissions and is not verified.
  • Without a server AI key (or if the provider fails) the answer is a deterministic synthesis marked NO AI, not model prose.
  • Questions with personal data patterns (e-mail, CPF, CNPJ, phone, card) are refused; the check is a simple pattern match, not a full PII classifier.
  • Telegram channels are shown with a link and never sent to the AI analyst or to the Alerts AI summary: the Telegram terms prohibit AI use, so only agency (RSS) items from /api/news reach the model.
  • Never sent to AI: source.imf.portwatch-chokepoints (IMF PortWatch, chokepoint flow). Its terms do not allow the data to be used to train language models, so the feed list of the AI Analysis and the Daily Briefing does not include it and the MCP server withholds it (DM-18), even with the non-commercial flag on.
  • Never sent to AI: source.telegram.public-channels (Telegram public channels). The platform terms prohibit scraping and AI use, so the channels are only shown with a link; the AI Analysis and Daily Briefing context drops every channel item, the Alerts AI summary (the AI OVERVIEW button of the Alerts panel, POST /api/ai/overview in alerts mode) also drops anything that came from a channel on the server and only sends agency items to the model, and the MCP server withholds the source (DM-18).

Alerts

Menusubbar-alerts

Alerts: manage your local rules, see the fire history and the unread bell.

How it works

Opens the alert management panel (rules and history). The badge counts unread fires. Rules evaluate real feeds in the browser while the app is open; there is a link to /alerts, the global live feed.

Sources

SourceInternal routeLicense
METAQUANTICS Alerts Center/alertsnot cataloged

Technologies

  • Radix Dialog + Tabs (shadcn/ui)
  • Next.js Link
  • localStorage
  • zod
  • Notification API

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Reports

Menusubbar-reports

Generates downloadable reports: country brief, current deck, case board and the Console map image (PNG).

How it works

Choose the type (country brief as Markdown, current deck as JSON/CSV per widget, or case board as Markdown/JSON) and click Generate: the file is built in the browser and downloaded, always with source, time, license and method version. The list shows only the metadata of the last 20 reports. The map image (PNG) captures the current Console map with a footer of the credits of the visible layers; layers blocked by license are not drawn.

Sources

No external data source: interface element.

Technologies

  • Radix Popover (shadcn/ui)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Board style

Menusubbar-layout

Chooses the board style: free grid or four theme columns.

How it works

Grid: free widgets you drag and resize. Columns by theme: four columns (Conflict & security, World & instability, Markets & energy, Air & sea) where cards stack and can be dragged between them; each column can be collapsed. The choice, order and collapsed columns are saved in this browser's local storage.

Sources

No external data source: interface element.

Technologies

  • Radix DropdownMenu (shadcn/ui)
  • HTML Drag and Drop
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Layout

Menusubbar-geopolitics-layouts

Ready-made Stress board layouts and closed widgets.

How it works

Pick Full, Compact, Map focus or Country terminal to rearrange the 15 widgets at once. If you closed any widget, the list below lets you reopen it, and the number on the button shows how many are closed. The layout is saved in this browser's local storage.

Sources

No external data source: interface element.

Technologies

  • Radix DropdownMenu (shadcn/ui)
  • react-grid-layout 2.2.4
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Restore default

Menusubbar-geopolitics-reset

Returns the Stress board to the default layout.

How it works

Restores the Full layout with all 15 widgets, no collapsed cards or custom text scale, and resets the theme-column order. A notice lets you undo for a few seconds. It only affects this browser.

Sources

No external data source: interface element.

Technologies

  • react-grid-layout 2.2.4
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Decks

Menusubbar-decks

Deck manager: switch the layout, restore closed widgets or reset the panel.

How it works

Opens the manager with the active deck, the list of closed widgets (to restore them), the reset-layout button and eight grid templates: Command Center, Equal, Map Focus, 2, 3 and 4 Columns, Sidebar and Stack. The number in parentheses shows how many widgets are closed. The layout is saved in the browser's local storage and applies only to this browser.

Sources

No external data source: interface element.

Technologies

  • Radix Popover (shadcn/ui)
  • react-grid-layout 2.2.4
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Status badges

Menutopbar-status-badges

Top bar counters: sources degraded now and alert firings not yet read. Click opens Sources & Status already filtered, or the Alerts history.

How it works

The degraded counter reads the single server health probe (every 60 s) shared with Sources & Status; it counts stale, erroring, empty or old-content feeds. The findings counter reads the alert history kept in this browser. Below 1900 px only icon + counter are shown; the tooltip carries the text.

Refresh every 1 min

Sources

SourceInternal routeLicense
METAQUANTICS — sondagem única de saúde de Fontes e Status—MIT (repositório METAQUANTICS); mede rotas do próprio app
METAQUANTICS Alerts Center/alertsnot cataloged

Technologies

  • useSourceHealth (health-store)
  • Radix Tooltip (shadcn/ui)
  • Next.js Link

Limitations

  • Server and CDN caching (tens of seconds to a few minutes) means updates can lag beyond the widget interval.
  • State is kept only in this browser's local storage and does not sync across devices.

Preferences

Menutopbar-preferences

Menu formerly called Admin Console: appearance (Style Studio), language, Docs, Privacy, System status, shortcuts, Install app, My lists and settings export/import.

How it works

Renamed in Wave 1 (DM-08). The language choice is stored in the metaquantics-locale cookie, so server-rendered HTML already comes in the chosen language (DM-09). Nothing here is sent to a server except the cookie itself.

Sources

No external data source: interface element.

Technologies

  • Radix DropdownMenu (shadcn/ui)
  • Style Studio
  • cookie metaquantics-locale

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Sources & Status

Menusubbar-data

Lists the real data sources of this app and registry, with live health, filters, search and category groups.

How it works

Built from the app's own /api routes and registry/sources/*.yaml. The route /api/connectors/health probes the curated routes with a 20 s timeout and caches the result for 30 s; the state of each source comes from the single Connectors health rule (online up to 2x the interval; beyond that, stale). The original catalogs 320 feeds; this panel states the real number of sources this repository has.

Sources

SourceInternal routeLicense
METAQUANTICS feed probe (sondagem de saúde do servidor)—MIT (repositório METAQUANTICS); mede rotas do próprio app

Technologies

  • registry/sources/*.yaml
  • Promise.allSettled
  • useFeed

My lists

Paneltopbar-my-lists

One place for what you follow: followed countries, Markets watchlist, saved searches and monitors.

How it works

Each tab reads the same store used elsewhere (the country star, the Markets star, Ripple/OSINT saved searches, news-feed monitors). Everything stays in this browser and is included in the settings export.

Sources

No external data source: interface element.

Technologies

  • Radix Dialog + Tabs (shadcn/ui)
  • src/lib/lists (localStorage)
  • useSyncExternalStore

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Export / import settings

Paneltopbar-settings-data

Downloads or reads a versioned metaquantics-settings.json with decks, map, alert rules, Live, Ripple, OSINT, favourites, language, lists and sources.

How it works

Import validates the file (zod), shows what changes and asks to merge or replace before applying. Files from a newer version are refused. No account or sync: moving settings between devices is manual.

Sources

No external data source: interface element.

Technologies

  • src/lib/settings/portable.ts (metaquantics-settings.json versionado)
  • zod
  • Blob download

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

AI ANALYSIS

Panelanalyst-panel

AI Analysis drawer: grounded chat over public feeds, with analytic lenses and a no-AI fallback.

How it works

Side panel with the Chat, Who matters now and Forecasts tabs. Chat sends only your question, the chosen lens and the language; the server builds the context from public feeds (each item carries its source), calls Gemini when a key is configured and post-processes the answer so it cites only listed sources and contains no links. Each reply ends with "provider · lens · version" and the list of sources in context, each one opening its node in Connectors. Without AI the reply is a deterministic synthesis: counts and highlights per domain with their sources. Questions with personal data patterns (e-mail, CPF, CNPJ, phone, card) are blocked in the browser and again on the server. Limit: 5 questions per minute.

Sources

SourceInternal routeLicense
METAQUANTICS World News (agency RSS only)/api/newsnot cataloged
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
USGS Volcano Hazards Program/api/volcanoesUS Government public domain
NOAA Tsunami Warning Centers (tsunami.gov)/api/tsunamisnot cataloged
NOAA National Hurricane Center/api/hurricanesnot cataloged
CISA Known Exploited Vulnerabilities/api/cyber-threatsnot cataloged
CISA Cybersecurity Advisories/api/cisa-advisoriesnot cataloged
US State Department travel advisories/api/travel-advisoriesnot cataloged
NOAA SWPC space weather scales/api/space-scalesnot cataloged
Google Gemini API/api/ai/analyzenot cataloged

Technologies

  • Radix Sheet + Tabs (shadcn/ui)
  • analyst-prompts (src/lib/ops)
  • Next.js Route Handler
  • zod
  • Google Gemini API (opcional)
  • analyst (src/lib/ai/analyst)

Limitations

  • AI-generated text: may contain errors and omissions and is not verified.
  • Without a server AI key (or if the provider fails) the answer is a deterministic synthesis marked NO AI, not model prose.
  • Questions with personal data patterns (e-mail, CPF, CNPJ, phone, card) are refused; the check is a simple pattern match, not a full PII classifier.
  • Feed text reaches the model as delimited data and goes through an instruction-injection pattern filter (en/pt/es): ignore/forget/override previous instructions, "you are now", "act as", "new instructions:" and requests to reveal the prompt, only as an imperative at the start of a clause (the match becomes "[removido]"). The filter is a set of regular expressions and does not cover every phrasing: paraphrases, other languages and an injection mid-sentence without punctuation or conjunction get through — an accepted residual risk, mitigated by grounding the answer (links and sources outside the context are removed).
  • Telegram channels are shown with a link and never sent to the AI analyst or to the Alerts AI summary: the Telegram terms prohibit AI use, so only agency (RSS) items from /api/news reach the model.
  • Never sent to AI: source.imf.portwatch-chokepoints (IMF PortWatch, chokepoint flow). Its terms do not allow the data to be used to train language models, so the feed list of the AI Analysis and the Daily Briefing does not include it and the MCP server withholds it (DM-18), even with the non-commercial flag on.
  • Never sent to AI: source.telegram.public-channels (Telegram public channels). The platform terms prohibit scraping and AI use, so the channels are only shown with a link; the AI Analysis and Daily Briefing context drops every channel item, the Alerts AI summary (the AI OVERVIEW button of the Alerts panel, POST /api/ai/overview in alerts mode) also drops anything that came from a channel on the server and only sends agency items to the model, and the MCP server withholds the source (DM-18).
  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.
  • Includes state-run and declared-bias sources; feed order says nothing about credibility.

DECK MANAGER

Paneldecks-panel

Deck manager panel, split between "My decks" and templates.

How it works

Left column: the active deck, closed widgets with a restore action and the reset button. Right column: grid templates that rearrange all visible widgets deterministically and without overlap. Any later drag or resize marks the deck as "Custom".

Sources

No external data source: interface element.

Technologies

  • Radix Popover (shadcn/ui)
  • layout-storage (localStorage)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Missions

Panelmissions-panel

Shortcuts that set up deck, layers, window, region and Live scene at once, for one kind of work.

How it works

Nine missions (Crisis Desk, Supply Chains and Chokepoints, Energy Security, Newsdesk, Markets and Macro, Cyber and Digital Infrastructure, Climate and Disasters, Health and Biosecurity, Brazil). Data comes from the layers and widgets that already exist; what does not exist yet shows as “Partial” with the reason. Also works by link: /console?missao=<id>.

Sources

No external data source: interface element.

Technologies

  • Missões (src/lib/ops/missions.ts)
  • filtro global
  • layer-catalog
  • Live (cenas)
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Widget Manager

Panelwidget-manager

Browse the catalog of 66 widgets by category, search, favorite and toggle which ones are in the active deck.

How it works

Dialog with a search box, one tab per category (with counts), sectioned cards (icon, name, active badge, favorite star, add/remove, description, category, refresh interval and number of feeds), plus Select all and Clear all. Select all adds every catalog widget to the deck, which loads their feeds; widgets marked "soon" are not connected to data yet.

Sources

No external data source: interface element.

Technologies

  • Dialog (Radix)
  • Tabs (Radix)
  • localStorage

My saved decks

Paneldecks-saved

Your decks stored in this browser: switch, rename or delete them; the active one is marked.

How it works

Each deck keeps its own layout and widget list in localStorage. The last remaining deck cannot be deleted. The first deck reuses the layout saved before multi-deck support existed.

Sources

No external data source: interface element.

Technologies

  • localStorage
  • react-grid-layout

Create alert (6 steps)

Panelalerts-wizard

Wizard: name, sources, filters, cadence, channels and review; it creates or edits a local rule.

How it works

Rules are stored in this browser only and have no plan limit (technical cap: 50). Filters: keywords, negations, region (text, box or Cartographer zone) and severity. Cadence: real time (app open), hourly or daily digest. Channels: in-app and browser notification are real; email and webhook are unavailable.

Sources

No external data source: interface element.

Technologies

  • Dialog (Radix)
  • localStorage
  • zod
Console (Clone)

Controls

Controls inside widgets and in each widget frame: tabs, filters, buttons and deck templates.

Deck tabs

Controldeck-tabs

Up to 5 decks open side by side: click a tab to switch without reloading. Double-click renames, drag reorders.

How it works

Each tab is a saved deck with its own layout; only the active tab mounts its widgets, so open tabs add no extra requests. The active deck goes to the address as ?deck=<id> (reloading reopens it). Keyboard: arrow keys move the focus and Enter switches; Alt+1 to 5 jumps to a tab and Alt+Page Down/Page Up cycles; on a focused tab, Delete closes it, F2 renames it and Ctrl+Shift+arrows move it. Right-click opens the same actions. Ctrl+W and Ctrl+Tab belong to the browser and are not used. Tabs and layouts are stored in this browser only.

Sources

No external data source: interface element.

Technologies

  • Radix Tabs activationMode="manual" (shadcn/ui)
  • Radix ContextMenu (shadcn/ui)
  • HTML Drag and Drop
  • deck-tabs (src/lib/ops/deck-tabs.ts)
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Close tab

Controldeck-tabs-close

Closes only the tab: the deck and its layout stay saved in Decks.

How it works

Closing the active tab activates the neighbor on the right (or on the left at the end). The last open tab cannot be closed. To delete a deck for good, use Decks › My saved decks.

Sources

No external data source: interface element.

Technologies

  • deck-tabs (src/lib/ops/deck-tabs.ts)
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Open another deck

Controldeck-tabs-new

Opens the Decks manager to pick a saved deck, create one from a template or apply a Mission.

How it works

In the manager, "Open in new tab" puts the deck in a new tab (up to 5); clicking the deck name shows it in the current tab. A new deck or a Mission opens in a new tab when there is room and otherwise takes the current tab.

Sources

No external data source: interface element.

Technologies

  • Radix Popover (shadcn/ui)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Open in new tab

Controldecks-open-tab

Opens this deck in a new tab next to the current ones (up to 5).

How it works

If the deck is already open, its tab is activated. With 5 tabs open the action is refused with a notice: close a tab first. The deck layout is the one saved in this browser.

Sources

No external data source: interface element.

Technologies

  • deck-tabs (src/lib/ops/deck-tabs.ts)
  • sonner (aviso de 5 abas)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

TV mode

Controltv-mode

Full-screen rotation that shows one widget (or module) at a time, on a timer.

How it works

Opens a setup popover (time per screen: 30, 60, 90 or 120 s; what to show: the widgets of the active deck or the Stress and Live modules). With widgets, only the widget on display is mounted, so rotating adds no requests beyond the feeds of that widget. With modules, the Stress and Live pages are each loaded once when TV mode starts (with their own feeds) and stay loaded while it runs. Esc (or the exit button) leaves and restores the deck and any maximized widget you had. Shift+T toggles it outside text fields. With "reduce motion" on in your system there is no transition. If the browser refuses full screen, TV mode keeps running in the window and says so. The screen is kept awake when the browser allows it and released on exit. The setup is stored in this browser only.

Sources

No external data source: interface element.

Technologies

  • tv-mode (src/lib/ops/tv-mode.ts)
  • Fullscreen API (opcional)
  • Screen Wake Lock API (opcional)
  • matchMedia prefers-reduced-motion
  • Radix Popover (shadcn/ui)
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Time per screen

Controltv-interval

How long each widget or module stays on screen: 30, 60, 90 or 120 s.

How it works

The countdown restarts when you use next/previous and stops while paused. The choice is saved in this browser.

Sources

No external data source: interface element.

Technologies

  • Radix ToggleGroup (shadcn/ui)
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

What TV mode shows

Controltv-target

The visible widgets of the active deck, or the Stress and Live modules.

How it works

Widgets follow the order of the deck and skip hidden ones. Modules load Stress and Live once, each in a display-only frame of this same app (no top bar, no clicks), and switch between them without reloading. A deck with no visible widgets cannot start the widget rotation.

Sources

No external data source: interface element.

Technologies

  • Radix RadioGroup (shadcn/ui)
  • iframe mesmo-origem (modulos)
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Start TV mode

Controltv-start

Starts the rotation with the setup shown here and asks the browser for full screen.

How it works

Full screen needs a click or key press from you, which is why it starts here or with Shift+T. If the browser or a frame blocks it, TV mode runs inside the window.

Sources

No external data source: interface element.

Technologies

  • Fullscreen API (opcional)
  • Screen Wake Lock API (opcional)

Exit TV mode

Controltv-exit

Leaves TV mode and brings back the deck as it was (Esc does the same).

How it works

Restores the previously maximized widget, if any, and the deck that was active. Leaving browser full screen with Esc also ends TV mode.

Sources

No external data source: interface element.

Technologies

  • tv-mode (src/lib/ops/tv-mode.ts)

Pause or resume

Controltv-pause

Freezes the countdown on the current screen.

How it works

While paused the screen stays up and the progress bar stops. Resuming continues from the same point.

Sources

No external data source: interface element.

Technologies

  • tv-mode (src/lib/ops/tv-mode.ts)

Previous and next screen

Controltv-step

Jumps to the neighboring screen and restarts the countdown.

How it works

The rotation wraps around: after the last screen comes the first. Only one screen is mounted at any time.

Sources

No external data source: interface element.

Technologies

  • tv-mode (src/lib/ops/tv-mode.ts)

Rotation progress

Controltv-progress

Which screen is showing and how many seconds remain until the next one.

How it works

The bar fills one step per second. With "reduce motion" on it advances without animation.

Sources

No external data source: interface element.

Technologies

  • Radix Progress (shadcn/ui)
  • matchMedia prefers-reduced-motion

Install app

Controltopbar-install-app

Installs METAQUANTICS as an app (PWA) when the browser offers it; otherwise shows manual steps per browser.

How it works

Uses the browser beforeinstallprompt event and the Web App Manifest (src/app/manifest.ts). No service worker or offline mode yet (W2). Nothing is sent to a server.

Sources

No external data source: interface element.

Technologies

  • beforeinstallprompt
  • Web App Manifest (src/app/manifest.ts)
  • Radix Dialog (shadcn/ui)

Generate report

Controlreports-generate

Generates the chosen report (country brief, current deck, case board or Console map image) and downloads the file.

How it works

The country brief reads the 10 Stress sources for the chosen country; the deck export uses the feed cache first (entries newer than the widget refresh interval, tagged with their age) and fetches only what is missing or stale. Every exported field is escaped (Markdown/CSV) and URLs go through safeHttpUrl; sanctions leave only as aggregates or uid. Nothing is sent to a server besides the data route reads.

Sources

No external data source: interface element.

Technologies

  • Markdown / JSON / CSV / PNG
  • safeHttpUrl
  • escape de Markdown e CSV

Limitations

  • Generated only on demand: it does not refresh itself or keep a briefing history.
  • Server and CDN caching (tens of seconds to a few minutes) means updates can lag beyond the widget interval.

Chat

Controlanalyst-tab-chat

Question answered from public feeds assembled on the server; every claim cites a source in that context.

How it works

The chat posts { query, lens, locale } to /api/ai/analyze. The route rejects any context sent by the client, builds its own from the allowlisted public feeds (never from personal-data or lookup routes), and returns the answer, the deterministic synthesis and the source list. Answers are unverified AI output.

Sources

SourceInternal routeLicense
METAQUANTICS World News (agency RSS only)/api/newsnot cataloged
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
USGS Volcano Hazards Program/api/volcanoesUS Government public domain
NOAA Tsunami Warning Centers (tsunami.gov)/api/tsunamisnot cataloged
NOAA National Hurricane Center/api/hurricanesnot cataloged
CISA Known Exploited Vulnerabilities/api/cyber-threatsnot cataloged
CISA Cybersecurity Advisories/api/cisa-advisoriesnot cataloged
US State Department travel advisories/api/travel-advisoriesnot cataloged
NOAA SWPC space weather scales/api/space-scalesnot cataloged
Google Gemini API/api/ai/analyzenot cataloged

Technologies

  • Next.js Route Handler
  • zod
  • Google Gemini API (opcional)
  • analyst (src/lib/ai/analyst)

Limitations

  • AI-generated text: may contain errors and omissions and is not verified.
  • Without a server AI key (or if the provider fails) the answer is a deterministic synthesis marked NO AI, not model prose.
  • Questions with personal data patterns (e-mail, CPF, CNPJ, phone, card) are refused; the check is a simple pattern match, not a full PII classifier.
  • Telegram channels are shown with a link and never sent to the AI analyst or to the Alerts AI summary: the Telegram terms prohibit AI use, so only agency (RSS) items from /api/news reach the model.
  • Never sent to AI: source.imf.portwatch-chokepoints (IMF PortWatch, chokepoint flow). Its terms do not allow the data to be used to train language models, so the feed list of the AI Analysis and the Daily Briefing does not include it and the MCP server withholds it (DM-18), even with the non-commercial flag on.
  • Never sent to AI: source.telegram.public-channels (Telegram public channels). The platform terms prohibit scraping and AI use, so the channels are only shown with a link; the AI Analysis and Daily Briefing context drops every channel item, the Alerts AI summary (the AI OVERVIEW button of the Alerts panel, POST /api/ai/overview in alerts mode) also drops anything that came from a channel on the server and only sends agency items to the model, and the MCP server withholds the source (DM-18).
  • Server and CDN caching (tens of seconds to a few minutes) means updates can lag beyond the widget interval.

Who matters now

Controlanalyst-tab-who-matters

Focal points: countries where recent headlines and measured map signals pile up, with urgency (GET /api/focal-points).

How it works

Same list as the Stress overview: headlines of the last 24 h attributed to countries by an editorial dictionary of places (countries, conflict zones, chokepoints — never people) crossed with the measured signals of the country index. Each point shows urgency, score, up to 3 headlines with a link to the source, signal chips and a link to the country brief. Formula and weights in Docs › Methodology.

Refresh every 5 min

Sources

SourceInternal routeLicense
METAQUANTICS World News (RSS + Telegram)/api/newsnot cataloged
Telegram public channels (t.me/s)/api/newsnot cataloged
METAQUANTICS country index (9 Geopolitics sources, read in-process)/api/focal-pointsnot cataloged

Technologies

  • Next.js Route Handler (derivada, em processo)
  • useFeed (polling)
  • focal-points (src/lib/intel)
  • entity-dictionary (src/lib/intel)

Limitations

  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.
  • Includes state-run and declared-bias sources; feed order says nothing about credibility.
  • Matching headlines to zones and classifying them by type uses keywords and can be wrong.
  • Server and CDN caching (tens of seconds to a few minutes) means updates can lag beyond the widget interval.

Forecasts

Controlanalyst-tab-forecasts

Auditable forecasts: base-rate probabilities with automatic resolution and a public scorecard (GET /api/forecasts, /api/forecasts/placar).

How it works

Each forecast is the Laplace base rate (k+1)/(n+2) over past weekly windows of the same public source (4 templates: M5+, M6+ and M7+ USGS earthquakes and new CISA KEV entries, with the history kept in the shared cache), published once a day by the forecasts job and resolved automatically by that source after the deadline. A source that is down never counts as "did not happen": after 7 days the forecast becomes "no resolution", outside the metric. Fewer than 30 windows: warming up, nothing published. The footer shows resolved and pending counts; the Brier score against the in-sample climatological reference (after the fact) and the calibration chart appear only with at least 30 resolved forecasts, 5 that happened and 5 that did not — before that the scorecard reads "In audit (n/30; yes x/5; no y/5)" and shows no performance number. No language model and no prediction market (decision D-7). Method and limits in Docs › Methodology.

Refresh every 15 min

Sources

SourceInternal routeLicense
USGS Earthquake Hazards Program (FDSN event count)/api/forecastsUS Government public domain
CISA Known Exploited Vulnerabilities Catalog/api/forecastsnot cataloged

Technologies

  • Radix Tabs + Tooltip (shadcn/ui)
  • useFeed (polling)
  • job forecasts (src/server/jobs/forecasts.ts)
  • scorecard (src/lib/forecasts)
  • Postgres (migracao 0015)

Limitations

  • The license of some of these sources has not yet been reviewed in registry/sources (license-gate); review before any commercial use.
  • Server and CDN caching (tens of seconds to a few minutes) means updates can lag beyond the widget interval.

Geoeconomics

Controlanalyst-tab-geoeconomy

Geoeconomics: what-if scenarios on chokepoint disruption with explicit coverage per country × HS chapter (POST /api/geoeconomia/cenario, GET /api/geoeconomia/vulnerabilidade).

How it works

Pick one of four preset scenarios (Hormuz, Panama, Bosphorus, Taiwan Strait) and up to 30 importers. For each country × HS chapter the table shows the potential annual impact in US$ or the reason the pair is missing (no key, license, no trade data, unknown corridor, no region). A partial total is shown as "≥ US$ X" with the lower-bound seal, and with no evaluated pair there is no total, never US$ 0. Data: annual UN Comtrade imports (owner key, daily job); the corridor table is editorial and versioned, the observed flow is only declarative, value of unknown corridor counts as unknown and concentration is a lower bound when the snapshot was compacted. Method in Docs › Methodology.

Sources

SourceInternal routeLicense
UN Comtrade (annual imports by HS2 chapter, owner key)/api/geoeconomia/cenarionot cataloged
METAQUANTICS chokepoint status (derived score; observed flow baseline is declarative only)/api/chokepointsnot cataloged

Technologies

  • Radix Select + Tooltip (shadcn/ui)
  • POST /api/geoeconomia/cenario
  • motor puro (src/lib/intel/geoeconomy)
  • job seed-comtrade (src/server/jobs/seed-comtrade.ts)

Limitations

  • The license of some of these sources has not yet been reviewed in registry/sources (license-gate); review before any commercial use.
  • Server and CDN caching (tens of seconds to a few minutes) means updates can lag beyond the widget interval.

Lens

Controlanalyst-lens

Chooses how the model frames the answer: neutral, PMESII-PT or red team. Same data, same grounding rules.

How it works

Each lens is a short system text written for METAQUANTICS and versioned (lens version shown in the reply footer). All lenses share the grounding rules: answer only from the data block, cite only listed sources, never write links. Without AI the lens is recorded but the deterministic synthesis is the same.

Sources

SourceInternal routeLicense
Google Gemini API/api/ai/analyzenot cataloged

Technologies

  • Radix ToggleGroup (shadcn/ui)
  • lenses (src/lib/ai/analyst/lenses.ts)

Limitations

  • AI-generated text: may contain errors and omissions and is not verified.
  • Needs an AI key configured on the server (GEMINI_API_KEY_n); without it the feature is unavailable, and rate and quota limits apply.

Sources in context

Controlanalyst-sources

Feeds that formed the context of this reply; each chip opens the feed node in Connectors.

How it works

The list comes from the server context, never from the model text. Unavailable feeds are marked; the count is the number of items the feed returned.

Sources

SourceInternal routeLicense
METAQUANTICS World News (agency RSS only)/api/newsnot cataloged
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
USGS Volcano Hazards Program/api/volcanoesUS Government public domain
NOAA Tsunami Warning Centers (tsunami.gov)/api/tsunamisnot cataloged
NOAA National Hurricane Center/api/hurricanesnot cataloged
CISA Known Exploited Vulnerabilities/api/cyber-threatsnot cataloged
CISA Cybersecurity Advisories/api/cisa-advisoriesnot cataloged
US State Department travel advisories/api/travel-advisoriesnot cataloged
NOAA SWPC space weather scales/api/space-scalesnot cataloged

Technologies

  • Next.js Link
  • Conectores (deep link)

Limitations

  • Server and CDN caching (tens of seconds to a few minutes) means updates can lag beyond the widget interval.
  • Never sent to AI: source.imf.portwatch-chokepoints (IMF PortWatch, chokepoint flow). Its terms do not allow the data to be used to train language models, so the feed list of the AI Analysis and the Daily Briefing does not include it and the MCP server withholds it (DM-18), even with the non-commercial flag on.
  • Never sent to AI: source.telegram.public-channels (Telegram public channels). The platform terms prohibit scraping and AI use, so the channels are only shown with a link; the AI Analysis and Daily Briefing context drops every channel item, the Alerts AI summary (the AI OVERVIEW button of the Alerts panel, POST /api/ai/overview in alerts mode) also drops anything that came from a channel on the server and only sends agency items to the model, and the MCP server withholds the source (DM-18).

Restore closed widgets

Controldecks-restore

Reopens a widget you had closed.

How it works

Widgets closed with the X button are only hidden (reversibly) and listed here; clicking one brings it back to the grid. The hidden list is saved in the browser's local storage together with the layout.

Sources

No external data source: interface element.

Technologies

  • layout-storage (localStorage)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Reset layout

Controldecks-reset

Returns the panel to the Command Center layout with all widgets visible.

How it works

Discards the current arrangement (positions, sizes and closed widgets) and applies the Command Center template to all default widgets. The action replaces the layout saved in this browser and asks for confirmation first.

Sources

No external data source: interface element.

Technologies

  • buildPreset
  • layout-storage (localStorage)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Reset welcome

Controlmissions-reset

Reopens the “Choose a mission” dialog and forgets the choice saved in this browser.

How it works

The first-visit choice (a mission, “Start empty” or closing without choosing) is kept in local storage. This button erases that record and opens the dialog again; no deck is changed or deleted.

Sources

No external data source: interface element.

Technologies

  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Start empty

Controlmissions-empty

Closes the dialog without applying a mission and keeps the current deck; the choice is remembered.

How it works

Nothing is changed: deck, layers and filters stay as they are. The dialog will not reopen by itself; reopen it via Decks › Missions › Reset welcome.

Sources

No external data source: interface element.

Technologies

  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Close

Controlmissions-dismiss

Closes without choosing (same as Esc); you can reopen it in Decks › Missions.

How it works

Closing the dialog records that you have seen it so it does not appear on every visit. No mission is applied.

Sources

No external data source: interface element.

Technologies

  • Radix Dialog (shadcn/ui)
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Active mission

Controlmission-chip

Shows the mission applied in this session; a long name is cut and shown in full here.

How it works

While the mission is active the chip reminds you which deck, layers, window, region and Live scene were applied. It disappears when you undo the mission or apply another.

Sources

No external data source: interface element.

Technologies

  • Radix Tooltip (shadcn/ui)
  • missions (src/lib/ops/missions.ts)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Undo mission

Controlmission-chip-undo

Returns map layers, global filters and per-widget severity to their state before the mission.

How it works

Does the same as the Undo button in the notice: restores map layers, global filters (time, region, country, severity) and per-widget overrides. The mission deck stays saved in Decks.

Sources

No external data source: interface element.

Technologies

  • missions (src/lib/ops/missions.ts)
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Mission sources

Controlmission-chip-sources

Shows the source coverage the mission applied (a Sources and Status preset).

How it works

Applying the mission makes enabled sources and the tier filter follow the preset; Undo restores exactly what was there before, including sources you turned off by hand. It is a suggestion: adjust it in Sources and Status.

Sources

No external data source: interface element.

Technologies

  • missions (src/lib/ops/missions.ts)
  • localStorage (STORAGE_KEYS.sources.*)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.
  • In a chain of missions (one applied on top of another), undoing the last one restores the sources from before the chain and the map, filters and scene from before the last mission.

Create suggested alert

Controlmission-chip-alert

Opens the alert wizard with the terms, name and minimum severity the mission suggests.

How it works

Nothing is created automatically: the wizard opens with initial values and you review, adjust and save. Only shown for missions that carry a suggested rule.

Sources

No external data source: interface element.

Technologies

  • Alertas (assistente de 6 passos)
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Command Center

Controlpreset-command-center

4-column flow grid: the default Console layout.

How it works

Lays widgets out in rows of up to 4 columns, in the original panel order. It is the initial layout and the target of "Reset layout". The grid has 12 columns; each row has uniform height, respecting each widget's minimum size, and the last item of an incomplete row widens to fill the remaining space.

Sources

No external data source: interface element.

Technologies

  • buildPreset (src/lib/ops/presets.ts)
  • react-grid-layout 2.2.4

Equal

Controlpreset-equal

Near-square grid with equally sized cells.

How it works

The column count is the square root (rounded up) of the widget count, limited by what fits in 12 columns given the minimum sizes. Good for comparing widgets with the same visual weight.

Sources

No external data source: interface element.

Technologies

  • buildPreset (src/lib/ops/presets.ts)
  • react-grid-layout 2.2.4

Map Focus

Controlpreset-map-focus

The first widget (the map) takes 2/3 of the width; the rest are stacked on the right.

How it works

Gives the top-priority widget (the first one, the World Map) 8 of 12 columns at full height and stacks the others in the right column with equal heights. Meant for when the map is the center of the operation.

Sources

No external data source: interface element.

Technologies

  • buildPreset (src/lib/ops/presets.ts)
  • react-grid-layout 2.2.4

2 Columns

Controlpreset-two-col

Two columns of equal width.

How it works

2-column flow (6 + 6 of 12), row by row, with uniform height per row and minimum sizes respected. Reads well on medium screens.

Sources

No external data source: interface element.

Technologies

  • buildPreset (src/lib/ops/presets.ts)
  • react-grid-layout 2.2.4

3 Columns

Controlpreset-three-col

Three columns of equal width.

How it works

3-column flow (4 + 4 + 4 of 12), row by row. A balance between density and legibility on wide screens.

Sources

No external data source: interface element.

Technologies

  • buildPreset (src/lib/ops/presets.ts)
  • react-grid-layout 2.2.4

4 Columns

Controlpreset-four-col

Four columns of equal width.

How it works

4-column flow (3 of 12 each), row by row. Highest information density; widgets with a larger minimum width automatically reduce the number of columns.

Sources

No external data source: interface element.

Technologies

  • buildPreset (src/lib/ops/presets.ts)
  • react-grid-layout 2.2.4

Sidebar

Controlpreset-sidebar

The first widget takes 3/4 of the width; the rest form a sidebar on the right.

How it works

The first widget sits on the left with 9 of 12 columns at full height, and the others stack in a narrow 3-column strip on the right with equal heights.

Sources

No external data source: interface element.

Technologies

  • buildPreset (src/lib/ops/presets.ts)
  • react-grid-layout 2.2.4

Stack

Controlpreset-stack

One column: all widgets stacked, one per row.

How it works

Each widget takes the full width on its own row. It is also the arrangement the Console uses on narrow screens (a derived read-only stack that leaves the saved layout untouched).

Sources

No external data source: interface element.

Technologies

  • buildPreset (src/lib/ops/presets.ts)
  • react-grid-layout 2.2.4

Drag handle

Controlframe-drag

Press and drag to move the widget on the grid.

How it works

The handle (dots icon) to the left of the title is the only area that starts a drag; the widget body stays interactive. On release the grid repositions the others to avoid overlap, the deck becomes "Custom" and the layout is saved in the browser. On narrow screens the grid becomes a read-only stack.

Sources

No external data source: interface element.

Technologies

  • react-grid-layout 2.2.4 (drag handle)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Maximize

Controlframe-maximize

Expands this widget in a window over the panel; close it to go back.

How it works

Opens the widget in a large dialog without changing the saved layout. The X button of the window only closes the expansion, without hiding the widget. Useful for reading the feed or the radar in detail.

Sources

No external data source: interface element.

Technologies

  • Radix Dialog (shadcn/ui)

Close

Controlframe-close

Hides the widget from the panel; it can be restored in Decks.

How it works

Closing does not delete data: the widget goes to the "Restore closed widgets" list of the Decks menu and the state is saved in the browser. Inside the expanded window, the same button only closes the expansion.

Sources

No external data source: interface element.

Technologies

  • layout-storage (localStorage)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Last update

Controlframe-updated

How long ago the browser last received data for this widget.

How it works

The "Xs / min / h ago" text shows the time since the last successful collection made by the browser (useFeed), refreshed every second. It is the collection time, not the event time at the source, and it does not include server cache delay. On the Daily Briefing it shows when the briefing was generated; widgets without feed data (such as the World Map) do not show the label.

Sources

No external data source: interface element.

Technologies

  • useFeed
  • formatAgo (src/lib/ops/time.ts)

Limitations

  • The "Xs ago" times show when the browser collected the data, not when the event happened at the source.

Collapse widget

Controlframe-collapse

Collapses the widget to its header; collapsed it fetches no data. Saved in the deck.

How it works

Collapsing leaves only the title bar (one grid row) and pauses the widget polling, as when it scrolls off screen. The original height stays saved: expanding returns to the same size. The state is kept per deck in the browser.

Sources

No external data source: interface element.

Technologies

  • layout-storage (localStorage)
  • FeedVisibilityContext (useFeed)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Widget help

Controlframe-help

Opens this widget section in the documentation (/docs), in a new tab.

How it works

The documentation lists the widget purpose, sources, refresh interval, technologies and limitations. The link points to the #widget-<id> anchor of the /docs page.

Sources

No external data source: interface element.

Technologies

  • /docs#widget-<id>

Summarize

Controlframe-summarize

Asks the Analyst for a summary of what this widget shows now.

How it works

Opens the Analyst with the question ready. Without an AI key it answers with the deterministic synthesis, and each statement carries the data class by origin. Nothing but the question is sent. For the Earthquakes, Cyber, Space and Weather widgets the summary is limited to the feed of that widget (the scope only narrows what the server sends; it never adds a source). Other widgets get the general summary of the public feeds.

Sources

No external data source: interface element.

Technologies

  • Analista (POST /api/ai/analyze)
  • analyst-bus (src/lib/ops/analyst-bus.ts)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Widget settings

Controlframe-gear

Options specific to this widget.

How it works

This widget has no settings of its own yet; the gear always stays in the header so settings show up here when they exist.

Sources

No external data source: interface element.

Technologies

  • Radix Popover (shadcn/ui)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Widget text size

Controlframe-text-scale

Own text size for this widget, 90–150 %, on top of the global size. Saved in the deck.

How it works

The gear opens a 90–150 % slider (5 % steps) with − / 100 % / + buttons. The value multiplies the global text size from Style Studio › Text size and applies only to the body of this widget; the other widgets do not change. It is kept per deck in the browser; 100 % removes the setting. It is not a layout action: undo ignores it.

Sources

No external data source: interface element.

Technologies

  • Radix Popover + Slider (shadcn/ui)
  • layout-storage (localStorage)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Text size

Controlappearance-text-scale

Scales the app text from 90 % to 150 %, including the fixed-size HUD labels; the top bar and widget headers grow at most 15 %. Alt+0 returns to 100 %.

How it works

The value becomes the --metaquantics-text-scale variable on the page root and multiplies the base font size (also on 2560 px and 3440 px screens) and every fixed-pixel text size of the interface. It is applied before the first paint, so the page does not flash at 100 %. Changing the Style Studio preset does not touch it. Saved only in this browser.

Sources

No external data source: interface element.

Technologies

  • --metaquantics-text-scale (CSS)
  • Radix Slider (shadcn/ui)
  • localStorage

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Radius

Controlradar-radius

Radar radius in miles: 5, 25, 50 or 100.

How it works

Sets the reach of the outer circle; the inner rings mark 25%, 50% and 75% of the radius. Aircraft outside the radius are not plotted. The filter runs in the browser over the data already downloaded, with no new request.

Sources

No external data source: interface element.

Technologies

  • Radix Select (shadcn/ui)
  • Haversine

Aircraft type

Controlradar-type

Filters aircraft by type: all, commercial, military or helicopter.

How it works

The category comes from the /api/flights route and sets the color in the legend: commercial, military, helicopter and private. Private aircraft only appear under "All". Aircraft on the ground or without a valid position are discarded. Coverage depends on volunteer ADS-B receivers.

Sources

SourceInternal routeLicense
adsb.fi Open Data (ADS-B)/api/flightsnot cataloged
OpenSky Network/api/flightsnot cataloged

Technologies

  • Radix Select (shadcn/ui)

Limitations

  • Coverage depends on volunteer ADS-B receivers: aircraft without a transponder, switched off or out of coverage do not appear, and positions can be seconds old.

Radar location

Controlradar-location

Centers the radar on your position (optional) or returns to the default center.

How it works

By default the radar uses a fixed center (São Paulo). On click the browser asks for geolocation permission; only then is your position read and used as the center. The coordinate stays only in page memory: it is not saved and the flights request does not include it. If permission is denied or unavailable, the radar stays on the default center.

Sources

SourceInternal routeLicense
Browser Geolocation API—not cataloged

Technologies

  • Geolocation API (opt-in)

All

Controlnews-tab-all

All feed items, newest first.

How it works

Shows all categories together. The following tabs only appear when the current data has items of that category.

Sources

SourceInternal routeLicense
Telegram public channels (t.me/s)/api/newsnot cataloged
BBC World (RSS)/api/newsnot cataloged
The Guardian World (RSS)/api/newsnot cataloged
Al Jazeera (RSS)/api/newsnot cataloged
The Times of Israel (RSS)/api/newsnot cataloged
TASS (RSS)/api/newsnot cataloged
Anadolu Agency (RSS)/api/newsnot cataloged
South China Morning Post (RSS)/api/newsnot cataloged
CNA - Channel NewsAsia (RSS)/api/newsnot cataloged
Africanews (RSS)/api/newsnot cataloged
OpenStreetMap Nominatim (geocoding)/api/newsODbL (OpenStreetMap contributors)

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

News

Controlnews-tab-news

General news: everything not classified as an event or rocket.

How it works

Default category for items that match neither the event nor the rocket rules. Includes reports from agencies and newsrooms via RSS and posts from public Telegram channels; every item is shown with the "unverified" label.

Sources

SourceInternal routeLicense
Telegram public channels (t.me/s)/api/newsnot cataloged
BBC World (RSS)/api/newsnot cataloged
The Guardian World (RSS)/api/newsnot cataloged
Al Jazeera (RSS)/api/newsnot cataloged
The Times of Israel (RSS)/api/newsnot cataloged
TASS (RSS)/api/newsnot cataloged
Anadolu Agency (RSS)/api/newsnot cataloged
South China Morning Post (RSS)/api/newsnot cataloged
CNA - Channel NewsAsia (RSS)/api/newsnot cataloged
Africanews (RSS)/api/newsnot cataloged
OpenStreetMap Nominatim (geocoding)/api/newsODbL (OpenStreetMap contributors)

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

Events

Controlnews-tab-event

Items about something that happened on the ground: attacks, drones, explosions, casualties, arrests.

How it works

Classification by keywords and topics (strikes, drones, air defence, ground combat, casualties, explosions, arson, evacuation) applied to the title and the start of the text. Items that mention a missile or rocket go to the Rockets tab. It is heuristic: there can be false positives.

Sources

SourceInternal routeLicense
Telegram public channels (t.me/s)/api/newsnot cataloged
BBC World (RSS)/api/newsnot cataloged
The Guardian World (RSS)/api/newsnot cataloged
Al Jazeera (RSS)/api/newsnot cataloged
The Times of Israel (RSS)/api/newsnot cataloged
TASS (RSS)/api/newsnot cataloged
Anadolu Agency (RSS)/api/newsnot cataloged
South China Morning Post (RSS)/api/newsnot cataloged
CNA - Channel NewsAsia (RSS)/api/newsnot cataloged
Africanews (RSS)/api/newsnot cataloged
OpenStreetMap Nominatim (geocoding)/api/newsODbL (OpenStreetMap contributors)

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

Rockets

Controlnews-tab-rocket

Items that mention rockets or missiles in the title or the start of the text.

How it works

Automatic classification by keywords (rocket, missile, ballistic, salvo, Iskander, HIMARS and others) applied to the title and the first 300 characters. An item in this tab indicates a mention, not a confirmed launch.

Sources

SourceInternal routeLicense
Telegram public channels (t.me/s)/api/newsnot cataloged
BBC World (RSS)/api/newsnot cataloged
The Guardian World (RSS)/api/newsnot cataloged
Al Jazeera (RSS)/api/newsnot cataloged
The Times of Israel (RSS)/api/newsnot cataloged
TASS (RSS)/api/newsnot cataloged
Anadolu Agency (RSS)/api/newsnot cataloged
South China Morning Post (RSS)/api/newsnot cataloged
CNA - Channel NewsAsia (RSS)/api/newsnot cataloged
Africanews (RSS)/api/newsnot cataloged
OpenStreetMap Nominatim (geocoding)/api/newsODbL (OpenStreetMap contributors)

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

Feed

Controlnews-pane-feed

Headlines grouped by story, with tier/state media and source count; sort by recent, importance or credibility.

How it works

Items from different outlets with the same headline (normalized title, canonical link and a 48 h window) become a single story, with the “n sources” or “Single source” chip. The “State media” chip marks stories with a state-media source documented in the repository; “T1–T4” shows the editorial tier when known. Monitors highlight their terms in titles.

Sources

SourceInternal routeLicense
Telegram public channels (t.me/s)/api/newsnot cataloged
BBC World (RSS)/api/newsnot cataloged
The Guardian World (RSS)/api/newsnot cataloged
Al Jazeera (RSS)/api/newsnot cataloged
The Times of Israel (RSS)/api/newsnot cataloged
TASS (RSS)/api/newsnot cataloged
Anadolu Agency (RSS)/api/newsnot cataloged
South China Morning Post (RSS)/api/newsnot cataloged
CNA - Channel NewsAsia (RSS)/api/newsnot cataloged
Africanews (RSS)/api/newsnot cataloged
OpenStreetMap Nominatim (geocoding)/api/newsODbL (OpenStreetMap contributors)

Technologies

  • Radix Tabs (shadcn/ui)
  • story-identity (src/lib/news)
  • credibility (src/lib/news)

Limitations

  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

Monitors

Controlnews-pane-monitors

Colored term lists that highlight matches in the feed and in Live and count them.

How it works

Up to 10 monitors, each with comma-separated terms (quotes keep phrases) and a color from the theme palette. The list is the same as the Live watch terms: editing here changes it there and vice versa. The count considers the news loaded now. “Turn into alert rule” opens the Alerts wizard with the terms filled in and the News source selected.

Sources

No external data source: interface element.

Technologies

  • Radix Tabs (shadcn/ui)
  • monitor-store (localStorage)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Sort news

Controlnews-sort

Recent, importance (sources, recency, category) or credibility (tier, corroboration, cap for state media). Saved.

How it works

Importance and credibility are separate numbers. Importance adds corroboration (distinct sources), recency (6 h half-life) and category. Credibility uses the outlet editorial tier when documented, a bonus per independent source and a cap for stories covered only by state media; an outlet with unknown tier sits in the middle of the scale, never as low risk.

Sources

No external data source: interface element.

Technologies

  • Radix Select (shadcn/ui)
  • credibility (src/lib/news)
  • localStorage

New monitor

Controlnews-monitor-add

Type comma-separated terms and add: the color is picked automatically.

How it works

Terms are matched ignoring case and accents. Use quotes for phrases with a comma or space. The monitor is saved in the browser and applies to the news-feed and Live.

Sources

No external data source: interface element.

Technologies

  • parseTerms (src/lib/live/filters.ts)
  • shadcn/ui Input

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

Monitor color

Controlnews-monitor-color

Highlight color of this monitor, taken from the theme palette.

How it works

The 10 colors come from the theme tokens (Style Studio recolors the highlights with the rest of the interface).

Sources

No external data source: interface element.

Technologies

  • Radix Select (shadcn/ui)
  • tokens do tema

Turn into alert rule

Controlnews-monitor-alert

Opens the Alerts wizard with this monitor terms and the News source already filled in.

How it works

Nothing is saved until you finish the wizard. If the rule limit was reached, the Alerts panel opens with the notice.

Sources

SourceInternal routeLicense
METAQUANTICS Alerts Center/alertsnot cataloged

Technologies

  • barramento de comandos (open-alert-draft)

Remove monitor

Controlnews-monitor-remove

Deletes the monitor and its terms from the news-feed and Live.

How it works

The terms stop being highlighted in both modules. Alert rules created from it keep existing.

Sources

No external data source: interface element.

Technologies

  • monitor-store (localStorage)

Limitations

  • State is kept only in this browser's local storage and does not sync across devices.

All

Controlweather-tab-all

All active severe weather events, most severe first.

How it works

Sorted by severity (high, medium, low) and then by most recent date. Type tabs only appear when there are events of that type.

Sources

SourceInternal routeLicense
NASA EONET v3/api/weathernot cataloged
NOAA National Weather Service (api.weather.gov)/api/weatherUS Government public domain
GDACS (UN / European Commission)/api/weathernot cataloged

Technologies

  • Radix Tabs (shadcn/ui)

Tropical

Controlweather-tab-tropical

Tropical cyclones, hurricanes, typhoons and severe storms.

How it works

Events whose type or title contains tropical, cyclone, hurricane, typhoon or severe storm; typically from GDACS (cyclones) and NASA EONET (severe storms). Classification is text-based.

Sources

SourceInternal routeLicense
GDACS (UN / European Commission)/api/weathernot cataloged
NASA EONET v3/api/weathernot cataloged
NOAA National Weather Service (api.weather.gov)/api/weatherUS Government public domain

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Tabs are derived from the event type/title text and can misclassify.

Tornado

Controlweather-tab-tornado

Tornado alerts.

How it works

Events whose type or title mentions tornado. They come mostly from NWS alerts, which cover only the US, so this tab does not represent the whole world.

Sources

SourceInternal routeLicense
NOAA National Weather Service (api.weather.gov)/api/weatherUS Government public domain

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • NWS alerts cover only the United States; for the rest of the world only GDACS and EONET apply.
  • Tabs are derived from the event type/title text and can misclassify.

Flood

Controlweather-tab-flood

Floods and flooding.

How it works

Events with "flood" in the type or title: NWS flood alerts (US) and GDACS floods (global).

Sources

SourceInternal routeLicense
GDACS (UN / European Commission)/api/weathernot cataloged
NOAA National Weather Service (api.weather.gov)/api/weatherUS Government public domain

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Tabs are derived from the event type/title text and can misclassify.

Heat

Controlweather-tab-heat

Extreme heat.

How it works

Events whose type or title mentions heat (heat waves, excessive heat alerts). They come mainly from NWS alerts and occasionally from EONET.

Sources

SourceInternal routeLicense
NOAA National Weather Service (api.weather.gov)/api/weatherUS Government public domain
NASA EONET v3/api/weathernot cataloged

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Tabs are derived from the event type/title text and can misclassify.

Dust

Controlweather-tab-dust

Dust and sand storms (haboob).

How it works

Events that mention dust or haboob (dust storms), which tend to appear in NWS alerts in the US Southwest and in EONET events.

Sources

SourceInternal routeLicense
NOAA National Weather Service (api.weather.gov)/api/weatherUS Government public domain
NASA EONET v3/api/weathernot cataloged

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Tabs are derived from the event type/title text and can misclassify.

Other

Controlweather-tab-other

Severe events that do not fit the other tabs.

How it works

Everything that does not match the text rules of the other tabs (for example strong winds, snow or ice, depending on the active alerts). Read the event title to understand the type.

Sources

SourceInternal routeLicense
NASA EONET v3/api/weathernot cataloged
NOAA National Weather Service (api.weather.gov)/api/weatherUS Government public domain
GDACS (UN / European Commission)/api/weathernot cataloged

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Tabs are derived from the event type/title text and can misclassify.

All

Controlconflict-tab-all

All conflict headlines, sorted by zone severity.

How it works

Joins all zones and types. The country chips below (when there is more than one zone) filter by zone; "Show more" loads headlines in batches of 15.

Sources

SourceInternal routeLicense
BBC World (RSS)/api/conflictsnot cataloged
Al Jazeera (RSS)/api/conflictsnot cataloged
The New York Times World (RSS)/api/conflictsnot cataloged
Liveuamap (reference links only, not queried)/api/conflictsLinks de referência; conteúdo não consultado nem copiado (termos do site)

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

Strikes

Controlconflict-tab-strike

Headlines about attacks: bombings, missiles, drones, offensives.

How it works

Keyword rule: strike(s), airstrike, missile, drone, shelling, bomb, attack, rocket, ballistic, offensive, killed. It is the type applied when no higher-priority rule matches; the priority is terror, siege, embargo and finally strike.

Sources

SourceInternal routeLicense
BBC World (RSS)/api/conflictsnot cataloged
Al Jazeera (RSS)/api/conflictsnot cataloged
The New York Times World (RSS)/api/conflictsnot cataloged
Liveuamap (reference links only, not queried)/api/conflictsLinks de referência; conteúdo não consultado nem copiado (termos do site)

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Matching headlines to zones and classifying them by type uses keywords and can be wrong.
  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

Embargo

Controlconflict-tab-embargo

Headlines about embargoes, sanctions, export restrictions and tariffs.

How it works

Keywords: embargo, sanction(s), export ban and tariff. It reflects press coverage of economic measures, not an official sanctions list.

Sources

SourceInternal routeLicense
BBC World (RSS)/api/conflictsnot cataloged
Al Jazeera (RSS)/api/conflictsnot cataloged
The New York Times World (RSS)/api/conflictsnot cataloged
Liveuamap (reference links only, not queried)/api/conflictsLinks de referência; conteúdo não consultado nem copiado (termos do site)

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Matching headlines to zones and classifying them by type uses keywords and can be wrong.
  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

Siege

Controlconflict-tab-siege

Headlines about sieges, blockades and starvation as a weapon.

How it works

Keywords: siege, besiege, blockade, encircle and starve. It has priority over embargo and strike in the classification.

Sources

SourceInternal routeLicense
BBC World (RSS)/api/conflictsnot cataloged
Al Jazeera (RSS)/api/conflictsnot cataloged
The New York Times World (RSS)/api/conflictsnot cataloged
Liveuamap (reference links only, not queried)/api/conflictsLinks de referência; conteúdo não consultado nem copiado (termos do site)

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Matching headlines to zones and classifying them by type uses keywords and can be wrong.
  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

Terror

Controlconflict-tab-terror

Headlines about terrorism and hostages.

How it works

Keywords: terror, suicide bomb, hostage, jihadist, al-shabaab, ISIS and car bomb. It has the highest priority in the classification. The label comes from the keyword, not from an official designation.

Sources

SourceInternal routeLicense
BBC World (RSS)/api/conflictsnot cataloged
Al Jazeera (RSS)/api/conflictsnot cataloged
The New York Times World (RSS)/api/conflictsnot cataloged
Liveuamap (reference links only, not queried)/api/conflictsLinks de referência; conteúdo não consultado nem copiado (termos do site)

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Matching headlines to zones and classifying them by type uses keywords and can be wrong.
  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

Zones

Controlconflict-tab-zones

Monitored conflict zones, with severity, event count and a reference link.

How it works

Lists the fixed zones defined in the /api/conflicts route (war, high, elevated and moderate), sorted by severity and number of events. The "Source" link points to the zone page on Liveuamap, used only as a reference: METAQUANTICS does not query Liveuamap automatically. There are no front-line polygons in this widget.

Sources

SourceInternal routeLicense
Liveuamap (reference links only, not queried)/api/conflictsLinks de referência; conteúdo não consultado nem copiado (termos do site)

Technologies

  • Radix Tabs (shadcn/ui)

Limitations

  • Unverified OSINT content: confirm with a primary source before acting on or sharing it.

Country or zone filter

Controlconflict-country

Restricts headlines to one zone; click again to clear.

How it works

Each chip shows the country or region and how many headlines belong to it. The chips appear when there is more than one zone and outside the Zones tab. Matching a headline to a zone is done by keywords on the server and can be wrong.

Sources

SourceInternal routeLicense
BBC World (RSS)/api/conflictsnot cataloged
Al Jazeera (RSS)/api/conflictsnot cataloged
The New York Times World (RSS)/api/conflictsnot cataloged
Liveuamap (reference links only, not queried)/api/conflictsLinks de referência; conteúdo não consultado nem copiado (termos do site)

Technologies

  • shadcn/ui Toggle
  • filterConflicts

Limitations

  • Matching headlines to zones and classifying them by type uses keywords and can be wrong.

Similar events (precedents)

Controlevent-precedents

Earlier events of the same feed, at least 24 h before this one, ranked by shared words, distance and country.

How it works

Reads /api/events/similares, which queries the event memory written once a day by the event-memory job (public feeds only: earthquakes, conflicts, weather, KEV, CDC health notices, NHC tropical cyclones, tsunami bulletins and GDACS alerts; 180-day retention). Score = 0.6 word overlap + 0.3 proximity within 250 km + 0.1 same country; no embeddings. Coverage is that of the event's feed and counts items recorded per day, not events that happened: days without coverage are shown as such, never as "nothing happened".

Sources

SourceInternal routeLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
BBC World (RSS)/api/conflictsnot cataloged
Al Jazeera (RSS)/api/conflictsnot cataloged
The New York Times World (RSS)/api/conflictsnot cataloged
Liveuamap (reference links only, not queried)/api/conflictsLinks de referência; conteúdo não consultado nem copiado (termos do site)
NASA EONET v3/api/weathernot cataloged
NOAA National Weather Service (api.weather.gov)/api/weatherUS Government public domain
GDACS (UN / European Commission)/api/weathernot cataloged

Technologies

  • GET /api/events/similares
  • Postgres FTS + PostGIS (migration 0014)
  • job event-memory (1x/dia)

Generate briefing

Controlbriefing-generate

Collects recent feeds and asks the AI for an intelligence briefing (unverified).

How it works

Each click asks the server for a briefing over the context assembled there (AI Analysis public feeds; the browser sends no data). There is a limit of 5 requests per minute and, if hit, the widget tells you to try again. Generating again keeps the previous briefing visible until the new one arrives. Without a server AI key, with the provider down or with the daily quota exhausted, the result is marked NO AI (deterministic synthesis of the same feeds).

Sources

SourceInternal routeLicense
BBC World (RSS)/api/newsnot cataloged
The Guardian World (RSS)/api/newsnot cataloged
Al Jazeera (RSS)/api/newsnot cataloged
The Times of Israel (RSS)/api/newsnot cataloged
TASS (RSS)/api/newsnot cataloged
Anadolu Agency (RSS)/api/newsnot cataloged
South China Morning Post (RSS)/api/newsnot cataloged
CNA - Channel NewsAsia (RSS)/api/newsnot cataloged
Africanews (RSS)/api/newsnot cataloged
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
USGS Volcano Hazards Program/api/volcanoesUS Government public domain
NOAA Tsunami Warning Centers (tsunami.gov)/api/tsunamisnot cataloged
NOAA National Hurricane Center/api/hurricanesnot cataloged
CISA Known Exploited Vulnerabilities/api/cyber-threatsnot cataloged
CISA Cybersecurity Advisories/api/cisa-advisoriesnot cataloged
US State Department travel advisories/api/travel-advisoriesnot cataloged
NOAA SWPC space weather scales/api/space-scalesnot cataloged
Google Gemini API/api/ai/briefingnot cataloged

Technologies

  • Google Gemini API (opcional)
  • providers (src/lib/ai)

Limitations

  • Generated only on demand: it does not refresh itself or keep a briefing history.
  • AI-generated text: may contain errors and omissions and is not verified.
  • Without a server AI key (or if the provider fails) the answer is a deterministic synthesis marked NO AI, not model prose.

Add widgets (+)

Controlfab-widget-manager

Opens the Widget Manager to add, remove and favorite widgets from the catalog.

How it works

Floating button at the bottom-right of the Console. It opens the Widget Manager dialog; changes apply to the active deck immediately and are saved in this browser.

Sources

No external data source: interface element.

Technologies

  • Dialog (Radix)
  • localStorage

Widget card

Controlwm-card

One catalog widget: shows its description, category, refresh interval, feed count and whether it is active.

How it works

The refresh interval and feed count describe the original catalog entry. The "soon" badge marks widgets that are listed but not yet connected to real data in GeoIntel.

Sources

No external data source: interface element.

Favorite star

Controlwm-favorite

Marks a widget as favorite; favorites float to the top of their section.

How it works

Favorites are stored only in this browser (localStorage) and do not affect which widgets are active.

Sources

No external data source: interface element.

Technologies

  • localStorage

Status filter

Controldata-status-tile

Click a tile to filter the list by status: online, stale, error, maintenance, static, on demand or queued.

How it works

Counts are computed from the real probe results plus the registry status; sources that are still being checked are not counted in any tile.

Sources

No external data source: interface element.

Feed row

Controldata-feed-row

Status dot, name, kind badge, interval, items, content age, seed, vs baseline, provider and data age; the icon opens the provider.

How it works

Age is the time since the last health check or the timestamp reported by the route. On-demand sources are never probed, so they have no age. Seed = freshness of the copy the job stored in the database (only SEC EDGAR, CelesTrak and IMF PortWatch; no database = no database). vs baseline = Stress index series of this route outside the server seasonal baseline (no database = no comparison; baseline route down = unavailable; few readings = forming). Both columns show from 1024 px.

Sources

No external data source: interface element.

Source on/off

Controldata-source-toggle

When off, the source disappears from the news feed, Live and Ripple in this browser. Health probing continues.

How it works

One concept, one place: the switch exists only in Sources & Status; widgets just obey. Stored in localStorage and in the settings export.

Sources

No external data source: interface element.

Technologies

  • localStorage (STORAGE_KEYS.sources.disabled)
  • useSyncExternalStore

Category on/off

Controldata-category-toggle

Turns every source in the category (and, in News, the outlets) on or off at once.

How it works

The switch shows on while at least one source in the category is active. The counter shows active/total.

Sources

No external data source: interface element.

Technologies

  • localStorage (STORAGE_KEYS.sources.disabled)

Active sources

Controldata-active-count

How many sources (panel feeds + news-feed outlets) are on in this browser.

How it works

Includes the panel manifest feeds and every outlet that feeds /api/news.

Sources

No external data source: interface element.

Feeds in other languages

Controldata-languages

When off, outlets outside the interface language and English are hidden. The current outlets publish in English.

How it works

Each outlet’s language comes from the source declaration; with no declared language the feed is universal.

Sources

No external data source: interface element.

Technologies

  • localStorage (STORAGE_KEYS.sources.languages)

Coverage preset

Controldata-preset

Applies a set of enabled sources and the tier filter at once. Manual changes afterwards show “Custom”.

How it works

Presets are rules (tier, state media, categories), not fixed lists. “Undo” in the notice restores the previous state.

Sources

No external data source: interface element.

Technologies

  • localStorage (STORAGE_KEYS.sources.disabled, STORAGE_KEYS.sources.tier)
  • Select (Radix)

Tier filter

Controldata-tier

“T1–T2 only” hides tier 3 and 4 outlets. Unclassified outlets stay visible unless you hide them.

How it works

Unclassified means no human review on record: it is not a low tier. The preference stays in this browser only.

Sources

No external data source: interface element.

Technologies

  • localStorage (STORAGE_KEYS.sources.tier)
  • useSyncExternalStore

Outlet tier

Controldata-tier-column

T1 to T4 only appears with a human review on record; without one the outlet is “Unclassified”.

How it works

The tooltip shows the tier name and criterion and the review basis (marked “Proposal:” while unconfirmed).

Sources

No external data source: interface element.

Technologies

  • src/lib/sources/tiers.ts

News-feed outlets

Controldata-outlets

Each outlet feeding the news feed can be turned off on its own (e.g. TASS). Items are recognised by the link domain.

How it works

Outlets come from the connector declarations with the /api/news route; the Telegram channel set is a single connector.

Sources

SourceInternal routeLicense
BBC / Al Jazeera / Guardian / TASS / Anadolu / SCMP / CNA / Africanews / Times of Israel / Telegram/api/newsnot cataloged

App sources

Controldata-tab-real

Lists the sources GeoIntel has (probed, on demand and drafts), with live health where probed.

How it works

The list comes from the feed manifest and the registry (registry/sources/*.yaml). Only a source probed and working right now counts as connected; on-demand sources are never probed and QUEUED ones are drafts.

Sources

No external data source: interface element.

Original catalog (no connector)

Controldata-tab-catalog

The feeds the original panel lists, with GeoIntel's coverage: covered, partial or no connector.

How it works

A reference list transcribed from the original (registry/sources/original-catalog.json). There is no collection or live status: the "no connector" badge shows what is still to be built.

Sources

No external data source: interface element.

Clock and timezone

Controlsubbar-clock

Shows date and time in the chosen timezone and lets you pick any IANA timezone.

How it works

The list comes from the runtime (Intl.supportedValuesOf), so it covers every IANA zone with daylight-saving offsets. The default is America/Campo_Grande. The choice is stored in this browser.

Sources

SourceInternal routeLicense
Browser Intl API—API do navegador (sem dado de terceiros)

Technologies

  • Intl.supportedValuesOf
  • Intl.DateTimeFormat

Alert rule

Controlalerts-rule

A saved local rule: sources, cadence, channels and last fire; toggle, test, edit, duplicate or delete it.

How it works

Rules are stored in localStorage (versioned, zod-validated; corrupt entries are dropped). The switch turns evaluation on or off; re-enabling restarts the rule so old items do not fire in a batch.

Sources

No external data source: interface element.

Technologies

  • localStorage
  • zod

Name and notes

Controlalerts-name

How the alert shows up in the list, notices and history.

How it works

The name (up to 80 characters) identifies the rule in toasts, browser notifications and history. Notes are just for you.

Sources

No external data source: interface element.

Rules tab

Controlalerts-tab-rules

Lists your local rules with last fire, channels and actions.

How it works

Each rule can be turned on, tested, edited, duplicated or deleted. Rules are stored only in this browser.

Sources

No external data source: interface element.

Technologies

  • Radix Tabs (shadcn/ui)
  • localStorage
  • zod

History tab

Controlalerts-tab-history

Recent fires, with the rule, the items and the source link.

How it works

Keeps up to 200 fires in this browser (oldest are dropped). Unread ones add up on the bar bell.

Sources

No external data source: interface element.

Technologies

  • Radix Tabs (shadcn/ui)
  • localStorage
  • zod

Create alert

Controlalerts-create

Opens the six-step wizard to define a new rule.

How it works

There is no plan limit; only a technical cap of 50 rules. Nothing is saved until the last step.

Sources

No external data source: interface element.

Test rule

Controlalerts-test

Runs the rule against current data and shows how many items match, without notifying.

How it works

Queries the source routes once (20 s timeout), applies the same matching as the evaluator and shows a per-source count and a sample. It records no history, does not consume the "seen" state and sends no notification.

Sources

No external data source: interface element.

Technologies

  • evaluate.previewRule
  • fetch (AbortController)

Edit alert

Controlalerts-edit

Reopens the wizard with the rule values.

How it works

On save, the rule is re-evaluated from scratch: items that already exist become "seen" and only new ones fire.

Sources

No external data source: interface element.

Duplicate alert

Controlalerts-duplicate

Creates a disabled copy of the rule, to tweak without losing the original.

How it works

The copy gets the "(copy)" suffix and starts disabled; turn it on when it is ready.

Sources

No external data source: interface element.

Delete alert

Controlalerts-delete

Removes the rule and its state, with confirmation.

How it works

The history of earlier fires is kept. Deleting cannot be undone.

Sources

No external data source: interface element.

Alert sources

Controlalerts-sources

Real app feeds the rule watches; only those with an item extractor.

How it works

Earthquakes, news, conflicts, severe weather, GDACS, hurricanes, volcanoes, tsunamis, fireballs, CISA KEV, space weather and FEMA. The rule only queries the routes of the chosen sources, and only while it is on.

Sources

SourceInternal routeLicense
USGS Earthquake Hazards Program/api/earthquakesnot cataloged
BBC / Al Jazeera / Guardian / TASS / Telegram (RSS)/api/newsnot cataloged
BBC / Al Jazeera / NYT (RSS)/api/conflictsnot cataloged
NOAA NWS / NASA EONET / GDACS/api/weathernot cataloged
GDACS (UN / European Commission)/api/gdeltnot cataloged
NOAA National Hurricane Center/api/hurricanesnot cataloged
USGS Volcano Hazards Program/api/volcanoesnot cataloged
NOAA National Tsunami Warning Center/api/tsunamisnot cataloged
NASA/JPL CNEOS/api/meteorsnot cataloged
CISA Known Exploited Vulnerabilities/api/cyber-threatsnot cataloged
NOAA Space Weather Prediction Center/api/space-weathernot cataloged
OpenFEMA Disaster Declarations/api/fema-disastersnot cataloged
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesnot cataloged
Safecast (CC0) + U.S. EPA RadNet (when switched on)/api/radiationnot cataloged
U.S. Treasury OFAC — SDN list (new designations)/api/sanctionsnot cataloged
METAQUANTICS convergence detector (derived, no external source)/api/convergencenot cataloged
METAQUANTICS correlation engine (derived, 3 declarative adapters)/api/correlationnot cataloged
METAQUANTICS seasonal baseline (derived, signal_reading via the radar-readings job)/api/geopolitics/anomalynot cataloged
EASA Conflict Zone Information Bulletins + FAA Temporary Flight Restrictions (not endorsed by EASA or the FAA; informational, not for flight planning)/api/airspacenot cataloged
METAQUANTICS airspace spectrum by country (derived: EASA CZIB + adsb.fi/OpenSky inferred GPS interference + FAA NOTAM when keyed; not endorsed by EASA or the FAA; informational, not for flight planning)/api/airspace/spectrumnot cataloged
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged
METAQUANTICS /api/alerts/channels/test (test message)/api/alerts/channels/testnot cataloged
METAQUANTICS /api/alerts/vapid (VAPID public key)/api/alerts/vapidnot cataloged
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot cataloged
Web Push Protocol (RFC 8030/8291/8292)—not cataloged
METAQUANTICS /api/alerts/channels/confirm (email confirmation, double opt-in)/api/alerts/channels/confirmnot cataloged
METAQUANTICS /api/alerts/channels/unsubscribe (one-click, RFC 8058)/api/alerts/channels/unsubscribenot cataloged
METAQUANTICS /api/alerts/channels/availability (email/Telegram availability)/api/alerts/channels/availabilitynot cataloged
Resend (transactional email API)—not cataloged
Telegram Bot API (sendMessage, setWebhook)—not cataloged
Push API (MDN)—not cataloged

Technologies

  • useFeed (mecanica)
  • fetch (AbortController)

Keywords

Controlalerts-keywords

Terms the item must contain (any or all).

How it works

Plain-text matching, no regex, case and accent insensitive, on the item title and place. With no keywords, any new item from the source matches.

Sources

No external data source: interface element.

Technologies

  • normalizeText (NFD)

Negations

Controlalerts-negations

Terms that exclude the item even when keywords match.

How it works

Handy to cut noise (for example "sports"). Can be used alone: everything that does not contain the term.

Sources

No external data source: interface element.

Technologies

  • normalizeText (NFD)

Countries or regions

Controlalerts-places

Place names the item text must mention (any of them).

How it works

Textual comparison with the item title and place, not geographic: "Chile" matches items that mention Chile. For geographic precision use a box or zone.

Sources

No external data source: interface element.

Technologies

  • normalizeText (NFD)

Coordinate box

Controlalerts-bbox

West/south/east/north rectangle; only items with coordinates inside it match.

How it works

Sources without coordinates (news, KEV, FEMA, volcanoes) are left out when a box is set. For conflicts the coordinate is the zone center. To draw on the map use the Cartographer zone.

Sources

No external data source: interface element.

Technologies

  • bboxContains

Drawn zone

Controlalerts-zone

Uses a polygon, rectangle or circle drawn in the map Cartographer.

How it works

The geometry is copied into the rule on save (editing the drawing later does not change the alert). Items without coordinates do not match.

Sources

No external data source: interface element.

Technologies

  • Cartographer (DrawingRepository)
  • ray casting

Minimum severity

Controlalerts-severity

Drops items below the chosen level (info, low, medium, high, critical).

How it works

Each source maps its data to this scale (earthquake by magnitude, hurricane by category, volcano by color, Kp, etc.). The full mapping appears in the filters step.

Sources

No external data source: interface element.

Minimum magnitude

Controlalerts-magnitude

For earthquakes: ignores events below the given magnitude.

How it works

Only affects items that have a magnitude; the rule other items are not filtered by it.

Sources

SourceInternal routeLicense
USGS Earthquake Hazards Program/api/earthquakesnot cataloged

Cadence

Controlalerts-cadence

Real time, hourly, daily, twice-daily or weekly digest.

How it works

In the browser it runs while the app is open, including in the background; rules with Push or webhook are also evaluated by the server alert-dispatch job. The digest groups the period items into a single notice, sorted by severity and date.

Sources

No external data source: interface element.

Technologies

  • evaluateRules
  • localStorage

Minimum interval

Controlalerts-cooldown

Minimum time between two real-time notices of the same rule.

How it works

Items that arrive during the interval wait and go out together afterwards. There is also a cap of 12 notices per hour per rule.

Sources

No external data source: interface element.

Channel: in the app

Controlalerts-ch-inapp

On-screen toast, bell counter and a history record.

How it works

A real channel, always available. The history keeps up to 200 fires in this browser.

Sources

No external data source: interface element.

Technologies

  • sonner (shadcn/ui)
  • useSyncExternalStore

Channel: browser notification

Controlalerts-ch-browser

System notification through the browser API, with the app open.

How it works

Opt-in: permission is only requested when you click "Allow browser notifications". If denied, the channel stays inactive.

Sources

SourceInternal routeLicense
Web Notifications API (MDN)—not cataloged

Technologies

  • Notification API

Channel: email (with confirmation)

Controlalerts-ch-email

Alert email through Resend, only after explicit consent and confirmation by link (double opt-in).

How it works

The address is stored lowercase, with the time and version of the consent; the request sends a confirmation link (48 h, single use; only the token hash is stored). Without confirmation nothing is sent and the pending channel is deleted after it expires. Every email carries an unsubscribe link (List-Unsubscribe, one-click) that deletes the channel. Requires ALERT_CHANNELS_ENABLED=1, RESEND_API_KEY, METAQUANTICS_MAIL_FROM, METAQUANTICS_APP_URL (https) and migration 0023.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged
METAQUANTICS /api/alerts/channels/availability (email/Telegram availability)/api/alerts/channels/availabilitynot cataloged
METAQUANTICS /api/alerts/channels/confirm (email confirmation, double opt-in)/api/alerts/channels/confirmnot cataloged
METAQUANTICS /api/alerts/channels/unsubscribe (one-click, RFC 8058)/api/alerts/channels/unsubscribenot cataloged
Resend (transactional email API)—not cataloged

Technologies

  • emailChannelStatus
  • double opt-in (sha256 do token)
  • List-Unsubscribe (RFC 8058)
  • Idempotency-Key

Channel: Telegram (with confirmation)

Controlalerts-ch-telegram

Alert message through the Telegram bot, only after explicit consent and /start with a code.

How it works

The request generates a code (30 min, single use) and a t.me link to the bot; /start with the code reaches the bot webhook (checked by the secret header) and stores only the chat identifier. /stop stops the messages; removing the channel deletes the identifier. Plain text, no user message content. Requires TELEGRAM_BOT_TOKEN, TELEGRAM_WEBHOOK_SECRET, TELEGRAM_BOT_USERNAME, ALERT_CHANNELS_ENABLED=1 and migration 0023. Never feeds AI.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged
METAQUANTICS /api/alerts/channels/availability (email/Telegram availability)/api/alerts/channels/availabilitynot cataloged
Telegram Bot API (sendMessage, setWebhook)—not cataloged

Technologies

  • webhook do bot (X-Telegram-Bot-Api-Secret-Token)
  • /start <codigo>
  • texto puro

Email confirmation page

Controlalerts-confirm-page

Opens from the email link and only confirms when you tap the button.

How it works

Loading the page never confirms (email providers prefetch links); the button POSTs to /api/alerts/channels/confirm, with no session (the link may open on another device), limited to 20 per minute per IP.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/channels/confirm (email confirmation, double opt-in)/api/alerts/channels/confirmnot cataloged

Technologies

  • POST por botao (nunca no carregamento)

Channel: webhook

Controlalerts-ch-webhook

Signed JSON POST to an https URL of yours, sent by the server even with the app closed.

How it works

Registered under Channels in this browser: the URL is checked against SSRF (https, port 443, public host, no redirect) on registration and on every delivery. X-Metaquantics-Signature = HMAC-SHA256 with timestamp; the secret is shown only once.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot cataloged

Technologies

  • HMAC-SHA256 (X-Metaquantics-Signature)
  • validateHost (anti-SSRF a cada entrega)

Allow notifications

Controlalerts-ask-permission

Asks the browser for notification permission (only on this click).

How it works

The app never asks for permission on its own. If the browser blocks it, change the site permission in its settings.

Sources

SourceInternal routeLicense
Web Notifications API (MDN)—not cataloged

Technologies

  • Notification.requestPermission

Fire

Controlalerts-history-item

One notice: rule, time, count and a sample of items with the source link.

How it works

Shows up to 10 items per fire (the real total is in the counter). Links only open when they are http(s).

Sources

No external data source: interface element.

Technologies

  • safeHref

Mark as read

Controlalerts-mark-read

Removes this fire from the bell unread count.

How it works

Opening the history does not mark anything on its own.

Sources

No external data source: interface element.

Clear history

Controlalerts-clear-history

Deletes every fire stored in this browser.

How it works

Rules and the state of already seen items are not changed.

Sources

No external data source: interface element.

Source state

Controlalerts-sources-status

Each source’s state now (LIVE, stale, error…), from the same Sources & Status probe.

How it works

"Not monitored" = the route is not probed by connector health (e.g. convergence, a derived route).

Sources

SourceInternal routeLicense
METAQUANTICS /api/connectors/health (sondagem unica de Fontes e Status)/api/connectors/healthnot cataloged

Technologies

  • useFeedStatus

Detectors

Controlalerts-detectors

Derived sources: multi-domain convergence (server) keyword spike and military surge (computed in the browser from news and conflicts).

How it works

A detector is not a feed: it is a computation over feeds already read. The spike uses the news feed’s 7-day hourly history; the military surge counts conflict events by region against a 7-day hourly mean kept by the alerts runtime itself and never fires without 24 h of baseline.

Sources

SourceInternal routeLicense
METAQUANTICS convergence detector (derived, no external source)/api/convergencenot cataloged
METAQUANTICS correlation engine (derived, 3 declarative adapters)/api/correlationnot cataloged
METAQUANTICS seasonal baseline (derived, signal_reading via the radar-readings job)/api/geopolitics/anomalynot cataloged
BBC / Al Jazeera / Guardian / TASS / Telegram (RSS)/api/newsnot cataloged
BBC / Al Jazeera / NYT (RSS)/api/conflictsnot cataloged

Technologies

  • detectSpikes (src/lib/news/spikes.ts)
  • TermHistory (localStorage)
  • baseline (src/lib/geopolitics/baseline.ts, Welford)
  • deriveSurge (src/lib/ops/alerts/surge-history.ts, fail-closed: 24 h de base)
  • SurgeHistory (localStorage metaquantics.ops.alerts.surge.v1)

Country scope

Controlalerts-countries

ISO2 matching the declared country, the coordinates (Natural Earth) or the title. Items with no country do not match.

How it works

Simplified borders: near a coast/border a point can fall in the neighbour. Followed countries appear as chips.

Sources

SourceInternal routeLicense
Natural Earth 1:50m Admin 0 (/data/countries.geojson)—not cataloged

Technologies

  • countryAt (ponto-em-poligono)
  • newsCountriesOf

Tickers

Controlalerts-tickers

Market symbols matched as whole words, case-sensitive; chips come from the Markets watchlist.

How it works

Useful with the News source. "$AAPL" also matches.

Sources

No external data source: interface element.

Technologies

  • regex de palavra inteira (sensivel a maiusculas)

Require ≥ n sources

Controlalerts-corroboration

Only fires when the same story appears in n independent outlets in the current snapshot.

How it works

Uses the single story identity (normalised title, canonical URL, 48 h window). Detectors bring their own sources.

Sources

No external data source: interface element.

Technologies

  • groupStories (src/lib/news/story-identity.ts)

Ignore keyword-only

Controlalerts-keyword-only

News/conflict items from T3+ or unknown-tier outlets, with no second source, do not fire.

How it works

Provider-measured sources (quake, hurricane, radiation…) are never affected. Tier comes from connector declarations.

Sources

No external data source: interface element.

Technologies

  • profileFor (src/lib/news/credibility.ts)

Maximum tier and state media

Controlalerts-max-tier

News/conflict items only fire from outlets with a reviewed tier up to the one chosen; unclassified never passes. Optional: exclude declared state media.

How it works

The tier is resolved by the evaluator from connector declarations and only counts with a recorded human review; it is never stored on the item. Provider-measured sources (quake, hurricane, radiation…) ignore the gate.

Sources

No external data source: interface element.

Technologies

  • resolveTier (src/lib/sources/tiers.ts)

7-day preview

Controlalerts-week-preview

"Would have fired n times": the rule applied to the dated items the sources return now, with the chosen cadence.

How it works

Feeds keep little history: the preview says how much it covers or "not enough history". Existing rules also show real fires.

Sources

No external data source: interface element.

Technologies

  • previewWeek
  • simulateFires

Quiet hours

Controlalerts-quiet-hours

An hour range (may cross midnight) in which this rule’s notices go quiet or wait.

How it works

Applies in the browser (local evaluator: a silent fire only goes to the history) and on the server (alert-dispatch job, for Push and webhook). Local time in the Console clock time zone; daylight saving handled by Intl.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot cataloged

Technologies

  • quietDecision (src/lib/ops/alerts/schedule.ts)
  • Intl.DateTimeFormat (fuso IANA)

Quiet hours mode

Controlalerts-quiet-mode

Critical only, Silence all or Hold and deliver at the end of the window.

How it works

Same rule in the browser and on the server (quietDecision): outside the window everything is delivered. Silent in the browser = goes to the history already read, with no toast, notification or bell, and does not use up the minimum interval.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot cataloged

Technologies

  • quietDecision
  • evaluateRules (silent)

Quiet window

Controlalerts-quiet-window

Start and end in local time (30-min steps); may cross midnight.

How it works

Window [start, end) in the Console clock time zone; start equal to end is refused (empty window).

Sources

No external data source: interface element.

Technologies

  • isQuiet
  • quietEndAfter

Digest time

Controlalerts-digest-schedule

With daily, twice-daily and weekly cadences the digest goes out at a fixed full hour (and on the chosen day, weekly).

How it works

The same computation (nextDigestAt) runs in the browser and in the alert-dispatch job. Twice a day = h and h + 12. Older rules without a time keep "every period since the last digest" until edited.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot cataloged

Technologies

  • nextDigestAt (src/lib/ops/alerts/schedule.ts)

Digest hour and day

Controlalerts-digest-hour

Local full hour of the digest; for weekly, also the weekday.

How it works

Computed by nextDigestAt (15-min steps, daylight saving included) in the browser and in the alert-dispatch job.

Sources

No external data source: interface element.

Technologies

  • nextDigestAt
  • Intl.DateTimeFormat (fuso IANA)

Channel: Push (Web Push)

Controlalerts-ch-push

System notification on this device, sent by the server even with the app closed.

How it works

Browser subscription (pushManager.subscribe with the VAPID public key from /api/alerts/vapid) stored on the server; the alert-dispatch job encrypts and sends it (RFC 8291/8292). Needs a registered service worker (production only) and notification permission.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/vapid (VAPID public key)/api/alerts/vapidnot cataloged
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged
Web Push Protocol (RFC 8030/8291/8292)—not cataloged
Push API (MDN)—not cataloged

Technologies

  • pushManager.subscribe
  • service worker (public/sw.js)

Enable push in this browser

Controlalerts-enable-push

Asks for permission, subscribes this browser to Web Push and registers the subscription on the server.

How it works

Uses the public key from /api/alerts/vapid. With no registered service worker (development) or a denied permission it shows the reason; it never fakes success.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/vapid (VAPID public key)/api/alerts/vapidnot cataloged
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged
Push API (MDN)—not cataloged

Technologies

  • Notification.requestPermission
  • pushManager.subscribe

External channel of this browser

Controlalerts-ch-external-pick

Tick which channels of this browser receive this rule.

How it works

Only channels created by this browser (device token). On save the rule is published to /api/alerts/publish; with no external channel, it is unpublished.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot cataloged

Technologies

  • syncPublications (so publica o que mudou)

Channels in this browser

Controlalerts-device-channels

This browser’s Push and webhooks on the server: list, test and remove.

How it works

Identified by a random token kept only here; the server stores only its sha256. Without database or flag it shows COMING SOON with the reason.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged

Technologies

  • token de dispositivo (32 bytes, base64url)
  • localStorage

Register webhook

Controlalerts-device-add-webhook

Registers an https URL to receive the signed alerts.

How it works

The URL goes through the server anti-SSRF validation. The signing secret is generated on the server and shown only once.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged

Technologies

  • validateWebhookUrl (anti-SSRF)

Test channel

Controlalerts-device-test

Sends a test message to this channel and shows the result.

How it works

POST /api/alerts/channels/test; the test does not count as a channel failure.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/channels/test (test message)/api/alerts/channels/testnot cataloged

Remove channel

Controlalerts-device-remove

Deletes this channel from the server; rules that used it stop sending to it.

How it works

DELETE /api/alerts/channels. Removing push does not revoke the browser notification permission.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged

Webhook secret

Controlalerts-webhook-secret

HMAC key of your webhook, shown only now: copy it and keep it in your receiver.

How it works

It is not stored in this browser and cannot be read again; to change it, remove and register the webhook again.

Sources

SourceInternal routeLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot cataloged

Technologies

  • Clipboard API

Copy the secret

Controlalerts-webhook-secret-copy

Copies the secret to the clipboard.

How it works

Without clipboard permission, select the text and copy it by hand; the secret is not stored in this browser.

Sources

No external data source: interface element.

Technologies

  • Clipboard API

I saved it

Controlalerts-webhook-secret-done

Closes the dialog; the secret cannot be seen again.

How it works

The dialog only closes through this button (not Esc nor an outside click), so the secret is not lost by accident.

Sources

No external data source: interface element.

Merged fires

Controlalerts-history-merged

Different rules firing on the same item/story within 2 h become a single entry (and a single notification).

How it works

The badge shows how many fires were merged; the title lists the rules.

Sources

No external data source: interface element.

Technologies

  • mergeIntoHistory (2 h, mesma historia)

Alert Center

Controlalerts-center

Live feed, rules, history, channels and notification preferences in one place.

How it works

Opens over any page (the a key, Meridian on the map, the alerts badge in the bar or the /alerts route). Esc closes only the top layer: with the wizard open, it closes the wizard first. The browser Back button also closes the Alert Center. The alert engine runs on every page.

Sources

No external data source: interface element.

Alert sound

Controlalerts-prefs-sound

Plays a synthesized sound when an alert arrives through the on-screen notification.

How it works

Starts off. The sound only plays after a gesture (the Test button unlocks audio) and only for fires at the chosen severity or above. With several tabs open, only the leader tab plays.

Sources

No external data source: interface element.

Technologies

  • WebAudio (src/lib/live/audio.ts)

On-screen notifications

Controlalerts-prefs-toast

Picks the corner and how long the notice stays visible.

How it works

Applies to the In the app channel of every rule. The default is the top right corner; at the bottom right, in the Console and Ripple, notices move up so they do not cover the page ones. Until dismissed keeps the notice until you close it. The change shows at once and in every open tab.

Sources

No external data source: interface element.

Technologies

  • sonner (shadcn/ui)

System notifications

Controlalerts-prefs-browser

Browser permission state, request and test.

How it works

Permission is only requested when you click Allow. If it is blocked, allow it in the site permissions of the browser. Applies to rules with the Browser notification channel on.

Sources

SourceInternal routeLicense
Web Notifications API (MDN)—not cataloged

Technologies

  • Notification API

Minimum severity to notify

Controlalerts-prefs-min-severity

Below this severity the fire goes to History only, with no toast, notification or sound.

How it works

Global filter for this device, applied after the rule quiet hours. It does not change push or webhook, which follow the published rule.

Sources

No external data source: interface element.

Default quiet hours

Controlalerts-prefs-default-quiet

Pre-fills the quiet hours of new rules.

How it works

Uses the same editor as the Cadence step (mode and window in the Ops clock time zone). Existing rules do not change.

Sources

No external data source: interface element.

Technologies

  • quietDecision

Alerts (GDACS)

Controlhaz-tab-gdacs

Active disaster events from GDACS (UN / European Commission), most severe first.

How it works

The original widget list, from /api/gdelt (GDACS RSS). Automatic alerts, not reviewed by humans.

Sources

SourceInternal routeLicense
GDACS (UN / European Commission)/api/gdeltnot cataloged

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed

Volcanoes (USGS)

Controlhaz-tab-volcanoes

Volcanoes at elevated alert level per USGS observatories, ordered by color code.

How it works

Queries the USGS HANS API (getElevatedVolcanoes) through /api/volcanoes. It lists only volcanoes at an elevated level (Advisory, Watch or Warning), not every monitored volcano, and the API returns no coordinates.

Sources

SourceInternal routeLicense
USGS Volcano Hazards Program (HANS API)/api/volcanoesUS Government public domain

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed

Tsunamis (NTWC/PTWC)

Controlhaz-tab-tsunamis

Current bulletins from the US tsunami warning centers (Alaska and Hawaii).

How it works

Reads the tsunami.gov Atom feeds (NTWC in Palmer and PTWC in Honolulu) through /api/tsunamis. With no current bulletin the list is empty, which is not an error. Informational only; it does not replace official alerts.

Sources

SourceInternal routeLicense
NOAA/NWS Tsunami Warning Centers (tsunami.gov Atom)/api/tsunamisno explicit license on the site (NWS content; unverified)

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed
  • Atom

Space weather (NOAA SWPC)

Controlspace-tab-weather

Kp index, solar flares and alerts from the NOAA Space Weather Prediction Center.

How it works

The original widget view, from /api/space-weather.

Sources

SourceInternal routeLicense
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed

Fireballs and asteroids (NASA/JPL)

Controlspace-tab-meteors

Detected fireballs and asteroids passing close to Earth, from NASA/JPL CNEOS.

How it works

Combines the JPL Fireball API and Close Approach Data API through /api/meteors. JPL documentation declares no terms of use or limits. Asteroid diameter is not provided, only absolute magnitude (H).

Sources

SourceInternal routeLicense
NASA/JPL CNEOS (Fireball and Close Approach APIs)/api/meteorsno terms published (unverified)

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed

Wastewater surveillance (CDC NWSS)

Controlhealth-tab-wastewater

Viral activity level in wastewater at the US sites reporting to CDC NWSS.

How it works

Reads /api/wastewater (data.cdc.gov dataset atcp-73re, aggregated on the server). US sites only; weekly.

Sources

SourceInternal routeLicense
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain (credit the CDC; not endorsed)

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed
  • Socrata SODA

Travelers' health notices (CDC)

Controlhealth-tab-notices

CDC Travelers' Health notices at level 2 or higher in force now (the CDC does not endorse this site).

How it works

Reads /api/health-notices (CDC Travelers' Health RSS, cached for 1 h). A notice stays in force until the CDC withdraws it: the date shown is the publication or update date, not an event time. The notice text is not altered; the level (1 to 4) is the CDC's.

Sources

SourceInternal routeLicense
CDC Travelers' Health — Travel Notices/api/health-noticesUS Government public domain (credit the CDC; not endorsed; content unaltered)

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed
  • RSS

Global temperature anomaly (NOAA NCEI)

Controlclimate-tab-temperature

Monthly departure of the global mean temperature from the base period, from NOAAGlobalTemp.

How it works

Reads /api/global-temp (NOAA NCEI, Climate at a Glance), refreshed every 6 h. Cite the NOAAGlobalTemp dataset.

Sources

SourceInternal routeLicense
NOAA NCEI NOAAGlobalTemp (Climate at a Glance)/api/global-tempdataset citation required

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed

Atmospheric CO2 (NOAA GML)

Controlclimate-tab-co2

Weekly CO2 at Mauna Loa (ppm) for the last ~10 years, from the NOAA Global Monitoring Laboratory.

How it works

Reads /api/co2 (NOAA GML weekly CSV file, 6 h cache). Data for the latest months is preliminary. Mauna Loa measurements were suspended from Nov 2022 to Jul 2023 (eruption); NOAA fills the gap with Maunakea data. US Government public domain; NOAA does not endorse this site.

Sources

SourceInternal routeLicense
NOAA Global Monitoring Laboratory — CO2 at Mauna Loa (weekly)/api/co2US Government public domain (credit NOAA GML; no endorsement implied)

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed
  • CSV
  • SeriesView

Atmospheric CO2 (NOAA GML)

Controlcarbon-tab-co2

Weekly CO2 at Mauna Loa (ppm) for the last ~10 years, with the latest reading and NOAA comparisons.

How it works

Reads /api/co2 (NOAA GML weekly CSV file, 6 h cache). Shows the series, the latest week and the same week 1 and 10 years ago, as published by NOAA (a missing value shows as "—"). Recent data is preliminary. Credit: NOAA Global Monitoring Laboratory, Boulder, Colorado, USA.

Sources

SourceInternal routeLicense
NOAA Global Monitoring Laboratory — CO2 at Mauna Loa (weekly)/api/co2US Government public domain (credit NOAA GML; no endorsement implied)

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed
  • CSV
  • SeriesView

Power-sector emissions by country (OWID)

Controlcarbon-tab-emissions

Countries that emit the most greenhouse gases from electricity generation (MtCO2e), in each country's latest year.

How it works

Reads /api/energy-mix (Our World in Data energy dataset, CC BY 4.0; the server downloads the CSV once a day). The value is the power-sector emissions column, NOT national total emissions. Each country shows the year of its own data. Third-party data (Energy Institute, EIA, Ember) keeps its original terms.

Sources

SourceInternal routeLicense
Our World in Data — energy dataset/api/energy-mixCC BY 4.0 (OWID); third-party data (Energy Institute, EIA, Ember) keeps its original terms

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed
  • CSV

Power mix by country (OWID)

Controlgrid-tab-mix

Share of each source (coal, gas, hydro, solar, wind...) in the chosen country's electricity generation.

How it works

Reads /api/energy-mix (Our World in Data, CC BY 4.0, with Energy Institute, EIA and Ember as original sources). Pick a country in the list or click one of the largest generators; the data year is shown alongside. Carbon intensity in gCO2e per kWh of electricity.

Sources

SourceInternal routeLicense
Our World in Data — energy dataset/api/energy-mixCC BY 4.0 (OWID); third-party data (Energy Institute, EIA, Ember) keeps its original terms

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed
  • CSV
  • Select (shadcn/ui)

Plants (coming soon)

Controlgrid-tab-plants

Global Energy Monitor plant database: not connected yet.

How it works

Global Energy Monitor delivers its data only through a form that asks for an email. The tab stays COMING SOON until the owner downloads it manually and confirms the license (CC BY 4.0 indicated, not confirmed).

Sources

No external data source: interface element.

Technologies

  • Radix Tabs (shadcn/ui)

AIS traffic (ports and chokepoints)

Controlsea-tab-traffic

Ships, ports and live ship counts near chokepoints from the aisstream.io AIS feed.

How it works

Reads /api/maritime (AIS WebSocket cached on the server, 10-minute ship expiry). Without an AIS key the counts are zero ships.

Sources

SourceInternal routeLicense
aisstream.io (AIS)/api/maritimenot cataloged

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed

Chokepoints (status score)

Controlsea-tab-straits

13 chokepoints with a 0–100 score, band, coverage and components (threat, conflict, congestion, naval, warnings, flow).

How it works

Reads /api/chokepoints, derived from /api/conflicts, /api/maritime and /api/maritime-warnings (NGA MSI navigational warnings; NGA does not endorse this product). Flow (IMF PortWatch daily transits, /api/portwatch) only enters with RADAR_ENABLE_NONCOMMERCIAL=1 — otherwise it shows OMITTED BY LICENSE with the reason; the score is renormalized over components that have a reading and never treats a missing one as 0 or 100.

Sources

SourceInternal routeLicense
METAQUANTICS chokepoint status (derived from conflict RSS + AIS + NGA MSI navigational warnings, not endorsed by NGA; IMF PortWatch transits when the non-commercial flag is on — Source: International Monetary Fund, PortWatch)/api/chokepointsnot cataloged
aisstream.io (AIS)/api/maritimenot cataloged
IMF PortWatch (Daily Chokepoints Data) — Source: International Monetary Fund, PortWatch/api/portwatchIMF Copyright and Terms — reuso não comercial com atribuição; comercial só com permissão

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed
  • src/lib/intel/chokepoints.ts

Limitations

  • Active navigational warnings stopped being published in 05/2024; the feed is shown as outdated.

Chokepoint flow (IMF PortWatch)

Controlsupply-tab-flow

The 13 chokepoints ordered by transit drop: ships on the latest PortWatch day versus the median of the 7 previous days.

How it works

Reads /api/chokepoints (same route and cache as the Chokepoints tab), whose flow component comes from /api/portwatch (IMF PortWatch daily transits). Non-commercial source (DM-18): only with RADAR_ENABLE_NONCOMMERCIAL=1; otherwise the tab shows COMING SOON with the license reason, never a fabricated 0. No comparison when there are fewer than 8 days; the Danish Straits have no PortWatch counterpart. Source: International Monetary Fund, PortWatch.

Sources

SourceInternal routeLicense
METAQUANTICS chokepoint status (derived from conflict RSS + AIS + NGA MSI navigational warnings, not endorsed by NGA; IMF PortWatch transits when the non-commercial flag is on — Source: International Monetary Fund, PortWatch)/api/chokepointsnot cataloged
IMF PortWatch (Daily Chokepoints Data) — Source: International Monetary Fund, PortWatch/api/portwatchIMF Copyright and Terms — reuso não comercial com atribuição; comercial só com permissão

Technologies

  • Radix Tabs (shadcn/ui)
  • useFeed
  • src/lib/intel/chokepoint-flow.ts

Command Center

Controldeck-tpl-command-center

Full-spectrum global situational awareness: the default deck.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

OSINT & Social

Controldeck-tpl-osint-social

Open-source intelligence: social feeds, live cameras, military HQ monitoring, daily briefings and global news.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Live TV & Media

Controldeck-tpl-live-tv-media

Live news streams, global media monitoring, social feeds and breaking news coverage.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Markets & Finance

Controldeck-tpl-markets-finance

Market data, central bank policy, prediction markets, sanctions and federal finance.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

War & Conflict

Controldeck-tpl-war-conflict

Active conflicts, military deployments, force posture, defense intelligence and naval forces.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Nuclear & WMD

Controldeck-tpl-nuclear-wmd

Nuclear arsenals, reactor and grid status, radiation monitoring, seismic detection and CBRN threats.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Aviation & Space

Controldeck-tpl-aviation-space

Live flights, military aircraft, airspace alerts, space weather and the launch schedule.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Maritime & Trade

Controldeck-tpl-maritime-trade

Maritime intelligence, naval forces, chokepoints, supply chains and trade sanctions.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Environment & Climate

Controldeck-tpl-environment-climate

Severe weather, earthquakes, natural hazards, climate trends and water resources.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Energy & Resources

Controldeck-tpl-energy-resources

Power plants and grids, oil and gas infrastructure, carbon emissions and supply chains.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Cyber & Technology

Controldeck-tpl-cyber-technology

Cybersecurity threats, internet health, censorship, space systems and IP innovation.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Health & Biosecurity

Controldeck-tpl-health-biosecurity

Disease outbreaks, food and water security, CBRN incidents and humanitarian crises.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Demographics & Society

Controldeck-tpl-demographics-society

Refugee flows, elections, immigration, press freedom and humanitarian crises.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Elections

Controldeck-tpl-elections

Election tracking with the election map, race results, news coverage and US news broadcasts.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Blank Deck

Controldeck-tpl-blank

Start fresh with just a World Map and add widgets as you go.

How it works

Deck template. Creating it adds a new saved deck with the listed widgets laid out in the Command Center grid; you can rearrange and edit it afterwards. The widget mapping is an inference (decision D-B-03).

Sources

No external data source: interface element.

Crisis Desk

Controlmission-mesa-de-crise

On-call crisis watch: War and Conflict deck, conflicts, military air and vessels on the map, 24 h, global, War Room scene.

How it works

A mission is an evolved deck: the deck template plus the map layers, time window, region (and country) of the global filter and the Live scene. The first application creates a deck of its own; applying again returns to it without erasing your arrangement. Layers still coming soon are omitted with a notice and never break the mission. The link /console?missao=<id> applies everything in one navigation. The choice is stored only in this browser.

Sources

No external data source: interface element.

Technologies

  • Missões (src/lib/ops/missions.ts)
  • localStorage

Supply Chains and Chokepoints

Controlmission-cadeias-estreitos

Maritime logistics: Maritime and Trade deck, chokepoints, vessels, submarine cables and ports, 7 days, global.

How it works

A mission is an evolved deck: the deck template plus the map layers, time window, region (and country) of the global filter and the Live scene. The first application creates a deck of its own; applying again returns to it without erasing your arrangement. Layers still coming soon are omitted with a notice and never break the mission. The link /console?missao=<id> applies everything in one navigation. The choice is stored only in this browser.

Sources

No external data source: interface element.

Technologies

  • Missões (src/lib/ops/missions.ts)
  • localStorage

Energy Security

Controlmission-seguranca-energetica

Energy and commodities: Energy and Resources deck, power plants, chokepoints, vessels and fire hotspots, 7 days, global.

How it works

A mission is an evolved deck: the deck template plus the map layers, time window, region (and country) of the global filter and the Live scene. The first application creates a deck of its own; applying again returns to it without erasing your arrangement. Layers still coming soon are omitted with a notice and never break the mission. The link /console?missao=<id> applies everything in one navigation. The choice is stored only in this browser.

Sources

No external data source: interface element.

Technologies

  • Missões (src/lib/ops/missions.ts)
  • localStorage

Newsdesk

Controlmission-mesa-de-noticias

Newsroom and OSINT: OSINT and Social deck, news, live cameras and protests, 6 hours, global. Applies the “Reference” source coverage (a suggestion; undo from the notice).

How it works

A mission is an evolved deck: the deck template plus the map layers, time window, region (and country) of the global filter and the Live scene. The first application creates a deck of its own; applying again returns to it without erasing your arrangement. Layers still coming soon are omitted with a notice and never break the mission. The link /console?missao=<id> applies everything in one navigation. The choice is stored only in this browser.

Sources

No external data source: interface element.

Technologies

  • Missões (src/lib/ops/missions.ts)
  • localStorage

Markets and Macro

Controlmission-mercados-macro

Finance desk: Markets and Finance deck, Stress choropleth and sanctions, 24 h, global.

How it works

A mission is an evolved deck: the deck template plus the map layers, time window, region (and country) of the global filter and the Live scene. The first application creates a deck of its own; applying again returns to it without erasing your arrangement. Layers still coming soon are omitted with a notice and never break the mission. The link /console?missao=<id> applies everything in one navigation. The choice is stored only in this browser.

Sources

No external data source: interface element.

Technologies

  • Missões (src/lib/ops/missions.ts)
  • localStorage

Cyber and Digital Infrastructure

Controlmission-ciber-infra

SOC and threat intelligence: Cyber and Technology deck, network outages and submarine cables, 24 h, global.

How it works

A mission is an evolved deck: the deck template plus the map layers, time window, region (and country) of the global filter and the Live scene. The first application creates a deck of its own; applying again returns to it without erasing your arrangement. Layers still coming soon are omitted with a notice and never break the mission. The link /console?missao=<id> applies everything in one navigation. The choice is stored only in this browser.

Sources

No external data source: interface element.

Technologies

  • Missões (src/lib/ops/missions.ts)
  • localStorage

Climate and Disasters

Controlmission-clima-desastres

Civil defense: Environment and Climate deck, earthquakes, fires, cyclones, tsunamis, weather and radiation, 48 h, Natural Disasters scene.

How it works

A mission is an evolved deck: the deck template plus the map layers, time window, region (and country) of the global filter and the Live scene. The first application creates a deck of its own; applying again returns to it without erasing your arrangement. Layers still coming soon are omitted with a notice and never break the mission. The link /console?missao=<id> applies everything in one navigation. The choice is stored only in this browser.

Sources

No external data source: interface element.

Technologies

  • Missões (src/lib/ops/missions.ts)
  • localStorage

Health and Biosecurity

Controlmission-saude-biosseguranca

Public health: Health and Biosecurity deck, refugees, outbreaks and travel advisories, 7 days, Humanitarian Crisis scene.

How it works

A mission is an evolved deck: the deck template plus the map layers, time window, region (and country) of the global filter and the Live scene. The first application creates a deck of its own; applying again returns to it without erasing your arrangement. Layers still coming soon are omitted with a notice and never break the mission. The link /console?missao=<id> applies everything in one navigation. The choice is stored only in this browser.

Sources

No external data source: interface element.

Technologies

  • Missões (src/lib/ops/missions.ts)
  • localStorage

Brazil

Controlmission-brasil

Brazil view: Command Center deck plus Legal and Regulatory, earthquakes, fires and weather, 7 days, Latin America, country BR.

How it works

A mission is an evolved deck: the deck template plus the map layers, time window, region (and country) of the global filter and the Live scene. The first application creates a deck of its own; applying again returns to it without erasing your arrangement. Layers still coming soon are omitted with a notice and never break the mission. The link /console?missao=<id> applies everything in one navigation. The choice is stored only in this browser.

Sources

No external data source: interface element.

Technologies

  • Missões (src/lib/ops/missions.ts)
  • localStorage
Console (Clone)

Rules

Rules that apply to all Console code and content.

  • Color tokens only

    No hex literals in new UI code: colors come from var(--…) tokens or from bridged shadcn classes (bg-primary, text-muted-foreground, border-border). The token bridge is what lets Style Studio and the ghost theme recolor everything automatically.

  • All text in i18n

    All visible text lives in src/i18n/messages/{en,pt-BR}/console.ts, with parity between languages checked by typing and by tests. pt-BR is the primary language for new content; registries hold only keys.

  • No HTML injection

    Content coming from feeds is always rendered as text, never as HTML. External links accept only http(s) and open with rel="noopener noreferrer". The AI briefing uses a minimal Markdown renderer that emits no HTML.

  • "Unverified" label

    OSINT items (news and conflict headlines) and AI texts are shown with the "unverified" label. The Console aggregates and organizes; it does not vouch for accuracy. Always confirm with a primary source.

  • Opt-in geolocation

    The user's location is only read after an explicit click and browser permission. It stays only in page memory and is neither sent to the server nor persisted. Without permission, the default center is used.

  • Rate limits and caching

    Each widget queries an internal route at a fixed interval (30 s to 5 min), pauses while the tab is hidden, never overlaps in-flight requests and has a timeout between 15 and 60 s. Routes keep a server cache to protect providers (for example the OpenSky quota, the roughly 1 request per second limit of adsb.fi and the 60 s quote cache). On error, the widget keeps the old data and shows a notice.

  • AI keys only on the server

    Gemini API keys live in server environment variables (GEMINI_API_KEY_n). Keys sent by the client are ignored and the browser never sees them. AI responses are subject to rate and quota limits.

  • Source licenses

    New sources go through the license-gate (registry/sources/*.yaml). Several legacy routes do not have a cataloged license yet, and the limitation shows on the element itself. Gray-area sources, such as Yahoo Finance (currently used by a legacy route), should become a pluggable adapter per decision D-10.

  • Tooltip and docs for everything

    Every menu, container, control and source has an entry in src/lib/ops/element-docs.ts: what it is, sources, technologies, refresh and limitations. The same registry feeds the tooltips and this page, and tests prevent elements without documentation or texts missing in either language.

Console (Clone)

Technologies

Technologies used by the Console and the role of each one.

  • Next.jsversion 16.3.4

    Framework: App Router, server components and Route Handlers under /api/*.

  • Reactversion 19.2.4

    Widget UI library (client components).

  • TypeScriptversion 5.x

    Strict typing of widgets, registries and i18n messages.

  • Tailwind CSSversion 4.x

    Utility styles on top of the METAQUANTICS design-system tokens.

  • shadcn/ui + Radix UIversion radix-ui 1.x

    UI primitives (Tabs, Popover, Tooltip, Sheet, Dialog, Select and others) on top of Radix.

  • react-grid-layoutversion 2.2.4

    Draggable, resizable deck grid.

  • MapLibre GLversion 6.7.0

    Interactive map on the GLOBAL tab (not embedded in the grid yet).

  • lucide-reactversion 1.x

    Interface icons.

  • class-variance-authorityversion 0.7.x

    Component variants (for example Button tactical and Badge critical).

  • Google Generative AI SDKversion 0.24.x

    AI SDK (the only provider in the server chain) that generates the briefing and the AI Analysis answers; without a key, deterministic synthesis.

  • useFeed (hook proprio)

    Polling with pause on hidden tab, timeout and the "Xs ago" stamp.

  • i18n proprio (src/i18n)

    Per-module messages, with en/pt-BR parity.

  • Vitestversion 2.x

    Tests for pure logic in src/lib/**.

Console (Clone)

Decisions

Clone decision log, read from docs/clone/decisoes.md at build time.

IDDecisionReasonCost if wrong
D-01Manter pacote único Next 16; não migrar para Turborepo (apps/*, packages/*). Os "packages" do prompt viram diretórios (src/lib/ops, src/lib/feeds, src/components/ops, src/lib/map).O repo não é monorepo; migrar quebraria CI, Docker, imports @/ e PRs abertos (#6, #7). O prompt manda confirmar, não presumir.Extrair para packages depois é mecânico (mover pastas + tsconfig paths).
D-02Identidade visual do METAQUANTICS (tokens --gold-*/Solaris); o verde-terminal do produto de referência não vira padrão. Possível preset "OPS" opcional no Style Studio só com autorização (engine é área proibida no AGENTS.md).AGENTS.md proíbe hex novo e proíbe tocar a engine do Style Studio; o prompt pede identidade própria.Trocar paleta depois = só valores de tokens.
D-03Dados remotos com useFeed próprio (polling, pausa em aba oculta, timeout); sem TanStack Query/Zustand por ora.Já implementado e testado; evita dependência.Migrar para TanStack é local aos widgets.
D-04Persistência em SQL puro (migrations 0006_* com down e casos em rls.sql); sem Drizzle.Padrão do repo (0001–0005).Gerar schema Drizzle a partir do SQL depois.
D-05Agendamento por pg_cron/pgmq (ADR-0011); Inngest só se o usuário aprovar.Já há ADR e infra no Supabase.Adaptar jobs para Inngest.
D-06Sentry fica para a fase de hardening (F4), opcional.Não há instrumentação hoje.Baixo.
D-07i18n: sistema existente (src/i18n), pt-BR é o locale padrão de conteúdo novo; um arquivo de mensagens por módulo (ops.ts, radar.ts, live.ts, nexus.ts, cases.ts).Já tem paridade testada; evita segunda lib.Migração para next-intl é possível (chaves iguais).
D-08deck.gl só entra na trilha de mapa (C) como overlay MapLibre, depois de checar o impacto no bundle e a licença (MIT).Não é usado hoje; MetaquanticsMap.tsx é intocável, então o mapa do clone nasce em módulo novo.Remover dep.
D-09Documentação do clone exposta no menu Preferências → Docs (/docs), alimentada por docs/clone/*.md e pelo registry de widgets (descrições/fontes).Pedido explícito do prompt (item 9).—
D-10Fontes zona-cinza (Yahoo Finance, X, Truth Social) entram somente como adaptador plugável desligado por padrão, com licença revisada em registry/sources/*.yaml; padrão = APIs já usadas no repo.Termos de uso.—
D-11Cada menu/container/fonte criado ganha tooltip descritivo vindo de metadados (descriptionKey, sources[], purposeKey) no registry de widgets/camadas, não texto solto.Pedido do prompt; centraliza para alimentar também a página de Docs.—
D-12Investigação via Chrome depende da extensão Claude in Chrome conectada; quando indisponível, as trilhas de implementação seguem do que já está documentado (relatório do Console) e as de investigação aguardam.A extensão estava desconectada ao iniciar.Atraso nas trilhas D–G.
D-B-01Catálogo dos 66 widgets em src/lib/ops/catalog.ts (19 categorias + "Todos" = 20 abas, contagens confirmadas). 26 são real (os 7 históricos + 19 novos com rota real; lista completa em real-widgets.ts, ex.: Military Aircraft e Aircraft Directory → /api/flights, Earthquake Tracker, Natural Hazards (GDACS via /api/gdelt), Live Cameras (/api/cctv?region=uk), Cyber Intelligence, Maritime Intelligence, Space Intelligence, Instability Event Index (/api/country-risk, linha de base editorial), World Clock (Intl), Data Feed Status); 40 são soon com estado honesto "em breve" (sem número inventado). refreshSec/feeds do catálogo descrevem o ORIGINAL, não prometem o feed aqui. [INFERIDO: qual rota atende qual widget]Dados reais ou nada; paridade de catálogo sem dados fictícios. (Corrigido na onda de fixes: eram 18 real / 48 soon na redação original; o código tem 26 / 40.)Trocar a rota de um widget é uma linha em real-widgets.ts.
D-B-02Modelo de deck do Widget Manager: membros do deck = items + hidden; flag managed no layout salvo. Layout legado (sem managed) continua exigindo os 7 padrão (compatível); ao salvar vira gerenciado. Vários decks: índice em metaquantics.ops.decks.v1, layout por deck em metaquantics.ops.deck.v1:<id>; o deck default reaproveita a chave legada. "✕" no manager remove do deck; o "X" do frame continua só ocultando (reversível em Decks). "Selecionar tudo" adiciona os 66 (carrega os feeds dos reais).Não perder layouts salvos e permitir deck de qualquer subconjunto.Migrar chaves é mecânico.
D-B-03Templates de deck → widgets [INFERIDO]: o original não revela a lista; cada template = World Map + 6 widgets temáticos do catálogo (Command Center = os 7 padrão; Elections = 5 sem World Map; Blank = só World Map). Contagens batem com a spec (7/5/1). Mapeamento em src/lib/ops/deck-templates.ts.Spec §6 só dá nome, descrição e contagem.Ajustar uma lista é local.
D-B-04Painel Dados: manifesto com 47 fontes reais (20 rotas /api sondadas, 18 sob demanda nunca sondadas, 9 de registry/sources/*.yaml) de 43 provedores; não reivindica 320 (o tooltip diz que o original cataloga 320). YAML → pré-gerado em feeds-registry.generated.ts por scripts/gen-feeds-registry.mjs (teste falha se defasar). Status: registry draft→NA FILA, active→ONLINE, degraded→DESATUALIZADO, paused→MANUTENÇÃO, retired→ESTÁTICO; rotas sondadas → ONLINE/DESATUALIZADO (dado > 2× o intervalo)/ERRO/MANUTENÇÃO (503). Atualizado (Trilha I, Task 3): /api/ops/feeds-status foi removida; painel e widget leem o serviço unificado GET /api/connectors/health (src/lib/connectors/health-service.ts, regra única de core/health.ts; ver docs/connectors/decisoes.md DC-05): stale-while-revalidate com cache de 30 s, timeout 20 s, 8 paralelas, lista fixa no servidor sem SSRF, origem da sondagem só de configuração (MQ_PROBE_ORIGIN > VERCEL_URL > 127.0.0.1:$PORT; nunca do Host da requisição).Pedido: manifesto de fontes reais e saúde honesta.—
D-B-05Alertas: wizard de 6 passos cria regra LOCAL (localStorage, expira em 90 dias). Tempo real, a cada hora, e-mail, webhook e zona desenhada aparecem como "em breve" — o e-mail também (a spec o deixa como padrão, mas não há pipeline de e-mail; padrão aqui = "Neste painel"). Limite de 3 alertas e gates de plano do original não são aplicados. matchItems (puro, testado) avalia regras, mas nenhuma avaliação em segundo plano está ligada; alert-digest.ts não tem casador reaproveitável (é clusterização de threads).Entregar o fluxo sem prometer notificações que não existem.Ligar a avaliação = extrator de itens por feed + matchItems. Superado pela Task 12 (D-A-11 a D-A-17): avaliação real com o app aberto.
D-B-06Relógio/fuso: à direita da OpsSubBar (sem editar TopBar.tsx). Lista IANA completa (Intl.supportedValuesOf), padrão America/Campo_Grande, persistido. Data no formato do locale (não MM-DD-YY). O fuso vale para o relógio e o widget World Clock, não "para todos os widgets" como no original. Temas ficam fora (engine do Style Studio é intocável).TopBar está sendo editada por outra trilha.Propagar o fuso aos demais widgets é incremental.
D-B-07Widget Manager como diálogo lateral direito (padrão 2 do AGENTS.md, z-[600]) aberto por FAB "+" no canto inferior direito; favoritos (★) só em localStorage, sobem ao topo da seção. Docs de tooltip em src/lib/ops/panels-docs.ts, mesclados em getElementDoc/docsByKind (alimentam /docs → Console).Spec §1 do catálogo.—

Text in pt-BR, read from docs/clone/decisoes.md during the build.

Module

Stress

Global risk view (/stress): an editable board of 16 widgets with presets (Full = model A, Map focus = model C), a country List tab (model B), the Country reading, live signals and a per-country brief. Everything is composed in the browser from the existing /api/* routes; there is no /api/radar.

Open module
  • 261documented elements
  • 59signals with a real feed
  • 70signals in the original
  • 29original signals covered live
  • 33feeds

Elements

Generated from the module element registry (the same one behind the tooltips): what each element is, where the data comes from, which technologies it uses and its known limits.

menu (4)

Overview

menugeopolitics.nav.overview

The composite score, risk dimensions, history and recent events.

Detail

Pick Global or a region in the sidebar to scope every card on the page.

Open on screen /stress

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Signals

menugeopolitics.nav.signals

Every monitored signal with its current activity, plus coverage charts.

Detail

Use it to see which feeds back the score and which risk categories have no feed yet.

Open on screen /stress/signals

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Sanctions

menugeopolitics.nav.sanctions

OFAC sanctions: ranking by country, exact search in the SDN list and programs.

Detail

Overview shows aggregates only; name search is exact and keeps the term out of the URL. Source: OFAC, Sanctions List Service.

Open on screen /stress/sancoes

Sources

SourceRouteLicense
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending
U.S. Trade.gov — Consolidated Screening List (13 lists: BIS, State Department, OFAC)/api/sanctionsUS Government work (public domain); terms not independently verified — human review pending

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Aggregates only: the list contains personal data and names never reach Stress.
  • The provider's terms of use could not be verified (pending human review).

List

menugeopolitics.nav.list

A sortable table of countries with a risk baseline.

Detail

Open any row to see how that country score is composed.

Open on screen /stress/list

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

panel (28)

Other lists (CSL)

panelgeopolitics.sanctions.csl

Records by country and by list across the 13 lists of the Trade.gov Consolidated Screening List (BIS, State Department and OFAC).

Detail

Answers "which other US restriction lists does this country appear on?". Aggregates only: no name, address or document reaches the screen. The country comes from the record addresses; a record with no valid country is left out of the per-country count. The SDN appears here and in the OFAC ranking: they are the same records.

Refresh every 360 min

Sources

SourceRouteLicense
U.S. Trade.gov — Consolidated Screening List (13 lists: BIS, State Department, OFAC)/api/sanctionsUS Government work (public domain); terms not independently verified — human review pending

Technologies

  • React 19
  • shadcn/ui
  • Next.js Route Handlers
  • useFeed (polling)

Known limits

  • Covers only the 13 Trade.gov lists; the UN, the European Union and the United Kingdom are not included yet. The file carries no publication date (we show the newest dated record) and the set of lists can change.
  • Aggregates only: the list contains personal data and names never reach Stress.
  • A country is attributed by the record addresses (or vessel flag); records without an address have no country.
  • The provider's terms of use could not be verified (pending human review).

Data feeds

panelgeopolitics.feeds

Health of the live feeds behind the index.

Detail

Each dot is one internal route; green means the last response parsed, orange means the last request failed and the previous data is still in use (stale), red means there is no valid response and its signals show no data, grey means the source is switched off.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
NASA FIRMS (VIIRS / MODIS)/api/firesnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
IODA (Georgia Tech)/api/radarterms not verified
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
NOAA SWPC (NOAA Scales)/api/space-scalesUS Government public domain
openFDA Drug Shortages/api/drug-shortagesCC0 1.0
CISA (All CISA Advisories RSS)/api/cisa-advisoriesterms not verified
Federal Register (Executive Orders)/api/executive-ordersterms not verified
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data
NOAA / National Weather Service alerts/api/weatherUS Government public domain
USGS Volcano Hazards (elevated)/api/volcanoesUS Government public domain
NOAA National Hurricane Center/api/hurricanesUS Government public domain
NOAA NTWC / PTWC (tsunami.gov)/api/tsunamisterms not verified
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending
U.S. Trade.gov — Consolidated Screening List (13 lists: BIS, State Department, OFAC)/api/sanctionsUS Government work (public domain); terms not independently verified — human review pending
Safecast (CC0) + U.S. EPA RadNet/api/radiationSafecast: CC0; EPA RadNet: US federal data, commercial use not confirmed (behind RADAR_ENABLE_NONCOMMERCIAL)
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement, content unaltered
EASA Conflict Zone Information Bulletins (not endorsed by EASA)/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB
NIST National Vulnerability Database (CVE API 2.0) + FIRST EPSS/api/cyber/vulnsNVD: US Government public domain (notice: not endorsed or certified by the NVD); EPSS: FIRST.org, free use with citation
WHO Disease Outbreak News (not endorsed by WHO)/api/health/who-donCC BY-NC-SA 3.0 IGO (non-commercial; behind RADAR_ENABLE_NONCOMMERCIAL)
ransomware.live (Julien Mousqueton; aggregates only)/api/cyber/ransomwarepersonal use only, not for corporate use (behind RADAR_ENABLE_NONCOMMERCIAL; written permission pending)
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • Next.js Route Handlers
  • useFeed (polling)

Region

panelgeopolitics.region.sidebar

Scopes the page to the whole world or to one region.

Detail

Regions group events by coordinates and countries by the 198-country table. Each country shows its score (or "-" when data is missing); opening one shows the full reading.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Regions are assigned from coordinates by approximate boxes; expect errors of up to about 1 degree near borders.
  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".

Instability score

panelgeopolitics.score

The composite 0-100 instability score for the selected scope and its risk band.

Detail

A weighted blend of the dimensions that have readings. The card states how many dimensions made it in. A dash means no feed is responding.

Refresh every 5 min

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • React 19
  • shadcn/ui
  • SVG

Known limits

  • Saturation reference values are editorial and not calibrated against history.
  • Coverage is smaller than the original: only feeds that exist in this app are used.

Risk dimensions

panelgeopolitics.dimensions

The score split into its weighted risk dimensions.

Detail

Weights follow the original index. A dimension without readings shows as "no source" and is excluded, never guessed; the "proxy" badge marks an approximate metric.

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Saturation reference values are editorial and not calibrated against history.
  • This is a proxy: an approximate metric, not the same as the original's.

Top signals (24h)

panelgeopolitics.top

The signals with the most recorded activity in the current reading.

Detail

Counts are observations returned by the live feeds for the selected scope. Sampled or capped feeds make these lower bounds.

Refresh every 5 min

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • React 19
  • shadcn/ui

Score history

panelgeopolitics.history

The score over time, from readings this browser has recorded.

Detail

One reading is stored every 30 minutes in localStorage. There is no server archive yet, so the chart starts empty and grows as you keep the app open.

Sources

No external source: computed in the app.

Technologies

  • localStorage
  • React 19
  • shadcn/ui
  • SVG

Known limits

  • History is recorded per browser (localStorage) and is lost if site data is cleared.
  • The server only archives radar-readings job readings (up to 90 days, when a database exists); 1-year series and feed history itself do not exist.

Recent events

panelgeopolitics.events

Individual events counted toward the score, newest first.

Detail

Mixes earthquakes M4.5+, disaster alerts, conflict headlines and CISA additions. Alerts without a timestamp are marked active and sorted last.

Refresh every 5 min

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain

Technologies

  • React 19
  • shadcn/ui

Known limits

  • The feed only covers the last 24 hours.
  • The feed gives no event time, so these are active alerts rather than a 24h count.
  • Content comes from public RSS feeds and is unverified OSINT.

How it is calculated

panelgeopolitics.method

Explains how the index is built and what is honest about it.

Detail

States the dimension weights, the editorial saturation scales and which dimensions lack a source.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Saturation reference values are editorial and not calibrated against history.
  • This is a proxy: an approximate metric, not the same as the original's.
  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".

Global context

panelgeopolitics.context

Worldwide signals not tied to a single place.

Detail

Cyber, markets, health, space weather and global counts. Scored ones only feed the global index.

Refresh every 5 min

Sources

SourceRouteLicense
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain
NOAA SWPC (NOAA Scales)/api/space-scalesUS Government public domain
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data
NASA FIRMS (VIIRS / MODIS)/api/firesnot verified
openFDA Drug Shortages/api/drug-shortagesCC0 1.0
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain
Federal Register (Executive Orders)/api/executive-ordersterms not verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Coverage is smaller than the original: only feeds that exist in this app are used.
  • Not tied to a location, so it counts in the global score only.

Signal statistics

panelgeopolitics.signals.stats

Headline counts of tracked signals, categories, events and live feeds.

Detail

The original tracks 70 signals; here each one carries its real coverage badge.

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
NASA FIRMS (VIIRS / MODIS)/api/firesnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
IODA (Georgia Tech)/api/radarterms not verified
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
NOAA SWPC (NOAA Scales)/api/space-scalesUS Government public domain
openFDA Drug Shortages/api/drug-shortagesCC0 1.0
CISA (All CISA Advisories RSS)/api/cisa-advisoriesterms not verified
Federal Register (Executive Orders)/api/executive-ordersterms not verified
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data
NOAA / National Weather Service alerts/api/weatherUS Government public domain
USGS Volcano Hazards (elevated)/api/volcanoesUS Government public domain
NOAA National Hurricane Center/api/hurricanesUS Government public domain
NOAA NTWC / PTWC (tsunami.gov)/api/tsunamisterms not verified
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending
U.S. Trade.gov — Consolidated Screening List (13 lists: BIS, State Department, OFAC)/api/sanctionsUS Government work (public domain); terms not independently verified — human review pending
Safecast (CC0) + U.S. EPA RadNet/api/radiationSafecast: CC0; EPA RadNet: US federal data, commercial use not confirmed (behind RADAR_ENABLE_NONCOMMERCIAL)
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement, content unaltered
EASA Conflict Zone Information Bulletins (not endorsed by EASA)/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB
NIST National Vulnerability Database (CVE API 2.0) + FIRST EPSS/api/cyber/vulnsNVD: US Government public domain (notice: not endorsed or certified by the NVD); EPSS: FIRST.org, free use with citation
WHO Disease Outbreak News (not endorsed by WHO)/api/health/who-donCC BY-NC-SA 3.0 IGO (non-commercial; behind RADAR_ENABLE_NONCOMMERCIAL)
ransomware.live (Julien Mousqueton; aggregates only)/api/cyber/ransomwarepersonal use only, not for corporate use (behind RADAR_ENABLE_NONCOMMERCIAL; written permission pending)
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui

Monitoring coverage by category

panelgeopolitics.signals.coverage

How many of the original's signals in each of the 12 categories have a real source.

Detail

Grey bar = no signal in the category has a source; green = all do; blue = some.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui
  • SVG

Known limits

  • Coverage is smaller than the original: only feeds that exist in this app are used.

Followed countries

panelgeopolitics.followed

The countries you follow, with the current Stress reading.

Detail

Local list (row star or Preferences › My lists), sorted by name. A country without enough reading shows "-", never an invented number.

Sources

No external source: computed in the app.

Technologies

  • shadcn Table

Most active signals · 24h

panelgeopolitics.signals.active

The most active signals in the current reading.

Detail

A horizontal bar chart of the largest signal counts.

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • React 19
  • shadcn/ui
  • SVG

Original signals

panelgeopolitics.signals.table

The original's 70 signals with coverage, source or reason, current value and trend.

Detail

Hover the name for license, limitations and why there is no source. Trends come from server readings or, failing those, this browser's history.

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
NASA FIRMS (VIIRS / MODIS)/api/firesnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
IODA (Georgia Tech)/api/radarterms not verified
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
NOAA SWPC (NOAA Scales)/api/space-scalesUS Government public domain
openFDA Drug Shortages/api/drug-shortagesCC0 1.0
CISA (All CISA Advisories RSS)/api/cisa-advisoriesterms not verified
Federal Register (Executive Orders)/api/executive-ordersterms not verified
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data
NOAA / National Weather Service alerts/api/weatherUS Government public domain
USGS Volcano Hazards (elevated)/api/volcanoesUS Government public domain
NOAA National Hurricane Center/api/hurricanesUS Government public domain
NOAA NTWC / PTWC (tsunami.gov)/api/tsunamisterms not verified
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending
U.S. Trade.gov — Consolidated Screening List (13 lists: BIS, State Department, OFAC)/api/sanctionsUS Government work (public domain); terms not independently verified — human review pending
Safecast (CC0) + U.S. EPA RadNet/api/radiationSafecast: CC0; EPA RadNet: US federal data, commercial use not confirmed (behind RADAR_ENABLE_NONCOMMERCIAL)
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement, content unaltered
EASA Conflict Zone Information Bulletins (not endorsed by EASA)/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB
NIST National Vulnerability Database (CVE API 2.0) + FIRST EPSS/api/cyber/vulnsNVD: US Government public domain (notice: not endorsed or certified by the NVD); EPSS: FIRST.org, free use with citation
WHO Disease Outbreak News (not endorsed by WHO)/api/health/who-donCC BY-NC-SA 3.0 IGO (non-commercial; behind RADAR_ENABLE_NONCOMMERCIAL)
ransomware.live (Julien Mousqueton; aggregates only)/api/cyber/ransomwarepersonal use only, not for corporate use (behind RADAR_ENABLE_NONCOMMERCIAL; written permission pending)
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • SVG
  • shadcn Table

Known limits

  • The server only archives radar-readings job readings (up to 90 days, when a database exists); 1-year series and feed history itself do not exist.
  • History is recorded per browser (localStorage) and is lost if site data is cleared.
  • No open data source is wired to this yet; it is excluded from the score instead of being invented.

Country statistics

panelgeopolitics.list.stats

Summary of the country table.

Detail

Countries tracked (198), how many have a score, and the range and average of computed scores.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".
  • Coverage is smaller than the original: only feeds that exist in this app are used.

Countries

panelgeopolitics.list.table

The 198 countries with score, band, coverage and per-dimension scores.

Detail

Country score = weighted average of the dimensions with readings (GDELT, IODA, OONI, USGS, GDACS, travel advisories, World Bank, UNHCR). Without enough data, no number is shown.

Refresh every 15 min

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • shadcn Table
  • Intl.DisplayNames

Known limits

  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".
  • Saturation reference values are editorial and not calibrated against history.
  • GDELT counts news, not verified events; per country the share of events is used (not the count), but press coverage still matters.

Per-country sources

panelgeopolitics.list.sources

State of each per-country signal source while loading.

Detail

Rows appear as soon as there is data; cells whose sources are still loading show an indicator instead of a dash.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • useFeed (polling)

Sources

panelgeopolitics.credits

Attribution required by the sources' licences and terms, shown next to the data.

Detail

GDELT (cite with a link), World Bank and UNHCR (CC BY 4.0), Alternative.me (attribution next to the data) and OONI (CC BY-NC-SA 4.0, only when switched on).

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement, content unaltered
EASA Conflict Zone Information Bulletins (not endorsed by EASA)/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB
NIST National Vulnerability Database (CVE API 2.0) + FIRST EPSS/api/cyber/vulnsNVD: US Government public domain (notice: not endorsed or certified by the NVD); EPSS: FIRST.org, free use with citation
WHO Disease Outbreak News (not endorsed by WHO)/api/health/who-donCC BY-NC-SA 3.0 IGO (non-commercial; behind RADAR_ENABLE_NONCOMMERCIAL)
ransomware.live (Julien Mousqueton; aggregates only)/api/cyber/ransomwarepersonal use only, not for corporate use (behind RADAR_ENABLE_NONCOMMERCIAL; written permission pending)
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui

Country reading

panelgeopolitics.country

How a country's score is built, with each signal, source and date.

Detail

Shows coverage, dimensions, the 20 per-country signals (raw value, score, source, period) and local history. The original charges for this; here it is open.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".
  • Saturation reference values are editorial and not calibrated against history.
  • This is a proxy: an approximate metric, not the same as the original's.

Country signals

panelgeopolitics.country.signals

Each country signal with raw value, normalized score, source and period.

Detail

"no reading" means the source does not cover the country right now; the signal is left out of the average.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • shadcn Table

Known limits

  • GDELT counts news, not verified events; per country the share of events is used (not the count), but press coverage still matters.
  • Annual data: changes slowly and the reference year varies by country.

Country history

panelgeopolitics.country.history

This country's score over time, recorded in this browser.

Detail

One reading per hour, up to 7 days, in localStorage. There is no per-country history on the server.

Sources

No external source: computed in the app.

Technologies

  • localStorage
  • React 19
  • shadcn/ui
  • SVG

Known limits

  • History is recorded per browser (localStorage) and is lost if site data is cleared.
  • The server only archives radar-readings job readings (up to 90 days, when a database exists); 1-year series and feed history itself do not exist.

Country brief

panelgeopolitics.country.brief

Country page with Summary, Signals, Evidence and Sources tabs: Stress index for the country with method version, coverage per section, sanctions as aggregates and recent events.

Detail

Opened from the Stress country list, the map context menu or the palette (countries channel). Each section says whether its source answered; nothing is filled in when it did not. The same brief is exported as Markdown in Reports › Generate, with provenance.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending

Technologies

  • React 19
  • shadcn/ui
  • Radix Tabs (shadcn/ui)
  • Markdown (Relatórios › Gerar)

Known limits

  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".
  • Aggregates only: the list contains personal data and names never reach Stress.
  • GDELT counts news, not verified events; per country the share of events is used (not the count), but press coverage still matters.
  • The second opinion (FCDO) needs one call per country (≤ 10 req/s): coverage is partial until the refreshes complete and is reported. A country with no FCDO reading does not count as "no advisory".
  • The scales are not identical: the value follows the US level (3 or 4); the FCDO is shown as a second opinion ("high" = advises against travel to the whole country) without changing the value.
  • Floors are editorial (values and thresholds declared in the Methodology) and only apply with a live or stale reading of their input — never from an absent one: without a travel advisory, zone or displacement reading there is no floor.
  • The server comparison depends on the `radar-index` job (Postgres, one reading every 30 min); without a database the trend uses this browser history or says "no comparison".

Country sources

panelgeopolitics.sources.summary

How many of the 11 country-engine sources answered live right now; only the exceptions (stale, down, disabled) show as chips.

Detail

"n/11 live" summary of the country-engine sources (GDELT, headlines, IODA, OONI, USGS, GDACS, travel advisories, World Bank, UNHCR, Access Now #KeepItOn, V-Dem). Ten of them feed the country index; V-Dem is shown only and does not enter the score (share-alike licence). A live source gets no chip; the full per-signal detail lives in the country brief.

Refresh every 15 min

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Coverage is smaller than the original: only feeds that exist in this app are used.
  • Non-commercial licence source: when the server switches it off, it drops out of the index and coverage falls instead of becoming zero.

Per-signal provenance

panelgeopolitics.country.provenance

Where each of the 20 country signals came from: live, stale, absent (not monitored, source down) or disabled.

Detail

Full provenance detail, only in the country brief. "Degraded" = some source down; "stale" = some signal comes from an earlier response.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Coverage is smaller than the original: only feeds that exist in this app are used.
  • Non-commercial licence source: when the server switches it off, it drops out of the index and coverage falls instead of becoming zero.

Focal points

panelgeopolitics.focal

Countries where recent headlines (news feed) and measured map signals of the country index pile up, with urgency.

Detail

Derived on the server by GET /api/focal-points: headlines of the last 24 h attributed to countries by an editorial dictionary of places (countries, conflict zones, chokepoints — never people) crossed with the measured, non-structural signals of the country index. Score and urgency follow the published formula (Docs › Methodology › Focal points). Headlines link to their source; "Open country Stress" opens the brief.

Refresh every 5 min

Sources

SourceRouteLicense
METAQUANTICS news feed (public Telegram channels + wire RSS)/api/newsterms not verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • Next.js Route Handler (derivada, em processo)
  • useFeed (polling)
  • dicionario de entidades (src/lib/intel/entity-dictionary.ts)

Known limits

  • Headline attribution is a whole-word match against an editorial dictionary of places in English; strong homonyms (Georgia, Jordan) need a second cue, the remaining ones (Chad, "Indian Ocean") may credit a country, and a headline naming several countries credits each in full. The news feed has no category field: security categories and the sports/culture/business negative list come from declared keywords.
  • One input down (news feed or country index) = the score uses the other side only, declared in the panel; both down = SOURCE DOWN; a source disabled by the licence switch (OONI) is not a failure. Floors (minimum scores), the RSS headline signal and travel advisories below level 3 never count as map signals.
  • Content comes from public RSS feeds and is unverified OSINT.
  • Coverage is smaller than the original: only feeds that exist in this app are used.

Overview board

panelReal datageopolitics.board

Editable grid of 16 Stress widgets: index, country map and card, countries, signals, Timeline and context.

Detail

Reuses the Console grid (drag, resize, widget manager, columns-by-theme mode). The widgets read the same feeds as the index (re-read every 5 min); the Timeline has its own feeds. The chosen layout is saved in this browser and phones show a read-only stack derived from it.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • React 19
  • shadcn/ui
  • DashboardGrid + WidgetFrame (Console)
  • src/lib/ops/layout-storage.ts
  • src/lib/geopolitics/board/catalog.ts
  • WidgetManager (Console)

Known limits

  • Layout, preset and open widgets are saved only in this browser; another device opens the Full preset.
  • Coverage is smaller than the original: only feeds that exist in this app are used.

Country reading

panelReal datageopolitics.country.reading

Model A dialog with the country score, band, coverage, the six dimensions and the sources that delivered data.

Detail

Opens from the country ranking, the region list, the focal points and the country card. Dashed bars mark a dimension with no source (never zero). The attribution line lists only the per-country sources that delivered a value (n of 11). Actions: Follow, Export Markdown and Open full brief (/stress/pais/<ISO2>).

Open on screen /stress

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • Radix Dialog (shadcn/ui)
  • countryAttribution (src/lib/geopolitics/board/geopolitics-country-reading.ts)
  • Markdown (Relatórios › Gerar)

Known limits

  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".
  • Coverage is smaller than the original: only feeds that exist in this app are used.
  • Saturation reference values are editorial and not calibrated against history.

control (12)

Search region or country

controlgeopolitics.region.search

Filters the region tree by region or country name.

Detail

Matching regions expand automatically.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

History period

controlgeopolitics.history.period

Chooses how far back the chart looks.

Detail

Periods longer than the recorded history show everything available, labelled with how many days the history covers. Older readings are compacted (30 min for the last 7 days, 6 h up to 30 days, 1 per day after that) to fit up to 1 year.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Event window

controlgeopolitics.events.window

Time window of the event list.

Detail

Only 24h is available because the feeds do not reach further back and nothing is archived on the server.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Known limits

  • The feed only covers the last 24 hours.

Event category

controlgeopolitics.events.category

Toggle categories to filter the event list.

Detail

No chip selected means every category.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Signal trend

controlgeopolitics.signals.col.trend

Mini-chart of each original signal: readings recorded by the server over the last 30 days, or this browser's history while the server has too few points.

Detail

The origin shows when you hover the trend. Server series: daily (UTC) average of the radar-readings job readings, with the line broken when the method version changes. With too few points in either origin the cell reads "needs history", never zero.

Refresh every 30 min

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
NASA FIRMS (VIIRS / MODIS)/api/firesnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
IODA (Georgia Tech)/api/radarterms not verified
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
NOAA SWPC (NOAA Scales)/api/space-scalesUS Government public domain
openFDA Drug Shortages/api/drug-shortagesCC0 1.0
CISA (All CISA Advisories RSS)/api/cisa-advisoriesterms not verified
Federal Register (Executive Orders)/api/executive-ordersterms not verified
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data
NOAA / National Weather Service alerts/api/weatherUS Government public domain
USGS Volcano Hazards (elevated)/api/volcanoesUS Government public domain
NOAA National Hurricane Center/api/hurricanesUS Government public domain
NOAA NTWC / PTWC (tsunami.gov)/api/tsunamisterms not verified
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending
U.S. Trade.gov — Consolidated Screening List (13 lists: BIS, State Department, OFAC)/api/sanctionsUS Government work (public domain); terms not independently verified — human review pending
Safecast (CC0) + U.S. EPA RadNet/api/radiationSafecast: CC0; EPA RadNet: US federal data, commercial use not confirmed (behind RADAR_ENABLE_NONCOMMERCIAL)
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement, content unaltered
EASA Conflict Zone Information Bulletins (not endorsed by EASA)/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB
NIST National Vulnerability Database (CVE API 2.0) + FIRST EPSS/api/cyber/vulnsNVD: US Government public domain (notice: not endorsed or certified by the NVD); EPSS: FIRST.org, free use with citation
WHO Disease Outbreak News (not endorsed by WHO)/api/health/who-donCC BY-NC-SA 3.0 IGO (non-commercial; behind RADAR_ENABLE_NONCOMMERCIAL)
ransomware.live (Julien Mousqueton; aggregates only)/api/cyber/ransomwarepersonal use only, not for corporate use (behind RADAR_ENABLE_NONCOMMERCIAL; written permission pending)
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • SVG
  • Postgres (signal_reading)

Known limits

  • History is recorded per browser (localStorage) and is lost if site data is cleared.

Filter by category

controlgeopolitics.signals.category

Shows only the signals of one of the original's categories.

Detail

The 12 categories follow the original's coverage chart.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Filter by coverage

controlgeopolitics.signals.status

Shows signals with or without a wired real source.

Detail

"With a source" includes live, partial and proxy.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Search by country name

controlgeopolitics.list.search

Filters the table by country name.

Detail

Names follow the interface language.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Filter by region

controlgeopolitics.list.region

Restricts the table to one region.

Detail

Uses the same region grouping as the sidebar.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Filter by band

controlgeopolitics.list.band

Limits the table to one risk band or to countries with insufficient data.

Detail

Bands follow the original: Low 0-20, Guarded 20-40, Elevated 40-60, High 60-80, Severe 80-100.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Low confidence only

controlgeopolitics.list.lowConfidence

Shows only low-confidence countries: coverage below 60% of the expected weight or a country source down.

Detail

List filter to review fragile readings before trusting the number. "Not monitored" (a live source that does not cover the country) does not count as down.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Coverage is smaller than the original: only feeds that exist in this app are used.
  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".

Board presets

controlgeopolitics.board.presets

Ready-made layouts: Full (model A), Compact, Map focus (model C) and Country terminal.

Detail

Full is the model A bento (index, history and dimensions on top, regions, map, card, ranking, focal points, signals, events, Timeline). Map focus is model C: a large choropleth map with the country card beside it. Country terminal gives the dense table; the full country list lives in the List tab (/stress/list, model B). Applying a preset only repositions the open widgets.

Open on screen /stress

Sources

No external source: computed in the app.

Technologies

  • buildGeopoliticsPreset (src/lib/geopolitics/board/catalog.ts)
  • DropdownMenu (shadcn/ui)

Known limits

  • Layout, preset and open widgets are saved only in this browser; another device opens the Full preset.

metric (19)

Data coverage

metricgeopolitics.coverage

How much of the original is covered by real data in this app.

Detail

Counts the original's 70 signals with a wired source (live, partial or proxy), the feeds responding now and the countries with enough data. What is missing shows as "no source", never as zero.

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
NASA FIRMS (VIIRS / MODIS)/api/firesnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
IODA (Georgia Tech)/api/radarterms not verified
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
NOAA SWPC (NOAA Scales)/api/space-scalesUS Government public domain
openFDA Drug Shortages/api/drug-shortagesCC0 1.0
CISA (All CISA Advisories RSS)/api/cisa-advisoriesterms not verified
Federal Register (Executive Orders)/api/executive-ordersterms not verified
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data
NOAA / National Weather Service alerts/api/weatherUS Government public domain
USGS Volcano Hazards (elevated)/api/volcanoesUS Government public domain
NOAA National Hurricane Center/api/hurricanesUS Government public domain
NOAA NTWC / PTWC (tsunami.gov)/api/tsunamisterms not verified
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending
U.S. Trade.gov — Consolidated Screening List (13 lists: BIS, State Department, OFAC)/api/sanctionsUS Government work (public domain); terms not independently verified — human review pending
Safecast (CC0) + U.S. EPA RadNet/api/radiationSafecast: CC0; EPA RadNet: US federal data, commercial use not confirmed (behind RADAR_ENABLE_NONCOMMERCIAL)
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement, content unaltered
EASA Conflict Zone Information Bulletins (not endorsed by EASA)/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB
NIST National Vulnerability Database (CVE API 2.0) + FIRST EPSS/api/cyber/vulnsNVD: US Government public domain (notice: not endorsed or certified by the NVD); EPSS: FIRST.org, free use with citation
WHO Disease Outbreak News (not endorsed by WHO)/api/health/who-donCC BY-NC-SA 3.0 IGO (non-commercial; behind RADAR_ENABLE_NONCOMMERCIAL)
ransomware.live (Julien Mousqueton; aggregates only)/api/cyber/ransomwarepersonal use only, not for corporate use (behind RADAR_ENABLE_NONCOMMERCIAL; written permission pending)
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Coverage is smaller than the original: only feeds that exist in this app are used.
  • No open data source is wired to this yet; it is excluded from the score instead of being invented.

Score variation

metricgeopolitics.delta

How the score moved versus 24 hours and 30 days ago.

Detail

Computed from readings this browser recorded itself, so it needs time to appear. Green is a drop in instability, red a rise.

Sources

No external source: computed in the app.

Technologies

  • localStorage
  • React 19
  • shadcn/ui

Known limits

  • History is recorded per browser (localStorage) and is lost if site data is cleared.
  • The server only archives radar-readings job readings (up to 90 days, when a database exists); 1-year series and feed history itself do not exist.

Theater Instability

metricgeopolitics.dim.theater

Active conflict: zone severity, headlines and GDELT airstrike, clash, terror and blockade events.

Detail

Keyword-matched RSS headlines and GDELT counts for the last 6 h, each saturating at a reference value. Weight 27%.

Sources

SourceRouteLicense
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)

Technologies

  • React 19
  • shadcn/ui

Known limits

  • The baseline behind this is a manual editorial judgement, not a measurement.
  • Headlines are matched to zones and classified by keyword; this is not verified event data.
  • GDELT counts news, not verified events; per country the share of events is used (not the count), but press coverage still matters.

Strategic Risk

metricgeopolitics.dim.strategic

Proxy: the share of GDELT news about force posture, military threats and WMD use. It does not measure military capability or nuclear risk.

Detail

The original uses nuclear and arms-control posture (treaties, tests, Doomsday Clock), with no open API. A declared GDELT proxy is used here. Weight 22%.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)

Technologies

  • React 19
  • shadcn/ui

Known limits

  • This is a proxy: an approximate metric, not the same as the original's.
  • GDELT shares are shrunk toward the world rate (m = 50), with a minimum of 50 events in the country and 3 events of the class for the rare proxies.
  • GDELT counts news, not verified events; per country the share of events is used (not the count), but press coverage still matters.

Cyber Disruptions

metricgeopolitics.dim.cyber

Exploited vulnerabilities (CISA), botnet C2, internet outages (IODA), censorship (OONI) and CISA advisories.

Detail

IODA and OONI are per country and feed regions; CISA and Feodo are global only. Weight 18%.

Sources

SourceRouteLicense
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
CISA (All CISA Advisories RSS)/api/cisa-advisoriesterms not verified
NIST National Vulnerability Database (CVE API 2.0) + FIRST EPSS/api/cyber/vulnsNVD: US Government public domain (notice: not endorsed or certified by the NVD); EPSS: FIRST.org, free use with citation
ransomware.live (Julien Mousqueton; aggregates only)/api/cyber/ransomwarepersonal use only, not for corporate use (behind RADAR_ENABLE_NONCOMMERCIAL; written permission pending)
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0

Technologies

  • React 19
  • shadcn/ui

Known limits

  • The route returns at most 10 recent entries, so this count saturates at 10.
  • Non-commercial licence source: when the server switches it off, it drops out of the index and coverage falls instead of becoming zero.
  • Saturation reference values are editorial and not calibrated against history.

Biospheric Disruption

metricgeopolitics.dim.biospheric

Natural hazards: earthquakes, GDACS alerts (incl. red/orange), volcanoes, cyclones, tsunamis and tornadoes.

Detail

Blends USGS, GDACS, NHC, NTWC and NWS, each saturating at a reference value. Weight 16%.

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
USGS Volcano Hazards (elevated)/api/volcanoesUS Government public domain
NOAA National Hurricane Center/api/hurricanesUS Government public domain
NOAA NTWC / PTWC (tsunami.gov)/api/tsunamisterms not verified
NOAA / National Weather Service alerts/api/weatherUS Government public domain
WHO Disease Outbreak News (not endorsed by WHO)/api/health/who-donCC BY-NC-SA 3.0 IGO (non-commercial; behind RADAR_ENABLE_NONCOMMERCIAL)

Technologies

  • React 19
  • shadcn/ui

Known limits

  • The feed only covers the last 24 hours.
  • The feed gives no event time, so these are active alerts rather than a 24h count.
  • Saturation reference values are editorial and not calibrated against history.

Market Volatility

metricgeopolitics.dim.market

Market stress: VIX, crypto fear and circuit-breaker proximity.

Detail

Global only. VIX 12 is 0 and 40 is 100; Fear & Greed below 50 becomes stress. Weight 8%.

Sources

SourceRouteLicense
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Not tied to a location, so it counts in the global score only.
  • Uses an unofficial endpoint that can change or throttle without notice.

Civil Stress

metricgeopolitics.dim.civil

Protests and riots (GDELT), US travel advisories and press repression (WGI proxy).

Detail

Per country it also uses political stability (WGI), inflation (WDI) and displacement (UNHCR), all annual. Sanctions still lack a commercial open source. Weight 10%.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0

Technologies

  • React 19
  • shadcn/ui

Known limits

  • This is a proxy: an approximate metric, not the same as the original's.
  • Annual data: changes slowly and the reference year varies by country.
  • The provider's terms of use could not be verified (pending human review).

Coverage

metricgeopolitics.list.coverageCol

Share of the country's dimension weight that has a real reading.

Detail

Below 45% the country gets no score ("insufficient data").

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".

Strategic Risk is a proxy

metricgeopolitics.list.strategicProxy

Share of GDELT news about military posture (shows of force, threats, WMD use); it does not measure military capability or nuclear risk.

Detail

The share is shrunk toward the world rate ((k + 50 x world rate) / (n + 50)) and needs 50 events in the country and 3 events of the class; countries whose news is dominated by drills and threats still read high.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)

Technologies

  • React 19
  • shadcn/ui

Known limits

  • This is a proxy: an approximate metric, not the same as the original's.
  • GDELT shares are shrunk toward the world rate (m = 50), with a minimum of 50 events in the country and 3 events of the class for the rare proxies.
  • GDELT counts news, not verified events; per country the share of events is used (not the count), but press coverage still matters.

OONI switched off (non-commercial licence)

metricgeopolitics.license.ooniOff

OONI censorship data is CC BY-NC-SA 4.0 (non-commercial use only, derivatives under the same licence). The server has the source switched off.

Detail

While off, the signal drops out of the index: the Cyber Disruptions dimension and country coverage are computed without it (never as zero). Switch the source on in the server only for non-commercial use.

Sources

SourceRouteLicense
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Non-commercial license only (CC BY-NC-SA 4.0): blocks commercial use without an agreement.
  • Non-commercial licence source: when the server switches it off, it drops out of the index and coverage falls instead of becoming zero.

Includes restricted-licence data

metricgeopolitics.license.ncNote

The index uses sources with restricted licences while they are switched on: OONI (CC BY-NC-SA 4.0), WHO Disease Outbreak News (CC BY-NC-SA 3.0 IGO) and ransomware.live (personal-use terms).

Detail

NC: no commercial use. SA: the derived index and history can only be shared under the same licence, credited to each source. ransomware.live allows personal use only. The note lists only the sources active now. For commercial use, switch them off in the server (METAQUANTICS_COMMERCIAL=1).

Sources

SourceRouteLicense
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Non-commercial license only (CC BY-NC-SA 4.0): blocks commercial use without an agreement.

stale

metricgeopolitics.feed.stale

The last request for this feed failed; the value shown comes from the last valid response.

Detail

The old data stays in the calculation until the next valid response, flagged as stale. With no valid response at all the feed has no data (never zero).

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui

Known limits

  • The server only archives radar-readings job readings (up to 90 days, when a database exists); 1-year series and feed history itself do not exist.

Minimum score (floor)

metricgeopolitics.country.floor

The country score does not fall below this floor because of a strong fact: level 4 or 3 travel advisory, war zone (editorial) or high displacement.

Detail

The weighted average of signals dilutes strong facts; the floor imposes the minimum score (55 / 35 / 60 / 40) only with a live or stale reading of its input (never from an absent one). With insufficient data the displayed score is the floor itself ("minimum score by … — insufficient data") and gets no trend.

Sources

SourceRouteLicense
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0

Technologies

  • React 19
  • shadcn/ui

Known limits

  • Floors are editorial (values and thresholds declared in the Methodology) and only apply with a live or stale reading of their input — never from an absent one: without a travel advisory, zone or displacement reading there is no floor.
  • The baseline behind this is a manual editorial judgement, not a measurement.

24 h trend

metricgeopolitics.country.trend

Change of the country index over 24 h and where the comparison came from: server, this browser or none.

Detail

Compares against the reading closest to 24 h ago (3-point dead band for "stable"). "Compared on the server" comes from the radar-index job (Postgres); "in this browser" from the local history; "no comparison" when no comparable reading exists — never "stable" for lack of history.

Sources

No external source: computed in the app.

Technologies

  • React 19
  • shadcn/ui
  • Postgres (index_reading, job radar-index)
  • localStorage

Known limits

  • The server comparison depends on the `radar-index` job (Postgres, one reading every 30 min); without a database the trend uses this browser history or says "no comparison".
  • History is recorded per browser (localStorage) and is lost if site data is cleared.

90-day index series

metricgeopolitics.brief.series

Daily evolution of the country score over the last 90 days, with where the data came from: server or this browser.

Detail

Each point is the mean of one day (UTC) of the readings recorded by the radar-index job, split by method version: the chart never connects different versions (the break shows as a marker). With no server readings it uses this browser history (up to 7 days); with neither it says "no data" — it never draws zero.

Refresh every 30 min

Sources

SourceRouteLicense
METAQUANTICS index_reading (job radar-index, Postgres)/api/geopolitics/country/{code}/serienot verified

Technologies

  • React 19
  • shadcn/ui
  • SVG
  • Postgres (index_reading, job radar-index)
  • Next.js Route Handler
  • useFeed (polling)
  • localStorage

Known limits

  • The server series only exists with the `radar-index` job and Postgres (one reading every 30 min, 90-day retention); without a database, only this browser history (up to 7 days).
  • History is recorded per browser (localStorage) and is lost if site data is cleared.

Why this score

metricgeopolitics.brief.decomposition

The final country score as a sum of contributions: each signal with a reading enters with its effective weight and score, plus rounding and, when present, the floor.

Detail

A signal contribution = (dimension weight ÷ sum of the weights of the dimensions with a score) × (signal weight ÷ sum of the weights of the signals with a reading in the dimension) × signal score. The Rounding row is the gap to the raw score, which the engine rounds to 0.1 in two steps; the Floor row is how much the floor (travel advisory, editorial war zone, displacement) lifted the raw score. All rows add up exactly to the country score. A signal with no reading does not enter (it never becomes zero); with no score and no floor the table is empty. The same data comes as JSON and CSV (/api/geopolitics/country/{code}/decomposicao).

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • decompose (src/lib/geopolitics/country-score.ts)
  • Next.js Route Handler (derivada, em processo)
  • CSV (RFC 4180)

Known limits

  • Floors are editorial (values and thresholds declared in the Methodology) and only apply with a live or stale reading of their input — never from an absent one: without a travel advisory, zone or displacement reading there is no floor.
  • Coverage is smaller than the original: only feeds that exist in this app are used.

Temporal anomaly

metricgeopolitics.anomaly-badge

Compares the current value of the dimension (computed on the server) with its own seasonal baseline: "above/below normal" when |z| ≥ 1.5; "baseline forming (n/24)" until 24 readings (and 3 distinct values) of the same key (weekday × 4 h band) exist.

Detail

Reads GET /api/geopolitics/anomaly (5 min). The radar-readings job writes 1 reading per series and scope every 30 min into signal_reading (Postgres); the baseline is the mean and sample standard deviation (Welford) of the last 90 d of readings with the same seasonal key, excluding the last 24 h (never its own day) and, for dimensions and the index, only from the current engine version; z = (value − mean) / max(sd, floors: 10% of the mean; 2 points on 0–100 scales; √mean on counts); moderate ≥ 1.5 · high ≥ 2.5 · critical ≥ 3.5; the displayed z is clamped at ±10. Without a baseline "normal" is never shown. No z-score is computed or stored in this browser.

Refresh every 5 min

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • Next.js Route Handler (derivada, em processo)
  • Postgres (signal_reading, job radar-readings)
  • Welford (src/lib/geopolitics/baseline.ts)

Known limits

  • The baseline depends on the `radar-readings` job (Postgres, 1 reading every 30 min, 90 d retention): without a database everything stays "forming" and nothing is compared in this browser.
  • Seasonal key = weekday × 4 h band (UTC), excluding the last 24 h: a key needs ~3 weeks of readings (24) and 3 distinct values to have a baseline; the 90 d window gives at most ~12 weeks per key and captures no yearly seasonality.
  • Server series cover only the 11 country-engine routes: the market dimension and the KEV, C2, Kp, FIRMS, NWS, volcano, NHC and tsunami signals have no baseline (no badge, never "normal").

Count vs baseline

metricgeopolitics.anomaly.feeds

Per feed: how many of the series it feeds are outside their own seasonal baseline (|z| ≥ 1.5) among those that already have one; "forming" while none has.

Detail

Series = Stress signals measured by the server (global scope), read from GET /api/geopolitics/anomaly. Only feeds read by the server (quakes, GDACS, conflicts, GDELT, travel advisories, OONI, IODA) have series; structural ones (World Bank, UNHCR) stay out of the baseline.

Refresh every 5 min

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • Postgres (signal_reading, job radar-readings)
  • Welford (src/lib/geopolitics/baseline.ts)

Known limits

  • The baseline depends on the `radar-readings` job (Postgres, 1 reading every 30 min, 90 d retention): without a database everything stays "forming" and nothing is compared in this browser.
  • Server series cover only the 11 country-engine routes: the market dimension and the KEV, C2, Kp, FIRMS, NWS, volcano, NHC and tsunami signals have no baseline (no badge, never "normal").

feed (33)

USGS earthquakes

feedgeopolitics.feed.quakes

Earthquakes of magnitude 2.5+ in the last 24 hours, from the USGS public feed.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 5 min

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • The feed only covers the last 24 hours.

GDACS disaster alerts

feedgeopolitics.feed.gdacs

Active disaster alerts (cyclones, floods, volcanoes, wildfires, droughts) from the GDACS RSS.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 5 min

Sources

SourceRouteLicense
GDACS (UN / European Commission)/api/gdeltnot verified

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • The feed gives no event time, so these are active alerts rather than a 24h count.

NASA FIRMS fires

feedgeopolitics.feed.fires

Active fire detections of the last 24 hours (satellite thermal anomalies), sampled by the route.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 10 min

Sources

SourceRouteLicense
NASA FIRMS (VIIRS / MODIS)/api/firesnot verified

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • The source route samples its output, so counts are lower bounds, not totals.

Conflict zones and headlines

feedgeopolitics.feed.conflicts

Known conflict zones enriched with headlines from public RSS feeds matched by keyword.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 5 min

Sources

SourceRouteLicense
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Headlines are matched to zones and classified by keyword; this is not verified event data.
  • Content comes from public RSS feeds and is unverified OSINT.

CISA KEV

feedgeopolitics.feed.kev

Known exploited vulnerabilities added to the CISA catalog in the last 30 days.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 10 min

Sources

SourceRouteLicense
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • The route returns at most 10 recent entries, so this count saturates at 10.

Botnet C2 servers

feedgeopolitics.feed.c2

Botnet command-and-control servers listed by the abuse.ch Feodo Tracker blocklist.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 10 min

Sources

SourceRouteLicense
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Space weather

feedgeopolitics.feed.kp

Planetary geomagnetic Kp index from NOAA SWPC.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 5 min

Sources

SourceRouteLicense
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Markets (VIX)

feedgeopolitics.feed.markets

Market quotes; the VIX volatility index is the only reading used here.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 5 min

Sources

SourceRouteLicense
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Uses an unofficial endpoint that can change or throttle without notice.

GDELT events by country

feedgeopolitics.feed.gdeltEvents

GDELT 2.0 event counts by country and CAMEO class (protests, riots, airstrikes, clashes, terror, blockades, CBRN, force posture) over the last 6 hours.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 15 min

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • The window is the last 6 hours (24 exports of 15 min), not 24 hours.
  • When 15-min windows are missing, world and regional counts are estimated for 6 h (x 24 / windows received).
  • GDELT counts news, not verified events; per country the share of events is used (not the count), but press coverage still matters.

World Bank (WGI/WDI)

feedgeopolitics.feed.worldBank

Annual per-country indicators: political stability and voice/accountability (WGI), inflation and population (WDI).

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 1440 min

Sources

SourceRouteLicense
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Annual data: changes slowly and the reference year varies by country.

Travel advisories (US)

feedgeopolitics.feed.travel

US State Department travel advisory level 1 to 4 for each country.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 360 min

Sources

SourceRouteLicense
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • The provider's terms of use could not be verified (pending human review).
  • The second opinion (FCDO) needs one call per country (≤ 10 req/s): coverage is partial until the refreshes complete and is reported. A country with no FCDO reading does not count as "no advisory".

OONI censorship

feedgeopolitics.feed.ooni

OONI web-connectivity measurements over the last day: confirmed blocks and anomalies per country. Non-commercial licence: only queried when the server switches the source on.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 60 min

Sources

SourceRouteLicense
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Non-commercial license only (CC BY-NC-SA 4.0): blocks commercial use without an agreement.
  • Non-commercial licence source: when the server switches it off, it drops out of the index and coverage falls instead of becoming zero.

IODA internet outages

feedgeopolitics.feed.ioda

Per-country internet outage events detected by IODA (Georgia Tech).

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 5 min

Sources

SourceRouteLicense
IODA (Georgia Tech)/api/radarterms not verified

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • The route only places about 95 of the 198 countries (partial coverage); the rest have no reading (not zero). An outage counts once per country even when several IODA data sources detect it.
  • The provider's terms of use could not be verified (pending human review).

UNHCR displaced

feedgeopolitics.feed.unhcr

Refugees, asylum seekers and internally displaced people by country of origin (annual data).

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 360 min

Sources

SourceRouteLicense
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Annual data: changes slowly and the reference year varies by country.

NOAA scales

feedgeopolitics.feed.scales

R/S/G space-weather scales (0-5) observed now.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 5 min

Sources

SourceRouteLicense
NOAA SWPC (NOAA Scales)/api/space-scalesUS Government public domain

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Drug shortages (FDA)

feedgeopolitics.feed.drugs

Generic names with a current shortage in the US, from openFDA.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 360 min

Sources

SourceRouteLicense
openFDA Drug Shortages/api/drug-shortagesCC0 1.0

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Covers the US only.

CISA advisories

feedgeopolitics.feed.cisaRss

Alerts, cybersecurity advisories and ICS advisories published by CISA (latest 30).

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 30 min

Sources

SourceRouteLicense
CISA (All CISA Advisories RSS)/api/cisa-advisoriesterms not verified

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • The RSS only carries the 30 latest items.

Executive orders (US)

feedgeopolitics.feed.orders

Executive orders published in the Federal Register over the last 30 days.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 360 min

Sources

SourceRouteLicense
Federal Register (Executive Orders)/api/executive-ordersterms not verified

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Covers the US only.
  • The provider's terms of use could not be verified (pending human review).

Crypto Fear & Greed

feedgeopolitics.feed.fearGreed

Daily crypto market sentiment index (0 extreme fear, 100 extreme greed).

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 60 min

Sources

SourceRouteLicense
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Not tied to a location, so it counts in the global score only.

NWS alerts (US)

feedgeopolitics.feed.nws

Active US National Weather Service alerts that carry geometry.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 5 min

Sources

SourceRouteLicense
NOAA / National Weather Service alerts/api/weatherUS Government public domain

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Covers the US only.
  • The route only keeps alerts with geometry; zone-based alerts without a polygon are dropped (partial count).

USGS volcanoes

feedgeopolitics.feed.volcanoes

US volcanoes at an elevated alert level.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 30 min

Sources

SourceRouteLicense
USGS Volcano Hazards (elevated)/api/volcanoesUS Government public domain

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Covers the US only.

NHC cyclones

feedgeopolitics.feed.nhc

Active tropical cyclones tracked by the NHC (Atlantic and eastern/central Pacific).

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 30 min

Sources

SourceRouteLicense
NOAA National Hurricane Center/api/hurricanesUS Government public domain

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Tsunami bulletins

feedgeopolitics.feed.tsunami

Bulletins from the NTWC and PTWC centers; only those indicating some danger count.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 5 min

Sources

SourceRouteLicense
NOAA NTWC / PTWC (tsunami.gov)/api/tsunamisterms not verified

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • The provider's terms of use could not be verified (pending human review).

CDC wastewater

feedgeopolitics.feed.wastewater

Wastewater viral activity level (SARS-CoV-2) at CDC-monitored sites.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 360 min

Sources

SourceRouteLicense
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Covers the US only.

OFAC SDN (sanctions)

feedgeopolitics.feed.sanctions

Aggregates of the US Treasury OFAC SDN list by country, plus new designations in the last 7 days.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 360 min

Sources

SourceRouteLicense
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending
U.S. Trade.gov — Consolidated Screening List (13 lists: BIS, State Department, OFAC)/api/sanctionsUS Government work (public domain); terms not independently verified — human review pending

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • The provider's terms of use could not be verified (pending human review).
  • Aggregates only: the list contains personal data and names never reach Stress.
  • Covers only the 13 Trade.gov lists; the UN, the European Union and the United Kingdom are not included yet. The file carries no publication date (we show the newest dated record) and the set of lists can change.

Radiation (Safecast / RadNet)

feedgeopolitics.feed.radiation

Ambient dose rate in nSv/h: Safecast (citizen network, CC0) and, with the non-commercial flag, EPA RadNet (US).

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 15 min

Sources

SourceRouteLicense
Safecast (CC0) + U.S. EPA RadNet/api/radiationSafecast: CC0; EPA RadNet: US federal data, commercial use not confirmed (behind RADAR_ENABLE_NONCOMMERCIAL)

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • RadNet only enters with RADAR_ENABLE_NONCOMMERCIAL (commercial use not confirmed); when off, the signal has no data.
  • Uses an unofficial endpoint that can change or throttle without notice.

Health notices (CDC)

feedgeopolitics.feed.healthNotices

CDC Travelers' Health notices in force, level 1 to 4, with the countries each one names.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 60 min

Sources

SourceRouteLicense
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement, content unaltered

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Notices stay in force until the CDC withdraws them: the signal is a state ("how many are in force"), not a count of events over time.
  • CDC content without substantive change; the CDC does not endorse this site. It is not epidemiological outbreak surveillance.

Airspace (EASA CZIB)

feedgeopolitics.feed.airspace

EASA Conflict Zone Information Bulletins in force, by country, read from /api/airspace (which also carries the FAA TFRs, not read here).

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 15 min

Sources

SourceRouteLicense
EASA Conflict Zone Information Bulletins (not endorsed by EASA)/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Counts EASA CZIB bulletins in force (a state, not events over time). EASA publishes bulletins only for conflict zones, so "0" means "no bulletin", not "safe airspace". A bulletin about a region or several countries enters only the world total. A feed that is down means no data (never 0); the route may serve its last good reading, flagged as stale. Informational, not for flight planning.
  • EASA content reused with attribution (EU reuse policy, Decision 2011/833/EU); EASA does not endorse this site and the official bulletins prevail.

Critical vulnerabilities (NVD + EPSS)

feedgeopolitics.feed.nvd

CVEs with a critical CVSS 3.x score published in the NVD over the last 7 days, with the EPSS exploitation probability (FIRST), read from /api/cyber/vulns. Keyless: the route keeps to the limit of 5 requests per 30 s and caches the result for 6 h.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 360 min

Sources

SourceRouteLicense
NIST National Vulnerability Database (CVE API 2.0) + FIRST EPSS/api/cyber/vulnsNVD: US Government public domain (notice: not endorsed or certified by the NVD); EPSS: FIRST.org, free use with citation

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Counts critical CVEs published over the last 7 days (publication date, not exploitation). Keyless, the NVD accepts 5 requests per 30 s: the route reads at most 3 pages and caches the result for 6 h; with more CVEs than that, the value is a floor. NVD down = no data (never 0).
  • This product uses the NVD API but is not endorsed or certified by the NVD.

WHO outbreaks (Disease Outbreak News)

feedgeopolitics.feed.whoDon

WHO Disease Outbreak News published over the last 30 days, by country from the title, read from /api/health/who-don. Non-commercial licence: only queried when the server switches the source on (RADAR_ENABLE_NONCOMMERCIAL=1), never in commercial mode.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 360 min

Sources

SourceRouteLicense
WHO Disease Outbreak News (not endorsed by WHO)/api/health/who-donCC BY-NC-SA 3.0 IGO (non-commercial; behind RADAR_ENABLE_NONCOMMERCIAL)

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Non-commercial use only: WHO content under CC BY-NC-SA 3.0 IGO; blocks commercial use. WHO does not endorse this site.
  • Non-commercial licence source: when the server switches it off, it drops out of the index and coverage falls instead of becoming zero.

Ransomware victims (ransomware.live)

feedgeopolitics.feed.ransomware

Victims claimed by ransomware groups over the last 24 h, aggregates per country only, read from /api/cyber/ransomware. Personal-use terms: only queried when the server switches the source on (RADAR_ENABLE_NONCOMMERCIAL=1), never in commercial mode.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 60 min

Sources

SourceRouteLicense
ransomware.live (Julien Mousqueton; aggregates only)/api/cyber/ransomwarepersonal use only, not for corporate use (behind RADAR_ENABLE_NONCOMMERCIAL; written permission pending)

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • Claims by criminal groups, not verified: the victim may not exist, may have been hit earlier or may be listed more than once. Aggregates per country only; names, domains and links never leave the server.
  • ransomware.live terms: personal use only, not for corporate or business use (no CC licence); written permission pending.
  • Non-commercial licence source: when the server switches it off, it drops out of the index and coverage falls instead of becoming zero.

Internet shutdowns (Access Now #KeepItOn)

feedgeopolitics.feed.keepiton

Internet shutdowns documented by Access Now in the year, per country, read from /api/internet-shutdowns (bundled annual file). CC BY 4.0 licence.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 1440 min

Sources

SourceRouteLicense
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • 0 = no shutdown documented by Access Now, not 'free internet'. A multi-country shutdown counts in each country named; a country name that does not match the table counts only in the total.
  • Annual data: changes slowly and the reference year varies by country.

Electoral democracy (V-Dem)

feedgeopolitics.feed.vdem

V-Dem Electoral Democracy Index (v2x_polyarchy, 0 to 1) per country, via Our World in Data, read from /api/democracy (bundled annual file). CC BY-SA 4.0 licence. Shown only (Radar panel and country brief): it does not enter the index, the series, the CSV or the API.

Detail

The browser polls this internal route, which queries the public source server-side. A feed counts as live only when its response parses; when it does not, every signal that depends on it shows no data instead of zero.

Refresh every 1440 min

Sources

SourceRouteLicense
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • Next.js Route Handler
  • useFeed (polling)

Known limits

  • CC BY-SA 4.0: the derived value keeps the licence. V-Dem is shown only (own file, route and feed; Radar panel and country brief) and is not mixed with any other source: it does not enter the index, the series, the CSV or the API.
  • Annual data: changes slowly and the reference year varies by country.

signal (149)

NameSourceSummary
Conflict headlinesDistinct headlines matched to known conflict zones from public RSS feeds.
Strikes and attacksHeadlines whose keywords indicate strikes, missiles, drones or attacks.
Siege and blockade reportsHeadlines whose keywords indicate sieges or blockades.
Terrorism-related reportsHeadlines whose keywords indicate terrorism or hostage events.
Embargo and sanctions newsHeadlines whose keywords indicate embargoes, sanctions or tariffs. Shown, not scored.
Conflict zone severitySum of the editorial severity weights (war 3, high 2, elevated 1, moderate 0.5) of the known conflict zones.
Active war zonesKnown conflict zones currently rated as war. Shown, not scored.
EarthquakesEarthquakes of magnitude 2.5+ recorded by USGS in the last 24 hours.
Earthquakes M4.5+Earthquakes of magnitude 4.5 or more in the last 24 hours.
Earthquakes M6+Major earthquakes of magnitude 6 or more in the last 24 hours.
GDACS disaster alertsAll active GDACS disaster alerts, of any type.
Tropical cyclonesActive tropical cyclone alerts in GDACS.
Flood alertsActive flood alerts in GDACS.
Volcano alertsActive volcano alerts in GDACS.
GDACS wildfire alertsActive wildfire alerts in GDACS.
Active wildfire detectionsSatellite fire detections in the last 24 hours as returned by the app route, which samples at about 2,000 points. Shown, not scored.
CISA KEV recent additionsExploited vulnerabilities added to the CISA catalog in the last 30 days (the route returns at most 10).
Online botnet C2 serversCommand-and-control servers currently marked online in the Feodo Tracker blocklist.
Geomagnetic Kp indexLatest planetary Kp index (0-9) from NOAA. Shown as context, not scored.
VIX volatility indexLatest VIX level; maps 12 to 0 points and 40 to 100 points in Market Volatility.
Protests (GDELT)GDELT protest events (CAMEO 14x) over the last 6 hours.
Riots (GDELT)Violent protests and riots (CAMEO 145x) over the last 6 hours.
Airstrikes (GDELT)Use of aerial weapons (CAMEO 195x) over the last 6 hours.
Clashes (GDELT)Fighting and mass violence (CAMEO 19x and 20x) over the last 6 hours.
Terror (GDELT)Abductions, bombings and assassinations (CAMEO 181x, 183x, 185x, 186x).
Blockades (GDELT)Imposed blockades or movement restrictions (CAMEO 191x).
WMD use (GDELT)Reports of use of weapons of mass destruction (CAMEO 204x).
Force posture (GDELT)Military alert/mobilization and threats of force (CAMEO 15x and 138x). Proxy for Strategic Risk and Military Exercises.
Protest hotspotsCountries with 3 or more GDELT protests over the last 6 hours (estimated for 6 h when windows are missing). Shown, not scored.
GDACS red/orange alertsGDACS alerts whose level is red or orange (read from the title).
Volcanoes on alert (US)US volcanoes at an elevated level according to USGS.
Active cyclones (NHC)Active tropical cyclones tracked by the NHC.
Tsunami bulletins with dangerCurrent NTWC/PTWC bulletins that do not say "no tsunami danger".
Tornado warnings (US)Active NWS "Tornado Warning" alerts with geometry.
Flood warnings (US)Active NWS flood and flash-flood warnings with geometry. Shown, not scored.
Heat/cold alerts (US)Active NWS heat, cold or freeze alerts with geometry. Shown, not scored.
Internet outages (IODA)Per-country internet outage events detected by IODA.
Countries with censorship (OONI)Countries whose last-day OONI blocking index is 20 or more.
CISA advisories (7 days)CISA alerts and cybersecurity advisories published over the last 7 days.
ICS advisories (7 days)CISA ICS advisories published over the last 7 days. Shown, not scored.
Space weather scale (max R/S/G)Highest of the NOAA R, S and G scales observed now (0-5). Shown, not scored.
Crypto Fear & Greed0-100 index; below 50 (fear) counts as market stress.
Circuit-breaker proximityS&P 500 futures (ES=F) drop as % of the level-1 trigger (7%).
Level 3/4 travel advisoriesCountries with a US travel advisory at level 3 (reconsider) or 4 (do not travel). The UK FCDO appears as a second opinion (not counted in the value).
Press repression (%)Proxy: % of countries with a WGI Voice and Accountability score below 30. Shown, not scored globally.
Displaced peopleRefugees + asylum seekers + internally displaced by country of origin (UNHCR, annual). Shown.
Drug shortagesGeneric names with a current US shortage (openFDA). Shown, not scored.
Wastewater: very high share (%)% of CDC sites with "very high" SARS-CoV-2 viral activity in the latest week. Shown.
Executive orders (30 days)US executive orders published in the Federal Register over the last 30 days. Shown.
Countries with SDN recordsNumber of countries with at least one OFAC SDN record (address or vessel flag in the country).
New OFAC designations (7 d)Records added to the OFAC SDN list in the publications of the last 7 days (official delta files).
Elevated radiation (stations)Stations with 2 readings in a row above double their own 30-day median. A station without a baseline has no data, never "normal".
Travelers' health notices (level 2+)Number of CDC Travelers' Health notices at level 2 or higher in force now; per country, how many name the country. Notices are standing states, not dated events.
Airspace bulletins (EASA CZIB)Number of EASA CZIB bulletins in force now; per country, how many are about that country (a bulletin about a region or several countries counts only in the world total). A standing state, not a dated event. Shown, not scored.
Critical CVEs published (NVD)Number of CVEs with a critical CVSS 3.x score published in the NVD over the last 7 days. Global only (a CVE has no country). Scored with a small weight in Cyber Disruptions (method 2026.12).
Outbreaks reported by WHOWHO outbreak news over the last 30 days; per country, the ones whose title names that country (a multi-country outbreak counts only in the world total). Only with the non-commercial source switched on; when off it drops out (never 0). Scored with a small weight in Biospheric Disruption (method 2026.12); never in commercial mode.
Claimed ransomware victims (proxy)Victims claimed on leak sites over the last 24 h (ransomware.live), by victim country. A proxy for the original's "KEV used in ransomware", not the KEV ransomware field. Only with the non-commercial source switched on. Scored with a small weight in Cyber Disruptions (method 2026.12); never in commercial mode.
Countries with an internet shutdown (Access Now)Countries with at least one internet shutdown documented by Access Now in the file's year; a multi-country shutdown counts in each one. Annual data. Scored with a small weight in Cyber Disruptions (method 2026.12); being annual, on its own it does not give Cyber a score.
Low electoral democracy (V-Dem)Share of countries with a V-Dem electoral democracy index below 0.5, among those with data from the last 3 years; per region, the same share within the region. Value derived from CC BY-SA 4.0. Shown, not scored: it does not enter the index (the share-alike licence must not spread to the index).
AirstrikesWired to a real public source with the same metric (or a direct equivalent).
Arms Embargo UpdatesWired to a real source that covers only part of the original's metric.
Protests & Civil UnrestWired to a real public source with the same metric (or a direct equivalent).
Terrorism-Related ReportsWired to a real public source with the same metric (or a direct equivalent).
CBRN IncidentsWired to a real source with an approximate metric, declared as a proxy.
Siege / Blockade ReportsWired to a real public source with the same metric (or a direct equivalent).
Violent Unrest / RiotsWired to a real public source with the same metric (or a direct equivalent).
Protest/Unrest Hotspots (live)Wired to a real public source with the same metric (or a direct equivalent).
GDACS Disaster AlertsWired to a real public source with the same metric (or a direct equivalent).
GDACS Red/Orange AlertsWired to a real public source with the same metric (or a direct equivalent).
Humanitarian CrisesWired to a real source with an approximate metric, declared as a proxy.
Volcano AlertsWired to a real public source with the same metric (or a direct equivalent).
EarthquakesWired to a real public source with the same metric (or a direct equivalent).
Earthquakes M≥4.5Wired to a real public source with the same metric (or a direct equivalent).
Earthquakes M≥6Wired to a real public source with the same metric (or a direct equivalent).
Active Wildfire DetectionsWired to a real source that covers only part of the original's metric.
Tropical CyclonesWired to a real public source with the same metric (or a direct equivalent).
Tsunami Warnings (US)Wired to a real public source with the same metric (or a direct equivalent).
Tornado Warnings (US)Wired to a real source that covers only part of the original's metric.
Flood Warnings (US)Wired to a real source that covers only part of the original's metric.
Extreme Heat / Cold Alerts (US)Wired to a real source that covers only part of the original's metric.
Executive OrdersWired to a real public source with the same metric (or a direct equivalent).
WHO Disease OutbreaksWired to a real public source with the same metric (or a direct equivalent).
CDC Outbreak NoticesWired to a real source that covers only part of the original's metric.
Active Drug ShortagesWired to a real public source with the same metric (or a direct equivalent).
Wastewater Viral Load (Very High share)Wired to a real public source with the same metric (or a direct equivalent).
CISA Known-Exploited VulnsWired to a real public source with the same metric (or a direct equivalent).
KEV Used in RansomwareWired to a real source with an approximate metric, declared as a proxy.
NVD CVEs PublishedWired to a real public source with the same metric (or a direct equivalent).
CISA AdvisoriesWired to a real public source with the same metric (or a direct equivalent).
ICS-CERT AdvisoriesWired to a real public source with the same metric (or a direct equivalent).
Internet Outages (located)Wired to a real source that covers only part of the original's metric.
Active Internet OutagesWired to a real source that covers only part of the original's metric.
Internet Censorship (located)Wired to a real public source with the same metric (or a direct equivalent).
Space Weather Severity (R/S/G 0–5)Wired to a real public source with the same metric (or a direct equivalent).
Military ExercisesWired to a real source with an approximate metric, declared as a proxy.
VIX Volatility IndexWired to a real public source with the same metric (or a direct equivalent).
Crypto Fear & GreedWired to a real public source with the same metric (or a direct equivalent).
Circuit-Breaker ProximityWired to a real public source with the same metric (or a direct equivalent).
Travel Advisories (located)Wired to a real public source with the same metric (or a direct equivalent).
Sanctioned Countries (located)Wired to a real public source with the same metric (or a direct equivalent).
Press Repression (share)Wired to a real source with an approximate metric, declared as a proxy.
AirstrikesShare of the country's GDELT events over the last 6 h that are use of aerial weapons (CAMEO 195x); 3% scores 100. A share (not a count) so press volume is not rewarded; needs 50 events in the country, and the score uses the share shrunk toward the world rate ((k + 50 x world rate) / (n + 50)).
ClashesShare of the country's GDELT events over the last 6 h that are fighting and mass violence (CAMEO 19x/20x); 40% scores 100. A share (not a count) so press volume is not rewarded; needs 50 events in the country, and the score uses the share shrunk toward the world rate ((k + 50 x world rate) / (n + 50)).
TerrorShare of the country's GDELT events over the last 6 h that are abductions, bombings and assassinations (CAMEO 181x/183x/185x/186x); 5% scores 100. A share (not a count) so press volume is not rewarded; needs 50 events in the country, and the score uses the share shrunk toward the world rate ((k + 50 x world rate) / (n + 50)).
BlockadesShare of the country's GDELT events over the last 6 h that are blockades/movement restrictions (CAMEO 191x); 5% scores 100. A share (not a count) so press volume is not rewarded; needs 50 events in the country, and the score uses the share shrunk toward the world rate ((k + 50 x world rate) / (n + 50)).
Conflict headlinesRSS headlines attributed to the country's conflict zone (only the 11 countries with a 1:1 zone).
Force postureShare of the country's GDELT events over the last 6 h that are force posture and military threats (CAMEO 15x/138x), Strategic Risk proxy; 5% scores 100. A share (not a count) so press volume is not rewarded; needs 50 events in the country and at least 3 events of the class (below that the score is 0); the score uses the share shrunk toward the world rate ((k + 50 x world rate) / (n + 50)). It measures news composition, not military capability or nuclear risk.
WMD useShare of the country's GDELT events over the last 6 h that are use of weapons of mass destruction (CAMEO 204x), Strategic Risk proxy; 1% scores 100. A share (not a count) so press volume is not rewarded; needs 50 events in the country and at least 3 events of the class (below that the score is 0); the score uses the share shrunk toward the world rate ((k + 50 x world rate) / (n + 50)). It measures news composition, not military capability or nuclear risk.
Internet outagesIODA events in the country (log, saturates at 2). No reading for countries the route cannot place.
Internet censorshipOONI index 0-100 (60% confirmed blocking up to 20%, 40% anomalies above 5%). Needs 200 measurements that day.
M4.5+ earthquakesUSGS M4.5+ earthquakes in the last 24 h whose place names the country (log, saturates at 4).
GDACS red/orange alertsRed or orange GDACS alerts whose title names the country (log, saturates at 2).
ProtestsShare of the country's GDELT events over the last 6 h that are protests (CAMEO 14x); 10% scores 100. A share (not a count) so press volume is not rewarded; needs 50 events in the country, and the score uses the share shrunk toward the world rate ((k + 50 x world rate) / (n + 50)).
RiotsShare of the country's GDELT events over the last 6 h that are violent protests/riots (CAMEO 145x); 2% scores 100. A share (not a count) so press volume is not rewarded; needs 50 events in the country, and the score uses the share shrunk toward the world rate ((k + 50 x world rate) / (n + 50)).
Travel advisory (US)State Department level 1-4; level 1 = 0 and level 4 = 100.
Political instability (WGI)100 minus the WGI Political Stability score (annual; ignored if older than 3 years).
Press repression (WGI)Proxy: 100 minus the WGI Voice and Accountability score (annual).
InflationAnnual consumer inflation (WDI); above 3% on a log scale up to 100% (annual; ignored if older than 3 years).
DisplacementRefugees + asylum + internally displaced originating in the country as % of population (UNHCR/WDI); 20% = 100.
Internet shutdowns (Access Now)Internet shutdowns documented by Access Now #KeepItOn in the country in the year of the file (log, saturates at 10). A tracked country with no shutdown documented reads 0 (not "free internet"). Annual; ignored if older than 3 years.
Low electoral democracy (V-Dem)Shows the V-Dem Electoral Democracy Index (0-100). Annual (latest year with data); ignored if older than 3 years. Derived from CC BY-SA 4.0. Shown only: it does not enter the country score, the decomposition or the series.

widget (16)

Data coverage

widgetReal datageopolitics.board.widget.geopolitics-coverage

Signals with a real source, feeds responding and per-country sources.

Detail

Counts the original's 70 signals with a wired source (live, partial or proxy), the feeds responding now and the countries with enough data. What is missing shows as "no source", never as zero.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
NASA FIRMS (VIIRS / MODIS)/api/firesnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
IODA (Georgia Tech)/api/radarterms not verified
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
NOAA SWPC (NOAA Scales)/api/space-scalesUS Government public domain
openFDA Drug Shortages/api/drug-shortagesCC0 1.0
CISA (All CISA Advisories RSS)/api/cisa-advisoriesterms not verified
Federal Register (Executive Orders)/api/executive-ordersterms not verified
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data
NOAA / National Weather Service alerts/api/weatherUS Government public domain
USGS Volcano Hazards (elevated)/api/volcanoesUS Government public domain
NOAA National Hurricane Center/api/hurricanesUS Government public domain
NOAA NTWC / PTWC (tsunami.gov)/api/tsunamisterms not verified
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending
U.S. Trade.gov — Consolidated Screening List (13 lists: BIS, State Department, OFAC)/api/sanctionsUS Government work (public domain); terms not independently verified — human review pending
Safecast (CC0) + U.S. EPA RadNet/api/radiationSafecast: CC0; EPA RadNet: US federal data, commercial use not confirmed (behind RADAR_ENABLE_NONCOMMERCIAL)
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement, content unaltered
EASA Conflict Zone Information Bulletins (not endorsed by EASA)/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB
NIST National Vulnerability Database (CVE API 2.0) + FIRST EPSS/api/cyber/vulnsNVD: US Government public domain (notice: not endorsed or certified by the NVD); EPSS: FIRST.org, free use with citation
WHO Disease Outbreak News (not endorsed by WHO)/api/health/who-donCC BY-NC-SA 3.0 IGO (non-commercial; behind RADAR_ENABLE_NONCOMMERCIAL)
ransomware.live (Julien Mousqueton; aggregates only)/api/cyber/ransomwarepersonal use only, not for corporate use (behind RADAR_ENABLE_NONCOMMERCIAL; written permission pending)
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • CoverageWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Coverage is smaller than the original: only feeds that exist in this app are used.
  • No open data source is wired to this yet; it is excluded from the score instead of being invented.

Instability index

widgetReal datageopolitics.board.widget.geopolitics-score

0 to 100 score for the world or the region, band, 24 h and 30-day change.

Detail

A weighted blend of the dimensions that have readings. The card states how many dimensions made it in. A dash means no feed is responding.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • React 19
  • shadcn/ui
  • ScoreWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Saturation reference values are editorial and not calibrated against history.
  • Coverage is smaller than the original: only feeds that exist in this app are used.

Index history

widgetReal datageopolitics.board.widget.geopolitics-history

Index series saved in this browser, with a period selector.

Detail

One reading is stored every 30 minutes in localStorage. There is no server archive yet, so the chart starts empty and grows as you keep the app open.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • React 19
  • shadcn/ui
  • HistoryWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • History is recorded per browser (localStorage) and is lost if site data is cleared.
  • The server only archives radar-readings job readings (up to 90 days, when a database exists); 1-year series and feed history itself do not exist.

Risk dimensions

widgetReal datageopolitics.board.widget.geopolitics-dimensions

The six dimensions with the weight, score and band of each.

Detail

Weights follow the original index. A dimension without readings shows as "no source" and is excluded, never guessed; the "proxy" badge marks an approximate metric.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • React 19
  • shadcn/ui
  • DimensionsWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Saturation reference values are editorial and not calibrated against history.
  • This is a proxy: an approximate metric, not the same as the original's.

Region

widgetReal datageopolitics.board.widget.geopolitics-regions

Pick global or a region; the arrow lists the countries in each one.

Detail

Regions group events by coordinates and countries by the 198-country table. Each country shows its score (or "-" when data is missing); opening one shows the full reading.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • RegionsWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Regions are assigned from coordinates by approximate boxes; expect errors of up to about 1 degree near borders.
  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".

Index map

widgetReal datageopolitics.board.widget.geopolitics-map

Choropleth map of countries by index, sanctions or anomalies; a click opens the brief.

Detail

SVG choropleth map with three layers: index (risk bands), sanctions (SDN records per country) and anomalies (seasonal baseline). Countries without a reading are hatched; clicking a country selects it in the country card. Focal points can be overlaid; colors come from theme tokens.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending

Technologies

  • React 19
  • shadcn/ui
  • MapWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".
  • Aggregates only: the list contains personal data and names never reach Stress.
  • Server series cover only the 11 country-engine routes: the market dimension and the KEV, C2, Kp, FIRMS, NWS, volcano, NHC and tsunami signals have no baseline (no badge, never "normal").

Country brief

widgetReal datageopolitics.board.widget.geopolitics-brief

Reading of the selected country: score, coverage, dimensions, signals and sanctions.

Detail

Opened from the Stress country list, the map context menu or the palette (countries channel). Each section says whether its source answered; nothing is filled in when it did not. The same brief is exported as Markdown in Reports › Generate, with provenance.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending

Technologies

  • React 19
  • shadcn/ui
  • BriefWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".
  • Aggregates only: the list contains personal data and names never reach Stress.
  • GDELT counts news, not verified events; per country the share of events is used (not the count), but press coverage still matters.
  • The second opinion (FCDO) needs one call per country (≤ 10 req/s): coverage is partial until the refreshes complete and is reported. A country with no FCDO reading does not count as "no advisory".
  • The scales are not identical: the value follows the US level (3 or 4); the FCDO is shown as a second opinion ("high" = advises against travel to the whole country) without changing the value.
  • Floors are editorial (values and thresholds declared in the Methodology) and only apply with a live or stale reading of their input — never from an absent one: without a travel advisory, zone or displacement reading there is no floor.
  • The server comparison depends on the `radar-index` job (Postgres, one reading every 30 min); without a database the trend uses this browser history or says "no comparison".

Countries by index

widgetReal datageopolitics.board.widget.geopolitics-table

Ranking and dense country table with filters, sorting and dimensions.

Detail

Country score = weighted average of the dimensions with readings (GDELT, IODA, OONI, USGS, GDACS, travel advisories, World Bank, UNHCR). Without enough data, no number is shown.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • TableWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".
  • Saturation reference values are editorial and not calibrated against history.
  • GDELT counts news, not verified events; per country the share of events is used (not the count), but press coverage still matters.

Focal points

widgetReal datageopolitics.board.widget.geopolitics-focal

Countries where recent headlines and measured map signals pile up.

Detail

Derived on the server by GET /api/focal-points: headlines of the last 24 h attributed to countries by an editorial dictionary of places (countries, conflict zones, chokepoints — never people) crossed with the measured, non-structural signals of the country index. Score and urgency follow the published formula (Docs › Methodology › Focal points). Headlines link to their source; "Open country Stress" opens the brief.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
METAQUANTICS news feed (public Telegram channels + wire RSS)/api/newsterms not verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • FocalWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Headline attribution is a whole-word match against an editorial dictionary of places in English; strong homonyms (Georgia, Jordan) need a second cue, the remaining ones (Chad, "Indian Ocean") may credit a country, and a headline naming several countries credits each in full. The news feed has no category field: security categories and the sports/culture/business negative list come from declared keywords.
  • One input down (news feed or country index) = the score uses the other side only, declared in the panel; both down = SOURCE DOWN; a source disabled by the licence switch (OONI) is not a failure. Floors (minimum scores), the RSS headline signal and travel advisories below level 3 never count as map signals.
  • Content comes from public RSS feeds and is unverified OSINT.
  • Coverage is smaller than the original: only feeds that exist in this app are used.

Top signals (24h)

widgetReal datageopolitics.board.widget.geopolitics-signals

Signals that weighed most in the current reading, scored 0 to 100.

Detail

A horizontal bar chart of the largest signal counts.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • React 19
  • shadcn/ui
  • SignalsWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Recent events

widgetReal datageopolitics.board.widget.geopolitics-events

Individual events counted in the index, with a link to the source.

Detail

Mixes earthquakes M4.5+, disaster alerts, conflict headlines and CISA additions. Alerts without a timestamp are marked active and sorted last.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain

Technologies

  • React 19
  • shadcn/ui
  • EventsWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • The feed only covers the last 24 hours.
  • The feed gives no event time, so these are active alerts rather than a 24h count.
  • Content comes from public RSS feeds and is unverified OSINT.

Timeline

widgetReal datageopolitics.board.widget.geopolitics-timeline

News, weather, earthquakes and cyber threats in one chronological stream, with search and category filter (the same widget as the Console).

Detail

The same widget as the Console: news, weather alerts, earthquakes and exploited vulnerabilities in one chronological stream, with search, category filter and Summarize in the Analyst. It reads its own feeds (/api/news, /api/weather, /api/earthquakes, /api/cyber-threats), not the index.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
METAQUANTICS news feed (public Telegram channels + wire RSS)/api/newsterms not verified
NOAA / National Weather Service alerts/api/weatherUS Government public domain
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain

Technologies

  • React 19
  • shadcn/ui
  • TimelineWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Only merges what the news, weather, quake and cyber widgets already read, in a 7-day window; cyber (CISA) carries a date but no time; undated headlines are dropped and the conflict category comes from keywords, unverified.

Biggest movers

widgetReal datageopolitics.board.widget.geopolitics-movers

Countries that rose or fell the most in the chosen window.

Detail

Compares each country current score with the local-history reading closest to 24 h or 7 days ago (the reference must cover at least 60% of the window). Without a reference the country is left out; a floor-only score (insufficient data) does not count as a change.

Refresh every 5 min

Open on screen /stress

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
OSINT RSS (BBC World, Al Jazeera, NYT World)/api/conflictsnot verified
IODA (Georgia Tech)/api/radarterms not verified
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain
GDACS (UN / European Commission)/api/gdeltnot verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • MoversWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • History is recorded per browser (localStorage) and is lost if site data is cleared.
  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".

Sanctions (OFAC SDN)

widgetReal datageopolitics.board.widget.geopolitics-sanctions

SDN list aggregates by country, new designations and programs.

Detail

Overview shows aggregates only; name search is exact and keeps the term out of the URL. Source: OFAC, Sanctions List Service.

Open on screen /stress

Sources

SourceRouteLicense
U.S. Treasury OFAC — SDN list (Sanctions List Service)/api/sanctionsUS Government work (17 USC 105); terms not found — human review pending
U.S. Trade.gov — Consolidated Screening List (13 lists: BIS, State Department, OFAC)/api/sanctionsUS Government work (public domain); terms not independently verified — human review pending

Technologies

  • React 19
  • shadcn/ui
  • SanctionsWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Aggregates only: the list contains personal data and names never reach Stress.
  • The provider's terms of use could not be verified (pending human review).

How it is calculated

widgetReal datageopolitics.board.widget.geopolitics-method

Index method, coverage rules and dimension weights.

Detail

States the dimension weights, the editorial saturation scales and which dimensions lack a source.

Open on screen /stress

Sources

SourceRouteLicense
CISA Known Exploited Vulnerabilities/api/cyber-threatsUS Government public domain
abuse.ch Feodo Tracker/api/cyber-attacksCC0 1.0
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain
NOAA SWPC (NOAA Scales)/api/space-scalesUS Government public domain
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data
NASA FIRMS (VIIRS / MODIS)/api/firesnot verified
openFDA Drug Shortages/api/drug-shortagesCC0 1.0
CDC National Wastewater Surveillance System/api/wastewaterUS Government public domain
Federal Register (Executive Orders)/api/executive-ordersterms not verified
U.S. Department of State Travel Advisories/api/travel-advisoriesterms not verified

Technologies

  • React 19
  • shadcn/ui
  • MethodWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Known limits

  • Saturation reference values are editorial and not calibrated against history.
  • This is a proxy: an approximate metric, not the same as the original's.
  • Countries with coverage below 45% (or fewer than 3 dimensions) show as "insufficient data".

Global context

widgetReal datageopolitics.board.widget.geopolitics-credits

Context indicators and credits for the public sources used.

Detail

GDELT (cite with a link), World Bank and UNHCR (CC BY 4.0), Alternative.me (attribution next to the data) and OONI (CC BY-NC-SA 4.0, only when switched on).

Open on screen /stress

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-geopoliticsGDELT terms (free use, cite with link)
World Bank (WGI + WDI)/api/worldbank-indicatorsCC BY 4.0
UNHCR Refugee Data Finder/api/refugeesCC BY 4.0
Alternative.me Crypto Fear & Greed/api/fear-greedfree use with prominent attribution next to the data
OONI (Open Observatory of Network Interference)/api/ooni-censorshipCC BY-NC-SA 4.0
UK FCDO Foreign Travel Advice (GOV.UK Content API)/api/travel-advisoriesOpen Government Licence v3.0 (contains public sector information)
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement, content unaltered
EASA Conflict Zone Information Bulletins (not endorsed by EASA)/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB
NIST National Vulnerability Database (CVE API 2.0) + FIRST EPSS/api/cyber/vulnsNVD: US Government public domain (notice: not endorsed or certified by the NVD); EPSS: FIRST.org, free use with citation
WHO Disease Outbreak News (not endorsed by WHO)/api/health/who-donCC BY-NC-SA 3.0 IGO (non-commercial; behind RADAR_ENABLE_NONCOMMERCIAL)
ransomware.live (Julien Mousqueton; aggregates only)/api/cyber/ransomwarepersonal use only, not for corporate use (behind RADAR_ENABLE_NONCOMMERCIAL; written permission pending)
Access Now — #KeepItOn STOP dataset/api/internet-shutdownsCC BY 4.0
V-Dem Electoral Democracy Index (v2x_polyarchy), via Our World in Data/api/democracyCC BY-SA 4.0 (share-alike: derived values keep the licence)

Technologies

  • React 19
  • shadcn/ui
  • CreditsWidget (src/components/geopolitics/board/widgets)
  • WidgetFrame (Console)

Rules and limits

What the module promises about data honesty, licenses and restrictions, and what is still marked as coming soon.

  • Real sources only

    The original tracks 70 signals; here 59 have a real feed wired (an existing /api/* route). The rest appear as coming soon with their declared coverage and never receive an invented value.

  • OONI is non-commercial

    OONI (CC BY-NC-SA 4.0) is the only non-commercial license among the Stress sources. It is off by default: without RADAR_ENABLE_NONCOMMERCIAL=1 the route answers 200 with disabled: true and the signal stays out of the score. Enable it only for non-commercial use.

  • No data is not zero

    An error, an invalid body or a truncated list means no data; an error after a valid reading means stale data. A failure is never drawn as zero.

  • Editorial scales

    Per-signal saturation and dimension weights are METAQUANTICS editorial choices, not the original formula. A country dimension with less than 40% of its weight backed by readings gets no grade.

  • Local history

    History and the 24 h / 30 d deltas come from the browser (localStorage). There is no server-side history, and the chart only appears once there are enough readings.

  • Attribution and terms

    Sources whose terms are not verified are marked as such, and the attribution some of them require (Alternative.me, World Bank, GDELT) is shown next to the data.

Decisions

Decisions recorded in the clone register for this module (text in Portuguese, as written in the repository).

IDDecisionReasonCost if wrong
D-P-01Radar Global sem paywall por país: o original bloqueava score/banda/histórico/dimensões por país ("Upgrade to unlock"); aqui a leitura do país é aberta (CountryDialog), calculada só com dados reais.O clone não tem planos; esconder dado real sem motivo não agrega.Reintroduzir o gate é um if no diálogo e na tabela.
D-P-02Catálogo de sinais = só feeds reais: 20 sinais em 5 de 12 categorias (conflito, biosférica, cibernética, espaço, mercados), 9 feeds de rotas já existentes (/api/earthquakes, /api/gdelt [GDACS], /api/fires, /api/conflicts, /api/cyber-threats, /api/cyber-attacks, /api/space-weather, /api/markets [VIX], /api/country-risk). As 7 categorias sem feed aparecem com barra zerada no gráfico de cobertura (lacuna honesta). Dimensões sem fonte (Risco Estratégico, Estresse Civil) ficam "sem fonte" e fora da média; os pesos restantes são renormalizados e o card diz quantas dimensões entraram.Regra do projeto: nada de número inventado. O original tem 70 sinais/27 métricas globais; os demais exigem fontes novas (passam pelo license-gate).Cada nova fonte vira uma entrada em signals.ts + componente em score.ts.
D-P-03Cores das faixas só por tokens: Low=--alert-green, Guarded=--alert-blue, High=--alert-orange, Severe=--alert-red; Elevated (amarelo no original) = color-mix de verde+laranja, pois o design system não tem token amarelo (--alert-yellow é citado em docs/ui-standard.md mas não está definido em globals.css).Proibido hex novo.Trocar por token amarelo quando existir.
D-P-04Escalas de saturação editoriais (COMPONENTS em src/lib/radar/score.ts; ex.: M4.5+ satura em 30/dia, VIX 12→0 e 40→100). O original normaliza contra o próprio histórico, que o repo não arquiva. Recortes regionais usam escala ×0,35. A gravidade editorial das zonas de conflito (conflictZoneSeverity) não sustenta a dimensão Theater sozinha: sem ao menos uma manchete observada a dimensão fica sem nota. A UI ("Como é calculado") declara tudo isso.Honestidade metodológica (mesmo padrão de country-risk.ts).Recalibrar quando houver histórico no servidor.
D-P-05Região por coordenadas via caixas/polilinhas (regionForPoint, 65 casos testados). Sem geometria de países no repo; erro esperado até ~1° em fronteiras (Mediterrâneo, Mar Vermelho, ilhas do Egeu). Rússia asiática/Antártica/oceano aberto = null (conta só no mundo). Países listados por região são os 20 do baseline editorial (COUNTRY_REGION).Evita dependência/geojson novo.Trocar por point-in-polygon se entrar geometria.
D-P-06Histórico só no navegador (localStorage metaquantics.radar.history.v1, 1 leitura/30 min, teto 1000): gráfico e deltas 24h/30d só aparecem com leitura suficiente (estado vazio explicado). Janelas 7d/30d da lista de eventos ficam desabilitadas (os feeds cobrem 24h); colunas 30d/1a da tabela de sinais ficam "—" com tooltip.Não existe arquivo de feeds no servidor; inventar série seria falsificar.Persistir via pg_cron + tabela (ADR-0011) e ler daí.
D-P-07Composição no cliente, sem BFF /api/radar: um RadarProvider no layout de /radar consome as rotas existentes com useFeed e compartilha os dados entre Overview/Signals/List. Parsers rejeitam respostas degradadas para não exibir zero falso: /api/fires sem FIRMS (só vulcões EONET), /api/conflicts sem nenhuma manchete (RSS fora), CISA sem cisa_total, Kp null, Feodo/GDACS/USGS com error.Rotas já compõem as fontes; BFF só duplicaria.Mover a composição para o servidor se o custo de 9 requisições virar problema.
D-P-08Detalhe de país = Dialog (como o original, que abre diálogo e não rota), aberto pela sidebar e pela tabela; mostra base editorial, magnitude de sismos, manchetes e sismos atribuídos e tags. Cobertura: 20 países (original: 198).Estrutura observada no original; só há baseline para 20.Rota /radar/country/[code] é mudança local.
D-P-09Gráficos próprios em SVG/HTML (charts.tsx: sparkline, histórico, barras), sem recharts (o original usava).Zero dependência nova; lightweight-charts é de finanças.Trocar por lib se faltar interação.
D-P-10DocTip próprio do Radar (+ TipTitle) em vez de reutilizar ops/InfoTip, que lê o registry do Console (getElementDoc de src/lib/ops). Registry tipado em src/lib/radar/element-docs.ts (id, titleKey/summaryKey/detailKey, fontes com licença só quando verificada, tecnologias, limitações); inclui 9 feeds e 20 sinais gerados do catálogo.Ids do Radar não existem no registry do Console.Unificar registries depois, se desejado.
D-P-11Catálogo dos 70 sinais com cobertura honesta (src/lib/radar/catalog.ts; matriz em docs/clone/radar-sinais-cobertura.md): cada sinal do original tem status ao vivo/parcial/proxy/sem fonte/não identificado e motivo. Task 11: 14→37 de 70 com fonte real. Os 3 nomes não lidos na investigação ficam como não identificado (não inventados). Supera a parte de catálogo de D-P-02.O original lista 70; mostrar só os ligados escondia a lacuna.Novo sinal = trocar status/feeds da entrada.
D-P-12Histórico continua só no navegador (agora também por país: metaquantics.radar.country-history.v1, 1/h, 7 dias). A migração opcional 0009_radar_history.sql + rota de snapshot protegida não foi feita nesta task (prioridade foi fonte real e UX).Sem tempo para migração + pgTAP + rota com segredo; histórico local é honesto e declarado.Criar a migração (leitura pública, escrita service_role) e uma rota de snapshot com bearer; o cliente passa a ler dela.
D-P-13Motor por país (country-score.ts, 198 países de country-table.ts): 18 sinais em 5 dimensões (Mercado é global-only como no original); sinal sem leitura sai da média e reduz a cobertura; país com cobertura < 45% ou < 3 dimensões = dados insuficientes (sem número). GDELT por país usa a fração dos eventos do país em cada classe CAMEO (não a contagem) para não premiar o volume de imprensa; exige ≥ 10 eventos. O baseline editorial (/api/country-risk) saiu do Radar.Nada de valor fabricado; contagem bruta GDELT colocava EUA/Reino Unido no topo.Recalibrar referências quando houver histórico no servidor.
D-P-14Risco Estratégico por proxy: sem fonte aberta para postura nuclear/tratados (IAEA/CTBTO sem API, Doomsday Clock editorial), a dimensão usa eventos GDELT de demonstração de força (CAMEO 15x/138x) e uso de ADM (204x), com selo "proxy" na UI e no tooltip. Estresse Civil passa a usar GDELT protestos/motins, avisos de viagem do State Dept, WGI (estabilidade; voz e responsabilização como proxy de repressão à imprensa), inflação WDI e deslocamento UNHCR/população.Dimensão excluída distorcia o peso das demais; proxy declarado é melhor que exclusão silenciosa.Trocar por fonte direta se surgir uma aberta.
D-P-15OONI (CC BY-NC-SA 4.0) ligado apesar de não comercial, marcado commercial_use: non_commercial no YAML e "não comercial" no tooltip, como as fontes da §1.2 de riscos-licenca.md. Índice de bloqueio editorial: 60% bloqueio confirmado (satura em 20%) + 40% anomalias acima de 5% (satura em 50%), ≥ 200 medições/dia.Único dado aberto de censura por país; o estado atual do projeto é não comercial.Remover o feed (o sinal vira sem fonte) antes de oferta comercial, ou licenciar.
D-P-16GDELT por país com contração e mínimos (revisão final I1): a nota de cada classe usa (k + 50·p_mundo)/(n + 50) (taxa mundial da própria leitura), mínimo de 50 eventos no país (antes 10) e ≥ 3 eventos para demonstração de força e QBRN (abaixo: nota 0, valor bruto visível). Selo "proxy" na coluna Risco Estratégico da Lista com tooltip ("composição do noticiário sobre postura militar; não mede capacidade nem risco nuclear"); catálogo: QBRN = proxy. Com a fixture real, Reino Unido (16 eventos, 1 de postura) deixa de saturar (sem leitura) e 4× a fixture cai de 100 para ~75.1 evento em 10-20 saturava o Risco Estratégico (Reino Unido acima dos EUA).Escalar por *lift* (fração/taxa mundial em log) ou baseline por país quando houver histórico no servidor (D-P-12).
D-P-17Dimensão de país exige ≥ 40% do peso com leitura (I2): abaixo disso fica sem nota ("cobertura baixa") e não entra na cobertura do país.Duas manchetes RSS (peso 0,1) davam nota ao Teatro inteiro da Ucrânia com o GDELT fora.Ponderar por cobertura em vez de cortar, se o corte se mostrar duro demais.
D-P-18Leituras GDELT parciais estimadas para 6 h (I3): gdeltValues multiplica contagens mundiais/regionais (e o limiar de foco de protesto) por 24/janelas; a página de Sinais rotula "6h est. (n/24)".As referências de score.ts são para 24 janelas; upstream degradado lia como "mais calmo".Devolver 502 abaixo de 20 janelas, se a estimativa for ruidosa.
D-P-19Erro, corpo inválido, lista truncada = sem dados; erro após dado válido = desatualizado (I4, M5): o cliente trata não-2xx (502 upstream_invalid, 503) como erro do feed; parseIodaRadar devolve null com truncated: true; volcanoes/NHC/tsunami idem; status stale (selo laranja) quando o useFeed mantém o dado antigo após falha. Primeira carga progressiva: as linhas da Lista aparecem antes de os 24 feeds responderem, com indicador por fonte e por célula (o histórico só grava após todos responderem).Nunca exibir zero falso nem dado velho como "ao vivo".Atraso/escalonamento do useFeed fica para a tarefa transversal.
D-P-20OONI atrás do interruptor do servidor (I6, supera a ressalva de D-P-15): quando a rota devolve o marcador de desligado, o feed fica desligado, o sinal sai do índice (cobertura cai, nunca zero) e a página de Sinais mostra "desligado por licença não comercial" com tooltip; ligado, o índice (Visão geral, Lista e diálogo do país) ganha nota "Inclui dados OONI (CC BY-NC-SA 4.0)". radar.reason.nonCommercial reescrito sem contradição.ShareAlike propaga para o índice derivado; o modo comercial não pode depender de memória.Licenciar o OONI ou trocar por fonte comercial.
D-P-21Atribuição visível junto do dado (feeds I5): linha "Fonte: Alternative.me" no tile de Medo e Ganância, World Bank no tile de repressão à imprensa, GDELT nos focos de protesto, OONI na censura; linha de créditos (GDELT, World Bank, UNHCR, Alternative.me, OONI se ligado) na Visão geral e na Lista.Termos exigem atribuição proeminente, não só tooltip.—
D-P-22Histórico local robusto (M4): leituras antigas compactadas (30 min nos últimos 7 dias, 6 h até 30 dias, 1/dia depois; sinais só nos últimos 30 dias), cabendo 1 ano em 1000 pontos; horário > agora + 1 h é descartado e não trava gravações; falha de gravação (cota) aparece no card de histórico; o rótulo do período diz quantos dias o histórico cobre. IODA conta 1 surto por país (eventos sobrepostos de BGP/ping/telescópio fundidos) e UNHCR "-" não vira 0 (M1, M3).Períodos 90D/1A prometiam mais do que 1000 pontos de 30 min cobriam (~21 dias).Histórico no servidor (D-P-12).

Read from docs/clone/decisoes.md at build time. Text in Portuguese.

Module

OSINT

Investigation cases (/osint?case=&v=): open-case tabs and four views of the same case — Board (3 columns), Flow (5 guided steps), Canvas (free canvas) and Terminal (command line and dense table). Tools query real METAQUANTICS sources; cases live in the browser.

Open module
  • 216documented elements
  • 161tools
  • 38with a real runner

Elements

Generated from the module element registry (the same one behind the tooltips): what each element is, where the data comes from, which technologies it uses and its known limits.

element (55)

OSINT

elementmodule

A three-column research board: query tools, review results, and pin evidence to a board.

Detail

Pick a tool, run it against METAQUANTICS live data, pin the results that matter, add your own notes, links, comments and tables, connect them on a canvas and export the case. Everything runs in your browser against METAQUANTICS routes.

Sources

No external source: computed in the app.

Technologies

  • Next.js 16 (App Router)
  • React 19
  • shadcn/ui

Known limits

  • Boards are stored only in this browser; clearing site data deletes them.
  • No AI is used: layouts and results are deterministic.

Tool catalog

elementcatalog

Searchable list of research tools grouped in 13 categories.

Detail

Tools backed by a real METAQUANTICS data route can be run. The remaining entries from the reference product are listed as coming soon and never return invented data.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)
  • src/lib/cases/tools.ts

Known limits

  • Not implemented yet; no data is shown.
  • No tool is locked behind a plan in METAQUANTICS.

Results panel

elementresults

Rows returned by the last tool you ran.

Detail

Sort by date or feed, filter by text, open the details or the original source, and pin any row to the Evidence Board.

Sources

No external source: computed in the app.

Technologies

  • fetch + /api/*
  • src/lib/cases/runners.ts

Known limits

  • At most 200 results are kept.
  • A snapshot of the moment, with no history.

Evidence Board

elementboard

Your case: pinned results and custom items, as a list or a canvas.

Detail

Items can be tagged, edited, connected and arranged. The board is saved automatically in this browser and can be exported to JSON.

Sources

No external source: computed in the app.

Technologies

  • localStorage + zod
  • BoardRepository (src/lib/cases/repository.ts)
  • useReducer

Known limits

  • Boards are stored only in this browser; clearing site data deletes them.

Plan badge

elementtiers

The plan that unlocked this tool in the reference product.

Detail

Shown for reference only. In METAQUANTICS no tool is locked behind a plan.

Sources

No external source: computed in the app.

Technologies

  • Badge (shadcn/ui)

Known limits

  • No tool is locked behind a plan in METAQUANTICS.

Sort results

elementsort

Newest first, oldest first, or by feed name.

Detail

Rows without a timestamp stay at the end when sorting by date.

Sources

No external source: computed in the app.

Technologies

  • Select (shadcn/ui)

Filter results

elementresultsFilter

Narrows the loaded rows by title, subtitle or feed.

Detail

Only filters rows already loaded; it does not query the source again.

Sources

No external source: computed in the app.

Technologies

  • Input (shadcn/ui)

Pin to board

elementpin

Copies this row to the Evidence Board.

Detail

Pinning is idempotent: the same row is never added twice.

Sources

No external source: computed in the app.

Technologies

  • Button (shadcn/ui)
  • boardReducer

List view

elementviewList

Shows the board items as a filterable list.

Detail

Best for reviewing, tagging and editing items quickly.

Sources

No external source: computed in the app.

Technologies

  • Tabs (shadcn/ui)

Canvas view

elementviewCanvas

A free-form board where items are nodes and links are edges.

Detail

Drag nodes, pan the background, zoom with the wheel, connect items and export a PNG.

Sources

No external source: computed in the app.

Technologies

  • SVG + Pointer Events
  • src/components/cases/EvidenceCanvas.tsx

Add custom item

elementaddItem

Create a note, link, comment or table.

Detail

Custom items sit beside tool results on the board and can have tags.

Sources

No external source: computed in the app.

Technologies

  • Dialog + Tabs (shadcn/ui)
  • zod

Known limits

  • Up to 50,000 bytes of text.
  • Only http and https links are accepted.

Filter board items

elementboardFilter

Searches titles, text, tags and sources of pinned items.

Detail

Applies to the list view and highlights matches in the canvas.

Sources

No external source: computed in the app.

Technologies

  • Input (shadcn/ui)

Undo

elementundo

Reverts the last change to the board.

Detail

Covers adding, editing, deleting, moving, connecting and auto-arranging, up to 50 steps.

Sources

No external source: computed in the app.

Technologies

  • boardReducer

Auto-arrange

elementautoArrange

Lays out the nodes in layers following their links.

Detail

A deterministic layout algorithm: the same board always produces the same result. Isolated items go to a grid. It can be undone.

Sources

No external source: computed in the app.

Technologies

  • src/lib/cases/layout.ts

Known limits

  • No AI is used: layouts and results are deterministic.

Export as PNG

elementexportPng

Downloads the canvas as an image.

Detail

Drawn directly on a 2D canvas using the current theme colors.

Sources

No external source: computed in the app.

Technologies

  • Canvas 2D API

Export as JSON

elementexportJson

Downloads the whole board as a versioned JSON file.

Detail

Use it to back up a case or move it to another browser.

Sources

No external source: computed in the app.

Technologies

  • JSON + zod

Import JSON

elementimportJson

Replaces the board with the contents of an exported file.

Detail

The file is validated strictly; invalid files are rejected. The replaced board can be restored with Undo.

Sources

No external source: computed in the app.

Technologies

  • zod

Known limits

  • Only http and https links are accepted.

Connect items

elementconnect

Draws a link between two items.

Detail

Click the handle on a node, then click the target node. Duplicate and self links are ignored.

Sources

No external source: computed in the app.

Technologies

  • SVG + Pointer Events

Delete selection

elementdeleteSelected

Removes the selected node or link.

Detail

Deleting a node also deletes its links. You can also press Delete or Backspace.

Sources

No external source: computed in the app.

Technologies

  • boardReducer

Zoom

elementzoom

Zoom the canvas between 20% and 200%.

Detail

You can also use the mouse wheel over the canvas.

Sources

No external source: computed in the app.

Technologies

  • CSS transform + Wheel/Pointer Events

Fit to screen

elementfit

Centers and scales the canvas to show every item.

Detail

Never zooms in beyond 100%.

Sources

No external source: computed in the app.

Technologies

  • fitView (src/lib/cases/layout.ts)

Local storage

elementstorage

Where your board is saved.

Detail

METAQUANTICS has no accounts, so boards are saved in this browser behind a repository interface that can be replaced by a database later. Nothing is paywalled.

Sources

No external source: computed in the app.

Technologies

  • localStorage + zod
  • BoardRepository (src/lib/cases/repository.ts)

Known limits

  • Boards are stored only in this browser; clearing site data deletes them.

Case name

elementboardName

The name of the current board.

Detail

Used in exported files.

Sources

No external source: computed in the app.

Technologies

  • Input (shadcn/ui)

Note

elementkind.note

Free text with basic Markdown, a title, an optional source and tags.

Detail

Headings, lists and bold are rendered; links and HTML are shown as plain text.

Sources

No external source: computed in the app.

Technologies

  • markdown-lite (src/lib/ops/markdown-lite.ts)

Known limits

  • Up to 50,000 bytes of text.

Comment

elementkind.comment

A short remark about the case.

Detail

A lightweight item without title or source, for quick observations.

Sources

No external source: computed in the app.

Table

elementkind.table

Tabular data pasted as CSV or TSV.

Detail

The first line is the header. Cells are shown as text.

Sources

No external source: computed in the app.

Technologies

  • parseTable (CSV/TSV)

Known limits

  • Up to 200 rows and 12 columns.

Tool result

elementkind.result

A row pinned from a tool, with its source and time.

Detail

Keeps the title, source feed and timestamp of the original result.

Sources

No external source: computed in the app.

Technologies

  • ResultItem (src/lib/cases/types.ts)

Coming soon

elementsoon

This tool is not implemented yet.

Detail

The reference product has this tool, but METAQUANTICS has no data source wired to it yet. It never returns made-up results.

Sources

No external source: computed in the app.

Known limits

  • Not implemented yet; no data is shown.

Open cases

elementLocal (no external source)view.tabs

Folder tabs with the open cases (name and evidence count); "+" opens a saved case or creates a new one.

Detail

Address: /osint?case=<id>&v=<view>. Without case it opens the first open tab or the main case. The tab list lives in this browser and syncs across browser tabs; closing moves to the neighbor tab.

Open on screen /osint

Sources

No external source: computed in the app.

Technologies

  • Radix Tabs (shadcn/ui, activationMode manual)
  • DropdownMenu (shadcn/ui)
  • src/lib/cases/open-tabs.ts (localStorage)
  • localStorage + zod
  • BoardRepository (src/lib/cases/repository.ts)

Known limits

  • Boards are stored only in this browser; clearing site data deletes them.

Case session

elementLocal (no external source)view.session

One case, four views: Board, Flow, Canvas and Terminal read and write the same evidence board.

Detail

The session keeps the case board (items, links, tags, positions), the last tool run and undo. Switching views loses nothing; saving is automatic (400 ms debounce) to the browser local repository.

Open on screen /osint

Sources

No external source: computed in the app.

Technologies

  • useCaseSession (src/components/osint/use-case-session.ts)
  • boardReducer
  • localStorage + zod
  • BoardRepository (src/lib/cases/repository.ts)

Known limits

  • Boards are stored only in this browser; clearing site data deletes them.
  • A snapshot of the moment, with no history.

Case view

elementview.switch

Board / Flow / Canvas / Terminal switch; the choice goes to the URL (?v=).

Detail

Board (model A) is the default and does not appear in the URL. Flow (B), Canvas (C) and Terminal (D) use ?v=fluxo, ?v=quadro and ?v=terminal; the open case stays in ?case=.

Open on screen /osint?v=prancha

Sources

No external source: computed in the app.

Technologies

  • Segmented (src/components/ripple/workspace/Segmented.tsx)
  • router.replace (?case=&v=)

Board (three columns)

elementReal dataview.prancha

Three columns: Tools, Results and Evidence board, with search history, global filters and Add item.

Detail

Columns have ready-made splits and can be resized; below 1024 px they become tabs. Running a tool queries its real route and lists the results with age and parameters; pinning sends them to the board. Widths, open tools column, board mode (list/canvas) and the search history (up to 30, no sanctions searches) are saved in this browser. Shortcuts: N = new board, Ctrl/Cmd+Z = undo.

Open on screen /osint?v=prancha

Sources

No external source: computed in the app.

Technologies

  • PranchaView (src/components/osint/prancha)
  • src/lib/cases/prancha-format.ts
  • src/lib/cases/prancha-prefs.ts (localStorage)
  • src/lib/cases/runners.ts
  • React 19
  • shadcn/ui

Known limits

  • At most 200 results are kept.
  • A snapshot of the moment, with no history.
  • Boards are stored only in this browser; clearing site data deletes them.

Guided flow

elementReal dataview.fluxo

Five steps: Question, Tools, Results, Evidence and Report, with the live case summary alongside.

Detail

The Question step sets the target (person, domain, vessel, aircraft or company), the window (30 d, 90 d, 1 year or all) and 2 to 4 hypotheses. Suggested tools are always runnable (essential and complementary) and run in parallel. Alt+arrows change step; Ctrl+Enter runs.

Open on screen /osint?v=fluxo

Sources

No external source: computed in the app.

Technologies

  • FluxoView (src/components/osint/fluxo)
  • src/lib/cases/flow-plan.ts
  • src/lib/cases/flow-steps.ts
  • src/lib/cases/flow-persist.ts (Board.flow)
  • src/lib/cases/runners.ts

Known limits

  • Question, hypotheses, target, identifier, window, chosen tools and report format live in the case itself (flow field), saved only in this browser, and go out in the case JSON; tool results are not kept.
  • Canvas group and flow assessment (conf:A|B|C, hip:H1…) live in the item own tags: editing the tags by hand changes the assessment.
  • No AI is used: layouts and results are deterministic.
  • At most 200 results are kept.

Evidence assessment

elementview.fluxo.assessment

Each piece of evidence gets A/B/C reliability and a link to a hypothesis (or neutral); the hypothesis scoreboard comes from that.

Detail

Scoreboard weights: A = 3, B = 2, C = 1 (unrated counts as C). The provisional assessment compares hypotheses by score and the next step points at gaps (unrated evidence, unsupported hypothesis).

Open on screen /osint?v=fluxo

Sources

No external source: computed in the app.

Technologies

  • readAssessment / hypothesisBoard / verdictOf (src/lib/cases/flow-steps.ts)
  • etiquetas conf:A|B|C e hip:H1..H4|N

Known limits

  • Canvas group and flow assessment (conf:A|B|C, hip:H1…) live in the item own tags: editing the tags by hand changes the assessment.
  • No AI is used: layouts and results are deterministic.

Flow report

elementview.fluxo.report

Report in three formats (brief, full, Markdown) with the question, hypotheses, scoreboard and pinned evidence.

Detail

The Markdown carries the Reports generator provenance header. It only cites evidence pinned to the board, with its source (tool feed or link domain) and assessment code.

Open on screen /osint?v=fluxo

Sources

No external source: computed in the app.

Technologies

  • src/lib/cases/flow-report.ts (Markdown com proveniencia)
  • exportableItem (export do quadro)

Known limits

  • Sanctions-list items are redacted in the report and export (OFAC SDN uid only), per LGPD.
  • No AI is used: layouts and results are deterministic.

Free canvas

elementReal dataview.quadro

Canvas with draggable cards, labeled links (verified or not), groups, minimap and detail panel.

Detail

The tool drawer runs real tools and pins results to the canvas. Groups (Incident, Actors, Impact, Hypotheses) fit their members. The detail panel shows the card, the link or the board summary. Exports PNG, Markdown and JSON; imports JSON up to 5 MB.

Open on screen /osint?v=quadro

Sources

No external source: computed in the app.

Technologies

  • QuadroView (src/components/osint/quadro)
  • SVG + Pointer Events
  • src/lib/cases/canvas-meta.ts
  • src/lib/cases/canvas-geometry.ts
  • JSON + zod (importar/exportar)

Known limits

  • Canvas group and flow assessment (conf:A|B|C, hip:H1…) live in the item own tags: editing the tags by hand changes the assessment.
  • A link relation and its "unverified" state live in its label ("?" suffix); there is no dedicated verification field.
  • Boards are stored only in this browser; clearing site data deletes them.
  • Only http and https links are accepted.

Terminal

elementReal dataview.terminal

Single command line, dense results table with a side preview, timeline of pinned evidence and status bar.

Detail

Single-key shortcuts outside text fields: / focuses the command line, ? shows shortcuts, J/K move rows, P pins and Shift+P pivots to another tool.

Open on screen /osint?v=terminal

Sources

No external source: computed in the app.

Technologies

  • TerminalView (src/components/osint/terminal)
  • src/lib/cases/terminal-command.ts
  • src/lib/cases/terminal-table.ts
  • src/lib/cases/terminal-timeline.ts

Known limits

  • At most 200 results are kept.
  • A snapshot of the moment, with no history.
  • When the source lacks the field the cell stays empty ("—"); nothing is estimated.

Command line

elementview.terminal.command

Syntax: <tool> target:"…" radius:50km period:7d feeds:all keyword:"…".

Detail

The first token is a runnable catalog tool; the rest are key:value pairs (quoted when they contain spaces). Keys accept the Portuguese, English and Spanish names; an omitted key keeps the current value. Radii 25, 50, 100 or 250 km; periods 24h, 7d or 30d. Command history stays in this browser (up to 30 per case, 40 cases) and never stores sanctions searches.

Open on screen /osint?v=terminal

Sources

No external source: computed in the app.

Technologies

  • parseCommand / composeCommand (src/lib/cases/terminal-command.ts)
  • KEY_ALIASES (pt-BR, en, es)
  • src/lib/cases/terminal-history.ts (localStorage)

Known limits

  • The route returns a global cached snapshot; radius and keyword are applied in your browser.
  • Boards are stored only in this browser; clearing site data deletes them.

Results table

elementview.terminal.table

Source, type, time, place and confidence columns, with filters, sorting and pivot to another tool.

Detail

Columns come from the real fields of each result. Confidence shows the percentage when the source gives a number and only the band (high, nominal, low) when it does not.

Open on screen /osint?v=terminal

Sources

No external source: computed in the app.

Technologies

  • src/lib/cases/terminal-table.ts (colunas, filtros, ordenacao, pivo)

Known limits

  • When the source lacks the field the cell stays empty ("—"); nothing is estimated.
  • At most 200 results are kept.

Evidence timeline

elementview.terminal.timeline

Pinned evidence in lanes by tool category (notes and links in a manual lane), by data date; switches with list and canvas.

Detail

Uses the data date (or the time it was pinned when the data has no date). Clicking opens the evidence preview.

Open on screen /osint?v=terminal

Sources

No external source: computed in the app.

Technologies

  • buildTimeline (src/lib/cases/terminal-timeline.ts)

Known limits

  • When the source lacks the field the cell stays empty ("—"); nothing is estimated.
  • Boards are stored only in this browser; clearing site data deletes them.

Search & Archive

elementcat.search

METAQUANTICS news feed and event search.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

People & Identity

elementcat.people

Who is this person, company, or entity?

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Social Media

elementcat.social

Public posts, profiles, and mentions across social platforms.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Money & Markets

elementcat.money

Prices, indicators, and market structure.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Regulatory & Filings

elementcat.regulatory

Enforcement actions, filings, and public contracts.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Aviation

elementcat.aviation

Live aircraft, flights, and airport context.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Space

elementcat.space

Space weather, orbital objects, and launches.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Maritime

elementcat.maritime

Vessels, chokepoints, and sea-lane incidents.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Conflict & Weapons

elementcat.conflict

Conflict zones, nuclear facilities, and weapons activity.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Hazards & Disasters

elementcat.hazards

Earthquakes, fires, floods, storms, and humanitarian events.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Cyber & Internet

elementcat.cyber

Vulnerabilities, malware, and internet infrastructure.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Places & POIs

elementcat.places

Local context: geocoding, dossiers, and ground conditions.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

Governance & Law

elementcat.governance

Country risk, advisories, courts, and public institutions.

Detail

A group of related tools. Counts include tools that are still coming soon.

Sources

No external source: computed in the app.

Technologies

  • Radix Accordion (shadcn/ui)

Known limits

  • Not implemented yet; no data is shown.

tool (161)

NameSourceSummary
Recent EventsSearch the METAQUANTICS news feed by keyword, location and date window.
Municipal official gazettesSearches municipal official gazettes (Querido Diário) by keyword and date window; one short excerpt per gazette. Requires an account and sign-in.
Sanctions lookup (OFAC SDN)Exact-match lookup of a person, company, vessel or aircraft in the US Treasury OFAC SDN list.
Central bank balance sheetCentral bank total assets (BIS): level in local currency, change on the previous month, USD value and ratio to GDP, per economy. The keyword filters by name or code (e.g. "euro", "BR").
Price snapshotLatest METAQUANTICS quotes for indices, commodities, crypto and currencies, filtered by name or symbol.
TCU debarred biddersSearches the TCU list of debarred bidders by CNPJ, CPF or name (CPF always masked). Requires an account and sign-in.
Aircraft lookupFind a live aircraft by ICAO24 hex, registration or model.
Flight lookup (live)Find a live flight by callsign.
Emergency squawksAircraft squawking 7500, 7600 or 7700, optionally near a location.
Helicopter activity near locationLive helicopters within a radius of a place or coordinates.
Military aircraft near locationLive aircraft classified as military within a radius.
Flights near locationAll live aircraft within a radius of a place or coordinates.
Space weather alertsCurrent NOAA SWPC space weather alerts.
Space weather snapshotPlanetary Kp index and recent solar flares.
Maritime chokepoint status
  • METAQUANTICS chokepoint status (derived: conflict RSS + AIS + NGA MSI navigational warnings, not endorsed by NGA; IMF PortWatch transits when the non-commercial flag is on — Source: International Monetary Fund, PortWatch) /api/chokepoints
Strategic sea chokepoints with their current 0-100 score and band.
Vessel lookupFind a vessel by name or MMSI in the AIS snapshot.
Vessels near locationVessels within a radius of a place or coordinates.
Radiation monitoring near locationAmbient radiation stations (Safecast and, when switched on, EPA RadNet) within a radius of a place or coordinates.
Conflict zones monitor
  • BBC / Al Jazeera / NYT World (RSS) /api/conflicts
Known conflict zones with live event counts from METAQUANTICS.
Drought conditions near locationGDACS drought alerts within a radius.
Earthquakes near locationRecent USGS earthquakes within a radius of a place or coordinates.
Floods near locationGDACS flood alerts within a radius.
GDACS events near locationAll GDACS disaster alerts within a radius.
Hurricanes near locationGDACS tropical cyclone alerts within a radius.
Severe weather near locationNASA EONET, NOAA/NWS and GDACS weather events within a radius.
Volcanoes near locationGDACS volcano alerts within a radius.
Wildfires near locationNASA FIRMS active fire detections within a radius.
Outbreaks nearCDC Travelers' Health notices by country, optionally within a radius of a place (position = country centroid).
CISA KEV lookupRecent CISA Known Exploited Vulnerabilities, filtered by CVE, vendor or product.
WHOIS lookupLooks up a .br domain in the registro.br RDAP: registrant (companies only), dates and nameservers. .br domains only. Requires an account and sign-in.
URLhaus malware lookupLive malware infrastructure from abuse.ch URLhaus, filtered by malware, IP, country or network.
Geocode address/coordinatesResolve an address or place name to coordinates using OpenStreetMap.
Region dossierPlace name, country facts and a Wikipedia summary for a location.
Travel advisories by countryTravel advisories by country: US State Department (level 1 to 4) with the UK FCDO second opinion. The keyword filters by country name or code.
Courts metadata lookupLooks up a case cover by its unified CNJ number (DataJud): court, class, body and dates, no parties. Requires an account and sign-in; may take up to 45 s.
Country risk
  • METAQUANTICS (baseline editorial) + USGS M4.5+ /api/country-risk
METAQUANTICS editorial country risk score plus recent quake activity.

Rules and limits

What the module promises about data honesty, licenses and restrictions, and what is still marked as coming soon.

  • Honest catalog

    The original category and tool names are listed (161 tools), but only 38 have a real runner (a route of METAQUANTICS itself). The others show coming soon and never return data.

  • No plans or quotas

    The original locks tools and saving boards behind plans; here nothing is locked. The plan required in the original is shown only as an informative badge.

  • Local boards

    Boards are stored in the browser (localStorage, validated with zod). There is no sync between devices.

  • Results are snapshots

    Each tool queries its route when you click. Radius, keyword and date filters run in the browser over the global slice the route returns, with a cap of 200 results. Sources that need a key (for example AIS) answer with a clear error.

  • Evidence

    Items keep their source and collection time. Notes accept minimal Markdown only; no HTML is interpreted.

Decisions

Decisions recorded in the clone register for this module (text in Portuguese, as written in the repository).

IDDecisionReasonCost if wrong
D-C-01Rota do Construtor de Casos em /casos (pt-BR), não /research-board (original) nem /cases. A aba cases do TopBar aponta para ela. [INFERIDO]Pedido do usuário (caminho pt-BR). Slug do original é irrelevante para o clone.Trocar = renomear src/app/casos e o href em TopBar.tsx.
D-C-02Catálogo honesto: as 13 categorias e os nomes do original (§5 de case-builder.md) são listados, mas só tem runner a ferramenta que mapeia para capacidade REAL do METAQUANTICS (27 de 159: notícias, terremotos, incêndios, GDACS por tipo, clima severo, voos/aeronaves, embarcações, gargalos marítimos, CISA KEV, URLhaus, clima espacial, cotações, geocodificação, dossiê de região, risco-país, zonas de conflito). As demais aparecem como "Em breve" e nunca devolvem dado. Ferramentas EXTRA (sem equivalente no original): Zonas de conflito, Dossiê da região, Risco-país. air-quality ficou de fora: a rota usa OpenAQ v2 (descontinuada). Filtro de raio/palavra-chave/datas roda no navegador sobre o recorte global que as rotas devolvem. [OBSERVADO lista; INFERIDO mapeamento]Regra do pedido: dados reais, sem inventar resultados.Ligar uma nova ferramenta = linha em tools.ts (runnable) + runner em runners.ts + textos + entrada em element-docs.ts (testes cobrem a paridade).
D-C-03Persistência local: quadros em localStorage (chave metaquantics-cases-boards), validados com zod (schema.ts), SSR-safe, atrás da interface assíncrona BoardRepository (repository.ts). O app não tem contas; trocar por Supabase = implementar a interface e passar repository ao <CaseBuilder>. Um único quadro ativo (default), mas o repositório já suporta vários. Há exportar/importar JSON versionado (backup/portabilidade).App sem contas; original só persistia em plano pago.Migrar para Supabase exige migration SQL + RLS (D-04) e login; os dados em localStorage podem ser importados via JSON.
D-C-04Sem paywall: o original bloqueava salvar quadros ("Upgrade to save") e ferramentas por plano (Free/Enthusiast/Analyst/Strategist). No METAQUANTICS nada é bloqueado; o plano do original aparece só como badge informativo em cada ferramenta (com tooltip explicando). Decisão registrada a pedido do usuário.Pedido explícito; sem sistema de planos no METAQUANTICS.Nenhum: remover o badge é trivial.
D-C-05Auto-organizar determinístico (src/lib/cases/layout.ts) no lugar do "AI auto-arrange": componentes conexos -> camadas por BFS a partir das raízes -> ordenação por baricentro -> isolados em grade. Mesma entrada, mesma saída; testado (sem sobreposição, ciclos, vazio). O desfazer do original (temporizado, só do auto-arrange) virou Desfazer geral (até 50 passos) no reducer. [INFERIDO]Sem IA/LLM (pedido); desfazer geral é estritamente mais útil.Um layout melhor (ex.: Sugiyama completo) cabe em autoArrange sem mudar a UI.
D-C-06Canvas próprio (HTML posicionado + SVG para arestas, Pointer Events, zoom por roda ancorado no cursor, pan, ajustar à tela) sem biblioteca, como o original (sem react-flow/konva no bundle). Exportação PNG desenha direto num <canvas> 2D com as cores dos tokens CSS do tema (nós são HTML, serializar o DOM não seria confiável). Arestas: criadas por alça no nó + clique no destino; sem rótulo/tipo (não observado no original, quadro vazio). [INFERIDO]Sem dependência nova.Rótulos/tipos de aresta: EvidenceEdge.label já existe no schema.
D-C-07Tipos de item: Nota (título, Markdown mínimo via markdown-lite, fonte opcional, etiquetas; <= 50.000 bytes [OBSERVADO]), Link (URL obrigatória http/https, título padrão = URL, descrição), Comentário (só texto, <= 2.000 bytes) e Tabela (CSV/TSV, 1a linha = cabeçalho, <= 200 linhas x 12 colunas), mais Resultado (fixado a partir de ferramenta; id estável => fixar duas vezes não duplica). No original as abas Comentário/Tabela mostraram o mesmo formulário do Link; os campos específicos aqui são [INFERIDOS]. Links só passam por safeHttpUrl (allowlist http/https); todo texto é renderizado como texto (sem HTML injetado).Segurança + o modelo de dados implícito do relatório.Mudar limites = constantes em types.ts.
D-C-08Tooltips via DocTip (sobre ui/tooltip) + registry tipado src/lib/cases/element-docs.ts (id, titleKey/summaryKey/detailKey, fontes com nome/url/licença/rota, tecnologias, limitações), textos em cases.ts. ops/InfoTip.tsx ainda não existia ao implementar; mesmo contrato do ops/element-docs.ts (D-11). Teste garante que toda chave referenciada existe em en e pt-BR.D-11.Unificar com InfoTip depois (mesmo contrato de chaves).
D-C-09Item válido nunca inviabiliza o quadro: validateDraft, itemFromResult, itemFromDraft e o reducer (addItem/updateItem/moveItems/arrange) aplicam os limites do schema antes de gravar (sanitize.ts: título ≤ 300, células ≤ 2.000, cabeçalhos ≤ 200, coordenadas ±100.000, corpo por bytes, URL normalizada ≤ 2.048 senão descartada, data inválida descartada). Link sem título cujo URL passa de 300 caracteres vira título truncado (caso de 424 caracteres reproduzido em teste). autoArrange quebra cadeias longas em faixas de 300 camadas.Antes, um item aceito pela UI mas rejeitado pelo zod fazia todo save falhar para sempre.Subir limites = constantes em sanitize.ts e schema.ts.
D-C-10Teclado no canvas: com a origem escolhida no conector, Enter/Espaço no item focado cria a aresta; teclas vindas do botão conector não borbulham para o container (Enter não abre edição, Delete não apaga o nó). Zoom por roda/pinça usa exp(-delta) com deltaMode normalizado (wheel.ts). Exportação PNG reduz a escala para respeitar 16.384 px/lado e 16 MP. Delimitador CSV ignora o que está entre aspas.Itens I-8, M-5, M-10, M-11.—
D-C-11markdown-lite (compartilhado com Connectors): HEADING/BULLET/ORDERED passam de \s+(.*\S)\s*$ (O(n²) em linha de espaços: 40k espaços ≈ 2 s) para \s+(\S.*)$ + trimEnd(); API pública e saída inalteradas. ItemBody memoiza o parse da nota.Linha hostil/colada travava a UI (importável de JSON de terceiros).—

Read from docs/clone/decisoes.md at build time. Text in Portuguese.

Module

Ripple

Builds a graph of related events from a seed: Discover, My list and Create; the open ripple (/ripple/<id>) with map, graph and timeline; and the Effects tab (/ripple/efeitos) with Waves, Cascade and Board. Generation is deterministic and runs in the browser.

Open module
  • 66documented elements
  • 4feeds

Elements

Generated from the module element registry (the same one behind the tooltips): what each element is, where the data comes from, which technologies it uses and its known limits.

menu (6)

Discover

menutab-discover

Trending seeds and a featured ripple drawn from live feeds.

Detail

Entry point: ranks recent events by how many others relate to them and lets you open a ripple in one click.

Sources

No external source: computed in the app.

Technologies

  • Next.js Link

My list

menutab-list

Ripples you built and saved in this browser.

Detail

Open, rename or delete saved ripplees. Persistence uses a repository interface (localStorage today, Supabase later).

Sources

No external source: computed in the app.

Technologies

  • Next.js Link
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Saved only in this browser (localStorage); not synced across devices.

Create

menutab-create

Search events across feeds and build a ripple from one.

Detail

Text search plus category and time filters over the current feed pool; pick one event as the seed.

Sources

No external source: computed in the app.

Technologies

  • Next.js Link

Open ripples

menuws-tabs

Folder tabs with the ripples open in this browser; the "+" opens another saved ripple, Discover or Create.

Detail

Each tab shows the seed category colour, the name and the number of events. Opening /ripple/<id> adds the tab; closing goes to the neighbouring tab (or to Discover). The list is stored in this browser and tabs of deleted ripples disappear.

Sources

No external source: computed in the app.

Technologies

  • Radix Tabs (shadcn/ui)
  • Radix DropdownMenu (shadcn/ui)
  • src/lib/ripple/open-tabs.ts (localStorage)
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Saved only in this browser (localStorage); not synced across devices.

Ripple tools

menuws-subbar

Menu navigation, view switch, Refresh, scan statistics, Live badge and Alert for this ripple.

Detail

Refresh scans the feeds again with the same seed and counts the truly new events; feeds that are down keep the earlier events. The Live badge reflects the real state of the four polled feeds. Alert for this ripple opens the alert wizard with the theme terms.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • fetchPool
  • refreshRipple
  • useRipplePool (useFeed, polling)
  • barramento de comandos (open-alert-draft)
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Reflects the feeds at collection time; there is no history beyond what the feeds currently return.
  • Saved only in this browser (localStorage); not synced across devices.

Effects

menuLocal (no external source)tab-effects

Ripple tab that shows the effects of a saved ripple in three views: Waves, Cascade and Board.

Detail

Address: /ripple/efeitos?id=<ripple>&v=ondas|cascata|quadro. Without an id it opens the ripple of the first open tab or the most recently saved one; with no saved ripple it offers Create. The three views read the same graph saved in this browser and generate no new data.

Open on screen /ripple/efeitos

Sources

No external source: computed in the app.

Technologies

  • Next.js Link
  • useSearchParams (?id=&v=)
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Saved only in this browser (localStorage); not synced across devices.

panel (24)

Recent events ticker

panelticker

The latest events from all feeds; click one to build a ripple from it.

Detail

Merged and sorted by time from news, conflicts, GDELT and markets. Polls with the same visibility-aware hook as the Console.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • useFeed (polling)
  • normalize (src/lib/ripple)

Known limits

  • OSINT content is unverified and may be partisan, duplicated or wrong.
  • Some feeds stamp the collection time instead of the publication time.

Featured ripple

panelhero

Preview of the graph for the top-ranked seed. Not saved until you press Explore.

Detail

The top trending seed is run through the same deterministic pipeline (related events, themes, typed edges, radial layout) used for any ripple.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • src/lib/ripple (pipeline deterministico)
  • SVG
  • layoutRadial

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.
  • Reflects the feeds at collection time; there is no history beyond what the feeds currently return.

About the pipeline

panelfeatures

What a ripple is and how it is generated.

Detail

Seed event, related events by weighted keyword similarity, clustering into themes, typed weighted edges and a radial layout. All reproducible.

Sources

No external source: computed in the app.

Technologies

  • src/lib/ripple (pipeline deterministico)

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.

Trending seeds

paneldisc-seeds

Recent events from the live feeds that already have enough neighbours to build a graph. Click to preview and build.

Detail

Ranked by how many other events share informative terms with them, plus a recency bonus. The seed open in the graph stays on top with the "open" tag.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • rankSeeds (src/lib/ripple/seeds.ts)
  • useFeed (polling)

Known limits

  • Association is by keyword and proximity, not confirmed causality.
  • OSINT content is unverified and may be partisan, duplicated or wrong.

Live tracking

paneldisc-live

The same seed is scanned again at the chosen interval; new events enter the graph and the history below.

Detail

Scans run in your browser while any Ripple tab is open (checked every minute); no server and no quota. Applies to saved ripples.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • src/lib/ripple/tracking.ts
  • useRippleTracker (verificacao a cada minuto)
  • fetchPool
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Saved only in this browser (localStorage); not synced across devices.
  • Reflects the feeds at collection time; there is no history beyond what the feeds currently return.

Cascade graph

paneldisc-graph

The seed sits in the centre. The 1st ring holds the themes; then come 1st-order events (direct link) and 2nd-order events (cascade). Click a node to read it and highlight its neighbourhood.

Detail

Same deterministic pipeline as any ripple; the legend toggles each link type and the time cursor replays the cascade.

Sources

No external source: computed in the app.

Technologies

  • cascadeLayout (src/lib/ripple/cascade.ts)
  • SVG + nos HTML
  • src/lib/ripple (pipeline deterministico)

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.
  • Association is by keyword and proximity, not confirmed causality.

Reading panel

paneldisc-panel

Reading of the selected node. Sources lists the cross-checked feeds; Briefing gathers the effect chains with clickable citations for each node.

Detail

Strength = mean relevance of the 1st-order events. Open on map opens Orbit centered on the point; Create alert opens the alerts wizard with the node terms.

Sources

No external source: computed in the app.

Technologies

  • buildBriefing (src/lib/ripple/briefing.ts)
  • Radix Tabs (shadcn/ui)
  • barramento de comandos (fly-to, open-alert-draft)

Known limits

  • OSINT content is unverified and may be partisan, duplicated or wrong.
  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.

Saved ripplees

panellist-grid

Ripples stored in this browser, newest first.

Detail

Validated with zod when read; corrupted entries are skipped without breaking the list.

Sources

No external source: computed in the app.

Technologies

  • LocalRippleRepository (localStorage + zod)

Known limits

  • Saved only in this browser (localStorage); not synced across devices.

Local storage

panellist-storage

Space the saved ripples take in this browser localStorage.

Detail

The typical limit is about 5 MB per origin; when full, the oldest ripples go first so the new one fits.

Sources

No external source: computed in the app.

Technologies

  • LocalRippleRepository (localStorage + zod)

Known limits

  • Saved only in this browser (localStorage); not synced across devices.

Search results

panelcreate-results

Matching events from the live feeds. Click one to select it as the seed.

Detail

Paginated 20 at a time, most recent first.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
GDELT Project DOC 2.0 (article search)/api/gdelt-docfree use incl. commercial; cite the GDELT Project with a link

Technologies

  • searchEvents
  • useFeed (polling)

Known limits

  • OSINT content is unverified and may be partisan, duplicated or wrong.
  • Reflects the feeds at collection time; there is no history beyond what the feeds currently return.

Build a Ripple

panelcreate-card

Search the live feeds or filter by category and date to find an event; then build the graph of its cascading effects.

Detail

Search runs locally over the loaded feeds (all words, accent-insensitive); with the Articles category on, Enter queries GDELT on demand.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
GDELT Project DOC 2.0 (article search)/api/gdelt-docfree use incl. commercial; cite the GDELT Project with a link

Technologies

  • searchEvents (busca local)
  • useRippleArticles (sob demanda)

Known limits

  • Reflects the feeds at collection time; there is no history beyond what the feeds currently return.
  • On-demand source: articles exist only for the query you ran. They are not part of Discover or the live pool, and "Refresh" in the viewer does not re-run the search (it keeps the articles the ripple already has).

Build

panelcreate-build-card

Options and progress for building the ripple from the selected event.

Detail

The preview runs the same pipeline without saving; building saves to My list and shows each stage with the real numbers.

Sources

No external source: computed in the app.

Technologies

  • src/lib/ripple (pipeline deterministico)
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.
  • Unlike the original product, building a ripple is not gated by a paid plan or quota.

Propagation map

panelws-map

Dotted world map with every ripple event that has coordinates, the waves leaving the seed and the arcs to each event’s cause.

Detail

Equirectangular projection drawn from the app’s land/sea mask (no tiles). Layers Waves, Arcs, Distance (1,000 to 10,000 km rings) and Labels; World or Theater framing around the seed. Approximate locations (country or zone centroid) are translucent; the country comes from point-in-polygon over countries.geojson.

Sources

No external source: computed in the app.

Technologies

  • SVG (mapa-mundi de pontos)
  • land-mask (countries.geojson rasterizado)
  • buildPropagation (src/lib/ripple/propagation.ts)
  • ponto-em-poligono (countries.geojson)

Known limits

  • Coordinates may be approximate (a conflict zone anchor, or a place resolved from text).
  • Association is by keyword and proximity, not confirmed causality.
  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.

Causal chain

panelws-drawer

Drawer with the seed and each link by order, why it is linked, its weight and actions; the Themes tab isolates one theme.

Detail

First order links straight to the seed (shared terms, and distance when exact); second order points to the first-order event sharing the most terms (at least two), or to the theme when there is none. Actions: view the source, open in Orbit centered on the point and create an alert with the link terms.

Sources

No external source: computed in the app.

Technologies

  • buildPropagation
  • themeSummaries
  • Radix ScrollArea / Toggle (shadcn/ui)
  • barramento de comandos (fly-to, open-alert-draft)

Known limits

  • Association is by keyword and proximity, not confirmed causality.
  • OSINT content is unverified and may be partisan, duplicated or wrong.
  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.

Effect waves

panelReal datafx-waves

One column per effect order (seed, 1st and 2nd order), with typed connectors between cause and effect.

Detail

Order = distance in causal hops to the seed (generator level). The cause of a 2nd-order effect is the 1st-order event with the most shared terms. Solid lines join cause and effect; dashed lines join different themes or geographic proximity and do not change the order. Selecting an event isolates its chain; Refresh scans the feeds again with the same seed.

Open on screen /ripple/efeitos?v=ondas

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • buildWaves (src/lib/ripple/effects/waves-model.ts)
  • buildPropagation (src/lib/ripple/propagation.ts)
  • SVG
  • fetchPool
  • refreshRipple
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.
  • The Ripple generator links effects only up to the 2nd order; 3rd-order-or-higher columns, lanes and filters stay empty.
  • Association is by keyword and proximity, not confirmed causality.
  • OSINT content is unverified and may be partisan, duplicated or wrong.

Cascade by theme

panelReal datafx-cascade

Seed briefing, scan numbers and a board with one column per theme, effects stacked by order and cause → effect arrows.

Detail

Impact (0–100) = 55% relevance + 25% linked events + 20% distinct sources, each normalized by the largest value in the ripple; bands Severe ≥ 80, High ≥ 60, Medium ≥ 40. Confidence = weight of the link to the cause (relevance at 1st order, edge weight at 2nd); the window value is the mean. The briefing is assembled from headlines, without AI, and Export briefing saves it as Markdown.

Open on screen /ripple/efeitos?v=cascata

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • buildCascadeModel / buildCascadeBoard (src/lib/ripple/effects/cascade-model.ts)
  • cascade-format.ts (briefing em Markdown)
  • SVG
  • fetchPool
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Impact and confidence are derivations relative to the ripple itself (relevance, linked events, sources and edge weights), not forecasts or absolute measures; do not compare numbers across ripples.
  • The Ripple generator links effects only up to the 2nd order; 3rd-order-or-higher columns, lanes and filters stay empty.
  • The briefing and summary are assembled from headlines, without AI; check the evidence before citing.
  • OSINT content is unverified and may be partisan, duplicated or wrong.

Causal board

panelLocal (no external source)fx-board

Gamified blueprint board: seed, theme and event cards in phases, to reveal the chain by connecting cables.

Detail

Cards and links are the real nodes and edges of the ripple; nothing is invented. In Reveal mode, a cable from a card output to another card input is checked against the ripple links: a hit earns XP, a wrong type is worth half, a miss explains why. Missions, achievements, levels, hints paid in XP, undo, minimap and Markdown export of the chain come from fixed rules over that data.

Open on screen /ripple/efeitos?v=quadro

Sources

No external source: computed in the app.

Technologies

  • buildBoard (src/lib/ripple/effects/board-model.ts)
  • board-game.ts (XP, missoes, conquistas)
  • board-layout.ts (Bezier, minimapa)
  • board-history.ts (desfazer)
  • board-export.ts (Markdown)
  • board-persist.ts (localStorage, por ripple)

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.
  • The Ripple generator links effects only up to the 2nd order; 3rd-order-or-higher columns, lanes and filters stay empty.
  • Board progress (positions, revealed links, XP, hints and missions) is saved only in this browser, per ripple (up to 30); refreshing the ripple (new scan) restarts the board.

Scan statistics

panelviewer-stats

Events scanned in the pool, events in the ripple and distinct sources.

Detail

Scanned is the size of the feed pool at generation time; events are those linked to the seed.

Sources

No external source: computed in the app.

Technologies

  • src/lib/ripple (pipeline deterministico)

Known limits

  • Reflects the feeds at collection time; there is no history beyond what the feeds currently return.

Graph

panelviewer-graph

Root event in the center, themes on the first ring and linked events beyond. Drag to pan, wheel or pinch to zoom, click a node.

Detail

Edge types: hierarchy, same theme, cross-theme, geographic proximity and theme link; thickness follows weight. Selecting a node dims the rest.

Sources

No external source: computed in the app.

Technologies

  • SVG
  • layoutRadial (src/lib/ripple/layout.ts)
  • Pointer Events (pan/zoom/pinch)

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.
  • Association is by keyword and proximity, not confirmed causality.

Timeline

panelviewer-timeline

One lane per theme over time; one dot per event.

Detail

Dot color shows the feed category. Click a dot to open its details.

Sources

No external source: computed in the app.

Technologies

  • buildLanes (src/lib/ripple/timeline.ts)
  • SVG

Known limits

  • Some feeds stamp the collection time instead of the publication time.

Map

panelviewer-map

Events that have coordinates, colored by category; the root is highlighted.

Detail

Built on MapLibre GL with a graticule instead of tiles; events without coordinates are counted but not drawn.

Sources

No external source: computed in the app.

Technologies

  • MapLibre GL 6.7.0
  • GeoJSON circle layer

Known limits

  • No basemap tiles unless the server configures one; a 30-degree graticule gives context.
  • Coordinates may be approximate (a conflict zone anchor, or a place resolved from text).

Node panel

panelviewer-panel

Details, source link and connections of the selected node.

Detail

For a theme it lists its events; for an event it shows time, relevance, source and the strongest connections with their reason.

Sources

No external source: computed in the app.

Technologies

  • Radix ScrollArea (shadcn/ui)

Known limits

  • OSINT content is unverified and may be partisan, duplicated or wrong.

control (31)

Explore

controlhero-explore

Build and save the featured ripple, then open it.

Detail

Generates the graph on your device and stores it in My graphs. No quota, no paid plan.

Sources

No external source: computed in the app.

Technologies

  • src/lib/ripple (pipeline deterministico)
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Unlike the original product, building a ripple is not gated by a paid plan or quota.
  • Saved only in this browser (localStorage); not synced across devices.

Effect order

controldisc-order

Shows all events, only 1st-order ones (directly linked to the seed) or only 2nd-order ones (cascade).

Detail

Filters the graph, the timeline, the reading and the briefing; the seed and the themes stay visible.

Sources

No external source: computed in the app.

Technologies

  • Radix ToggleGroup (shadcn/ui)
  • cascadeView

Refresh

controldisc-refresh

Fetches the feeds again and regenerates this seed graph, counting the new events.

Detail

On a saved ripple, records the scan in the history; on a preview, only refreshes what is on screen.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • fetchPool
  • refreshRipple
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Reflects the feeds at collection time; there is no history beyond what the feeds currently return.

Briefing

controldisc-briefing

Opens the graph effects briefing in the reading panel.

Detail

Built deterministically: every item is a real headline and cites the nodes it came from.

Sources

No external source: computed in the app.

Technologies

  • buildBriefing
  • briefingMarkdown

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.

View on map

controldisc-map

Opens this saved ripple in the map workspace.

Detail

Available for saved ripples; a preview must be built first.

Sources

No external source: computed in the app.

Technologies

  • Next.js Link

Build from the preview

controldisc-preview

Takes this event to the Create tab, already selected, to choose depth and scan.

Detail

The preview uses the same pipeline and is not saved until you build the Ripple.

Sources

No external source: computed in the app.

Technologies

  • src/lib/ripple (pipeline deterministico)
  • Next.js router

Known limits

  • Unlike the original product, building a ripple is not gated by a paid plan or quota.

Ripple card

controllist-card

Open the ripple viewer.

Detail

Shows the event, theme and source counts from the last generation or refresh.

Sources

No external source: computed in the app.

Technologies

  • Next.js Link
  • LocalRippleRepository (localStorage + zod)

Rename

controllist-rename

Change the ripple name.

Detail

Only the label changes; the graph and seed are untouched.

Sources

No external source: computed in the app.

Technologies

  • Radix Dialog (shadcn/ui)
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Saved only in this browser (localStorage); not synced across devices.

Delete

controllist-delete

Remove the ripple from this browser (asks for confirmation).

Detail

Deletion is local and permanent; you can always rebuild from the same seed if it is still in the feeds.

Sources

No external source: computed in the app.

Technologies

  • Radix AlertDialog (shadcn/ui)
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Saved only in this browser (localStorage); not synced across devices.

Time window

controlcreate-range

Restrict results to the last 24h, 7d, 30d, all, or a custom date range.

Detail

Relative windows are anchored to the most recent event in the pool. Feeds only return recent items, so 30d and All usually match.

Sources

No external source: computed in the app.

Technologies

  • Radix ToggleGroup (shadcn/ui)
  • rangeBounds

Known limits

  • Some feeds stamp the collection time instead of the publication time.

Categories

controlcreate-categories

Choose which feed categories take part in the search.

Detail

Each category is backed by a real METAQUANTICS route; the number is how many events it returned.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified
GDELT Project DOC 2.0 (article search)/api/gdelt-docfree use incl. commercial; cite the GDELT Project with a link

Technologies

  • Radix DropdownMenu (shadcn/ui)

Seed type

controlcreate-seed-kind

A feed event, a country, a strait or a convergence card as the starting point.

Detail

Non-event seeds become a labelled root; linked nodes still come only from real events.

Sources

No external source: computed in the app.

Technologies

  • src/lib/ripple/seed-types.ts
  • Radix ToggleGroup (shadcn/ui)

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.

Depth

controlcreate-depth

1 order: only events directly linked to the seed. 2 orders: adds the cascade arriving through those events.

Detail

The 2nd order requires at least two shared terms and a minimum similarity with a 1st-order event.

Sources

No external source: computed in the app.

Technologies

  • findRelated (depth)
  • Radix ToggleGroup (shadcn/ui)

Known limits

  • Association is by keyword and proximity, not confirmed causality.

Scan window

controlcreate-scan

Only events up to 7 or 30 days before or after the seed enter the graph.

Detail

The feeds carry mostly recent items, so 7 and 30 days often match; the window is kept for later scans.

Sources

No external source: computed in the app.

Technologies

  • scanWindow (src/lib/ripple/generate.ts)

Known limits

  • Reflects the feeds at collection time; there is no history beyond what the feeds currently return.
  • Some feeds stamp the collection time instead of the publication time.

Automatic tracking

controlcreate-track

Turns on the daily scan of the same seed after building; the interval can be changed in Discover.

Detail

Runs in the browser while any Ripple tab is open.

Sources

No external source: computed in the app.

Technologies

  • src/lib/ripple/tracking.ts
  • Radix Switch (shadcn/ui)

Known limits

  • Saved only in this browser (localStorage); not synced across devices.

Build Ripple

controlcreate-build

Generate and save the ripple from the selected event, then open it.

Detail

Runs the deterministic pipeline in your browser; the same seed and feed snapshot always give the same graph.

Sources

No external source: computed in the app.

Technologies

  • src/lib/ripple (pipeline deterministico)
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.
  • Unlike the original product, building a ripple is not gated by a paid plan or quota.

Time rail

controlws-rail

Time marks since the seed with an arrival histogram and the Depth filter.

Detail

Marks are picked from the real hours of the latest event (up to six, plus Now). Each mark shows only the events published up to that point; the bars count each interval’s events by order. Depth limits the order shown (the current generator produces up to 2nd).

Sources

No external source: computed in the app.

Technologies

  • timeSteps / stepBins (src/lib/ripple/propagation.ts)
  • Radix Tabs (shadcn/ui)

Known limits

  • Some feeds stamp the collection time instead of the publication time.

Effects view

controlfx-views

Waves / Cascade / Board switch; the choice goes to the URL (?v=) and can be shared.

Detail

Waves is model B (columns by effect order), Cascade is model D (columns by theme with a briefing) and Board is model E (gamified causal board). Switching views keeps the open ripple.

Open on screen /ripple/efeitos?v=ondas

Sources

No external source: computed in the app.

Technologies

  • Segmented (src/components/ripple/workspace/Segmented.tsx)
  • router.replace (?v=)

Propagation over time

controlfx-waves-time

One lane per order with the window in which the wave spread, T0 / +6 h / +24 h / +48 h / Now jumps and playback.

Detail

Times are those of the events themselves, relative to the seed (T+…). Dragging the cut or pressing play replays the propagation; events after the cut are shown hollow in the waves. The average lag between orders is the mean of the real time differences.

Open on screen /ripple/efeitos?v=ondas

Sources

No external source: computed in the app.

Technologies

  • src/lib/ripple/effects/waves-time.ts
  • Slider (shadcn/ui)
  • SVG

Known limits

  • Some feeds stamp the collection time instead of the publication time.
  • The Ripple generator links effects only up to the 2nd order; 3rd-order-or-higher columns, lanes and filters stay empty.

Scan window

controlfx-cascade-window

A 24 h, 7 d or 30 d slice ending at the ripple last scan.

Detail

The initial window is 7 d when there are effects in the last 7 days, otherwise 30 d. "Articles read" adds up the scanned totals of the history scans inside the window; effects outside it leave the board and the briefing.

Open on screen /ripple/efeitos?v=cascata

Sources

No external source: computed in the app.

Technologies

  • CASCADE_WINDOWS + autoWindow (src/lib/ripple/effects/cascade-model.ts)

Known limits

  • Some feeds stamp the collection time instead of the publication time.
  • Reflects the feeds at collection time; there is no history beyond what the feeds currently return.

Board cables

controlfx-board-cables

Link types (keys 1–4): hierarchy, same theme, across themes and geographic.

Detail

Each type matches a generator edge type (hierarchical, intra-theme, cross-theme and geographic). XP per validated link: hierarchy 40, theme 25, across themes 50, geographic 30. The exact hint costs 10 XP.

Open on screen /ripple/efeitos?v=quadro

Sources

No external source: computed in the app.

Technologies

  • cableOf / applyLink / applyHint (src/lib/ripple/effects/board-game.ts)
  • Pointer Events

Known limits

  • Keyword/entity matching, not understanding: synonyms outside the built-in concept table and different languages may be missed or over-linked.
  • Board progress (positions, revealed links, XP, hints and missions) is saved only in this browser, per ripple (up to 30); refreshing the ripple (new scan) restarts the board.

Back

controlviewer-back

Return to My graphs.

Detail

Navigation only; nothing is lost.

Sources

No external source: computed in the app.

Technologies

  • Next.js Link

View

controlviewer-view

Switch between graph, map and timeline of the same ripple.

Detail

All views share the selection and the time cursor.

Sources

No external source: computed in the app.

Technologies

  • Radix ToggleGroup (shadcn/ui)

Refresh

controlviewer-refresh

Re-run the pipeline for this seed on the current feeds.

Detail

Fetches all feeds once, regenerates the graph and appends an entry to the refresh history.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified
GDELT 2.0 Events/api/gdelt-eventsnot verified
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • fetchPool
  • src/lib/ripple (pipeline deterministico)
  • LocalRippleRepository (localStorage + zod)

Known limits

  • Reflects the feeds at collection time; there is no history beyond what the feeds currently return.
  • Saved only in this browser (localStorage); not synced across devices.

Play

controlviewer-play

Replays the cascade in time order.

Detail

Advances the time cursor so events appear as they happened.

Sources

No external source: computed in the app.

Technologies

  • visibleNodeIds (src/lib/ripple/timeline.ts)

Time cursor

controlviewer-scrub

Drag to show only events up to that moment.

Detail

Themes appear when their first event does; the root is always visible.

Sources

No external source: computed in the app.

Technologies

  • Radix Slider (shadcn/ui)
  • visibleNodeIds

Known limits

  • Some feeds stamp the collection time instead of the publication time.

data (5)

News

datasource-news

Public Telegram OSINT channels and wire-service RSS.

Detail

Served by /api/news, cached server-side for a few minutes and polled every 5 minutes.

Sources

SourceRouteLicense
Telegram public channels (t.me/s)/api/newsnot verified
Wire services RSS (BBC, Guardian, Al Jazeera, TASS, Anadolu, SCMP, CNA, Africanews)/api/newsnot verified

Technologies

  • parseNewsEvents
  • RSS
  • Telegram t.me/s (HTML publico)

Known limits

  • OSINT content is unverified and may be partisan, duplicated or wrong.

Conflicts

datasource-conflicts

RSS headlines matched by keyword to known conflict zones.

Detail

Served by /api/conflicts; each headline inherits the zone coordinates.

Sources

SourceRouteLicense
BBC World / Al Jazeera / NYT World (RSS), matched to known conflict zones/api/conflictsnot verified

Technologies

  • parseConflictEvents
  • RSS

Known limits

  • Some feeds stamp the collection time instead of the publication time.
  • Coordinates may be approximate (a conflict zone anchor, or a place resolved from text).
  • Association is by keyword and proximity, not confirmed causality.
  • OSINT content is unverified and may be partisan, duplicated or wrong.

GDELT

datasource-gdelt

Coded global events from the GDELT 2.0 export (15-minute window).

Detail

Served by /api/gdelt-events; includes location, tone and Goldstein score in the summary.

Sources

SourceRouteLicense
GDELT 2.0 Events/api/gdelt-eventsnot verified

Technologies

  • parseGdeltEvents
  • GDELT 2.0 export (15 min)

Known limits

  • GDELT has no headline: it is derived from the article URL when possible.
  • OSINT content is unverified and may be partisan, duplicated or wrong.

Articles (GDELT DOC)

datasource-articles

News articles (title and link only) found by the GDELT DOC 2.0 search, fetched only when you run a search.

Detail

Served by /api/gdelt-doc, which queues calls to respect the provider limit (1 request per 5 s) and caches each query for 15 minutes. Never polled: it runs only when you search with text in Create while this category is selected. Article text is never read; each result links to the publisher.

Sources

SourceRouteLicense
GDELT Project DOC 2.0 (article search)/api/gdelt-docfree use incl. commercial; cite the GDELT Project with a link

Technologies

  • parseArticleEvents
  • useRippleArticles (sob demanda, sem polling)
  • GDELT DOC 2.0 artlist

Known limits

  • On-demand source: articles exist only for the query you ran. They are not part of Discover or the live pool, and "Refresh" in the viewer does not re-run the search (it keeps the articles the ripple already has).
  • OSINT content is unverified and may be partisan, duplicated or wrong.

Markets

datasource-markets

Instruments moving 1% or more, treated as events.

Detail

Served by /api/markets (indices, commodities, crypto, FX) and polled every 2 minutes.

Sources

SourceRouteLicense
US Treasury, Daily Treasury Par Yield Curve Rates/api/marketsnot verified
Banco Central do Brasil, PTAX (Olinda)/api/marketsBCB open data (attribution to BCB; exact licence to be confirmed)
U.S. EIA spot prices (API v2, with key)/api/marketsnot verified
IMF Primary Commodity Prices via DBnomics (monthly)/api/marketsnot verified
Yahoo Finance (chart API, unofficial; labeled fallback)/api/marketsnot verified

Technologies

  • parseMarketEvents
  • US Treasury / BCB PTAX / EIA / DBnomics (official, daily events only)
  • Yahoo Finance chart API (labeled fallback)

Known limits

  • Only moves of 1% or more become events.
  • Unofficial Yahoo Finance endpoint; may change or throttle without notice.

Rules and limits

What the module promises about data honesty, licenses and restrictions, and what is still marked as coming soon.

  • Deterministic, no AI

    Seed, then related events (term similarity plus a geographic bonus), then themes. No LLM and no network beyond the feeds.

  • Approximate places and times

    Country anchors are not the event location (they are flagged as approximate) and events without a timestamp use the collection time (also flagged); the timeline treats them accordingly.

  • No paywall

    Creating and saving a ripple has no quota or plan.

  • Local storage

    Ripples live in the browser. When the quota is exceeded the oldest ones are discarded until the new one fits; the new one is never discarded and saving never fails silently.

  • Existing routes only

    The event pool uses 4 routes already in METAQUANTICS (news, conflicts, GDELT events, markets). A partial failure does not bring the pool down.

Decisions

Decisions recorded in the clone register for this module (text in Portuguese, as written in the repository).

IDDecisionReasonCost if wrong
D-N-01Sem paywall nem cota: o original barra a criação atrás de plano pago (/api/nexus/usage = 0/0, botão "Upgrade to Build Your Own"); aqui criar um nexus é livre e roda no navegador. Nenhum botão de upgrade/billing foi clonado.Decisão do usuário (não paywall); o motor é determinístico e local, sem custo por geração.Se quotas virarem requisito, basta um guard em buildAndSave (src/lib/nexus/build.ts).
D-N-02Persistência atrás de NexusRepository (src/lib/nexus/repository.ts) com implementação LocalNexusRepository (localStorage metaquantics.nexus.v1, validado com zod, SSR-safe, entradas inválidas descartadas uma a uma, teto de 50). Supabase implementa a mesma interface depois. [INFERIDO] (o original persiste por userId no servidor).Sem auth/tabela para nexus nesta fase; SQL 0006_* pertence ao backlog F2.Trocar getNexusRepository() por outra implementação; o formato JSON já é o do schema zod.
D-N-03Geração determinística, sem LLM: semente -> relacionados (cosseno idf binário sobre termos/conceitos + bônus geográfico <=300 km) -> temas (agrupamento guloso por termo, df>=2, <=60% dos candidatos) -> arestas tipadas com peso (hierarchical, intra-theme, cross-theme, geographic, theme-link) -> layout radial (R1=200, R2=380, R3=490). Nível 2 = eventos ligados a um evento de nível 1 (efeito em cascata). O enriquecimento por LLM (Gemini/ai-engine) não foi implementado; se vier, deve ser opcional, rotulado e desligado por padrão. [INFERIDO] (original usa "frontier LLMs").Pedido do usuário: pipeline testável, sem invenção. Termos do text.ts usam tabela estática de conceitos (ex.: brent/crude/opec -> oil), não semântica.Qualidade menor que um LLM em sinônimos/idiomas; mitigada documentando a limitação nos tooltips (nexus.limit.deterministic).
D-N-04Camada de dados = rotas existentes: /api/news, /api/conflicts, /api/gdelt-events, /api/markets via useFeed (polling 5 min; mercados 2 min). Categorias do Create = essas 4 (o original lista 14 categorias / ~101 feeds; não há equivalentes reais aqui). GDELT não tem manchete: título derivado do slug da URL, com fallback "<quad> - <local>". Mercados viram evento quando |variação| >= 1%. [INFERIDO]Dados reais apenas; sem fabricar feeds inexistentes.Adicionar categorias = nova entrada em NEXUS_FEEDS + parser em normalize.ts.
D-N-05Visão "Mapa" do original é o próprio grafo (DOM+SVG); aqui há 3 visões: Grafo (SVG próprio, pan/zoom/pinch via Pointer Events, sem dependência nova), Mapa (MapLibre, padrão do MqMap, worker vendorizado, graticule de 30 graus no lugar de tiles — o basemap PMTiles é opcional/server-side) e Linha do tempo (raias por tema x tempo). Rodapé com Play + scrub temporal filtra nós por horário.Pedido do usuário (Map = maplibre; Timeline própria) e [OBSERVADO] rodapé de scrub no original.Trocar a graticule por basemap quando MQ_BASEMAP_PMTILES_URL estiver disponível ao cliente.
D-N-06react-force-graph-2d não é usado: o layout radial vem de layoutRadial (determinístico, testável em node), como o layoutPositions do original.Simulação de forças não é reprodutível nem testável sem DOM.Nenhum; o grafo SVG aceita qualquer positions.
D-N-07Tooltips via NexusTip/NexusInfo + registry tipado src/lib/nexus/element-docs.ts (textos em nexus.ts). ops/InfoTip.tsx não existia ao implementar; o registry nexus segue o mesmo formato do ops/element-docs.ts (D-11).Componente próprio mínimo sobre ui/tooltip.Unificar com InfoTip depois (mesmo contrato de chaves).
D-N-08Âncoras não são local do evento: NexusEvent.approx marca coordenadas que são centroide de país (/api/news, location_precision: 'country-anchor') ou âncora de zona (conflitos). geoDistance devolve null se qualquer lado é aproximado: sem bônus geográfico e sem aresta geographic (antes, 0 km entre âncoras iguais lotava o teto de 30 arestas e escondia proximidades reais). Eventos salvos antes do campo: notícias e conflitos contam como aproximados (isApproxLocation). NodePanel mostra "localização aproximada"; o mapa desenha o ponto translúcido e conta quantos são aproximados.Regra de não inventar dado: a rota de notícias declara que o marcador não é o local do fato.Voltar a tratar âncora como local = remover a checagem em geoDistance.
D-N-09Ids de conflito estáveis: conflict:<zona>:<fnv1a(título)> no lugar do contador por requisição da rota (osint-live-N); generateNexus também deduplica ids do pool (mesmo título = descarta; título diferente = sufixo #n), então nunca há dois nós ev:<id>. Nexus já salvos continuam abrindo (snapshot próprio); a semente antiga é excluída do pool novo pelo título.O contador muda a cada resposta e fazia outro evento herdar o id da semente ao atualizar.Mudar o hash = ids novos, sem efeito nos nexus salvos.
D-N-10Salvar nunca falha em silêncio: repository.save() devolve boolean e, em erro de cota, descarta os nexus mais antigos até caber (o novo nunca é descartado). O snapshot guarda summary com no máximo 240 caracteres (tudo que o grafo lê). Se ainda assim não grava, o nexus fica só em memória (build.ts), o viewer abre normalmente e mostra o aviso nexus.viewer.notSaved em vez de "não encontrado". "Atualizar" com feeds falhos mescla os eventos anteriores das categorias que falharam (keepFailedCategories) antes de regerar.Perda silenciosa de trabalho e de evidência.Persistir em Supabase (D-N-02) elimina o limite de cota.
D-N-11Honestidade de tempo e tooltips: timeApprox marca eventos cujo horário é o da coleta (conflitos, mercados, notícia/GDELT sem data); a timeline os desenha como ponto vazado e espalha pontos sobrepostos em linhas (dotRows); NodePanel diz "hora da coleta". NexusTip lista TODAS as limitações do registry (como o DocTip do CASOS). Texto: o pronome "us" não vira USA (só a sigla US/U.S.), plural não corta -is/-us/-as (Crisis, Virus, Texas), desempates com comparação independente de locale (cmp); rankSeeds considera no máximo os 2.000 eventos mais recentes e termos com df ≤ 250.Itens M-1/M-3/M-4/M-7 da revisão final.Ajustar limites em seeds.ts/text.ts.

Read from docs/clone/decisoes.md at build time. Text in Portuguese.

Module

World Live

Live globe and event tape of OSINT layers, with alerts, audio and configurable filters.

Open module
  • 153documented elements
  • 103layers
  • 30with real data
  • 3adapters (off)
  • 70coming soon

Elements

Generated from the module element registry (the same one behind the tooltips): what each element is, where the data comes from, which technologies it uses and its known limits.

menu (12)

Globe view

menumode-globe

Live events as points on a 3D globe, announced one by one.

Detail

Uses the maplibre-gl globe projection. Layers marked in Alerts are queued and announced as callouts (with sound, if enabled); the other layers appear as passive dots.

Sources

SourceRouteLicense
Esri World Imagery / Dark Gray / Topo / Ocean basemaps—Esri terms of use (attribution required)

Known limits

  • Needs WebGL.
  • Basemap tiles come from third-party services that may be unavailable.

Tape view

menumode-tape

Terminal-style firehose of every event, with inspector and watch.

Detail

Chronological table (newest first, up to 500 rows) with priority, UTC time, source tag and title. Click a row to pin it in the Inspector; the default mode on phones.

Sources

No external source: computed in the app.

Known limits

  • Not real time: data is polled every few minutes.

Pause / Resume

menupause

Suspends fetching of new events.

Detail

While paused no request is made to the data routes; what is already on screen stays. Resuming fetches immediately.

Sources

No external source: computed in the app.

Rotation

menurotation

Auto-rotates the globe while no alert is on screen.

Detail

Only affects the Globe view. Rotation stops when you drag the globe and while a callout is being shown.

Sources

No external source: computed in the app.

Stress by country

menuchoropleth

Colours the globe by each country's Stress band (Low to Severe); countries without a reading are hatched as "no data". Click a country for score, band, coverage and method version.

Detail

Same choropleth as the Console map: readings from the Stress per-country engine (11 feeds, fetched only while this is on) over Natural Earth 1:50m borders (public domain, de facto lines; not a position on disputed territories). Method version shows "v—" until the Stress method seal ships.

Sources

SourceRouteLicense
Natural Earth 1:50m Admin 0 - Countries—Public domain (Natural Earth)
METAQUANTICS Geopolitics per-country engine (GDELT, World Bank, State Dept, OONI, IODA, UNHCR, USGS, GDACS, RSS)—not verified

Known limits

  • De facto boundaries (Natural Earth); not a position on disputed territories.
  • Not real time: data is polled every few minutes.

Audio

menumuted

Turns notification sounds on or off. Off by default.

Detail

Sounds are synthesized with WebAudio (no audio files) and can only start after you click this button, as browsers require a user gesture. The sound and volume are chosen in Customize > Audio.

Sources

No external source: computed in the app.

Technologies

  • WebAudio (OscillatorNode)

Watch filters

menufilters

Terms you want to keep an eye on across all events.

Detail

Comma-separated terms ("quotes" keep phrases). Events whose title, detail or source contain a term appear in YOUR WATCH. Stored only in this browser.

Sources

No external source: computed in the app.

Known limits

  • Settings are stored only in this browser.

Region filter

menufilter-region

Follows the global filter in the top bar.

Detail

Events with coordinates outside the region leave the Live; events without coordinates stay. To change the region use the global filter, not this dialog. Applied in this browser only.

Sources

No external source: computed in the app.

Known limits

  • Settings are stored only in this browser.

Time window

menuwindow

How far back events count: 1 hour up to 7 days.

Detail

Applied to the event timestamp on the client. Several sources only publish the last 24 hours (earthquakes, fires), so 3 and 7 days add data only for sources with longer history.

Sources

No external source: computed in the app.

Known limits

  • The source only publishes the last 24 hours.

Globe theme

menutheme

This button changes the globe design (visual style): Night, Blue Marble, Dark Minimal, Topology, Water or Hologram.

Detail

Only affects the Globe view; the data shown does not change. Basemaps come from Esri and may be unavailable or limited.

Sources

SourceRouteLicense
Esri World Imagery / Dark Gray / Topo / Ocean basemaps—Esri terms of use (attribution required)

Known limits

  • Basemap tiles come from third-party services that may be unavailable.

Customize

menucustomize

Opens the Live config: scenes, layers, alerts, filters and audio.

Detail

Changes are applied only when you click Save & Apply and are persisted in this browser (localStorage), validated on load.

Sources

No external source: computed in the app.

Technologies

  • zod
  • localStorage

Known limits

  • Settings are stored only in this browser.

Counters

menucounters

TOTAL events held, KEPT after filters, EPM new per minute, QUEUE of pending callouts, FEEDS in use.

Detail

Computed on the client from the polled data. EPM counts events seen for the first time in the last 60 seconds, not the provider rate.

Sources

No external source: computed in the app.

tab (5)

Scenes (Missions)

tabtab-presets

Four ready-made scenes, also applied by the Console Missions: War Room, Natural Disasters, Humanitarian Crisis, Blank.

Detail

A scene replaces the selected layers and alerts. Many layers of the original catalog have no real data route yet and are shown as coming soon; no data is simulated for them.

Sources

No external source: computed in the app.

Layers

tabtab-layers

The 103-layer catalog in 7 categories. Pick which feed the globe and the tape.

Detail

LIVE layers stream events; VISUAL layers are map references. Only layers backed by a real route here deliver data; the rest are marked coming soon.

Sources

No external source: computed in the app.

Known limits

  • No event feed is wired into Live for this layer yet.

Alerts

tabtab-alerts

Choose which layers are highlighted and announced in real time.

Detail

Checked layers enter the callout queue (with sound if enabled). Unchecked layers still appear as passive dots.

Sources

No external source: computed in the app.

Known limits

  • Events carry no coordinates, so they appear on the tape only.

Filters

tabtab-filters

Time window and per-category thresholds.

Detail

News keywords, aircraft types, fire confidence and social-post filters. Social filters have no effect until a social source is connected.

Sources

No external source: computed in the app.

Audio

tabtab-audio

Notification sound and volume.

Detail

Five sounds synthesized with WebAudio. Preview buttons play only after a click; the speaker button in the toolbar controls announcements.

Sources

No external source: computed in the app.

Technologies

  • WebAudio

container (11)

Firehose

containerfirehose

Every event that passes your layers, window and filters, newest first.

Detail

Holds up to 500 events, deduplicated by source id and by repeated titles. URGENT marks the highest-severity events by simple rules (strikes, terrorism, M6+ quakes, military aircraft); it is not a verified assessment.

Sources

No external source: computed in the app.

Known limits

  • Classification is by keywords and can be wrong.
  • OSINT content is not verified.

Inspector

containerinspector

Details of one event: source, category, location, severity and a map.

Detail

It follows the newest event until you click a row (then it stays pinned). Events without coordinates show no map.

Sources

SourceRouteLicense
Esri World Imagery / Dark Gray / Topo / Ocean basemaps—Esri terms of use (attribution required)

Technologies

  • maplibre-gl (globe projection)
  • raster tiles

Known limits

  • Coordinates are an anchor point, not the exact event location.
  • Needs WebGL.

Your watch

containerwatch

Events that match your watch terms, plus standing counts.

Detail

Standing watch always counts urgent, military and conflict events among those kept by the filters.

Sources

No external source: computed in the app.

Known limits

  • Settings are stored only in this browser.

Conflicts column

containercol-conflicts

Latest conflict-related events (conflicts, airstrikes, terrorism, siege).

Detail

Built from the conflicts RSS aggregation and GDELT material/verbal conflict events. Classification is by keywords and is unverified OSINT.

Sources

SourceRouteLicense
OSINT RSS headlines per conflict zone/api/conflictsnot verified
GDELT Project 2.0 Events/api/gdelt-eventsnot verified

Known limits

  • Classification is by keywords and can be wrong.
  • OSINT content is not verified.

X posts column

containercol-x

Disabled: there is no licensed source for X posts.

Detail

The X API is paid and scraping is not allowed. A pluggable adapter exists (src/lib/live/sources.ts) and is off by default; the column shows an honest empty state.

Sources

No external source: computed in the app.

Known limits

  • No licensed source is connected; the adapter is off.

Trump Truths column

containercol-truth

Disabled: there is no licensed source for Truth Social posts.

Detail

Truth Social has no public API. A pluggable adapter exists and is off by default; the column shows an honest empty state.

Sources

No external source: computed in the app.

Known limits

  • No licensed source is connected; the adapter is off.

Callouts

containercallouts

Announces alert events one at a time, with a queue of the next ones.

Detail

Only events from layers marked in Alerts, with coordinates, enter the queue. The globe flies to the announced event and the map and satellite tile follow it.

Sources

No external source: computed in the app.

Technologies

  • WebAudio
  • maplibre-gl flyTo

Known limits

  • Events carry no coordinates, so they appear on the tape only.

Monitored situations

containersituations

The most recent urgent events held right now.

Detail

A list of events classified URGENT among those kept by your filters. Click one to fly the globe to it.

Sources

No external source: computed in the app.

Local triangulation

containertriangulation

Flat map zoomed on the current event.

Detail

Dark raster basemap (Esri Dark Gray) with a marker on the announced event. Needs WebGL.

Sources

SourceRouteLicense
Esri World Imagery / Dark Gray / Topo / Ocean basemaps—Esri terms of use (attribution required)

Technologies

  • maplibre-gl (globe projection)
  • raster tiles

Known limits

  • Needs WebGL.
  • Basemap tiles come from third-party services that may be unavailable.

Visual telemetry

containertelemetry

Satellite tile at the current event.

Detail

Single Esri World Imagery tile at zoom 15 over the event coordinates. Imagery can be years old and is not a live image.

Sources

SourceRouteLicense
Esri World Imagery / Dark Gray / Topo / Ocean basemaps—Esri terms of use (attribution required)

Technologies

  • XYZ raster tile

Known limits

  • Basemap tiles come from third-party services that may be unavailable.

Globe

containerglobe

Interactive 3D globe of live events.

Detail

Drag to rotate, scroll to zoom. Needs WebGL; without it the Tape view shows the same events.

Sources

SourceRouteLicense
Esri World Imagery / Dark Gray / Topo / Ocean basemaps—Esri terms of use (attribution required)

Technologies

  • maplibre-gl (globe projection)
  • raster tiles

Known limits

  • Needs WebGL.
  • Basemap tiles come from third-party services that may be unavailable.

source (22)

Social sources (disabled)

sourceadapter-social

X, Bluesky and Truth Social adapters, off by default.

Detail

Gray-zone sources stay off until a licensed source is plugged in (decision D-10 / D-W-01). No data is fabricated.

Sources

No external source: computed in the app.

Known limits

  • No licensed source is connected; the adapter is off.

Conflicts feed

sourcefeed-conflicts

Conflict-zone headlines with coordinates from the conflicts route.

Detail

Route /api/conflicts aggregates OSINT RSS headlines per known conflict zone. Each event is classified (airstrike, terrorism, siege, embargo, other) by keywords; coordinates are the zone anchor, not the exact place.

Sources

SourceRouteLicense
OSINT RSS headlines per conflict zone/api/conflictsnot verified

Technologies

  • RSS
  • keyword classification

Known limits

  • Coordinates are an anchor point, not the exact event location.
  • Classification is by keywords and can be wrong.
  • OSINT content is not verified.
  • Not real time: data is polled every few minutes.

GDELT feed

sourcefeed-gdelt

Geocoded GDELT events: material/verbal conflict and protests.

Detail

Route /api/gdelt-events reads the GDELT 2.0 15-minute export. Only conflict (quad 3/4) and protest events are kept; cooperation events are dropped.

Sources

SourceRouteLicense
GDELT Project 2.0 Events/api/gdelt-eventsnot verified

Technologies

  • GDELT 2.0 Events CSV
  • CAMEO

Known limits

  • Only the strongest or first items of each poll are kept.
  • OSINT content is not verified.
  • Not real time: data is polled every few minutes.

Earthquakes feed

sourcefeed-earthquakes

USGS earthquakes M2.5+ from the last 24 hours.

Detail

Route /api/earthquakes proxies the USGS GeoJSON summary feed. M6+ or tsunami-flagged quakes are marked URGENT.

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesUS Government public domain

Technologies

  • GeoJSON

Known limits

  • The source only publishes the last 24 hours.
  • Not real time: data is polled every few minutes.

Fires feed

sourcefeed-fires

NASA FIRMS active fires and EONET volcanoes.

Detail

Route /api/fires reads the FIRMS 24-hour CSV (VIIRS, falling back to MODIS) and open EONET volcano events. Only the 80 strongest detections (by radiative power) per poll are kept.

Sources

SourceRouteLicense
NASA FIRMS (Fire Information for Resource Management System)/api/firesnot verified
NASA EONET v3/api/firesnot verified

Technologies

  • CSV
  • EONET API

Known limits

  • The source only publishes the last 24 hours.
  • Only the strongest or first items of each poll are kept.
  • Not real time: data is polled every few minutes.

News feed

sourcefeed-news

OSINT news with approximate locations.

Detail

Route /api/news aggregates public Telegram channels and wire feeds. Coordinates are country or term anchors, so the marker is approximate.

Sources

SourceRouteLicense
Public Telegram channels and wire feeds/api/newsnot verified
OpenStreetMap Nominatim (geocoding)/api/newsODbL (OpenStreetMap contributors)

Technologies

  • Telegram public pages
  • Nominatim

Known limits

  • Coordinates are an anchor point, not the exact event location.
  • OSINT content is not verified.
  • Not real time: data is polled every few minutes.

Military flights feed

sourcefeed-flights

Military aircraft positions from open ADS-B data.

Detail

Route /api/flights merges adsb.fi open data and OpenSky; only the military subset is used (up to 40 aircraft per poll). Aircraft type is inferred from the ICAO model code and may be unknown. Positions are a snapshot, not a track.

Sources

SourceRouteLicense
adsb.fi Open Data (ADS-B)/api/flightsnot verified
OpenSky Network/api/flightsnot verified

Technologies

  • ADS-B
  • ICAO type codes

Known limits

  • Positions are a snapshot, not a track.
  • Only the strongest or first items of each poll are kept.
  • Not real time: data is polled every few minutes.

Severe weather feed

sourcefeed-weather

Storm, flood, heat and dust alerts without coordinates.

Detail

Route /api/weather merges NASA EONET, NOAA/NWS and GDACS alerts. The route gives an area name but no coordinates, so these events appear on the tape only.

Sources

SourceRouteLicense
NASA EONET v3/api/weathernot verified
NOAA National Weather Service (api.weather.gov)/api/weatherUS Government public domain
GDACS (UN / European Commission)/api/weathernot verified

Technologies

  • EONET API
  • CAP alerts
  • GDACS RSS

Known limits

  • Events carry no coordinates, so they appear on the tape only.
  • Not real time: data is polled every few minutes.

Space weather feed

sourcefeed-space-weather

NOAA SWPC alerts without coordinates.

Detail

Route /api/space-weather relays recent NOAA Space Weather Prediction Center alert products. Events have no location, so they appear on the tape only.

Sources

SourceRouteLicense
NOAA Space Weather Prediction Center/api/space-weatherUS Government public domain

Technologies

  • NOAA SWPC JSON

Known limits

  • Events carry no coordinates, so they appear on the tape only.
  • Not real time: data is polled every few minutes.

Tsunami bulletins feed

sourcefeed-tsunamis

NOAA tsunami warning center bulletins with the preliminary epicenter.

Detail

Route /api/tsunamis reads the NTWC (Palmer, AK) and PTWC (Honolulu) Atom feeds. Watch and Warning bulletins without a no-danger note are marked URGENT. Coordinates are the preliminary epicenter of the triggering quake. An empty feed means no current bulletin, not an error.

Sources

SourceRouteLicense
NOAA/NWS Tsunami Warning Centers (NTWC Palmer AK, PTWC Honolulu)/api/tsunamisUS Government public domain

Technologies

  • Atom feeds
  • CAP-style categories

Known limits

  • An empty feed means there is no current tsunami bulletin.
  • Not real time: data is polled every few minutes.

Tropical storms feed

sourcefeed-hurricanes

Active tropical cyclones from the NOAA National Hurricane Center.

Detail

Route /api/hurricanes relays the NHC CurrentStorms file (Atlantic and Eastern/Central Pacific basins). Hurricanes or storms at 64 kt or more are marked URGENT. The position is the last advisory fix. The Hurricanes layer also receives the coordinate-less cyclone alerts of the severe weather feed.

Sources

SourceRouteLicense
NOAA National Hurricane Center (CurrentStorms.json)/api/hurricanesUS Government public domain

Technologies

  • NHC JSON

Known limits

  • The NHC updates advisories every 3 to 6 hours.
  • Not real time: data is polled every few minutes.

FEMA declarations feed

sourcefeed-fema-disasters

Recent US disaster declarations (OpenFEMA), by state.

Detail

Route /api/fema-disasters lists recent disaster declarations (one per disaster number). They carry a state but no coordinates, so they appear on the tape only. This product uses the OpenFEMA API but is not endorsed by FEMA.

Sources

SourceRouteLicense
OpenFEMA Disaster Declarations Summaries (not endorsed by FEMA)/api/fema-disastersOpenFEMA terms of use

Technologies

  • OpenFEMA API v2

Known limits

  • Events carry no coordinates, so they appear on the tape only.
  • The dataset updates daily and covers US declarations only.
  • Not real time: data is polled every few minutes.

Fireballs feed

sourcefeed-meteors

Bright meteors (fireballs) detected by US government sensors, from NASA/JPL.

Detail

Route /api/meteors reads the JPL CNEOS Fireball API. Only fireballs are shown as events; asteroid close approaches are future predictions, not events, and are not used. JPL does not state terms for this API (unverified).

Sources

SourceRouteLicense
NASA/JPL CNEOS Fireball API/api/meteorsTerms not stated by JPL (unverified)

Technologies

  • JPL SBDB/CNEOS JSON

Known limits

  • Only fireballs are used; many have no recorded location and stay on the tape only.
  • Not real time: data is polled every few minutes.

Travel advisories feed

sourcefeed-advisories

Countries with a high travel advisory: US level 3 or 4, or the FCDO advising against travel to the whole country.

Detail

The /api/travel-advisories route carries the US State Department and, as a second opinion, the UK FCDO (Open Government Licence v3.0). Only high advisories become events; the event time is the advisory's last update, and it stays in force afterwards.

Sources

SourceRouteLicense
U.S. State Department Travel Advisories + UK FCDO Foreign Travel Advice (OGL v3.0)/api/travel-advisoriesUS State Dept: terms not verified; UK FCDO: Open Government Licence v3.0

Technologies

  • State Dept RSS
  • GOV.UK Content API

Known limits

  • Advisories are standing states: the time is the last update, and the position is the country centroid (approximate).
  • Not real time: data is polled every few minutes.

Health notices feed (CDC)

sourcefeed-health-notices

CDC Travelers' Health notices at level 2 or higher (the CDC does not endorse this site).

Detail

The /api/health-notices route reads the CDC RSS. Levels 2 to 4 become events; the event time is the notice publication date, and it stays in force afterwards. Single-country notices get the country centroid position.

Sources

SourceRouteLicense
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement, content unaltered

Technologies

  • CDC Travelers' Health RSS

Known limits

  • CDC notices stay in force until withdrawn; the time is the publication date. The CDC does not endorse this site.
  • Not real time: data is polled every few minutes.

Radiation feed

sourcefeed-radiation

Ambient radiation readings at warning or danger level (Safecast; EPA RadNet when switched on).

Detail

Route /api/radiation aggregates Safecast (citizen network, CC0) into 0.5° cells and, with the non-commercial flag, EPA RadNet. Only readings ≥ 500 nSv/h, or stations twice in a row above double their own 30-day median, become events; normal background never reaches the tape.

Sources

SourceRouteLicense
Safecast (CC0, citizen network) + U.S. EPA RadNet (when switched on)/api/radiationSafecast: CC0; EPA RadNet: commercial use not confirmed (behind RADAR_ENABLE_NONCOMMERCIAL)

Technologies

  • Safecast measurements JSON
  • EPA RadNet CSV

Known limits

  • The citizen network (Safecast) is not official; RadNet only appears with the non-commercial flag. Normal readings produce no events.
  • Not real time: data is polled every few minutes.

Navigational warnings feed (NGA MSI)

sourcefeed-maritime-warnings

NGA navigational warnings in force (NAVAREA IV and XII, HYDROLANT, HYDROPAC, HYDROARC); NGA does not endorse this product.

Detail

The /api/maritime-warnings route reads NGA Maritime Safety Information every 30 min. Each warning in force with an issue date becomes an event (the time is the issue time; it stays in force until cancelled); an undated warning stays only in the route list. The position is the first coordinate quoted in the text. With a stale feed (newest warning older than 7 days) no event comes in and the feed does not count as live.

Sources

SourceRouteLicense
NGA Maritime Safety Information — broadcast navigational warnings in force (not endorsed by NGA)/api/maritime-warningsUS government work, no copyright claimed; non-endorsement disclaimer required; NGA name/seal never implies endorsement (DM-18)

Technologies

  • NGA MSI broadcast-warn JSON
  • DMS position parsing

Known limits

  • Data from NGA Maritime Safety Information: this product has not been approved by NGA, and NGA does not endorse it nor answer for the accuracy of the data.
  • Active navigational warnings stopped being published in 05/2024; the feed is shown as outdated.
  • Not real time: data is polled every few minutes.

Conflict airspace feed (EASA + FAA)

sourcefeed-airspace

EASA conflict-zone bulletins (CZIB) and FAA temporary flight restrictions (TFR).

Detail

The /api/airspace route reads the EASA CZIB list and the FAA TFR list. Each bulletin becomes an event of the Airspace restrictions layer; a bulletin about one country is placed at the center of that country (approximate), a regional one has no position. Each half counts only when the route read it: a half that is down never shows as "no bulletins".

Sources

SourceRouteLicense
EASA Conflict Zone Information Bulletins (CZIB) — not endorsed by EASA/api/airspaceEU reuse policy (Decision 2011/833/EU): reuse with attribution; EASA CZIB
FAA Temporary Flight Restrictions (TFR list) — not endorsed by the FAA/api/airspaceUS Government public domain

Technologies

  • EASA CZIB table
  • FAA TFR list JSON

Known limits

  • CZIB are placed at the center of the country (approximate); FAA TFR carry no coordinates and stay on the tape only.
  • Not real time: data is polled every few minutes.

US airport delays feed (FAA)

sourcefeed-airport-delays

Delays, ground stops and closures at US airports, from the FAA National Airspace System Status.

Detail

The /api/airport-delays route reads the FAA NAS Status every 5 min. Each airport and type becomes an event; an airport outside the local airport table stays on the tape without a position. Informational, not for flight planning.

Sources

SourceRouteLicense
FAA National Airspace System Status — not for flight planning/api/airport-delaysUS Government public domain

Technologies

  • FAA NAS Status XML

Known limits

  • US airports only; informational, not for flight planning.
  • Not real time: data is polled every few minutes.

Nuclear sites at risk feed

sourcefeed-nuclear

Publicly declared nuclear sites flagged for seismic risk or inside an active conflict zone.

Detail

The /api/infrastructure route serves a curated list of declared sites with a USGS overlay (M4.5+ quake within 150 km in the last 24 h). Only sites flagged SEISMIC RISK or Active Conflict Zone become events; operational sites are background.

Sources

SourceRouteLicense
Curated list of publicly declared nuclear sites (IAEA, national regulators, operators)/api/infrastructureMIT (repositorio METAQUANTICS)
USGS Earthquake Hazards Program (M4.5+ overlay within 150 km of a site)/api/infrastructureUS Government public domain

Technologies

  • Curated site list
  • USGS GeoJSON

Known limits

  • Only sites flagged for seismic risk or in an active conflict zone appear; it is not a full site list.
  • Not real time: data is polled every few minutes.

Brazil election count feed (TSE)

sourcefeed-elections

National count of the Brazilian presidential runoff, from the TSE.

Detail

The /api/elections/br route reads the TSE results. One national event shows the leader and the share of the count; with no count yet there is no event, and a tie at the top picks no leader. Not affiliated with or endorsed by the TSE.

Sources

SourceRouteLicense
Tribunal Superior Eleitoral (TSE) — election results (not affiliated with or endorsed by the TSE)/api/elections/brBrazilian government open data (TSE electoral results: public information, Lei 12.527/2011); host-specific reuse terms not located in automated reading; human review pending

Technologies

  • TSE results JSON

Known limits

  • National count only (the TSE national file), never a sum of the states; the official result is the one the TSE publishes.
  • Not real time: data is polled every few minutes.

Sanctions overlay

sourceoverlay-sanctions

OFAC SDN list records by country, painted on the globe (aggregates only, no names).

Detail

Reads /api/sanctions (official Sanctions List Service CSVs, 6 h cache) once per Live session and paints Natural Earth borders in 5 count classes. It adds no events to the Tape and raises no alerts. Click a country for its count.

Sources

SourceRouteLicense
U.S. Treasury OFAC — Sanctions List Service (SDN list, aggregates by country only)/api/sanctionsUS government work (17 USC 105); terms not located, human review pending

Technologies

  • OFAC SDN CSV (aggregates)
  • GeoJSON fill layer
  • Natural Earth 1:50m

Known limits

  • Globe only (no Tape events, no alerts); aggregates by country, loaded once per session. A record's country (address/flag) does not indicate nationality or guilt.

layer (103)

NameSourceSummary
EarthquakesThis layer is backed by a real data route.
VolcanoesThis layer is backed by a real data route.
HurricanesThis layer is backed by a real data route.
TsunamisThis layer is backed by a real data route.
TornadoesThis layer is backed by a real data route.
FloodsThis layer is backed by a real data route.
Satellite Fires (FIRMS)This layer is backed by a real data route.
Heat/ColdThis layer is backed by a real data route.
Dust StormsThis layer is backed by a real data route.
Military AirThis layer is backed by a real data route.
BombersThis layer is backed by a real data route.
Conflicts
  • OSINT RSS headlines per conflict zone /api/conflicts
This layer is backed by a real data route.
Airstrikes
  • OSINT RSS headlines per conflict zone /api/conflicts
This layer is backed by a real data route.
Protests/UnrestThis layer is backed by a real data route.
Terrorism Intel
  • OSINT RSS headlines per conflict zone /api/conflicts
This layer is backed by a real data route.
SanctionsThis layer is backed by a real data route.
AdvisoriesThis layer is backed by a real data route.
ElectionsThis layer is backed by a real data route.
Siege & Blockade
  • OSINT RSS headlines per conflict zone /api/conflicts
This layer is backed by a real data route.
Arms Embargo
  • OSINT RSS headlines per conflict zone /api/conflicts
This layer is backed by a real data route.
NuclearThis layer is backed by a real data route.
RadiationThis layer is backed by a real data route.
Outbreaks (WHO/HealthMap/CDC)This layer is backed by a real data route.
FEMA DisastersThis layer is backed by a real data route.
Maritime WarningsThis layer is backed by a real data route.
TFRsThis layer is backed by a real data route.
Airport DisruptionsThis layer is backed by a real data route.
Meteors / NEOsThis layer is backed by a real data route.
Space Weather AlertsThis layer is backed by a real data route.
NewsThis layer is backed by a real data route.

Rules and limits

What the module promises about data honesty, licenses and restrictions, and what is still marked as coming soon.

  • It is not video

    World Live is a live view of OSINT events (globe plus tape). There is no video streaming.

  • Layers: real, adapter, coming soon

    Of 103 layers, 30 have real data through a feed, 3 are pluggable social adapters (off) and 70 are coming soon. Nothing is simulated.

  • X, Bluesky and Truth Social: coming soon

    The social columns are adapters that start disabled and with an honest empty state: there is no licensed source (the X API is paid, Truth Social has no public API).

  • Third-party basemap (Esri)

    The globe themes use Esri raster basemaps, whose terms of use require attribution. Check the Esri terms before any commercial offering (open decision).

  • Simple, documented priority rules

    URGENT or ROUTINE comes from simple, documented rules (the original does not expose its formula). Every non-visual layer can raise alerts, and audio always starts muted.

  • Approximate and unverified

    News and conflict headlines are classified by keyword and geocoded approximately. Weather, space weather and FEMA carry no coordinates and appear only on the tape.

Decisions

Decisions recorded in the clone register for this module (text in Portuguese, as written in the repository).

IDDecisionReasonCost if wrong
D-W-01World Live não é vídeo: é uma visão ao vivo de eventos OSINT (Globo + Fita). Colunas X Posts / Bluesky Posts / Trump Truths nascem como adaptadores plugáveis desligados (src/lib/live/sources.ts), com estado vazio honesto na UI. [INFERIDO: não há fonte licenciada; X API é paga, Truth Social não tem API pública.]D-10 (fontes zona-cinza desligadas por padrão) e licença das fontes.Ligar uma fonte licenciada depois = registrar um adaptador + yaml em registry/sources.
D-W-02Globo com a projeção globe do maplibre-gl (sem globe.gl/three); basemaps raster por tema (Night/Dark Minimal/Hologram = Esri Dark Gray; Blue Marble = Esri Imagery; Topology = Esri Topo; Water = Esri Ocean). Tiles raster da CARTO foram descartados: trazem marca d'água "API KEY REQUIRED" (observado no original e aqui). Contagens das cenas (15/9, 11/9, 11/6, 0/0) respeitadas; os ids exatos que o relatório não lista (ex.: 10ª camada da War Room = Sanctions) são [INFERIDO].Sem dependência nova; mesmo padrão de worker/CSP do MetaquanticsMap.Trocar basemap = editar src/lib/live/globe.ts.
D-W-03Camadas alertáveis = todas as não-VISUAL (o original só lista as LIVE na aba Alertas, mas as cenas têm alertas em camadas sem a tag, ex.: terremotos) [INFERIDO]. Entregam dados as camadas ligadas a um feed Live (src/lib/live/feeds.ts): /api/conflicts, gdelt-events, earthquakes, fires, news, flights, weather, space-weather e, desde a revisão final, /api/tsunamis (boletins NTWC/PTWC, com epicentro), /api/hurricanes (NHC, com posição; a camada Furacões também recebe os alertas de ciclone sem coordenadas de /api/weather), /api/fema-disasters (declarações por estado, sem coordenadas, só Fita) e /api/meteors (só bólidos; aproximações de asteroides são previsões futuras, não eventos). Rotas que existem mas não são fluxo de eventos ficam "em breve" com o motivo exato: /api/refugees (estatística anual por país de origem) e /api/wastewater (agregado semanal por patógeno) não têm instante/local de evento; /api/satellites (posições orbitais calculadas, milhares de pontos) e /api/maritime (posições AIS e portos estáticos) são retratos de posição, não eventos, e não foram ligados nesta rodada. /api/ooni-censorship permanece fora: dados CC BY-NC-SA (uso não comercial) e a rota passa a ter marcadoDado falso é pior que lacuna; a alegação antiga "só 8 rotas" era falsa e foi corrigida.Integrar uma fonte = adicionar feed em layers.ts + normalizador + doc em element-docs.ts.
D-W-04Prioridade URGENT/ROUTINE por regras simples e documentadas: ataque aéreo e terrorismo (conflitos, por palavra-chave strike/terror), GDELT quad 4 (conflito material) com Goldstein ≤ -8 [INFERIDO], terremoto M6+/tsunami, boletim de tsunami Watch/Warning sem nota de "sem perigo", furacão ou tempestade ≥ 64 kt, aeronave militar, severidade alta no clima, foguete; EPM = eventos vistos pela 1ª vez no último minuto; KEPT/SEEN = passam nos filtros / acervo [INFERIDO a partir do original]. Clima, clima espacial e FEMA não trazem coordenadas na rota: aparecem só na Fita.O original não expõe a fórmula.Ajustar regras em src/lib/live/normalize.ts.
D-W-05Config persistida em localStorage (zod, SSR-safe) atrás de LiveSettingsRepository; áudio sintetizado com WebAudio, sempre inicia mudo e só toca após gesto do usuário; sem paywall.O original grava em /api/live/settings [INFERIDO]; aqui não há conta.Trocar por API/Supabase = nova implementação da interface.
D-W-06Configuração tolerante e limites na entrada: o schema zod usa .catch por campo e saneia listas (ids de camada desconhecidos/renomeados são descartados; termos cortados em 80 caracteres e listas em 30), então um campo ruim reseta só ele e nunca apaga a configuração salva; só version errada ou blob que não é objeto voltam ao default. A UI aplica o mesmo limite (clampTerms) antes de gravar.Antes, 1 termo longo ou 31 palavras zeravam camadas, alertas, cena e tema em silêncio.Trocar a política = editar settings.ts.
D-W-07Deduplicação por título só em feeds de texto (news, conflicts); fogos, GDELT, sismos, voos, boletins etc. usam só o id. Callouts: nada é anunciado na primeira resposta de cada feed (acervo de até 24 h), só eventos dos últimos 30 min, e a Fita não enfileira alertas (sair do Globo limpa a fila) [INFERIDO]. O callout sai da tela após um tempo (9 s; 15 s se escolhido pelo usuário) e o globo volta a girar. A imagem de "telemetria visual" só aparece para coordenada exata (geo === 'exact').Títulos como "Fire detection (FRP 0.5 MW)" colidem por acaso e escondiam focos reais; imagem z15 de um centróide de país é enganosa.Ajustar em events.ts, LiveShell.tsx, GlobeView.tsx.

Read from docs/clone/decisoes.md at build time. Text in Portuguese.

Module

World Map and Cartographer

The Console map: layers, map types, projections and the Cartographer (points, lines and areas), on MapLibre with native GeoJSON sources.

Open module
  • 181documented elements
  • 141layers
  • 88with real data
  • 53coming soon

Elements

Generated from the module element registry (the same one behind the tooltips): what each element is, where the data comes from, which technologies it uses and its known limits.

control (17)

Layers

controlmap-layers

Catalogue of the 102 map layers in 9 categories (the 98 observed in the original plus Indices and Overlays). Only layers with a real data source can be switched on.

Detail

Opens the MAP LAYERS panel: search, category tabs with active/total counts, Select All / Clear All and one chip per layer. Choices are saved in this browser. Layers marked "coming soon" have no data source wired yet and stay disabled — nothing is simulated.

Sources

No external source: computed in the app.

Technologies

  • MapLibre GL JS 6.7.0
  • Radix Tabs
  • localStorage + zod

Draw (Cartographer)

controlmap-draw

Shows the vertical drawing toolbar: distance, circle, range rings, sector, polygon, rectangle, polyline, bearing, arrow, corridor and text.

Detail

Geodesic measurements (great circle) in km, mi or nmi. Drawings are saved in this browser through a repository interface; a server-side store per user is planned.

Sources

No external source: computed in the app.

Technologies

  • MapLibre GL JS 6.7.0
  • src/lib/geo.ts
  • reducer puro

Known limits

  • Saved only in this browser for now.

Embed

controlmap-embed

Generates an <iframe> snippet of this map (layers, window and framing as they are now) to paste into another site, with a live preview.

Detail

The embed is read-only: no toolbar, drawing or filters. It needs the server flag EMBED_ENABLED, and layers whose source license does not allow it are left out and listed with the reason.

Sources

No external source: computed in the app.

Technologies

  • MapLibre GL JS 6.7.0
  • src/lib/embed/
  • <iframe>

Known limits

  • Off by default (EMBED_ENABLED); the embedding site must be allowed by EMBED_FRAME_ANCESTORS; up to 8 layers.

Jump

controlmap-jump

Flies the map to one of 22 regions or to a country.

Detail

Regions use a bounding box; countries use an approximate centroid. Country names come from the browser locale data.

Sources

SourceRouteLicense
Country centroids (src/lib/countryCentroids.ts)—not verified
Intl.DisplayNames (browser CLDR)—not verified

Technologies

  • MapLibre GL JS 6.7.0
  • flyTo / fitBounds

Known limits

  • Region list reconstructed (names not captured from the original).
  • Country list covers ~120 ISO codes (original lists 198).

Sat Photo

controlmap-sat-photo

Overlays yesterday’s true-colour satellite mosaic (NASA MODIS Terra) on the basemap.

Detail

Daily global mosaic from NASA GIBS, public open data. Resolution is about 250 m, so it blurs past zoom 9; clouds are real.

Sources

SourceRouteLicense
NASA EOSDIS GIBS—NASA open data (no restrictions)

Technologies

  • MapLibre GL JS 6.7.0
  • raster tiles (WMTS)

Known limits

  • Daily mosaic from the previous day.
  • Limited maximum zoom.

Time filter

controlmap-time

Limits time-stamped layers (clock icon) to the last hour … all data.

Detail

Applies only to layers marked with the clock and only to points that carry a timestamp. Points without a timestamp are kept. Most sources only publish the last 24 hours, so wider windows show the same data.

Sources

No external source: computed in the app.

Technologies

  • filterByTime

Known limits

  • Time filter applies only to time-stamped points.

Map type

controlmap-type

Chooses the basemap (CARTO, OpenFreeMap, METAQUANTICS style) and the projection.

Detail

Free basemaps are enabled; Esri basemaps need an Esri API key and appear as API KEY REQUIRED. Each basemap keeps its own attribution.

Sources

SourceRouteLicense
CARTO basemaps—CARTO terms + ODbL (OSM)
OpenFreeMap—Free, no key; data ODbL (OpenStreetMap)
Esri ArcGIS basemaps—Requires ArcGIS API key + Esri terms

Technologies

  • MapLibre GL JS 6.7.0

Known limits

  • Some options need an API key.

Projection

controlmap-projection

Mercator or 3D globe.

Detail

MapLibre GL 6 implements Mercator and globe. Equal Earth, Robinson and Mollweide are not supported by the renderer and are marked coming soon.

Sources

No external source: computed in the app.

Technologies

  • MapLibre GL JS 6.7.0
  • setProjection

Known limits

  • Equal Earth, Robinson and Mollweide are not supported by MapLibre.

Coordinates

controlmap-coords

Cursor position in decimal degrees and degrees-minutes-seconds (WGS84).

Detail

Updates as the pointer moves over the map. Longitude is normalised to ±180°.

Sources

No external source: computed in the app.

Technologies

  • formatDecimal / formatDms

Layer card ("i")

controlmap-info-card

What the layer shows, source and license, freshness, limits and current state, opened from the chip "i".

Detail

License comes from the public source list (sources.public.generated.json) and state from the feed status; extra routes of the same layer (e.g. NHC tracks) show their own state. When the registry is private (production) the card says so instead of guessing.

Sources

No external source: computed in the app.

Technologies

  • MapLibre GL JS 6.7.0
  • sources.public.generated.json (licencas)
  • useFeedStatus

Known limits

  • Server-side cache: positions may be a few seconds to minutes old.

Legend

controlmap-legend

Colours and symbols of the layers that are on, including choropleth bands and the "no data" hatch.

Detail

Built from the layer catalog (colour tokens of the design system), so it follows Style Studio. Layers that are off do not appear.

Sources

No external source: computed in the app.

Technologies

  • MapLibre GL JS 6.7.0
  • layer-catalog (cores por token)

Map context menu

controlmap-context-menu

Right click, long press or the Menu key on the map: open the country in Stress, create an alert here or open OSINT with this point.

Detail

The country comes from the point-in-polygon of the Natural Earth boundaries; outside a country only coordinate actions are shown. The menu only opens on the map itself (never over panels).

Sources

SourceRouteLicense
Natural Earth 1:50m Admin 0 - Countries (/data/countries.geojson)—Public domain (Natural Earth)

Technologies

  • MapLibre GL JS 6.7.0
  • Radix ContextMenu (shadcn/ui)
  • redutor puro (toque, teclado, mouse)

Known limits

  • De facto boundaries (Natural Earth); not a position on disputed territories.

Layer presets

controlmap-presets

Switch on a set of layers at once: Mission presets or presets you saved.

Detail

Only layers change (deck, window and region stay). Your presets are kept in this browser; layers still coming soon are skipped.

Sources

No external source: computed in the app.

Technologies

  • src/lib/ops/map/presets.ts
  • Missões
  • localStorage

Known limits

  • Saved only in this browser for now.

Undo

controlcarto-undo

Removes the last point of the drawing in progress, or the last finished drawing.

Detail

Shortcut: Backspace while drawing.

Sources

No external source: computed in the app.

Technologies

  • reducer puro

Cancel

controlcarto-cancel

Discards the drawing in progress and leaves the tool.

Detail

Shortcut: Esc. Finished drawings are kept.

Sources

No external source: computed in the app.

Technologies

  • reducer puro

Unit

controlcarto-unit

Unit for every measurement label: kilometres, miles or nautical miles.

Detail

1 mi = 1.609344 km; 1 nmi = 1.852 km. Labels of existing drawings update immediately.

Sources

No external source: computed in the app.

Technologies

  • km / mi / nmi

Clear drawings

controlcarto-clear

Removes every finished drawing from the map and from this browser.

Detail

Asks for confirmation first; Undo restores the cleared drawings until you finish a new one.

Sources

No external source: computed in the app.

Technologies

  • reducer puro

Known limits

  • Saved only in this browser for now.

layer (141)

NameSourceSummary
EarthquakesEarthquakes M2.5+ from the last 24 hours (USGS).
Weather RadarLatest global precipitation radar frame (RainViewer).
VolcanoesOpen volcanic events tracked by NASA EONET.
HurricanesTropical cyclones (GDACS, NASA EONET, NWS) and, in NHC basins, past track, forecast track and cone of uncertainty.
TsunamisEarthquakes flagged by USGS as tsunami-relevant.
LandslidesOpen landslide events from NASA EONET.
Satellite Fires (NASA FIRMS)Active fire detections from the last 24 hours (NASA FIRMS VIIRS/MODIS).
TornadoesTornado warnings and watches (NOAA NWS).
FloodsFlood events and alerts (GDACS, NWS).
Heat/ColdHeat alerts (NWS, GDACS).
Dust StormsDust storm alerts (NWS).
GDACS alertsDisaster alerts of every type (floods, cyclones, earthquakes, volcanoes, wildfires, droughts) from GDACS, as published.
Military AirMilitary aircraft broadcasting ADS-B (adsb.fi military feed + OpenSky), clustered, with a 30-minute trail per aircraft.
BombersMilitary aircraft that the Live classifies as bombers (B-52, B-1, B-2, Tu-95, Tu-160, H-6...), at the position the ADS-B feeds report.
Military Airspace (US)US Special Use Airspace charted by the FAA: restricted, prohibited, warning and alert areas, MOAs and national security areas. Static list.
ConflictsKnown conflict zones plus geolocated news events.
Curated hotspots
  • METAQUANTICS curated hotspots (derived: conflicts feed + news feed; own zones and bands, method v1) /api/hotspots
Tension zones chosen by METAQUANTICS, each with a level from 1 to 5 computed from current conflicts and headlines of the last 24 h.
AdvisoriesTravel advisories by country: US State Department (levels 1 to 4) and, as a second opinion, the UK FCDO.
Net OutagesCountry-level internet outages from the last 24 hours (IODA).
SanctionsOFAC (US) SDN list records by country: the darker, the more records. Aggregates only, no names.
AirstrikesHeadlines about air, missile and drone strikes, placed where the news feed geolocates them.
Protests/UnrestProtests reported by news worldwide (GDELT), grouped into clusters that split as you zoom in.
Terrorism IntelHeadlines that mention terrorism, suicide bombings, hostages or jihadist groups, placed where the news feed geolocates them.
ElectionsWho leads Brazil's 2026 presidential election (2nd round) in each state (UF), coloured by the candidate's position in the national total. States with no count yet are hatched.
Cyber Threats (C2)Botnet command-and-control (C2) servers listed by abuse.ch Feodo Tracker, placed in the country that hosts them.
GPS jamming (inferred)Cells of 2° where at least 3 aircraft report a degraded position accuracy (NACp 4 or less), a probable sign of GPS interference. An inference from ADS-B, not a confirmation.
UN peacekeeping missionsHeadquarters of the UN peacekeeping operations that are active, with the area, the start year and the Security Council resolution that created or continued each one.
UCDP conflict eventsOrganised-violence events from the UCDP Georeferenced Event Dataset (latest release plus candidate events), with location, type of violence, sides and deaths. The same file as the Conflicts layer of the Global menu.
RefugeesDisplacement flows: arcs from the origin country to the main asylum countries, thicker where the volume is larger (UNHCR).
UNHCR PresenceWhere UNHCR (the UN Refugee Agency) has an office: one dot per open office, with its name, city, country and type.
NuclearNuclear power plants and facilities, flagged when a M4.5+ quake is within 150 km.
RadiationAmbient radiation dose rate (nSv/h): Safecast (citizen network) and, when switched on, EPA RadNet (US).
COVID-19 TrackerPrimary care sentinel SARS-CoV-2 positivity per EU/EEA country in the latest reported week (ECDC ERVISS), at the country centroid.
OutbreaksCDC Travelers' Health notices by country (level 1 to 4) in force now.
FEMA Disaster DeclarationsDisaster declarations of the US Federal Emergency Management Agency, one dot per declaration at the population center of the state.
Enrichment Facilities
  • Curated list of declared uranium enrichment and reprocessing sites (METAQUANTICS; per-site primary source: IAEA, national regulator or operator) /api/infrastructure
  • USGS Earthquake Hazards Program /api/earthquakes
Declared uranium enrichment and spent-fuel reprocessing sites, each linked to its primary source.
FlightsCivil aircraft positions (commercial, private, business jets) via ADS-B.
Vessels (AIS)Ship positions received over AIS.
Tankers (live)Only the oil and chemical tankers (AIS ship types 80 to 89) among the live vessels of the AIS feed.
Sub CablesSubmarine telecom cable routes.
Chokepoints
  • METAQUANTICS chokepoint status (derived: conflict RSS + AIS + NGA MSI navigational warnings, not endorsed by NGA; IMF PortWatch transits when the non-commercial flag is on — Source: International Monetary Fund, PortWatch; editorial threat level as context only) /api/chokepoints
Strategic maritime chokepoints colored by band, with a 0-100 score computed from observed signals.
TFRsCountries with an EASA Conflict Zone Information Bulletin (CZIB) in force, coloured by the level the bulletin declares, plus FAA Temporary Flight Restrictions that carry a coordinate.
Global Airports
  • METAQUANTICS airport table (src/lib/airports.ts)
About 350 major airports (IATA/ICAO).
Emerg. SquawksAircraft squawking 7500, 7600 or 7700.
HelicoptersHelicopters broadcasting ADS-B.
Global Ports (NGA WPI)About 2,950 world ports and harbours from the NGA World Port Index, with country, harbour size and harbour type.
Maritime WarningsNGA navigational warnings in force (NAVAREA IV and XII, HYDROLANT, HYDROPAC, HYDROARC), at the first position quoted in the text.
Airport Delays (US)Ground stops, ground delay programs, arrival/departure delays and closures at US airports, as the FAA publishes them, colored by severity (1-5).
ISS TrackerCurrent position of the International Space Station.
SatellitesSatellite sub-points propagated from CelesTrak TLEs.
Nighttime LightsVIIRS Black Marble night lights composite (NASA).
SpaceportsLaunch sites listed in the GCAT catalogue (active and historic), as a static list. It is not a launch schedule.
Live Cameras
  • Public camera networks (DOTs, cities, webcams) — license not reviewed /api/cctv
Public cameras (traffic, cities, webcams) as clustered markers; a click offers the Live Cameras widget.
Power PlantsAbout 35,000 power plants worldwide, with primary fuel and installed capacity (WRI Global Power Plant Database v1.3.0, 2021 snapshot).
Clean energy plantsOnly the renewable plants (hydro, solar, wind, geothermal, biomass, wave and tidal) from the WRI Global Power Plant Database: the same file as the Power plants layer.
Stress by Country (choropleth)Colours each country by its Stress band (Low to Severe); countries without a reading are hatched as "no data".
Convergence
  • METAQUANTICS convergence detector (derived: conflicts, GDELT, ADS-B, AIS, USGS, FIRMS, NHC, Safecast) /api/convergence
Components of events within 110 km of each other where 3+ distinct domains co-occur within 24 h; same calculation as the Convergence widget.
Correlation
  • METAQUANTICS correlation engine (derived: 3 declarative adapters over 16 app feeds) /api/correlation
One point per correlation card (force posture, escalation, cascade) at the centroid of its signals; same calculation as the Correlation widgets.
Country BordersCountry outlines using Natural Earth DE FACTO boundaries (disputed borders policy: not a position on sovereignty); the country picked in the global Region·Country filter is highlighted.
Day / NightShades the part of the Earth where the Sun is below the horizon.
Chokepoint Labels
  • METAQUANTICS chokepoint status (derived: conflict RSS + AIS + NGA MSI navigational warnings, not endorsed by NGA; IMF PortWatch transits when the non-commercial flag is on — Source: International Monetary Fund, PortWatch; editorial threat level as context only) /api/chokepoints
Names of the maritime chokepoints, shown from zoom 3.
Disputed AreasDisputed and breakaway areas as classified by Natural Earth (1:10m), drawn as outlines; the label comes from Natural Earth, not from an editorial position of METAQUANTICS.
AI data centersEpoch AI · frontier AI data centers
Cloud regionsAWS, Azure, Google Cloud, Oracle · public regions
Tech company headquartersWikidata · major tech companies
Accelerators & incubatorsWikidata · startup accelerators and incubators
Tech eventsconfs.tech · in-person conferences in the next 12 months
Stock exchangesWikidata · world stock exchanges
Central banksWikidata · central banks and monetary unions
Financial centresCurated (WFE/World Bank) · world financial centres
Commodity hubsCurated · commodity exchanges and physical hubs
Economic centresCurated · largest metropolitan economies
Commodity portsCurated · world energy and bulk ports
Military basesWikidata · notable military bases
Mining areasMaus et al. (satellite, 2019) · areas of 5 km² or more
Mineral processing plantsUSGS · smelters, refineries, steel, cement and fertilizer plants
Oil and gas pipelinesOpenStreetMap · major oil and gas pipelines
Energy storage facilitiesOpenStreetMap · oil, gas and LNG terminals
Trade routesCurated · major sea lanes through the chokepoints
Weather warnings (Europe)MeteoAlarm · yellow, orange and red warnings
Weather alerts (Canada)ECCC · warnings, watches and statements in force
Fuel shortage signalsGDELT · news from the last 72 h, by country
Temperature anomalyNASA GISTEMP · last year vs. 1951–1980
Humanitarian risk (INFORM)INFORM (European Commission) · score 0 to 10
Country resilienceMETAQUANTICS index (World Bank) · 0 to 100
Happiness (life evaluation)World Happiness Report / Gallup · 0 to 10
Critical minerals (top-3 producer)USGS · in how many critical minerals the country is top 3

basemap (12)

NameSourceSummary
METAQUANTICS style (vector)The project’s own dark vector style (same family as the main METAQUANTICS map).
CARTO Dark MatterCARTO vector (GL) basemap, loaded directly from the CARTO CDN.
CARTO PositronCARTO vector (GL) basemap, loaded directly from the CARTO CDN.
CARTO VoyagerCARTO vector (GL) basemap, loaded directly from the CARTO CDN.
OpenFreeMap PositronOpenFreeMap vector style — free, no API key.
OpenFreeMap BrightOpenFreeMap vector style — free, no API key.
OpenFreeMap LibertyOpenFreeMap vector style — free, no API key.
Esri Dark Gray CanvasEsri basemap — requires an Esri API key (not configured).
Satellite (Esri)Esri basemap — requires an Esri API key (not configured).
Terrain (Esri)Esri basemap — requires an Esri API key (not configured).
Physical (Esri)Esri basemap — requires an Esri API key (not configured).
Nat Geo (Esri)Esri basemap — requires an Esri API key (not configured).

tool (11)

Rules and limits

What the module promises about data honesty, licenses and restrictions, and what is still marked as coming soon.

  • Layers: real or coming soon

    88 of 141 layers have real data; the other 53 are listed as coming soon. A layer only becomes real when a data source actually exists.

  • Layer licenses

    Submarine cables (TeleGeography) are a snapshot of unverifiable licence, for non-commercial internal use only, and need a visible credit. RainViewer, CARTO and Esri require attribution. These layers must be removed or licensed before a commercial offering.

  • Projections

    Mercator and the 3D globe are supported. Equal Earth, Robinson and Mollweide are not supported by MapLibre and are listed as coming soon.

  • Polling per route, not per layer

    Several layers share one route (flights, weather, maritime, satellites). Heavy layers are uniformly sampled; the time filter only applies to layers with a clock and to points that carry a timestamp.

  • Cartographer is local

    Geometry is pure and computed in the browser; drawings stay in the browser and are not sent anywhere.

Decisions

Decisions recorded in the clone register for this module (text in Portuguese, as written in the repository).

IDDecisionReasonCost if wrong
D-M-01Mapa do Console em módulo próprio (src/components/ops/map/*, src/lib/ops/map/*) com MapLibre 6.7 + fontes/camadas GeoJSON nativas; sem deck.gl (nenhuma dependência nova). Mesmo worker self-hosted (/vendor/maplibre/<versão>) e escada de contextos WebGL do mapa principal; MetaquanticsMap.tsx, map-palette.ts e o pipeline WebGL não foram tocados. Cores das camadas = variáveis CSS do design system lidas em runtime.AGENTS.md §6; volume atual (≤6 mil pontos/camada após amostragem) roda bem em circle layers.Adicionar @deck.gl/mapbox como overlay se surgir camada de densidade/heatmap pesada (checar MIT + bundle).
D-M-02Catálogo das 98 camadas (layer-catalog.ts) fiel à lista [OBSERVADO] (nomes, 7 categorias 23/10/16/17/17/4/11, 15 com relógio, 5 ativas por padrão). status: real só com fonte real no repo (26 camadas); o resto é soon, chip desabilitado, sem dado falso. Ícones [INFERIDO]: VIP Aircraft = plane, Nighttime Lights = globe. Derivadas declaradas como tal: Tsunamis (flag tsunami da USGS), Helicópteros/Squawks (campos de /api/flights), Furacões/Tornados/Enchentes/Calor/Poeira (classificador do widget de clima), Vulcões (EONET via /api/fires).Regra de honestidade do prompt.Cada camada soon vira real ao ganhar fonte licenciada (só editar a entrada do catálogo + parser).
D-M-03"Ir para": 22 regiões reconstruídas [INFERIDO] (nomes/limites do original não foram coletados) + países de countryCentroids.ts (~120 ISO alfa-2, nomes via Intl.DisplayNames); o original lista 198 países.Sem lista observada; sem dataset de centroides completo no repo.Trocar a lista quando a investigação capturar /api/map/jump-locations.
D-M-04Basemaps: CARTO Dark Matter/Positron/Voyager usam os estilos GL vetoriais públicos (os tiles raster dark_all/light_all/voyager devolvem marca d'água "API KEY REQUIRED" — verificado em 2026-10-03); OpenFreeMap Positron/Bright/Liberty (sem chave, ODbL); "Estilo METAQUANTICS" = public/dark-matter-style.json. Esri Dark Gray/Satellite/Terrain/Physical/Nat Geo aparecem como CHAVE DE API NECESSÁRIA (desabilitados). Tiles vão direto do navegador (CSP default-src https:), não pelo /api/proxy-tiles (que no dev server estava devolvendo 500 por timeout de saída). Como globals.css esconde .maplibregl-ctrl-attrib no app inteiro, o mapa mostra a atribuição exigida num rodapé próprio. CARTO: uso gratuito só não comercial/baixo volume — revisar antes de produção comercial.Licença/termos de cada provedor.Mudar para PMTiles próprio (Protomaps, ADR-0012) ou chave CARTO/Esri.
D-M-05Projeções: Mercator e Globo 3D (setProjection, MapLibre 6). Equal Earth, Robinson e Mollweide não são suportadas pelo MapLibre → listadas como "em breve".Limitação do renderizador.Reprojetar raster no servidor ou outro renderizador (fora de escopo).
D-M-06Desempenho: polling por rota (não por camada; várias camadas compartilham /api/flights, /api/weather, /api/maritime, /api/satellites), mesmas regras do useFeed (pausa com aba oculta, sem sobreposição, timeout). Amostragem uniforme: voos/navios 6.000, satélites 4.000, focos FIRMS 3.000. Filtro de tempo só em camadas com relógio e só em pontos com carimbo (sem carimbo = mantido)./api/satellites devolve ~18 mil objetos; renderizar tudo trava cards pequenos.Clustering/heatmap (D-M-01) se a amostragem esconder sinal relevante.
D-M-07Cartographer: geometria pura em src/lib/ops/map/cartographer/* (reusa src/lib/geo.ts; draw.ts/DrawingToolbar/DrawHud não foram editados — o modelo de 4 modos não cobre as 11 ferramentas). Persistência atrás de DrawingRepository: hoje LocalStorageDrawingRepository (zod, SSR-safe); depois SupabaseDrawingRepository (ops_drawings, por usuário/deck, RLS) com a mesma interface. Sem paywall. Localizar/Rastrear/Inteligência = stubs com tooltip "em breve".Item 3 do prompt; sem backend de desenho no repo.Implementar o repositório Supabase (migração SQL + RLS, D-04).
D-M-08Radar de chuva via API pública do RainViewer (quadro passado mais recente, zoom máx. 7, atribuição visível); Foto de satélite e Luzes noturnas via NASA GIBS (MODIS Terra True Color do dia anterior; VIIRS Black Marble 2016), dados abertos da NASA. TFRs / espaço aéreo: não há fonte no repo → "em breve".Fontes públicas sem chave; termos do RainViewer limitam uso comercial.Trocar o radar por fonte institucional (NOAA MRMS/OPERA) se necessário.
D-M-09Revisão final do mapa (correções I-1..I-9). (a) Pontos clicados em cópias do mundo são normalizados para [-180, 180] antes de guardar (normalizePoint/lngLat.wrap()), e o parser de desenhos normaliza longitudes fora da faixa em vez de descartar a forma (recupera desenhos antigos). (b) A geometria do Cartographer desembrulha longitudes (|Δlng| ≤ 180 entre pontos) e fecha pelo polo anéis que contêm um polo (safeRing, só em cartographer/geometry.ts; src/lib/geo.ts intocado por ser compartilhado com draw.ts); área de círculo em lng 179 = área em lng 0. (c) Preferências e desenhos ficam num store único por módulo (shared-store.ts, useSyncExternalStore + evento storage), compartilhado entre o card da grade e o mapa maximizado; o polling dos feeds continua duplicado enquanto os dois estão montados. (d) "Limpar" pede confirmação (AlertDialog, z-[700]) e Desfazer restaura até a próxima forma concluída. (e) Trocar de ferramenta conclui o rascunho que já pode ser concluído; rascunho incompleto leva os pontos para a nova ferramenta quando cabem.Review final (.superpowers/sdd/final-review/map-findings.md).Persistência no Supabase (D-M-07) troca só o repositório por trás do store.
D-M-10Falha de basemap: o mapa libera a troca assim que existe (não só após o 1º style.load); falha do style.json (AJAXError com a URL do estilo, antes do style.load) mostra aviso e cai na reserva sem gravar a preferência: METAQUANTICS (estilo servido pelo app) e depois OpenFreeMap Positron; re-escolher o basemap que falhou tenta de novo. Perda de contexto WebGL mostra aviso com "Tentar de novo" (recria o mapa).Spinner eterno sem saída quando CARTO/OFM caem ou estamos offline.Timeout explícito para estilo que nunca responde (hoje só a troca manual resolve).
D-M-11Cabos submarinos (TeleGeography, CC BY-NC-SA 3.0) — nota de supersessão (2026-10-12, Onda 9, O9-A.3, D-20): o repositório de origem foi removido e a licença do arquivo atual não é verificável; o texto registrado passou a "subscriber-only database; snapshot of unverifiable licence; non-commercial internal use only" (classe non_commercial) e o rodapé do mapa agora diz só "© TeleGeography"; a restrição comercial abaixo continua valendo. Texto original: crédito "© TeleGeography (CC BY-NC-SA 3.0)" no rodapé de atribuição quando a camada está ligada (o rodapé quebra linha em vez de cortar "© CARTO"); o tooltip da camada mostra "uso comercial restrito" como primeira limitação. NC conflita com implantação comercial: a camada precisa sair (ou ser licenciada) antes de oferta comercial — mesma ressalva de CARTO (D-M-04) e RainViewer (D-M-08). TFRs continuavam "em breve" (I-8, decisão do controlador); a camada tfrs virou real na Onda 9 (O9-B.2).Cláusula BY exige crédito visível; NC proíbe uso comercial.Trocar por dataset de cabos com licença aberta comercial ou licenciar com a TeleGeography.

Read from docs/clone/decisoes.md at build time. Text in Portuguese.

Module

Local

One country with data layers over it: Brazil (default, with the TSE Elections layer) and the other Latin American countries. Shares point layers, indicators and map styles with Global, at the national scope.

Open module
  • 15documented elements
  • 25countries with a local view

Elements

Generated from the module element registry (the same one behind the tooltips): what each element is, where the data comes from, which technologies it uses and its known limits.

menu (1)

Local menu

menumenu

A view of one country (Brazil or another Latin American country) with data layers over states and municipalities, sibling of the Global menu.

Detail

A flat map drawn from the country mesh (in Brazil, the official IBGE mesh: 27 states and 5,571 municipalities), with satellite, relief or night lights underneath when chosen. The Layers tree is the same as in Global; the chosen theme (Overview by default) turns on its layers and Elections opens the TSE panels.

Sources

SourceRouteLicense
IBGE — API de Malhas Geográficas v3 (states and municipalities)—IBGE open data, free use with source citation

Technologies

  • MapLibre GL
  • static JSON (public/data/br)

panel (3)

Layers (Local)

panellayers

The same Layers tree as in Global, with the Local catalog filtered by theme: Data, Indicators, Elections and Boundaries.

Detail

Opens from the layers icon in the side bar and shows only the layers of the active theme. Election offices and indicators are exclusive (one at a time, like the tabs); States, Municipalities and Labels add up freely.

Sources

SourceRouteLicense
IBGE — API de Malhas Geográficas v3 (states and municipalities)—IBGE open data, free use with source citation
TSE — Divulgação de Resultados (eleições 6257 e 6259, 1º turno de 2026)—Public data (Brazilian Access to Information Law, Lei 12.527/2011); attribution to TSE

Technologies

  • LayerPanel (tree)

By region

panelregions

Who leads for president in each region and abroad, with the difference to the national result.

Detail

Sum of the states of each region (North, Northeast, Center-West, Southeast and South) and the abroad total published by TSE. Clicking Abroad opens the abroad card.

Sources

SourceRouteLicense
TSE — Divulgação de Resultados (eleições 6257 e 6259, 1º turno de 2026)—Public data (Brazilian Access to Information Law, Lei 12.527/2011); attribution to TSE

Latest updates

panelupdates

When each race was decided (elected or runoff), at the time TSE totaled that area.

Detail

Uses the totaling date and time of each TSE file. Clicking a row selects the state on the map.

Sources

SourceRouteLicense
TSE — Divulgação de Resultados (eleições 6257 e 6259, 1º turno de 2026)—Public data (Brazilian Access to Information Law, Lei 12.527/2011); attribution to TSE

Known limits

  • TSE does not publish the count over time: there is no timeline of the count, only the totaling time of each race.

control (11)

Country

controlcountry

Picks the local view's country: Brazil (default) or one of the other 24 Latin American countries.

Detail

Sits left of the search field in the bottom dock. Each country brings its mesh (states and the second level with its local name) and initial frame; only Brazil has the Elections layer.

Sources

SourceRouteLicense
IBGE — API de Malhas Geográficas v3 (states and municipalities)—IBGE open data, free use with source citation

Map style

controlbasemap

Switches the map background (flat, satellite, relief or night lights) while the state, municipality and border mesh stays on top.

Detail

Selector next to the country, in the bottom dock. Over imagery the result colors become slightly more transparent and the lines turn light; in relief, terrain shading is drawn over the colors.

Sources

SourceRouteLicense
Esri World Imagery (satellite basemap, same tiles as the Orbit SAT view)—Esri terms of use; attribution Esri, Maxar, Earthstar Geographics
Terrarium elevation tiles (AWS Open Data / Mapzen)—Open data, attribution per tilezen/joerd
NASA GIBS — VIIRS Black Marble night lights—Public domain (NASA); attribution NASA EOSDIS GIBS

Technologies

  • MapLibre GL (raster, hillshade)

Local themes

controlthemes

Thematic sub-tabs of Local: Overview, Society and economy, Infrastructure and energy, Risks and events and Elections.

Detail

They sit in the bottom dock, above the search field. Each theme turns on only its layers from the catalog shared with Global and shows, in the right column, their legend with the count for the country. Overview is the default: every point layer for the country plus one per-state indicator (poverty). Elections, Brazil only, turns the President office on when entered and off when left; the panels and the election data only load there.

Sources

No external source: computed in the app.

Technologies

  • SwitcherSubmenuBar
  • src/lib/geo-layers (shared catalog)

Elections: President

controlel-presidente

First-round result for president in Brazil, by state, by municipality and abroad.

Detail

A card with the top two, the gap, the other candidates, valid votes, turnout and blank and null votes; a by-region panel and the map in the Municipalities, States, Margin and Candidate modes.

Sources

SourceRouteLicense
TSE — Divulgação de Resultados (eleições 6257 e 6259, 1º turno de 2026)—Public data (Brazilian Access to Information Law, Lei 12.527/2011); attribution to TSE
TSE — official candidate photos (loaded from resultados.tse.jus.br by the browser)—Public data published by TSE; attribution to TSE

Technologies

  • MapLibre GL
  • static JSON (public/data/br)

Known limits

  • First-round snapshot built from TSE at build time; it does not refresh by itself (the runoff needs the generator to run again).
  • Photos are loaded from the TSE site by the browser; without network, initials show instead.

Elections: Governors

controlel-governador

The 27 governor races: elected in the first round and states with a runoff.

Detail

Score of elected and runoffs, a grid of states in the leader party color and the closest races. Clicking a state opens all of its candidates.

Sources

SourceRouteLicense
TSE — Divulgação de Resultados (eleições 6257 e 6259, 1º turno de 2026)—Public data (Brazilian Access to Information Law, Lei 12.527/2011); attribution to TSE
TSE — official candidate photos (loaded from resultados.tse.jus.br by the browser)—Public data published by TSE; attribution to TSE

Technologies

  • MapLibre GL
  • static JSON (public/data/br)

Known limits

  • First-round snapshot built from TSE at build time; it does not refresh by itself (the runoff needs the generator to run again).

Elections: Senate

controlel-senado

The 54 Senate seats up for election (two per state), with the elected and the race for the 2nd seat.

Detail

Hemicycle of this election’s seats by bloc, seats by party, a grid of states and the races for the 2nd seat, closest first.

Sources

SourceRouteLicense
TSE — Divulgação de Resultados (eleições 6257 e 6259, 1º turno de 2026)—Public data (Brazilian Access to Information Law, Lei 12.527/2011); attribution to TSE
TSE — official candidate photos (loaded from resultados.tse.jus.br by the browser)—Public data published by TSE; attribution to TSE

Technologies

  • MapLibre GL
  • static JSON (public/data/br)

Known limits

  • First-round snapshot built from TSE at build time; it does not refresh by itself (the runoff needs the generator to run again).
  • The hemicycle shows only the 54 seats of this election, not the full 81-seat Senate.

Elections: Deputies

controlel-deputados

Two layers, Federal deputies (Chamber, 513) and State deputies (Assemblies and District Chamber, 1,059): elected by party and most voted.

Detail

Federal and State tabs, a hemicycle by bloc, the largest caucuses and the most voted in Brazil; clicking a state shows only its own. The map colors each state by the party with the most elected.

Sources

SourceRouteLicense
TSE — Divulgação de Resultados (eleições 6257 e 6259, 1º turno de 2026)—Public data (Brazilian Access to Information Law, Lei 12.527/2011); attribution to TSE

Technologies

  • MapLibre GL
  • static JSON (public/data/br)

Known limits

  • First-round snapshot built from TSE at build time; it does not refresh by itself (the runoff needs the generator to run again).
  • The Left, Centrão and Right blocs are an METAQUANTICS editorial grouping, not an official classification.

Elections: Mayors and City councillors

controlel-municipais

Municipal election offices, already in the layer catalog and the office bar.

Detail

When switched on, the map stays flat and the panel says municipal results are coming soon.

Sources

No external source: computed in the app.

Known limits

  • No data generated yet: only the 2026 general election (1st round) was imported from TSE.

Map coloring modes

controlmodes

Municipalities, States, Margin and Candidate change how the map is colored.

Detail

Municipalities and States color by the leader with the color strength set by the margin (up to 10, 25, 45 or more points); Margin compares only the national top two; Candidate shows the vote of one chosen name.

Sources

SourceRouteLicense
TSE — Divulgação de Resultados (eleições 6257 e 6259, 1º turno de 2026)—Public data (Brazilian Access to Information Law, Lei 12.527/2011); attribution to TSE
IBGE — API de Malhas Geográficas v3 (states and municipalities)—IBGE open data, free use with source citation

Technologies

  • MapLibre GL
  • static JSON (public/data/br)

Known limits

  • Party colors are editorial, only to tell parties apart on the map.

Boundaries (States, Municipalities, Labels)

controlboundaries

State outlines, the municipal mesh and each state label with the result of the active layer.

Detail

IBGE minimum-quality mesh, rounded to 0.001° by scripts/gen-br-local.mjs. Small states (RN, PB, PE, AL, SE, ES and RJ) get boxes to the right of the coast.

Sources

SourceRouteLicense
IBGE — API de Malhas Geográficas v3 (states and municipalities)—IBGE open data, free use with source citation

Technologies

  • MapLibre GL
  • static JSON (public/data/br)

Known limits

  • Mesh simplified by IBGE and quantized: small gaps between neighboring municipalities may show at high zoom.

Rules and limits

What the module promises about data honesty, licenses and restrictions, and what is still marked as coming soon.

  • Official results only

    Votes, status (elected, runoff) and times come from the TSE results release, downloaded by scripts/gen-eleicoes-2026.mjs. Nothing is estimated or projected.

  • A snapshot, not a live feed

    The files are a snapshot built at build time (first round, 100% of sections). The official source does not publish the count over time, so there is no timeline of the count.

  • Colors and blocs are editorial

    Party colors and the Left, Centrão and Right blocs of the hemicycle are METAQUANTICS choices to read the map; they are not an official classification.

  • Photos loaded from TSE

    Candidate photos are read by the browser straight from the TSE results site. Without network or photo, the initials show instead.

  • Brazil and Latin America

    The selector lists Brazil (default, the only one with Elections) and the other 24 Latin American countries, with geoBoundaries and Natural Earth meshes generated by scripts/gen-latam-local.mjs.

Decisions

No decisions registered for this module.

Module

Shared layers (Global and Local)

The Global and Local menus are siblings: they use the same catalog of point layers, indicators and map styles, each in its own scope. What belongs to the world stays in Global; what belongs to a country (state, municipality) stays in Local.

Open module
  • 89documented elements
  • 73point layers
  • 9indicators
  • 9municipal indicators
  • 4map styles

Elements

Generated from the module element registry (the same one behind the tooltips): what each element is, where the data comes from, which technologies it uses and its known limits.

menu (1)

Sibling menus Global and Local

menusiblings

Global and Local share layers, indicators and styles; each shows its own scope.

Detail

The "Global data"/"Country data" and "Indicators" groups of the Layers tree and the style selector in the dock come from the same pieces (src/components/geo-layers). The rule is in AGENTS.md, section "Sibling menus Global and Local".

Sources

No external source: computed in the app.

Technologies

  • src/lib/geo-layers
  • src/components/geo-layers

panel (2)

Municipal fact sheet

panelficha-municipal

Panel with a municipality's 9 indicators and the provenance of each, exportable as CSV and JSON.

Detail

Opens when you click a municipality with the municipal indicator on, or from search. Shows definition, period, unit, original value and state, source, license, method and limitations. The export also carries the published file, the generator manifest sha256 and the collection date. A file that fails shows as a load failure without hiding the others.

Open on screen /local

Sources

SourceRouteLicense
IBGE — SIDRA (4714, 5938, 6803, 6805, 9543), PIB dos Municípios 2023, Estimativas 2026, Áreas Territoriais 2025scripts/gen-br-municipal.mjsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table/product, period and source URL

Technologies

  • src/lib/local/municipal-sheet.ts
  • src/components/local/MunicipalSheet.tsx
  • CSV/JSON export

Known limits

  • IBGE data under CC BY 4.0 (released by the owner on 2026-10-14): attribution is required; cite IBGE, table, period and source URL.
  • Six indicators come from the 2022 Census (a census, not annual); GDP and GDP per capita are 2023, at current prices, and per capita GDP is not income.

Layer databases

panelbancos

The generated files behind the shared layers, with the script that builds each one.

Detail

public/data/latam/<country>/adm1|adm2.geojson (meshes, gen-latam-local); public/data/{latam,global}/pontos/*.json (points, gen-latam-pontos); public/data/{latam,global}/indicadores.json (indicators, gen-indicadores). Each source is registered in Connectors.

Sources

SourceRouteLicense
geoBoundaries (gbOpen/gbHumanitarian) + Natural Earth admin-1scripts/gen-latam-local.mjsCC BY / ODbL / public domain, per country
GeoNames cities15000scripts/gen-latam-pontos.mjsCC BY 4.0
World Bank — Global Subnational Atlas of Povertyscripts/gen-indicadores.mjsCC BY 4.0
World Bank — World Development Indicatorsscripts/gen-indicadores.mjsCC BY 4.0

Technologies

  • scripts/gen-latam-local.mjs
  • scripts/gen-latam-pontos.mjs
  • scripts/gen-indicadores.mjs

Known limits

  • Meshes from ODbL or CC BY-SA sources require the same license on the derived file.

control (86)

Cities and capitals

controldt-cidades

National and state capitals and cities, sized by population.

Detail

Global: capitals and cities of 1 million people or more. Local: capitals and cities from 15k people in the chosen country.

Sources

SourceRouteLicense
GeoNames cities15000scripts/gen-latam-pontos.mjsCC BY 4.0

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Airports

controldt-aeroportos

Airports with their IATA code and city.

Detail

Global: large airports only. Local: large and medium. Closed ones are left out.

Sources

SourceRouteLicense
OurAirportsscripts/gen-latam-pontos.mjsPublic domain

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Seaports

controldt-portos

Seaports by size.

Detail

Global: medium and large ports. Local: every port of the country in the World Port Index.

Sources

SourceRouteLicense
NGA World Port Index (Pub. 150)scripts/gen-latam-pontos.mjsPublic domain (US Government)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Power plants

controldt-usinas

Plants by fuel, sized by installed capacity (MW).

Detail

Global: plants from 300 MW. Local: all the country’s plants in the WRI database.

Sources

SourceRouteLicense
WRI Global Power Plant Database v1.3scripts/gen-latam-pontos.mjsCC BY 4.0

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • The WRI database has been frozen since 2021.

Volcanoes

controldt-vulcoes

Volcanoes with their number of significant eruptions and the latest one.

Detail

Position, elevation and morphology from NOAA; the history counts eruptions from the significant-eruptions database.

Sources

SourceRouteLicense
NOAA NCEI Volcano Locations and Significant Eruptionsscripts/gen-latam-pontos.mjsPublic domain (US Government)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Historic earthquakes

controldt-sismos

Large earthquakes since 1900, with magnitude, year and depth.

Detail

Global: magnitude 7 or more. Local: magnitude 6 or more in the country (or off its coast, up to about 250 km).

Sources

SourceRouteLicense
USGS ComCat (M6+ since 1900)scripts/gen-latam-pontos.mjsPublic domain (US Government)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Organized violence

controldt-conflitos

Lethal organized-violence events, with deaths, date and parties.

Detail

UCDP types: state-based, between armed groups and against civilians. Global: since 2025 (and 2024 with 5+ deaths). Local: since 2023.

Sources

SourceRouteLicense
UCDP Georeferenced Event Dataset 25.1 + Candidatescripts/gen-latam-pontos.mjsCC BY 4.0

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Generated snapshot; run the script again to refresh it.

Dead or missing migrants

controldt-migrantes

Incidents with migrant deaths or disappearances, with route and cause.

Detail

Global: since 2023. Local: since 2014, inside the country or at sea up to about 30 km.

Sources

SourceRouteLicense
IOM Missing Migrants Projectscripts/gen-latam-pontos.mjsCC BY 4.0

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Generated snapshot; run the script again to refresh it.

Active fires and earthquakes (24 h)

controldt-ao-vivo

Live layers for the last 24 hours, reusing Global’s routes.

Detail

In Local, points are clipped to the chosen country’s frame.

Sources

SourceRouteLicense
NASA FIRMS (VIIRS 24 h)/api/firesNASA open data
USGS earthquake feed (24 h)/api/earthquakesPublic domain (US Government)

Technologies

  • MapLibre GL
  • /api/fires
  • /api/earthquakes

INPE heat spots (10 min)

controldt-focos-inpe

Satellite detections from the last hour, refreshed every 10 minutes, over South America.

Detail

Local only. Reads the 6 latest 10-minute INPE files (1 hour), without repeats, up to 5,000 spots, and clips them to the chosen country’s frame. Attribution is mandatory: Source: INPE, Programa Queimadas. A source outage shows as "no data", never as zero spots.

Sources

SourceRouteLicense
INPE — Programa Queimadas (focos de calor, 10 min)/api/br/queimadasDados abertos para uso publico (INPE); atribuicao obrigatoria: Fonte: INPE, Programa Queimadas

Technologies

  • MapLibre GL
  • /api/br/queimadas
  • src/lib/feeds/br

Known limits

  • Covers South America, not only Brazil. A geostationary satellite repeats the same spot every 10 minutes: each point is a detection, not a fire. The 10-minute file has no municipality, state or fire-risk field.

Twins of Console layers

controldt-console

Clean energy, tankers, disease outbreaks, spaceports, hotspots and GPS interference: the same data as the Console layers, as points.

Detail

Clean energy filters the renewable plants of the WRI file. The others read the same route or file as the Console layer, with the same parser; the live ones are re-read at the Console layer interval. GPS interference only appears in Global (ADS-B is non-commercial and Local has no commercial-license gate); the others, hotspots included, also appear in Local, cut by the country frame.

Sources

SourceRouteLicense
WRI Global Power Plant Database v1.3scripts/gen-latam-pontos.mjsCC BY 4.0
AISStream.io (AIS, ship types 80-89)/api/maritimeUnverified: pending human review (see Connectors)
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesUS public-domain government content; credit CDC, no endorsement
GCAT — General Catalog of Artificial Space Objects, launch sites (J. McDowell)/data/spaceports.jsonCC BY 4.0
METAQUANTICS curated hotspots (conflicts + news, method v1)/api/hotspotsnot verified
adsb.fi Open Data + OpenSky Network (ADS-B NACp)/api/flightsNon-commercial use

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)

Known limits

  • Same source, licence and limitations as the twin Console layer (see its "i" card).
  • Zones and cells (hotspots, GPS) become one point at the center; the full area is in the Console.
  • GPS interference inherits the non-commercial licence of ADS-B and is switched off on a commercial installation.

Country indexes

controlix-pais

Country instability (Geopolitics score) and sanctions (OFAC) painting the countries of the world map.

Detail

Global only: the same readings as the Geopolitics and Sanctions layers of the Console. One at a time, like the indicators; a country without a reading has no color.

Sources

SourceRouteLicense
METAQUANTICS Geopolitics country score (9 open feeds, computed in the browser)src/components/geopolitics/CountryReadingsProbe.tsxnot verified
OFAC Specially Designated Nationals list (U.S. Treasury), aggregated by country/api/sanctionsPublic domain (US Government)

Technologies

  • MapLibre GL (fill)
  • src/components/geo-layers/GlobalGeoLayers.tsx
  • src/lib/ops/map/sanctions-layer.ts

Known limits

  • Same source, licence and limitations as the twin Console layer (see its "i" card).
  • Country index: there is no state cut, so it does not exist in Local.

AI data centers

controldt-datacenters-ia

Epoch AI · frontier AI data centers

Detail

Epoch AI · frontier AI data centers

Sources

SourceRouteLicense
Epoch AI — AI data centers—CC BY 4.0 (Epoch AI); coordinates geocoded with OpenStreetMap/Nominatim (ODbL 1.0)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • The Epoch CSV has no coordinates: addresses are geocoded with OpenStreetMap and, when only the city matches, the detail says "approx. location". No sites in Latin America.

Cloud regions

controldt-regioes-nuvem

AWS, Azure, Google Cloud, Oracle · public regions

Detail

Cloud regions in Latin America

Sources

SourceRouteLicense
METAQUANTICS — tabela de regioes de nuvem (AWS, Azure, Google Cloud, Oracle)—MIT (own METAQUANTICS table; public facts from the providers; approximate city coordinates)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Approximate city coordinates (or state, when the provider only gives the state); dedicated, government and unpublished regions are left out.

Tech company headquarters

controldt-sedes-tech

Wikidata · major tech companies

Detail

Wikidata · regional tech companies

Sources

SourceRouteLicense
Wikidata (SPARQL)—CC0 1.0 (Wikidata)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Wikidata cut by notability (sitelinks); sector chosen by priority when a company has several; only 44% have an employee count.

Accelerators & incubators

controldt-aceleradoras

Wikidata · startup accelerators and incubators

Detail

Wikidata · startup accelerators and incubators

Sources

SourceRouteLicense
Wikidata (SPARQL)—CC0 1.0 (Wikidata)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Sparse, uneven Wikidata coverage (92 with coordinates; none in Latin America).

Tech events

controldt-eventos-tech

confs.tech · in-person conferences in the next 12 months

Detail

confs.tech · conferences in Latin America

Sources

SourceRouteLicense
confs.tech — conference-data (GitHub)—MIT (tech-conferences/conference-data); GeoNames coordinates (CC BY 4.0)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Dated, community-sourced snapshot (it ages); the point is the city centre and 31% of events were dropped for not matching the catalogue cities.

Stock exchanges

controldt-bolsas

Wikidata · world stock exchanges

Detail

Wikidata · Latin American exchanges

Sources

SourceRouteLicense
Wikidata (SPARQL)—CC0 1.0 (Wikidata)
Wikipedia — List of major stock exchanges (capitalizacao, fatos citados da WFE)—CC BY-SA 4.0 (Wikipedia text; only factual figures are used)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Wikidata carries some noise from the MIC register; market cap only exists for the largest exchanges and multinational groups get zero.

Central banks

controldt-bancos-centrais

Wikidata · central banks and monetary unions

Detail

Wikidata · Latin American central banks

Sources

SourceRouteLicense
Wikidata (SPARQL)—CC0 1.0 (Wikidata)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • One bank per country (the one with most Wikidata sitelinks); territorial monetary authorities are included.

Financial centres

controldt-centros-financeiros

Curated (WFE/World Bank) · world financial centres

Detail

Curated · Latin American financial centres

Sources

SourceRouteLicense
METAQUANTICS — tabelas curadas de financas e commodities—MIT (own METAQUANTICS tables with a citation per row); Wikidata coordinates (CC0 1.0); World Bank WDI GDP (CC BY 4.0)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Transparent rule, no proprietary ranking: "global" hosts an exchange above US$ 1 tn; "regional" hosts the main exchange of a top-50 GDP country.

Commodity hubs

controldt-hubs-commodities

Curated · commodity exchanges and physical hubs

Detail

Curated · Latin American commodity exchanges

Sources

SourceRouteLicense
METAQUANTICS — tabelas curadas de financas e commodities—MIT (own METAQUANTICS tables with a citation per row); Wikidata coordinates (CC0 1.0); World Bank WDI GDP (CC BY 4.0)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Curated list (28); some positions are the host city centre and some pins coincide in the same city.

Economic centres

controldt-centros-economicos

Curated · largest metropolitan economies

Detail

Curated · Latin American economic metros

Sources

SourceRouteLicense
METAQUANTICS — tabelas curadas de financas e commodities—MIT (own METAQUANTICS tables with a citation per row); Wikidata coordinates (CC0 1.0); World Bank WDI GDP (CC BY 4.0)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Approximate cut, not a ranking: there is no open global metro GDP dataset, so no GDP value is shown.

Commodity ports

controldt-portos-commodities

Curated · world energy and bulk ports

Detail

Curated · Latin American commodity ports

Sources

SourceRouteLicense
METAQUANTICS — tabelas curadas de financas e commodities—MIT (own METAQUANTICS tables with a citation per row); Wikidata coordinates (CC0 1.0); World Bank WDI GDP (CC BY 4.0)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Curated list (129 worldwide); some positions are the city, island or terminal, not the quay. Does not use WPI cargo fields (almost all "unknown").

Military bases

controldt-bases-militares

Wikidata · notable military bases

Detail

Wikidata · Latin American military bases

Sources

SourceRouteLicense
Wikidata (SPARQL)—CC0 1.0 (Wikidata)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Wikidata does not guarantee the base is active; coverage biased towards the US, Russia and the UK; cut by notability (3+ sitelinks).

Mining areas

controldt-minas

Maus et al. (satellite, 2019) · areas of 5 km² or more

Detail

Maus et al. · every mining area in the country

Sources

SourceRouteLicense
Maus et al. (2022) — Global-scale mining polygons v2 (PANGAEA)—CC BY-SA 4.0 (Maus et al., PANGAEA); the derived file keeps CC BY-SA 4.0
USGS NMIC — compilacoes regionais de instalacoes minerais—Public domain (US Government)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • 2019 footprints (CC BY-SA 4.0); one mine may have several polygons; name and commodity only come from the nearest USGS mine (a hint, not a registry).

Mineral processing plants

controldt-plantas-processamento

USGS · smelters, refineries, steel, cement and fertilizer plants

Detail

USGS · mineral plants in the country (2014 data)

Sources

SourceRouteLicense
USGS NMIC — compilacoes regionais de instalacoes minerais—Public domain (US Government)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Historical snapshot (2004 to 2014 depending on region) and without the US; generalised coordinates.

Oil and gas pipelines

controldt-gasodutos

OpenStreetMap · major oil and gas pipelines

Detail

OpenStreetMap · pipelines in the country

Sources

SourceRouteLicense
OpenStreetMap (via QLever osm-planet, Univ. Freiburg) — dutos e estocagem—ODbL 1.0 (OpenStreetMap contributors)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • OpenStreetMap coverage is uneven across countries; simplified geometry; does not say whether the pipeline is operating.

Energy storage facilities

controldt-estocagem

OpenStreetMap · oil, gas and LNG terminals

Detail

OpenStreetMap · storage terminals in the country

Sources

SourceRouteLicense
OpenStreetMap (via QLever osm-planet, Univ. Freiburg) — dutos e estocagem—ODbL 1.0 (OpenStreetMap contributors)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Sites aggregated from OpenStreetMap tanks; no stock level or capacity.

Trade routes

controldt-rotas-comerciais

Curated · major sea lanes through the chokepoints

Detail

Curated · routes touching Latin American ports

Sources

SourceRouteLicense
METAQUANTICS — rotas maritimas curadas—CC BY 4.0 (own METAQUANTICS work; schematic paths citing UNCTAD, EIA and ACP per route)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Approximate, illustrative path (not a ship track); flows cited from public sources per route.

Weather warnings (Europe)

controldt-alertas-europa

MeteoAlarm · yellow, orange and red warnings

Detail

MeteoAlarm · yellow, orange and red warnings

Sources

SourceRouteLicense
MeteoAlarm (EUMETNET)/api/alerts-europeCC BY 4.0 declared; additional terms pending human review

Technologies

  • MapLibre GL
  • /api/alerts-europe

Known limits

  • Only 8 countries publish a polygon in the feed: elsewhere warnings become one summary point per country at its centre. CC BY 4.0 licence with additional terms pending review.

Weather alerts (Canada)

controldt-alertas-canada

ECCC · warnings, watches and statements in force

Detail

ECCC · warnings, watches and statements in force

Sources

SourceRouteLicense
Environment and Climate Change Canada (MSC GeoMet)/api/alerts-canadaECCC Data Server End-use Licence

Technologies

  • MapLibre GL
  • /api/alerts-canada

Known limits

  • One point per forecast area (polygon centre); alert name and text unaltered, as the licence requires; provincial alerts (Alert Ready) are not included.

Fuel shortage signals

controldt-falta-combustivel

GDELT · news from the last 72 h, by country

Detail

GDELT · news from the last 72 h in the country

Sources

SourceRouteLicense
GDELT Project DOC 2.0/api/fuel-shortagesGDELT terms (free use with citation and link)

Technologies

  • MapLibre GL
  • /api/fuel-shortages

Known limits

  • News-derived signal (article count), not a confirmed shortage; country taken from the headline or the outlet; sample capped at 250 articles.

Brazil power plants (ANEEL)

controldt-usinas-aneel

ANEEL SIGA · plants of 1 MW or more

Detail

ANEEL SIGA · the country’s hydro, solar, wind, thermal and nuclear plants, with type, stage and capacity

Sources

SourceRouteLicense
ANEEL — Dados Abertos, SIGA (Sistema de Informações de Geração)scripts/gen-fontes-br.mjsODbL 1.0 (ANEEL Dados Abertos; the derived file keeps the ODbL)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam/pontos)
  • scripts/gen-fontes-br.mjs

Known limits

  • SIGA snapshot (date in the file). Only 1 MW or more: the distributed fleet of a few kW is left out (about 18 thousand of the 25 thousand records); 465 plants without coordinates were dropped. Capacity is the inspected figure (or the granted one when no inspected value exists). Owners and tax IDs are not read. The derived file keeps the ODbL 1.0. A plant may also appear in the WRI power plants layer.

Toll plazas (ANTT)

controldt-pedagios

ANTT · federal concession highways and monthly traffic volume

Detail

ANTT · toll plazas of the federal concessions, with the latest monthly volume

Sources

SourceRouteLicense
ANTT — Dados Abertos, praças de pedágio e volume de tráfegoscripts/gen-fontes-br.mjsCC BY (ANTT Dados Abertos)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam/pontos)
  • scripts/gen-fontes-br.mjs

Known limits

  • Plaza and volume are joined by name (the tables share no code): 257 of 267 volume series matched a plaza and 20 of the 277 plazas have no volume (free-flow tolling and validators). Volume adds every category, charging type and direction in the month shown on each point, in vehicles (not equivalent vehicles). Monthly snapshot.

Reservoirs (ONS)

controldt-reservatorios

ONS · power-system reservoirs and stored energy

Detail

ONS · reservoirs of the National Interconnected System, with the latest stored energy

Sources

SourceRouteLicense
ONS — Dados Abertos, reservatórios e energia armazenada por reservatórioscripts/gen-fontes-br.mjsCC BY (ONS Dados Abertos)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam/pontos)
  • scripts/gen-fontes-br.mjs

Known limits

  • Only 62 of the 162 reservoirs have stored energy in the source (run-of-river and plant-less ones do not): their pin shows no value, never a false 0. The percentage is stored energy over the reservoir’s own maximum on the latest date. Daily snapshot: the file keeps the date and is rewritten when the generator runs. The percentage can exceed 100% when the reservoir runs above its normal maximum level.

Protected areas (MMA)

controldt-unidades-conservacao

MMA CNUC · federal, state and municipal conservation units

Detail

MMA CNUC · centre of each conservation unit, with group, category, sphere and area

Sources

SourceRouteLicense
MMA — Cadastro Nacional de Unidades de Conservação (CNUC)scripts/gen-fontes-br.mjsCC BY (MMA Dados Abertos); the WDPA code column is never read (WDPA is a refused source)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam/pontos)
  • scripts/gen-fontes-br.mjs

Known limits

  • Each point is the centre of the unit’s largest polygon, not its outline (marine or very indented units may have the centre off dry land). CNUC boundaries from August 2025; the 2026 edition only circulates on an unstable link. Units without a polygon have no area. The registry’s WDPA code column is never read: WDPA is a refused source. The per-state indicator and the outlines were left for later.

UN peacekeeping missions

controldt-missoes-paz

Headquarters of the active UN peacekeeping operations

Detail

Headquarters of the active UN peacekeeping operations, with area, start year and Security Council resolution

Sources

SourceRouteLicense
UN Peacekeeping — active operations headquarters (curated by METAQUANTICS; not endorsed by the United Nations)scripts/gen-missoes-paz.mjsMIT (own METAQUANTICS table of public UN facts)

Technologies

  • MapLibre GL
  • static JSON (public/data/global/pontos)
  • src/lib/ops/map/peacekeeping.ts

Known limits

  • Hand-curated table in the repository (reference date in the file), not a live feed. The point marks the headquarters locality, not the mission area; placing a point is not a position on any territory’s status. Not endorsed by the UN.

Temperature anomaly

controlix-anomalia-clima

NASA GISTEMP · last year vs. 1951–1980

Detail

NASA GISTEMP · last year vs. 1951–1980

Sources

SourceRouteLicense
NASA GISS — GISTEMP v4—Public domain (NASA; GISS asks for citation)

Technologies

  • MapLibre GL (fill)
  • static JSON (public/data/global/indices)

Known limits

  • 2° grid with 1200 km smoothing: neighbouring countries look alike and uncertainty is higher where stations are sparse.

Humanitarian risk (INFORM)

controlix-risco-inform

INFORM (European Commission) · score 0 to 10

Detail

INFORM (European Commission) · score 0 to 10

Sources

SourceRouteLicense
Comissao Europeia (JRC) — INFORM Risk Index—CC BY 4.0 (European Commission, Joint Research Centre)

Technologies

  • MapLibre GL (fill)
  • static JSON (public/data/global/indices)

Known limits

  • Composite index (hazard, vulnerability and coping capacity); small territories have no value.

Country resilience

controlix-resiliencia

METAQUANTICS index (World Bank) · 0 to 100

Detail

METAQUANTICS index (World Bank) · 0 to 100

Technologies

  • MapLibre GL (fill)
  • static JSON (public/data/global/indices)

Known limits

  • Relative index (mean of percentiles of 8 components): a country can rise without improving if others worsen; it does not measure physical risk.

Happiness (life evaluation)

controlix-felicidade

World Happiness Report / Gallup · 0 to 10

Detail

World Happiness Report / Gallup · 0 to 10

Sources

SourceRouteLicense
World Happiness Report 2026 (Figura 2.1) / Gallup World Poll—No formal licence; citation required (WHR and Gallup); commercial use: human review pending

Technologies

  • MapLibre GL (fill)
  • static JSON (public/data/global/indices)

Known limits

  • No formal licence published: commercial use pending review; sample of about one thousand people per country and year.

Critical minerals (top-3 producer)

controlix-minerais-criticos

USGS · in how many critical minerals the country is top 3

Detail

USGS · in how many critical minerals the country is top 3

Sources

SourceRouteLicense
USGS — Mineral Commodity Summaries 2026—Public domain (US Government)

Technologies

  • MapLibre GL (fill)
  • static JSON (public/data/global/indices)

Known limits

  • 35 of the 60 minerals of the US list (2025) assessed; withheld production is not ranked; production columns vary by mineral.

Security, humanitarian and derived layers

controldt-seguranca

Conflict headlines, hotspots, travel advisories, internet outages, protests, malware C2, signal convergence and correlation, UNHCR offices, COVID-19 (EU/EEA) and nuclear and radiation sites: the same data as the Console layers, as points.

Detail

Each layer reads the same route or file as its Console twin, with the same parser; live ones are re-read at the Console interval. Conflict headlines, malware C2, nuclear, enrichment and radiation appear only in Local (Global already has them in its own tree); COVID-19 appears only in Global. Hotspots now appear in both. Protests, signal convergence and internet outages start off: they are heavy or have a licence pending. In Local they are clipped by the country frame.

Sources

SourceRouteLicense
Al Jazeera, NYT and BBC World RSS (conflict headlines)/api/conflictsUnverified press RSS (BBC: personal use only); human review pending
US State Department travel advisories + UK FCDO travel advice/api/travel-advisoriesUS public domain (State Dept); UK Open Government Licence v3.0 (FCDO)
IODA — Internet Outage Detection and Analysis (Georgia Tech)/api/radarUnverified: data policy not found, pending human review (see Connectors)
GDELT Project (events, CAMEO root code 14)/api/gdelt-eventsGDELT terms (free use with citation and link)
abuse.ch Feodo Tracker (botnet C2 blocklist)/api/cyber-attacksCC0 1.0
METAQUANTICS convergence and correlation (derived from the app feeds)/api/convergenceOwn work; inherits the licences of the feeds it reads
UNHCR GIS — presence of UNHCR offices/data/unhcr-offices.jsonCC BY 4.0 (UNHCR); not endorsed by UNHCR
ECDC ERVISS — SARS-CoV-2 sentinel positivity/api/ervissCC BY 4.0 (ECDC)
METAQUANTICS curated nuclear facility list + USGS earthquakes/api/infrastructureOwn work + public domain (US Government)
Safecast — ambient radiation (citizen network)/api/radiationCC0 1.0 (data and API; the site NC clause does not apply); EPA RadNet only behind the non-commercial flag

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)

Known limits

  • Same source, licence and limitations as the twin Console layer (see its "i" card).
  • Zones and cells (hotspots, GPS) become one point at the center; the full area is in the Console.
  • IODA (internet outages) has no verified licence: the layer starts off, shows "pending" and is blocked in a commercial installation.
  • Protests (GDELT) and convergence are heavy and share the GDELT quota with fuel shortages: they start off and load only when switched on.
  • Safecast is a citizen network with sparse coverage in Latin America: a missing reading is not zero radiation. Conflict headlines inherit the press RSS licence risk of the Global conflict zones.
  • ECDC ERVISS covers only EU/EEA countries (weekly data, not an event): the layer exists only in Global.

Hurricanes and tropical storms

controldt-furacoes

NOAA NHC active storms plus tropical alerts from GDACS and NASA EONET, as points. Global and Local.

Detail

Twin of the Console Hurricanes layer, points only: the tropical alerts of /api/weather and the current storm positions of the NHC (/api/hurricanes). Past track, forecast and cone are lines and polygons and are not drawn here. In Local the points are cut by the country frame (Caribbean, Mexico, Central America).

Sources

SourceRouteLicense
NOAA National Hurricane Center (CurrentStorms)/api/hurricanesPublic domain (US Government)
GDACS (UN / European Commission)/api/weatherUnverified: pending human review (see Connectors)
NASA EONET v3/api/weatherNASA open data

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)
  • /api/weather
  • /api/hurricanes

Known limits

  • Points only, no track or cone. The NHC covers the Atlantic and the eastern Pacific; elsewhere only the GDACS and EONET alerts appear. The GDACS term of use is still unverified in the registry: the source badge shows it as pending and commercial mode blocks the layer.

Tsunamis

controldt-tsunamis

USGS quakes with a tsunami flag plus NOAA tsunami center bulletins, as points. Global and Local.

Detail

Twin of the Console Tsunamis layer: the quakes of the last 24 hours that USGS flags for tsunami and the NTWC/PTWC bulletins that carry coordinates (/api/tsunamis). In Local the points are cut by the country frame (Chile, Peru, Ecuador and the Pacific coast).

Sources

SourceRouteLicense
USGS earthquake feed (24 h, tsunami flag)/api/earthquakesPublic domain (US Government)
NOAA/NWS Tsunami Warning Centers (NTWC/PTWC)/api/tsunamisUnverified: pending human review (see Connectors)

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)
  • /api/earthquakes
  • /api/tsunamis

Known limits

  • A flag or a bulletin is not a confirmed wave. A bulletin without coordinates is not drawn. The bulletin feed has an unverified term of use in the registry (pending badge; blocked in commercial mode).

Landslides

controldt-deslizamentos

NASA EONET open landslide events, as points. Local only.

Detail

Twin of the Console Landslides layer (parser weather-landslide over /api/weather), cut by the country frame. Global already has these events inside the Weather layer.

Sources

SourceRouteLicense
NASA EONET v3/api/weatherNASA open data

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)
  • /api/weather

Known limits

  • EONET lists only reported open events, a small sample of real occurrences; absence of a point is not absence of risk.

Floods

controldt-enchentes

GDACS and NASA EONET flood alerts, as points. Local only.

Detail

Twin of the Console Floods layer (parser weather-flood over /api/weather), cut by the country frame. Global already has these events inside the Weather layer.

Sources

SourceRouteLicense
GDACS (UN / European Commission)/api/weatherUnverified: pending human review (see Connectors)
NASA EONET v3/api/weatherNASA open data

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)
  • /api/weather

Known limits

  • The NWS alerts of that route cover only the United States, so in Brazil and Latin America the points come from GDACS and EONET only. The GDACS term of use is unverified in the registry (pending badge).

Heat and cold

controldt-calor-frio

GDACS and NASA EONET heat, cold and drought alerts, as points. Local only.

Detail

Twin of the Console Heat and cold layer (parser weather-heat over /api/weather), cut by the country frame. Global already has these events inside the Weather layer.

Sources

SourceRouteLicense
GDACS (UN / European Commission)/api/weatherUnverified: pending human review (see Connectors)
NASA EONET v3/api/weatherNASA open data

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)
  • /api/weather

Known limits

  • The NWS alerts of that route cover only the United States, so in Latin America the points come from GDACS and EONET only; few events are expected. The GDACS term of use is unverified in the registry (pending badge).

GDACS alerts

controldt-alertas-gdacs

All GDACS (UN / European Commission) alert types, as points. Local only.

Detail

Twin of the Console GDACS alerts layer (parser gdacs-alerts over the GDACS RSS served by /api/gdelt), cut by the country frame. Global already has these alerts in the Global incidents layer.

Sources

SourceRouteLicense
GDACS RSS (UN / European Commission), all alert types/api/gdeltUnverified: pending human review (see Connectors)

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)
  • /api/gdelt

Known limits

  • The RSS carries no date, so there is no time filter. The GDACS term of use is unverified in the registry: the layer starts off and stays pending until the license is confirmed.

Vessels (AIS, live)

controldt-navios-ais

Local menu only: every vessel the AISStream feed reports inside the chosen country, the same data as the Console layer.

Detail

Reads /api/maritime and parses it like the Console layer "vessels-ais"; the Local menu crops the points to the country frame. It starts off when you open the menu, because the feed needs a key and is heavy; switch it on in the Transport and logistics group. The Global menu already has its own ships layer.

Sources

SourceRouteLicense
AISStream.io (AIS)/api/maritimeUnverified: pending human review (see Connectors)

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)
  • /api/maritime

Known limits

  • Same source, licence and limitations as the twin Console layer (see its "i" card).
  • Needs the AISStream key; without it the layer shows "no data". AISStream publishes no terms we could check, so commercial use is pending human review. Terrestrial AIS only: far offshore the coverage thins out.

Chokepoints

controldt-estreitos

Local menu only: straits and canals inside the country frame, each with the 0-100 score of the METAQUANTICS chokepoint method.

Detail

Reads /api/chokepoints and parses it like the Console layer "chokepoints". The score is derived from conflict news, AIS traffic and NGA warnings; a chokepoint without a score is a plain reference point, never "normal". In Latin America the main one is the Panama Canal. The Global menu already has its own chokepoints layer.

Sources

SourceRouteLicense
METAQUANTICS chokepoints (derived: conflict RSS, AIS, NGA warnings, IMF PortWatch)/api/chokepointsnot verified
NGA Maritime Safety Information, NAVAREA warnings/api/maritime-warningsPublic domain (US Government)

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)
  • /api/chokepoints

Known limits

  • Same source, licence and limitations as the twin Console layer (see its "i" card).
  • Own work derived from sources with their own terms (NGA public domain; IMF PortWatch credit). Only the chokepoints inside the country frame appear, so most countries show none.

Navigation warnings

controldt-avisos-navegacao

NGA NAVAREA warnings that carry a position in the text, on both menus; the Local menu shows NAVAREA V (Brazil).

Detail

Reads /api/maritime-warnings and parses it like the Console layer "maritime-warnings". Only a warning whose text gives a coordinate becomes a point; the others stay out of the map. Each point shows the first lines of the warning, its NAVAREA number and the issuing authority. In the Local menu the points are cropped to the country frame, so Brazil shows the NAVAREA V warnings.

Sources

SourceRouteLicense
NGA Maritime Safety Information, NAVAREA warnings/api/maritime-warningsPublic domain (US Government)

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)
  • /api/maritime-warnings

Known limits

  • Same source, licence and limitations as the twin Console layer (see its "i" card).
  • Public domain (US Government, NGA). Warnings are in English and not translated; a warning without a coordinate in the text is not drawn. Not valid for navigation: use the official notice to mariners.

Emergency squawks

controldt-squawks

Aircraft broadcasting transponder code 7500 (hijack), 7600 (radio failure) or 7700 (general emergency), in the Global menu only.

Detail

Reads /api/flights and parses it like the Console layer "emergency-squawks". It starts off. The code can be set by mistake or during a test, so a point is a signal to check, not a confirmed emergency. Global menu only: the Local menu has no commercial-license gate, so this non-commercial layer is not offered there.

Sources

SourceRouteLicense
adsb.fi Open Data + OpenSky Network (ADS-B squawks 7500/7600/7700)/api/flightsNon-commercial use

Technologies

  • MapLibre GL
  • src/lib/ops/map/feeds.ts (parseLayer)
  • src/lib/geo-layers/points.ts (layerPoints)
  • /api/flights

Known limits

  • Same source, licence and limitations as the twin Console layer (see its "i" card).
  • The ADS-B data (adsb.fi and OpenSky) is non-commercial: the layer carries the non-commercial seal and is unavailable in a commercial installation. ADS-B coverage is weak in parts of Latin America.

Rain radar

controldt-radar-chuva

Latest precipitation radar frame from RainViewer, in Global and Local.

Detail

Raster tiles drawn on the map instance (like Relief and Night lights), under the pins. The public index is read again every 10 minutes. Off by default in both menus.

Sources

SourceRouteLicense
RainViewer — public weather maps API—Free for personal or educational use, attribution required; commercial use not confirmed

Technologies

  • MapLibre GL (raster)
  • src/lib/geo-layers/defs/geometrias.ts (RASTER_LAYERS)

Known limits

  • RainViewer terms allow personal or educational use; commercial use is not confirmed, so the layer is labelled and starts off.
  • Only where national radar networks share data: large parts of Latin America have no radar.

Cyclone tracks and cone

controldt-ciclones-trilhas

Past track, forecast track (up to 120 h) and cone of uncertainty of NHC storms.

Detail

Lines and cone outline from the extra route of the Console hurricanes layer. The storm points are a separate layer. In Local, only offered in countries of the NHC basins.

Sources

SourceRouteLicense
NOAA National Hurricane Center (track and cone)/api/hurricane-tracksPublic domain (US Government)

Technologies

  • MapLibre GL (line)
  • src/lib/geo-layers/defs/geometrias.ts (shapeItems)

Known limits

  • NHC covers the North Atlantic and East and Central Pacific only; other basins have no track.

Refugee flows

controldt-refugiados-fluxos

UNHCR flows from country of origin to country of asylum, as arcs; thickness follows the volume.

Detail

Same route and parser as the Console refugees layer. Global and Local. The route brings the 12 largest origins by refugees plus Venezuela always, because UNHCR counts most Venezuelans as other people in need of international protection (field oip), not as refugees; the arc volume sums refugees, asylum seekers and oip. In Local the cut puts the Venezuelan exodus first, then the arcs that leave or reach the country. Starts off.

Sources

SourceRouteLicense
UNHCR Refugee Data Finder/api/refugee-flowsCC BY 4.0 (UNHCR)

Technologies

  • MapLibre GL (line)
  • src/lib/geo-layers/defs/geometrias.ts (shapeItems)

Known limits

  • Arcs join country centroids: they show the pair, not the route or the place of arrival.

Disputed areas

controldt-areas-disputadas

Disputed and breakaway areas as Natural Earth classifies them, drawn as outlines.

Detail

Same file as the Console overlay. The names and notes are the source text; METAQUANTICS takes no position on any border.

Sources

SourceRouteLicense
Natural Earth 1:10m — Admin 0 Breakaway, Disputed Areasscripts/gen-disputed.mjsPublic domain (Natural Earth)

Technologies

  • MapLibre GL (line)
  • src/lib/geo-layers/defs/geometrias.ts (shapeItems)

Known limits

  • Natural Earth classification, not an editorial position; no border point of view is applied.

Coordinate grid

controldt-grade-coordenadas

Meridians and parallels: every 15° in Global and every 5° in Local.

Detail

Generated file in both cuts (scripts/gen-grade-coordenadas.mjs), the same grid as the Console layer.

Sources

SourceRouteLicense
METAQUANTICS — generated coordinate gridscripts/gen-grade-coordenadas.mjsMIT (METAQUANTICS repository)

Technologies

  • MapLibre GL (line)
  • static JSON (public/data/latam/linhas, public/data/global/linhas)

Known limits

  • Reference only: fixed spacing, no labels on the lines (the tooltip shows the degree).

Temperature anomaly by state

controlind-anomalia-clima

NASA GISTEMP land anomaly of the last year vs. 1951–1980, averaged by state.

Detail

Local only: the same series as the country index of Global, cut by state. Quintiles of the states of the chosen country.

Sources

SourceRouteLicense
NASA GISS — GISTEMP v4 (land, by state)—Public domain (NASA; GISS asks for citation)

Technologies

  • MapLibre GL (fill)
  • static JSON (public/data/latam/indices)

Known limits

  • State cut: Global keeps the country index of the same series.
  • 2° grid with 1200 km smoothing: neighbouring countries look alike and uncertainty is higher where stations are sparse.

Conflict-zone airspace

controlix-espaco-aereo

Countries with an EASA Conflict Zone Information Bulletin in force, by level.

Detail

Same route as the Console tfrs layer. Warning and information are two shades of the same alert token; a country without a bulletin stays without colour.

Sources

SourceRouteLicense
EASA — Conflict Zone Information Bulletins (CZIB)/api/airspaceEU reuse policy (Decision 2011/833/EU), attribution

Technologies

  • MapLibre GL (fill)
  • src/lib/ops/map/airspace-layer.ts
  • src/components/geo-layers/GlobalGeoLayers.tsx

Known limits

  • Global only: no bulletin covers Latin America.
  • FAA TFRs (United States only) carry no coordinates in the list, so they are not drawn.

Anti-personnel mines (Colombia)

controldt-co-minas-antipessoal

Local menu, Colombia only: anti-personnel mine events by municipality from 1990 to 2023, one point per municipality, off on entry.

Detail

The Presidency of Colombia publishes about 39 thousand events (accidents, suspected minefields, military demining operations, seizures). The generator groups them on the server by municipality, event type and year and keeps one point per municipality: the colour of the point is the most serious type present (accident, then suspected minefield, then demining or seizure only) and the size follows the total events. The tooltip lists the count by type, the year range and the peak year. The layer starts off when you enter the menu; turn it on under Conflict and security (Risks).

Sources

SourceRouteLicense
Presidencia de la República de Colombia — Eventos Minas Antipersonal (datos.gov.co sgp4-3e6k)scripts/gen-co-minas-antipessoal.mjsCC BY-SA 4.0 (derived data keeps CC BY-SA 4.0)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Meshes from ODbL or CC BY-SA sources require the same license on the derived file.
  • The coordinate is the municipal seat (the source field is named cabecera), never the event location. The set was last updated in January 2024 and ends in 2023. Most events are military demining operations, which measure clearance effort as much as contamination. CC BY-SA 4.0: the generated file keeps the same licence.

Massacres (Colombia)

controldt-co-masacres

Local menu, Colombia only: municipalities with massacres recorded since 2020, with cases and victims, off on entry.

Detail

The MDN Observatory publishes one record per massacre with the DANE municipality code. The generator adds cases and victims by municipality from 2020 on and draws the point at the municipality centre taken from the DANE DIVIPOLA table. The department indicator "Massacres by department" uses the same set for 2025. Both are aggregates: no victim is identified.

Sources

SourceRouteLicense
Observatorio MDN (Ministerio de Defensa Nacional) — homicide, kidnapping, extortion, terrorism and massacres (datos.gov.co)scripts/gen-co-seguranca.mjsCC BY-SA 4.0 (derived data keeps CC BY-SA 4.0)
DANE — DIVIPOLA municipality codes and centroids (datos.gov.co gdxc-w37w)scripts/gen-co-seguranca.mjsCC BY-SA 4.0 (derived data keeps CC BY-SA 4.0)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Meshes from ODbL or CC BY-SA sources require the same license on the derived file.
  • The point is the centre of the municipality, an approximation, not the place of the event. CC BY-SA 4.0 (the DANE centroid table too): the generated file keeps the same licence.

Health facilities (Chile)

controldt-cl-saude

Local menu, Chile only: about 5.3 thousand health facilities in operation with coordinates, by type, off on entry.

Detail

DEIS (Ministry of Health of Chile) publishes the register of facilities as a CSV. The generator keeps those not marked closed and with a valid coordinate in Chile, and groups the type into hospital or clinic, primary care, emergency care, specialties and dialysis, and support (laboratories, vaccination, sampling, dental and others). The tooltip shows the original type, the level of care, whether it has an emergency service, the public or private system and the commune. Street address and phone are left out.

Sources

SourceRouteLicense
DEIS / MINSAL Chile — Establecimientos de Salud Vigentes (datos.gob.cl)scripts/gen-cl-saude.mjsCC0 1.0

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • About 6% of the rows have no coordinate and are not drawn. Closed facilities are removed. The file is a snapshot of the register on the generation date. CC0 1.0: no attribution is required, the layer shows it anyway.

Industrial emissions (Chile)

controldt-cl-emissoes

Local menu, Chile only: about 400 industrial point sources with the largest air emissions in 2025, off on entry.

Detail

The RETC (Ministry of the Environment of Chile) lists air emissions by source and pollutant. The generator adds the sources of each establishment and keeps those with CO2 of at least 1,000 t, SO2 or NOx of at least 100 t, or PM2.5 of at least 25 t per year. The size follows CO2 and the tooltip lists CO2, PM2.5, SO2 and NOx, the activity, the commune and the year. The figure is the one validated by the RETC, not the gross total column.

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Only legal entities: establishments of natural persons (identified by the RUT and a blank company name in the source) are left out, and no RUT is stored. The figures are self-declared by the establishments and validated by the RETC; a small part of the sources is missing. CC BY 4.0: the attribution is on the tooltip.

Security by department (Colombia)

controlind-co-seguranca

Local menu, Colombia only: homicides, kidnappings, extortion, terrorism and massacres in 2025 by department, five choropleth indicators.

Detail

The MDN Observatory publishes one record per case with the DANE municipality code. The generator adds the cases of 2025 on the server by department and matches the DANE department code to the ISO 3166-2 code of the department mesh. A department with no record in the year is shown as zero cases. The colour comes from quintiles among the 33 departments.

Sources

SourceRouteLicense
Observatorio MDN (Ministerio de Defensa Nacional) — homicide, kidnapping, extortion, terrorism and massacres (datos.gov.co)scripts/gen-co-seguranca.mjsCC BY-SA 4.0 (derived data keeps CC BY-SA 4.0)

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Meshes from ODbL or CC BY-SA sources require the same license on the derived file.
  • These are case counts, not rates per inhabitant: populous departments rank high. Data by municipality exists but the Local menu only paints departments outside Brazil. Only aggregates are used (no sex, weapon or modality). CC BY-SA 4.0: the generated files keep the same licence.

Emergencies by department (Colombia)

controlind-co-emergencias

Local menu, Colombia only: emergencies attended by the UNGRD in 2025 by department.

Detail

The UNGRD publishes the emergencies (forest fires, landslides, floods, windstorms and others) with the department and municipality. The set repeats every record twice (13,012 rows are 6,506 emergencies), so the generator removes the repeated rows before counting, and links each record to the department by its name because the municipality code is wrong in part of the rows.

Sources

SourceRouteLicense
UNGRD — Emergencias UNGRD V2 (datos.gov.co 2343-nuqp)scripts/gen-co-seguranca.mjsCC BY 4.0

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • The set holds only 2025. It is a count of events, not a rate and not a measure of damage. CC BY 4.0.

Poverty

controlind-pobreza

Share of people below US$ 8.30 a day (2021 PPP).

Detail

Local: by state (World Bank GSAP, latest year). Global: by country (WDI, SI.POV.UMIC). Color is by quintile of the visible scope.

Sources

SourceRouteLicense
World Bank — Global Subnational Atlas of Povertyscripts/gen-indicadores.mjsCC BY 4.0
World Bank — World Development Indicatorsscripts/gen-indicadores.mjsCC BY 4.0

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Some sources group states; each state in a group gets the group value, and some countries only have a national value.

GDP per capita

controlind-pib

GDP per person in purchasing-power-parity dollars.

Detail

Local: by state, 2024 (Kummu et al.). Global: by country (WDI, NY.GDP.PCAP.PP.CD). Color is by quintile of the visible scope.

Sources

SourceRouteLicense
Kummu et al. — subnational GDP per capita (Zenodo 18429133)scripts/gen-indicadores.mjsCC BY 4.0
World Bank — World Development Indicatorsscripts/gen-indicadores.mjsCC BY 4.0

Technologies

  • MapLibre GL
  • static JSON (public/data/latam, public/data/global)

Known limits

  • Some sources group states; each state in a group gets the group value, and some countries only have a national value.

Municipal indicators (IBGE)

controlind-municipal

9 official IBGE indicators for the 5,571 municipalities and equivalents, with the state of each value.

Detail

Local only, with Brazil selected: 2026 estimated population, 2025 area, density, water, sewage, literacy and 2022 Census population, 2023 GDP and GDP per capita. Colors are quintiles among the municipalities in scope (Brazil or one state); published zeros have their own color and missing values stay neutral, with the state (no record, not applicable, suppressed, collection failure) and the original symbol in the tooltip. A load failure shows in the legend with its reason. Files in public/data/br/municipal, generated by scripts/gen-br-municipal.mjs on top of the IBGE 2025 municipal mesh.

Open on screen /local

Sources

SourceRouteLicense
IBGE — SIDRA (4714, 5938, 6803, 6805, 9543), PIB dos Municípios 2023, Estimativas 2026, Áreas Territoriais 2025scripts/gen-br-municipal.mjsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table/product, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • MapLibre GL
  • static JSON (public/data/br/municipal)
  • src/lib/observations

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • Six indicators come from the 2022 Census (a census, not annual); GDP and GDP per capita are 2023, at current prices, and per capita GDP is not income.
  • IBGE data under CC BY 4.0 (released by the owner on 2026-10-14): attribution is required; cite IBGE, table, period and source URL.

Municipalities · IBGE SIDRA (automatic collection)

controlmun-ibge-sidra

Farming and livestock by municipality (PAM and PPM) collected from SIDRA every month, plus the 2024 and 2025 population estimates used for per capita figures.

Detail

Local only, with Brazil selected. In the Layers tree, the Economy theme has the value of crop production (thousand BRL), the soybean and maize planted area (ha) and the cattle, pig and chicken herds (head), always for the latest year IBGE published. The 2024 and 2025 population estimates are collected only as the denominator of same-year per capita indicators: they are not shown as their own row on the map or in the sheet, where the estimated population is still the 2026 one from the official file. A monthly job reads the SIDRA v3 API, checks coverage and whether the municipal sum matches the Brazil total, and only then publishes; if anything fails, the previous version stays. The IBGE "-" symbol is a published zero, never missing.

Open on screen /local

Sources

SourceRouteLicense
IBGE — SIDRA API v3: Estimativas da População (6579), Produção Agrícola Municipal (5457), Pesquisa da Pecuária Municipal (3939)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/families/sidra.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • Six indicators come from the 2022 Census (a census, not annual); GDP and GDP per capita are 2023, at current prices, and per capita GDP is not income.

Municipalities · Public finance (SICONFI, automatic collection)

controlmun-stn-siconfi

Current revenue, own tax revenue, dependence on transfers, net current revenue and personnel spending by municipality, from the Treasury SICONFI, every month.

Detail

Local only, with Brazil selected. The Public finance theme has, for the latest closed fiscal year, current revenue and own tax revenue (IPTU, ISS and ITBI) per inhabitant and dependence on current transfers (%) from the DCA, net current revenue over the last 12 months per inhabitant from the 6th-bimester RREO, and Executive personnel spending as % of adjusted net current revenue from the RGF. Per capita values use the IBGE population estimate for the same year; the original BRL values and the filing status of each statement are in the municipal fact sheet. A municipality that did not file the statement shows in orange as "not filed", distinct from zero and from no record; the Federal District reports as its own entity and has no record. The collection requests one municipality at a time, at 1 request per second, checks coverage and only then publishes; if anything fails, the previous version stays.

Open on screen /local

Sources

SourceRouteLicense
Tesouro Nacional — SICONFI, API de dados abertos (extrato de entregas, DCA Anexo I-C, RREO Anexo 03, RGF Anexo 01)src/server/municipal/collectors/families/siconfi.tsBrazilian federal open data (Decree 8,777/2016), credit to the National Treasury Secretariat; human review pending
IBGE — SIDRA API v3: Estimativas da População (6579), Produção Agrícola Municipal (5457), Pesquisa da Pecuária Municipal (3939)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/families/siconfi.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • Values declared by the municipality itself to the Treasury: they may be amended, carry scale errors and differ from the audit courts.

Municipalities · Transfers (Treasury, Transferegov and Transparency Portal)

controlmun-transferencias

FPM, royalties, agreements, "Pix" amendments and legal and voluntary federal transfers received by each municipality, per inhabitant, from four official sources.

Detail

Local only, with Brazil selected. The Public finance theme has, per inhabitant: FPM and royalties over the most recent 12 months (Tesouro Transparente, under ODbL), the value of agreements signed by the city government in the year (Transferegov), special-transfer ("Pix") amendments of the year (Transferegov) and legal, voluntary and specific federal transfers to the city government and municipal funds over 12 months (Transparency Portal). The original BRL sums are in the municipal fact sheet. Per capita values use the IBGE population estimate for the year of the period. The sources overlap and are never added up: each indicator comes from a single one. The Treasury file only has the municipality name: an unmatched name fails the collection, never becomes zero. The collections check coverage and only then publish; if anything fails, the previous version stays.

Open on screen /local

Sources

SourceRouteLicense
Tesouro Nacional — Tesouro Transparente, Transferências Constitucionais para Municípios (CSV mensal)src/server/municipal/collectors/stn-transf-constitucionais.tsODbL 1.0 (Open Data Commons); the derived database keeps the ODbL, credit to the National Treasury; human review pending
Transferegov (MGI) — convênios das prefeituras e Transferências Especiais (emendas "Pix")src/server/municipal/collectors/families/transferencias.tsBrazilian federal open data (Decree 8,777/2016), credit to Transferegov (MGI); human review pending
Controladoria-Geral da União — Portal da Transparência, transferências (download de dados)src/server/municipal/collectors/cgu-transferencias-municipios.tsBrazilian federal open data (Decree 8,777/2016), credit to the CGU; human review pending
IBGE — SIDRA API v3: Estimativas da População (6579), Produção Agrícola Municipal (5457), Pesquisa da Pecuária Municipal (3939)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/families/transferencias.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • Transfers from different sources overlap (FPM is in both the Treasury and the Portal; amendments and agreements also appear among the legal and voluntary transfers): do not add the indicators up.

Municipalities · Health (DATASUS: SIM, SINASC, SIH, CNES and SIOPS)

controlmun-datasus

Deaths, infant mortality, live births, prenatal care, SUS hospitalizations and beds and municipal health spending, per municipality, from DATASUS, every month.

Detail

Local only, with Brazil selected. The Health theme has, for the most recent DATASUS final year (preliminary years never enter): deaths by residence and infant mortality (deaths under 1 year per 1,000 live births, summed over 3 years to reduce swings in small towns) from SIM, live births and the % with 7 or more prenatal visits from SINASC, SUS hospitalizations of residents per 1,000 inhabitants from SIH (12 processing months of the last closed year), SUS inpatient beds and beds per 1,000 inhabitants from CNES (most recent month; zero is real) and, from SIOPS, the % of own revenue applied to health (EC 29) and total health expenditure per inhabitant declared by the municipality. Rates calculated here carry the "METAQUANTICS calculation" note and the components are in the municipal fact sheet; per-1,000-inhabitant values use the IBGE population estimate for the same year. A municipality that did not report to SIOPS appears in orange as "did not report". The collection checks coverage and the national sum before publishing; if anything fails, the previous version stays.

Open on screen /local

Sources

SourceRouteLicense
Ministério da Saúde — DATASUS, TABNET (SIM, SINASC, SIH/SUS, CNES leitos)src/server/municipal/collectors/families/tabnet.tsBrazilian federal open data (Decree 8,777/2016), credit to the Ministry of Health (DATASUS); human review pending
Ministério da Saúde — DATASUS, SIOPS (indicadores municipais)src/server/municipal/collectors/datasus-siops.tsBrazilian federal open data (Decree 8,777/2016), credit to the Ministry of Health (DATASUS); human review pending
IBGE — SIDRA API v3: Estimativas da População (6579), Produção Agrícola Municipal (5457), Pesquisa da Pecuária Municipal (3939)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/families/tabnet.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • Health rates in small municipalities swing a lot from year to year (few births, deaths or beds): read them together with the absolute numbers in the fact sheet.

Municipalities · Environment (INPE hotspots and Disaster Atlas)

controlmun-ambiente

Hotspots of the last closed year and disaster records and people sheltered or displaced from 2015 to 2025, per municipality.

Detail

Local only, with Brazil selected. The Environment theme has the heat hotspots of the last closed year from the INPE reference satellite, as a count and per 100 km² (the yearly file has no municipality code: each hotspot goes to the municipality that contains the point in the IBGE 2025 mesh, and a municipality with no hotspot shows 0), and, from the MIDR Digital Disaster Atlas (the S2iD database, an 86 MB CSV read in parts), disaster records from 2015 to 2025, people sheltered or displaced in the same window (in the fact sheet) and per 1,000 inhabitants (IBGE 2025 population estimate). Values calculated here carry the "METAQUANTICS calculation" note and the components are on the map and in the municipal fact sheet. The collection checks the header, the floor of rows read, the sum over municipalities and the state consistency before publishing; if anything fails, the previous version stays.

Open on screen /local

Sources

SourceRouteLicense
INPE — Programa Queimadas, focos de calor anuais (satélite de referência)src/server/municipal/collectors/inpe-queimadas-anual.tsINPE open data for public use, treated as Brazilian federal open data (Decree 8,777/2016); credit: Fonte: INPE, Programa Queimadas; human review pending
MIDR / CEPED-UFSC — Atlas Digital de Desastres no Brasil (banco consolidado do S2iD)src/server/municipal/collectors/mdr-atlas-desastres.tsBrazilian federal open data (Decree 8,777/2016), credit to the MIDR (Sedec) and CEPED/UFSC; human review pending
IBGE — SIDRA API v3: Estimativas da População (6579), Produção Agrícola Municipal (5457), Pesquisa da Pecuária Municipal (3939)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/inpe-queimadas-anual.ts
  • src/server/municipal/collectors/mdr-atlas-desastres.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • A hotspot is a satellite heat detection, not a fire or a burned area: one fire produces several hotspots and a small or cloud-covered burn may produce none. Zero hotspots does not prove there was no fire.
  • S2iD records depend on the municipality reporting and requesting recognition: whoever registers more does not necessarily suffer more. Zero records does not prove there was no disaster; the per-1,000 rate sums 11 years over the 2025 population.

Municipalities · Management and transparency (MUNIC and PNTP)

controlmun-gestao

People employed by the city hall, housing plan and transparency level of the city hall portal, per municipality, from IBGE (MUNIC) and Atricon (PNTP).

Detail

Local only, with Brazil selected. The Management and transparency theme has, from the IBGE MUNIC (latest edition on the FTP, 2024 today), people employed in the direct administration per 1,000 inhabitants (IBGE population estimate for the edition year; the calculation carries the "METAQUANTICS calculation" note and the original number is in the fact sheet) and, in the fact sheet only, whether a Municipal Housing Plan exists; and, from the Atricon National Public Transparency Programme (latest cycle, 2025 today), the transparency index of the city hall portal (0 to 1) and, in the fact sheet, the level (Nonexistent to Diamond). A municipality that did not answer the MUNIC ("Recusa"), left the item blank or was not assessed in the PNTP shows as no record, never as zero; the 2024 MUNIC does not ask whether a master plan exists, so it is not shown. The collection checks coverage, header and codes before publishing; if anything fails, the previous version stays.

Open on screen /local

Sources

SourceRouteLicense
IBGE — Pesquisa de Informações Básicas Municipais (MUNIC), base de dados (FTP)src/server/municipal/collectors/ibge-munic.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, MUNIC, edition and source URL
Atricon — Programa Nacional de Transparência Pública (PNTP), Radar da Transparência Públicasrc/server/municipal/collectors/atricon-pntp.tsNo written licence (civil association): free use with credit to Atricon, released by the owner on 2026-10-15; human review pending
IBGE — SIDRA API v3: Estimativas da População (6579), Produção Agrícola Municipal (5457), Pesquisa da Pecuária Municipal (3939)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/ibge-munic.ts
  • src/server/municipal/framework/xlsx-lite.ts
  • src/server/municipal/framework/zip-range.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • The PNTP belongs to Atricon (a civil association) and has no written licence: use is free with credit to Atricon by the owner's decision, with human review pending. The methodology changes between cycles.

Municipalities · 2024 elections (TSE: mayor party, turnout and abstention)

controlmun-eleicoes

Party of the mayor elected in 2024 and first-round turnout and abstention, per municipality, from the TSE open data.

Detail

Local only, with Brazil selected. The Elections theme has, from the 2024 municipal elections: in the fact sheet, the party of the elected mayor (deciding round; only the party is read, never the candidate name) and the eligible voters, turnout and abstentions of the first round for mayor, summed over the electoral zones; and, on the map, turnout and abstention in % (a METAQUANTICS calculation over TSE numbers, with the "METAQUANTICS calculation" note). Only the ordinary election counts: by-elections are left out (a municipality whose ordinary election elected no one shows as no record). The TSE municipality code is linked to the IBGE by the official table; a municipality with no match fails the collection. The Federal District and Fernando de Noronha have no municipal election and show as no record.

Open on screen /local

Sources

SourceRouteLicense
TSE — Dados Abertos, Eleições Municipais 2024 (votação por candidato e detalhe da apuração por município e zona)src/server/municipal/collectors/families/tse.tsCC BY (TSE open data); human review pending
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/families/tse.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • Only the ordinary 2024 election: later by-elections may have changed the mayor and are not included. The Federal District and Fernando de Noronha have no record.

Municipalities · Education (INEP: IDEB, age-grade distortion and School Census)

controlmun-educacao

Public-network IDEB, age-grade distortion, enrollments and active schools, per municipality, from INEP, every month.

Detail

Local only, with Brazil selected. The Education theme has, from the most recent INEP edition: the observed IDEB of the public network (early and late elementary years; biennial edition; "-" and the INEP ND codes have no record, never zero), the age-grade distortion rate of elementary school in the public network (enrollments 2 or more years behind; "--" when there is no enrollment) and, summed from the School Census microdata, basic education enrollments and active schools of all networks (a municipality with only stopped or extinct schools shows zero schools). The values are INEP's, not recomputed. The collection reads only what it needs from the large files (by byte range), checks coverage, codes and year before publishing; if anything fails, the previous version stays.

Open on screen /local

Sources

SourceRouteLicense
INEP — IDEB, Indicadores Educacionais (distorção idade-série) e Censo da Educação Básica (microdados)src/server/municipal/collectors/families/arquivo.tsBrazilian federal open data (Decree 8,777/2016), credit to INEP; human review pending
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/families/arquivo.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • IDEB is biennial and comparison with 2021 is affected by the pandemic; an enrollment is not a person (a student may have more than one) and age-grade distortion uses the public network only.

Municipalities · Sanitation (SINISA and Atlas Águas)

controlmun-saneamento

Water and sewage network coverage (SINISA), water security and water network coverage (Atlas Águas), per municipality.

Detail

Local only, with Brazil selected. The Sanitation theme has, besides the two IBGE 2022 Census indicators, the share of the total population served by the water supply network and by the sewage collection network from SINISA (Ministry of Cities, most recent reference year, municipal base) and, from ANA's Atlas Águas 2021, the water distribution network coverage in the urban seat (map) and the urban water supply security index, from Minimum to Maximum (municipal fact sheet). A municipality that SINISA did not compute or did not include has no record, never zero: for sewage only about half of the municipalities appear, and the source does not say whether it is "no system" or "did not report". The values are the agencies', not recomputed. The collection checks coverage, codes and ranges before publishing; if anything fails, the previous version stays.

Open on screen /local

Sources

SourceRouteLicense
Ministério das Cidades — SINISA, base municipal de água e esgoto (resultados do ano de referência)src/server/municipal/collectors/mcid-sinisa.tsBrazilian federal open data (Decree 8,777/2016), credit to the Ministry of Cities (SINISA); human review pending
ANA — Atlas Águas 2021, segurança hídrica do abastecimento urbanosrc/server/municipal/collectors/ana-atlas-aguas.tsFree access provided the source is cited (ANA metadata; Decree 8,777/2016); human review pending
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/families/arquivo.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • Atlas Águas is a 2020/2021 snapshot (not current data) and describes the urban seat, not the whole municipality; SINISA succeeds SNIS and the series are not comparable; only part of the municipalities reported sewage.

Municipalities · Labour and assistance (RAIS, Novo CAGED, CadÚnico, Bolsa Família and CRAS)

controlmun-trabalho

Formal jobs, 12-month job balance, Bolsa Família families, population in CadÚnico and CRAS units, per municipality.

Detail

Local only, with Brazil selected. The Labour theme has: formal jobs per thousand inhabitants (RAIS, active jobs on 31 Dec of the base year, counted by the establishment municipality), the 12-month formal job balance per thousand inhabitants (Novo CAGED: hirings minus dismissals, adding late declarations and subtracting exclusions), Bolsa Família families and the % of the population in CadÚnico (VIS DATA / MI Social, in the latest month with the fields filled in) and the number of CRAS (SUAS Census). The agency’s original values stay in the municipal fact sheet; the per-thousand figures and the CadÚnico % carry the "METAQUANTICS calculation" note and use the IBGE estimated population of the period’s year. Novo CAGED only exists as .7z files: that collection is manual (it runs on the operator machine) and only updates when the local run is done. A municipality missing from the SUAS Census has no record: it may have no CRAS or may not have answered, it is not zero. The collection checks coverage and only then publishes; if something fails, the previous version stays.

Open on screen /local

Sources

SourceRouteLicense
Ministério do Trabalho e Emprego — RAIS (tabelas do ano-base) e Novo CAGED (microdados, coleta manual)src/server/municipal/collectors/mte-rais.tsBrazilian federal open data (Decree 8,777/2016), credit to the Ministry of Labour and Employment; gov.br footer cites CC BY-ND 3.0; human review pending
Ministério do Desenvolvimento e Assistência Social — VIS DATA / MI Social (SAGI) e Censo SUAS (SNAS)src/server/municipal/collectors/mds-misocial.tsBrazilian federal open data (Decree 8,777/2016), credit to the MDS; gov.br footer cites CC BY-ND 3.0; human review pending
IBGE — SIDRA API v3: Estimativas da População (6579), Produção Agrícola Municipal (5457), Pesquisa da Pecuária Municipal (3939)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/families/arquivo.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • Job counts use the establishment municipality, not where people live: hubs can exceed 1,000 per thousand inhabitants. Read alongside the population.

Municipalities · Infrastructure (Anatel: broadband and mobile; ANEEL: DEC and FEC)

controlmun-infraestrutura

Fixed broadband per 100 households, fibre share, mobile telephony per 100 inhabitants, 5G share and power interruption duration and frequency, per municipality.

Detail

Local only, with Brazil selected. The Infrastructure theme has, from Anatel, the official density of fixed broadband (accesses per 100 households) and mobile telephony (accesses per 100 inhabitants) of the latest complete month, plus the fibre (FTTH) share of broadband accesses and the 5G share of mobile accesses; the summed accesses stay in the municipal fact sheet. From ANEEL, DEC (hours of interruption per year) and FEC (interruptions per year) of the latest complete year. Note: an access is not a connected household, and a mobile access is assigned to the municipality by the operator’s area code. The Anatel series has months with very low values (2025-12 to 2026-03): the collection fails if the median falls below a sanity floor. DEC and FEC are measured per electric set, not per municipality: the municipal value is modelled (average of the sets serving the municipality, weighted by consumers). The collection checks coverage and only then publishes; if something fails, the previous version stays.

Open on screen /local

Sources

SourceRouteLicense
Anatel — Dados abertos, acessos de banda larga fixa (SCM) e telefonia móvel (SMP) por municípiosrc/server/municipal/collectors/families/anatel.tsBrazilian federal open data (Decree 8,777/2016), credit to Anatel; the portal cites CC BY-ND 3.0 (no derivatives), tension recorded; human review pending
ANEEL — Dados Abertos, indicadores coletivos de continuidade (DEC e FEC) e IndQual-municípiosrc/server/municipal/collectors/aneel-indqual-municipio.tsODbL 1.0 (ANEEL, CKAN); the derived database stays ODbL; human review pending
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/families/anatel.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • DEC and FEC are measured per electric set; the municipal value is a modelled weighted average and does not apply to a specific neighbourhood or customer. About 500 municipalities have no record.

Municipalities · Economy (Central Bank: Pix, branches and posts, rural credit)

controlmun-bcb

Pix per inhabitant, people using Pix, branches and service posts per 1,000 inhabitants and rural custeio credit per municipality, from the Central Bank open data.

Detail

Local only, with Brazil selected. The Economy theme gains three Central Bank sources (Olinda API, ODbL 1.0, no key): the Pix statistics of the latest closed month (value sent by individuals and received by companies per inhabitant, and the % of the population that sent Pix; the original values by person type stay in the fact sheet), the register of bank branches and service posts (points per 1,000 inhabitants; a municipality outside the register has zero) and the rural custeio credit of the closed calendar year (value, financed area and BRL per inhabitant). Per-inhabitant calculations carry the "METAQUANTICS calculation" note. They start switched off in the Layers panel. Aggregates per municipality only: no personal data, address or phone.

Open on screen /local

Sources

SourceRouteLicense
Banco Central do Brasil — Dados Abertos (Olinda): Pix por município, agências e postos de atendimento, crédito rural de custeio (SICOR)src/server/municipal/collectors/families/bcb.tsODbL 1.0 (BCB, license_id odc-odbl on CKAN); the derived databases stay ODbL; human review pending
IBGE — SIDRA API v3: Estimativas da População (6579), Produção Agrícola Municipal (5457), Pesquisa da Pecuária Municipal (3939)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/bcb-pix-municipio.ts
  • src/server/municipal/collectors/bcb-agencias.ts
  • src/server/municipal/collectors/bcb-sicor-custeio.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • In Pix, a company is assigned to its head-office municipality: the amount received by branches and chains appears at the head office, and the per capita value of a municipality hosting a large company’s head office is inflated. The Central Bank "municipality not reported" row belongs to no municipality.
  • The Central Bank register counts branches and service posts, not ATMs, banking correspondents or Pix: a municipality without a branch does not necessarily lack access to banking services.

Municipalities · Population (2022 Census: quilombolas, colour or race, sex and age)

controlmun-censo

Percentage of quilombolas, of each colour or race, of women, of people aged 65 and over and 0 to 14 per municipality, from the IBGE 2022 Census.

Detail

Local only, with Brazil selected. The Population theme gains three tables of the IBGE 2022 Census (SIDRA, CC BY 4.0): quilombola people and their percentage (table 9578), the percentage of the white, black, Asian, brown and Indigenous population and Indigenous people (9605), and the percentage of women and of people aged 65 and over and 0 to 14 (9514, where the five-year bands are summed here, with the "METAQUANTICS calculation" note). The absolute zero published by IBGE ("-") stays zero, distinct from missing. They start switched off in the Layers panel.

Open on screen /local

Sources

SourceRouteLicense
IBGE — Censo Demográfico 2022 via SIDRA API v3: quilombolas (9578), cor ou raça (9605), sexo e idade (9514)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/ibge-censo-quilombolas.ts
  • src/server/municipal/collectors/ibge-censo-cor-raca.ts
  • src/server/municipal/collectors/ibge-censo-sexo-idade.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • The 2022 Census is a snapshot (1 August 2022), not an annual series; the colour or race question has changed since 2010 and the number of quilombolas and Indigenous people depends on self-declaration. In a small municipality the percentage swings a lot.

Municipalities · Health (OpenDengue: dengue cases)

controlmun-opendengue

Dengue cases notified in the latest closed year and per 1,000 inhabitants, per municipality, from OpenDengue.

Detail

Local only, with Brazil selected. The Health theme gains the dengue cases of OpenDengue (London School of Hygiene & Tropical Medicine, CC BY 4.0), at municipality level with the IBGE code: sum of the weeks of the latest year with closed annual data (the fact sheet shows the cases; the map, cases per 1,000 inhabitants, IBGE population estimate, with the "METAQUANTICS calculation" note). The source file is 502 MB and is read as a stream, only the Brazil rows. It starts switched off in the Layers panel.

Open on screen /local

Sources

SourceRouteLicense
OpenDengue (London School of Hygiene & Tropical Medicine) — dengue cases by municipality of Brazil, V1.3src/server/municipal/collectors/opendengue-municipio.tsCC BY 4.0 declared on opendengue.org (the GitHub repository has no LICENSE file); human review pending
IBGE — SIDRA API v3: Estimativas da População (6579), Produção Agrícola Municipal (5457), Pesquisa da Pecuária Municipal (3939)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/opendengue-municipio.ts
  • src/server/municipal/framework/zip-stream.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • The source lists only the weeks with dengue cases: a municipality with no row in the year has no record and does not become zero. The sum over municipalities does not match the OpenDengue national total (different case definitions).
  • Health rates in small municipalities swing a lot from year to year (few births, deaths or beds): read them together with the absolute numbers in the fact sheet.

Municipalities · Public safety (ISP-RJ and SSP-RS)

controlmun-seguranca

Homicides, robberies and thefts per 1,000 inhabitants in the municipalities of Rio de Janeiro (12 months) and Rio Grande do Sul (latest year), from each state’s official statistics.

Detail

Local only, with Brazil selected. The new Public safety theme gathers two states that publish by municipality as open data: ISP-RJ (92 municipalities, sum of the latest 12 closed months, ODC-PDDL) and SSP-RS (497 municipalities, sum of the latest year with all 12 months under CC0; the spreadsheet carries only the municipality name, matched to the IBGE code by name, and a collection with an unmatched name is refused). The original values (victims and occurrences) stay in the fact sheet; the map shows the rates per 1,000 inhabitants, with the "METAQUANTICS calculation" note. The other Brazilian municipalities have no record. They start switched off in the Layers panel. Aggregates per municipality only, no personal data.

Open on screen /local

Sources

SourceRouteLicense
ISP-RJ — Instituto de Segurança Pública do Rio de Janeiro: estatísticas de segurança pública por municípiosrc/server/municipal/collectors/isp-rj-municipio.tsODC-PDDL (public domain, license_id odc-pddl on the RJ CKAN); human review pending
SSP-RS — Secretaria da Segurança Pública do Rio Grande do Sul: indicadores criminais por município (planilhas mensais)src/server/municipal/collectors/ssp-rs-indicadores.tsCC0 1.0 declared per package on the RS CKAN (CC BY-NC years are never read); human review pending
IBGE — SIDRA API v3: Estimativas da População (6579), Produção Agrícola Municipal (5457), Pesquisa da Pecuária Municipal (3939)src/server/municipal/collectors/families/sidra.tsCC BY 4.0 (IBGE; released by the owner on 2026-10-14). Attribution: Fonte: IBGE, table, period and source URL
IBGE — API de Malhas Geográficas v4 (malha municipal 2025)scripts/gen-br-local.mjsFonte: IBGE

Technologies

  • src/server/municipal/collectors/isp-rj-municipio.ts
  • src/server/municipal/collectors/ssp-rs-indicadores.ts
  • pgmq (fila municipal)
  • /api/local/municipal/metric
  • /api/local/municipal/ficha

Known limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • The numbers are police records (what was reported, not all crime) and may be revised; each state counts in its own way, so RJ and RS cannot be compared with each other. Only two states have open municipal data here: the other municipalities have no record.

Map styles

controlestilos

Satellite, relief and night lights under the borders, in both menus.

Detail

The selector sits in the bottom dock. In Local, over imagery the colors become more transparent and the lines light; in Global, relief and night lights go under the day/night shading.

Sources

SourceRouteLicense
Esri World Imagery—Esri terms; attribution Esri, Maxar, Earthstar Geographics
AWS Open Data — Terrain Tiles (Mapzen Terrarium)—Open data, attribution per tilezen/joerd
NASA GIBS — VIIRS Black Marble—Public domain (NASA)

Technologies

  • MapLibre GL (raster, hillshade)

Rules and limits

What the module promises about data honesty, licenses and restrictions, and what is still marked as coming soon.

  • One catalog, two scopes

    Every new layer goes into src/lib/geo-layers and shows up in both menus. Global reads public/data/global; Local reads public/data/latam and filters by the chosen country.

  • Segmented information

    Globally, only what matters on a world map (capitals, large airports, plants from 300 MW, M7+ quakes, indicators by country). Locally, national detail (cities from 15k people, indicators by state).

  • Generated snapshot, with two live exceptions

    The files are generated by scripts (gen-latam-pontos, gen-indicadores, gen-latam-local) and live in the repository. Active fires and 24-hour earthquakes reuse Global’s live routes.

  • Only licenses that allow commercial use

    Public domain, CC0, CC BY and ODbL. Files derived from ODbL or CC BY-SA sources (some meshes) keep the same license. Attributions in THIRD_PARTY_NOTICES.md and in each point’s tooltip.

  • Sources rejected for licensing

    ACLED, WDPA/Protected Planet, Global Data Lab subnational HDI, GADM, Smithsonian GVP, Atlas da Violência and Global Energy Monitor were left out (non-commercial, no redistribution or form-gated access).

Decisions

No decisions registered for this module.

Module

Alerts

A full-screen Alert Center (Live, Rules, History, Channels and Preferences) with configurable rules (a 6-step wizard) evaluated over real feeds, in-app delivery and a history of firings.

Open module
  • 59documented elements
  • 19alert sources

Elements

Generated from the module element registry (the same one behind the tooltips): what each element is, where the data comes from, which technologies it uses and its known limits.

control (59)

Name and notes

controlalerts-name

How the alert shows up in the list, notices and history.

Detail

The name (up to 80 characters) identifies the rule in toasts, browser notifications and history. Notes are just for you.

Sources

No external source: computed in the app.

Rules tab

controlalerts-tab-rules

Lists your local rules with last fire, channels and actions.

Detail

Each rule can be turned on, tested, edited, duplicated or deleted. Rules are stored only in this browser.

Sources

No external source: computed in the app.

Technologies

  • Radix Tabs (shadcn/ui)
  • localStorage
  • zod

History tab

controlalerts-tab-history

Recent fires, with the rule, the items and the source link.

Detail

Keeps up to 200 fires in this browser (oldest are dropped). Unread ones add up on the bar bell.

Sources

No external source: computed in the app.

Technologies

  • Radix Tabs (shadcn/ui)
  • localStorage
  • zod

Create alert

controlalerts-create

Opens the six-step wizard to define a new rule.

Detail

There is no plan limit; only a technical cap of 50 rules. Nothing is saved until the last step.

Sources

No external source: computed in the app.

Test rule

controlalerts-test

Runs the rule against current data and shows how many items match, without notifying.

Detail

Queries the source routes once (20 s timeout), applies the same matching as the evaluator and shows a per-source count and a sample. It records no history, does not consume the "seen" state and sends no notification.

Sources

No external source: computed in the app.

Technologies

  • evaluate.previewRule
  • fetch (AbortController)

Edit alert

controlalerts-edit

Reopens the wizard with the rule values.

Detail

On save, the rule is re-evaluated from scratch: items that already exist become "seen" and only new ones fire.

Sources

No external source: computed in the app.

Duplicate alert

controlalerts-duplicate

Creates a disabled copy of the rule, to tweak without losing the original.

Detail

The copy gets the "(copy)" suffix and starts disabled; turn it on when it is ready.

Sources

No external source: computed in the app.

Delete alert

controlalerts-delete

Removes the rule and its state, with confirmation.

Detail

The history of earlier fires is kept. Deleting cannot be undone.

Sources

No external source: computed in the app.

Alert sources

controlalerts-sources

Real app feeds the rule watches; only those with an item extractor.

Detail

Earthquakes, news, conflicts, severe weather, GDACS, hurricanes, volcanoes, tsunamis, fireballs, CISA KEV, space weather and FEMA. The rule only queries the routes of the chosen sources, and only while it is on.

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesnot verified
BBC / Al Jazeera / Guardian / TASS / Telegram (RSS)/api/newsnot verified
BBC / Al Jazeera / NYT (RSS)/api/conflictsnot verified
NOAA NWS / NASA EONET / GDACS/api/weathernot verified
GDACS (UN / European Commission)/api/gdeltnot verified
NOAA National Hurricane Center/api/hurricanesnot verified
USGS Volcano Hazards Program/api/volcanoesnot verified
NOAA National Tsunami Warning Center/api/tsunamisnot verified
NASA/JPL CNEOS/api/meteorsnot verified
CISA Known Exploited Vulnerabilities/api/cyber-threatsnot verified
NOAA Space Weather Prediction Center/api/space-weathernot verified
OpenFEMA Disaster Declarations/api/fema-disastersnot verified
CDC Travelers' Health — Travel Notices (not endorsed by CDC)/api/health-noticesnot verified
Safecast (CC0) + U.S. EPA RadNet (when switched on)/api/radiationnot verified
U.S. Treasury OFAC — SDN list (new designations)/api/sanctionsnot verified
METAQUANTICS convergence detector (derived, no external source)/api/convergencenot verified
METAQUANTICS correlation engine (derived, 3 declarative adapters)/api/correlationnot verified
METAQUANTICS seasonal baseline (derived, signal_reading via the radar-readings job)/api/geopolitics/anomalynot verified
EASA Conflict Zone Information Bulletins + FAA Temporary Flight Restrictions (not endorsed by EASA or the FAA; informational, not for flight planning)/api/airspacenot verified
METAQUANTICS airspace spectrum by country (derived: EASA CZIB + adsb.fi/OpenSky inferred GPS interference + FAA NOTAM when keyed; not endorsed by EASA or the FAA; informational, not for flight planning)/api/airspace/spectrumnot verified
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified
METAQUANTICS /api/alerts/channels/test (test message)/api/alerts/channels/testnot verified
METAQUANTICS /api/alerts/vapid (VAPID public key)/api/alerts/vapidnot verified
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot verified
Web Push Protocol (RFC 8030/8291/8292)—not verified
METAQUANTICS /api/alerts/channels/confirm (email confirmation, double opt-in)/api/alerts/channels/confirmnot verified
METAQUANTICS /api/alerts/channels/unsubscribe (one-click, RFC 8058)/api/alerts/channels/unsubscribenot verified
METAQUANTICS /api/alerts/channels/availability (email/Telegram availability)/api/alerts/channels/availabilitynot verified
Resend (transactional email API)—not verified
Telegram Bot API (sendMessage, setWebhook)—not verified
Push API (MDN)—not verified

Technologies

  • useFeed (mecanica)
  • fetch (AbortController)

Keywords

controlalerts-keywords

Terms the item must contain (any or all).

Detail

Plain-text matching, no regex, case and accent insensitive, on the item title and place. With no keywords, any new item from the source matches.

Sources

No external source: computed in the app.

Technologies

  • normalizeText (NFD)

Negations

controlalerts-negations

Terms that exclude the item even when keywords match.

Detail

Handy to cut noise (for example "sports"). Can be used alone: everything that does not contain the term.

Sources

No external source: computed in the app.

Technologies

  • normalizeText (NFD)

Countries or regions

controlalerts-places

Place names the item text must mention (any of them).

Detail

Textual comparison with the item title and place, not geographic: "Chile" matches items that mention Chile. For geographic precision use a box or zone.

Sources

No external source: computed in the app.

Technologies

  • normalizeText (NFD)

Coordinate box

controlalerts-bbox

West/south/east/north rectangle; only items with coordinates inside it match.

Detail

Sources without coordinates (news, KEV, FEMA, volcanoes) are left out when a box is set. For conflicts the coordinate is the zone center. To draw on the map use the Cartographer zone.

Sources

No external source: computed in the app.

Technologies

  • bboxContains

Drawn zone

controlalerts-zone

Uses a polygon, rectangle or circle drawn in the map Cartographer.

Detail

The geometry is copied into the rule on save (editing the drawing later does not change the alert). Items without coordinates do not match.

Sources

No external source: computed in the app.

Technologies

  • Cartographer (DrawingRepository)
  • ray casting

Minimum severity

controlalerts-severity

Drops items below the chosen level (info, low, medium, high, critical).

Detail

Each source maps its data to this scale (earthquake by magnitude, hurricane by category, volcano by color, Kp, etc.). The full mapping appears in the filters step.

Sources

No external source: computed in the app.

Minimum magnitude

controlalerts-magnitude

For earthquakes: ignores events below the given magnitude.

Detail

Only affects items that have a magnitude; the rule other items are not filtered by it.

Sources

SourceRouteLicense
USGS Earthquake Hazards Program/api/earthquakesnot verified

Cadence

controlalerts-cadence

Real time, hourly, daily, twice-daily or weekly digest.

Detail

In the browser it runs while the app is open, including in the background; rules with Push or webhook are also evaluated by the server alert-dispatch job. The digest groups the period items into a single notice, sorted by severity and date.

Sources

No external source: computed in the app.

Technologies

  • evaluateRules
  • localStorage

Minimum interval

controlalerts-cooldown

Minimum time between two real-time notices of the same rule.

Detail

Items that arrive during the interval wait and go out together afterwards. There is also a cap of 12 notices per hour per rule.

Sources

No external source: computed in the app.

Channel: in the app

controlalerts-ch-inapp

On-screen toast, bell counter and a history record.

Detail

A real channel, always available. The history keeps up to 200 fires in this browser.

Sources

No external source: computed in the app.

Technologies

  • sonner (shadcn/ui)
  • useSyncExternalStore

Channel: browser notification

controlalerts-ch-browser

System notification through the browser API, with the app open.

Detail

Opt-in: permission is only requested when you click "Allow browser notifications". If denied, the channel stays inactive.

Sources

SourceRouteLicense
Web Notifications API (MDN)—not verified

Technologies

  • Notification API

Channel: email (with confirmation)

controlalerts-ch-email

Alert email through Resend, only after explicit consent and confirmation by link (double opt-in).

Detail

The address is stored lowercase, with the time and version of the consent; the request sends a confirmation link (48 h, single use; only the token hash is stored). Without confirmation nothing is sent and the pending channel is deleted after it expires. Every email carries an unsubscribe link (List-Unsubscribe, one-click) that deletes the channel. Requires ALERT_CHANNELS_ENABLED=1, RESEND_API_KEY, METAQUANTICS_MAIL_FROM, METAQUANTICS_APP_URL (https) and migration 0023.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified
METAQUANTICS /api/alerts/channels/availability (email/Telegram availability)/api/alerts/channels/availabilitynot verified
METAQUANTICS /api/alerts/channels/confirm (email confirmation, double opt-in)/api/alerts/channels/confirmnot verified
METAQUANTICS /api/alerts/channels/unsubscribe (one-click, RFC 8058)/api/alerts/channels/unsubscribenot verified
Resend (transactional email API)—not verified

Technologies

  • emailChannelStatus
  • double opt-in (sha256 do token)
  • List-Unsubscribe (RFC 8058)
  • Idempotency-Key

Channel: Telegram (with confirmation)

controlalerts-ch-telegram

Alert message through the Telegram bot, only after explicit consent and /start with a code.

Detail

The request generates a code (30 min, single use) and a t.me link to the bot; /start with the code reaches the bot webhook (checked by the secret header) and stores only the chat identifier. /stop stops the messages; removing the channel deletes the identifier. Plain text, no user message content. Requires TELEGRAM_BOT_TOKEN, TELEGRAM_WEBHOOK_SECRET, TELEGRAM_BOT_USERNAME, ALERT_CHANNELS_ENABLED=1 and migration 0023. Never feeds AI.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified
METAQUANTICS /api/alerts/channels/availability (email/Telegram availability)/api/alerts/channels/availabilitynot verified
Telegram Bot API (sendMessage, setWebhook)—not verified

Technologies

  • webhook do bot (X-Telegram-Bot-Api-Secret-Token)
  • /start <codigo>
  • texto puro

Email confirmation page

controlalerts-confirm-page

Opens from the email link and only confirms when you tap the button.

Detail

Loading the page never confirms (email providers prefetch links); the button POSTs to /api/alerts/channels/confirm, with no session (the link may open on another device), limited to 20 per minute per IP.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/channels/confirm (email confirmation, double opt-in)/api/alerts/channels/confirmnot verified

Technologies

  • POST por botao (nunca no carregamento)

Channel: webhook

controlalerts-ch-webhook

Signed JSON POST to an https URL of yours, sent by the server even with the app closed.

Detail

Registered under Channels in this browser: the URL is checked against SSRF (https, port 443, public host, no redirect) on registration and on every delivery. X-Metaquantics-Signature = HMAC-SHA256 with timestamp; the secret is shown only once.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot verified

Technologies

  • HMAC-SHA256 (X-Metaquantics-Signature)
  • validateHost (anti-SSRF a cada entrega)

Allow notifications

controlalerts-ask-permission

Asks the browser for notification permission (only on this click).

Detail

The app never asks for permission on its own. If the browser blocks it, change the site permission in its settings.

Sources

SourceRouteLicense
Web Notifications API (MDN)—not verified

Technologies

  • Notification.requestPermission

Fire

controlalerts-history-item

One notice: rule, time, count and a sample of items with the source link.

Detail

Shows up to 10 items per fire (the real total is in the counter). Links only open when they are http(s).

Sources

No external source: computed in the app.

Technologies

  • safeHref

Mark as read

controlalerts-mark-read

Removes this fire from the bell unread count.

Detail

Opening the history does not mark anything on its own.

Sources

No external source: computed in the app.

Clear history

controlalerts-clear-history

Deletes every fire stored in this browser.

Detail

Rules and the state of already seen items are not changed.

Sources

No external source: computed in the app.

Source state

controlalerts-sources-status

Each source’s state now (LIVE, stale, error…), from the same Sources & Status probe.

Detail

"Not monitored" = the route is not probed by connector health (e.g. convergence, a derived route).

Sources

SourceRouteLicense
METAQUANTICS /api/connectors/health (sondagem unica de Fontes e Status)/api/connectors/healthnot verified

Technologies

  • useFeedStatus

Detectors

controlalerts-detectors

Derived sources: multi-domain convergence (server) keyword spike and military surge (computed in the browser from news and conflicts).

Detail

A detector is not a feed: it is a computation over feeds already read. The spike uses the news feed’s 7-day hourly history; the military surge counts conflict events by region against a 7-day hourly mean kept by the alerts runtime itself and never fires without 24 h of baseline.

Sources

SourceRouteLicense
METAQUANTICS convergence detector (derived, no external source)/api/convergencenot verified
METAQUANTICS correlation engine (derived, 3 declarative adapters)/api/correlationnot verified
METAQUANTICS seasonal baseline (derived, signal_reading via the radar-readings job)/api/geopolitics/anomalynot verified
BBC / Al Jazeera / Guardian / TASS / Telegram (RSS)/api/newsnot verified
BBC / Al Jazeera / NYT (RSS)/api/conflictsnot verified

Technologies

  • detectSpikes (src/lib/news/spikes.ts)
  • TermHistory (localStorage)
  • baseline (src/lib/geopolitics/baseline.ts, Welford)
  • deriveSurge (src/lib/ops/alerts/surge-history.ts, fail-closed: 24 h de base)
  • SurgeHistory (localStorage metaquantics.ops.alerts.surge.v1)

Country scope

controlalerts-countries

ISO2 matching the declared country, the coordinates (Natural Earth) or the title. Items with no country do not match.

Detail

Simplified borders: near a coast/border a point can fall in the neighbour. Followed countries appear as chips.

Sources

Technologies

  • countryAt (ponto-em-poligono)
  • newsCountriesOf

Tickers

controlalerts-tickers

Market symbols matched as whole words, case-sensitive; chips come from the Markets watchlist.

Detail

Useful with the News source. "$AAPL" also matches.

Sources

No external source: computed in the app.

Technologies

  • regex de palavra inteira (sensivel a maiusculas)

Require ≥ n sources

controlalerts-corroboration

Only fires when the same story appears in n independent outlets in the current snapshot.

Detail

Uses the single story identity (normalised title, canonical URL, 48 h window). Detectors bring their own sources.

Sources

No external source: computed in the app.

Technologies

  • groupStories (src/lib/news/story-identity.ts)

Ignore keyword-only

controlalerts-keyword-only

News/conflict items from T3+ or unknown-tier outlets, with no second source, do not fire.

Detail

Provider-measured sources (quake, hurricane, radiation…) are never affected. Tier comes from connector declarations.

Sources

No external source: computed in the app.

Technologies

  • profileFor (src/lib/news/credibility.ts)

Maximum tier and state media

controlalerts-max-tier

News/conflict items only fire from outlets with a reviewed tier up to the one chosen; unclassified never passes. Optional: exclude declared state media.

Detail

The tier is resolved by the evaluator from connector declarations and only counts with a recorded human review; it is never stored on the item. Provider-measured sources (quake, hurricane, radiation…) ignore the gate.

Sources

No external source: computed in the app.

Technologies

  • resolveTier (src/lib/sources/tiers.ts)

7-day preview

controlalerts-week-preview

"Would have fired n times": the rule applied to the dated items the sources return now, with the chosen cadence.

Detail

Feeds keep little history: the preview says how much it covers or "not enough history". Existing rules also show real fires.

Sources

No external source: computed in the app.

Technologies

  • previewWeek
  • simulateFires

Quiet hours

controlalerts-quiet-hours

An hour range (may cross midnight) in which this rule’s notices go quiet or wait.

Detail

Applies in the browser (local evaluator: a silent fire only goes to the history) and on the server (alert-dispatch job, for Push and webhook). Local time in the Console clock time zone; daylight saving handled by Intl.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot verified

Technologies

  • quietDecision (src/lib/ops/alerts/schedule.ts)
  • Intl.DateTimeFormat (fuso IANA)

Quiet hours mode

controlalerts-quiet-mode

Critical only, Silence all or Hold and deliver at the end of the window.

Detail

Same rule in the browser and on the server (quietDecision): outside the window everything is delivered. Silent in the browser = goes to the history already read, with no toast, notification or bell, and does not use up the minimum interval.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot verified

Technologies

  • quietDecision
  • evaluateRules (silent)

Quiet window

controlalerts-quiet-window

Start and end in local time (30-min steps); may cross midnight.

Detail

Window [start, end) in the Console clock time zone; start equal to end is refused (empty window).

Sources

No external source: computed in the app.

Technologies

  • isQuiet
  • quietEndAfter

Digest time

controlalerts-digest-schedule

With daily, twice-daily and weekly cadences the digest goes out at a fixed full hour (and on the chosen day, weekly).

Detail

The same computation (nextDigestAt) runs in the browser and in the alert-dispatch job. Twice a day = h and h + 12. Older rules without a time keep "every period since the last digest" until edited.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot verified

Technologies

  • nextDigestAt (src/lib/ops/alerts/schedule.ts)

Digest hour and day

controlalerts-digest-hour

Local full hour of the digest; for weekly, also the weekday.

Detail

Computed by nextDigestAt (15-min steps, daylight saving included) in the browser and in the alert-dispatch job.

Sources

No external source: computed in the app.

Technologies

  • nextDigestAt
  • Intl.DateTimeFormat (fuso IANA)

Channel: Push (Web Push)

controlalerts-ch-push

System notification on this device, sent by the server even with the app closed.

Detail

Browser subscription (pushManager.subscribe with the VAPID public key from /api/alerts/vapid) stored on the server; the alert-dispatch job encrypts and sends it (RFC 8291/8292). Needs a registered service worker (production only) and notification permission.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/vapid (VAPID public key)/api/alerts/vapidnot verified
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified
Web Push Protocol (RFC 8030/8291/8292)—not verified
Push API (MDN)—not verified

Technologies

  • pushManager.subscribe
  • service worker (public/sw.js)

Enable push in this browser

controlalerts-enable-push

Asks for permission, subscribes this browser to Web Push and registers the subscription on the server.

Detail

Uses the public key from /api/alerts/vapid. With no registered service worker (development) or a denied permission it shows the reason; it never fakes success.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/vapid (VAPID public key)/api/alerts/vapidnot verified
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified
Push API (MDN)—not verified

Technologies

  • Notification.requestPermission
  • pushManager.subscribe

External channel of this browser

controlalerts-ch-external-pick

Tick which channels of this browser receive this rule.

Detail

Only channels created by this browser (device token). On save the rule is published to /api/alerts/publish; with no external channel, it is unpublished.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified
METAQUANTICS /api/alerts/publish + alert-dispatch job (every 5 min)/api/alerts/publishnot verified

Technologies

  • syncPublications (so publica o que mudou)

Channels in this browser

controlalerts-device-channels

This browser’s Push and webhooks on the server: list, test and remove.

Detail

Identified by a random token kept only here; the server stores only its sha256. Without database or flag it shows COMING SOON with the reason.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified

Technologies

  • token de dispositivo (32 bytes, base64url)
  • localStorage

Register webhook

controlalerts-device-add-webhook

Registers an https URL to receive the signed alerts.

Detail

The URL goes through the server anti-SSRF validation. The signing secret is generated on the server and shown only once.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified

Technologies

  • validateWebhookUrl (anti-SSRF)

Test channel

controlalerts-device-test

Sends a test message to this channel and shows the result.

Detail

POST /api/alerts/channels/test; the test does not count as a channel failure.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/channels/test (test message)/api/alerts/channels/testnot verified

Remove channel

controlalerts-device-remove

Deletes this channel from the server; rules that used it stop sending to it.

Detail

DELETE /api/alerts/channels. Removing push does not revoke the browser notification permission.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified

Webhook secret

controlalerts-webhook-secret

HMAC key of your webhook, shown only now: copy it and keep it in your receiver.

Detail

It is not stored in this browser and cannot be read again; to change it, remove and register the webhook again.

Sources

SourceRouteLicense
METAQUANTICS /api/alerts/channels (this device’s channels; token stored only as sha256)/api/alerts/channelsnot verified

Technologies

  • Clipboard API

Copy the secret

controlalerts-webhook-secret-copy

Copies the secret to the clipboard.

Detail

Without clipboard permission, select the text and copy it by hand; the secret is not stored in this browser.

Sources

No external source: computed in the app.

Technologies

  • Clipboard API

I saved it

controlalerts-webhook-secret-done

Closes the dialog; the secret cannot be seen again.

Detail

The dialog only closes through this button (not Esc nor an outside click), so the secret is not lost by accident.

Sources

No external source: computed in the app.

Merged fires

controlalerts-history-merged

Different rules firing on the same item/story within 2 h become a single entry (and a single notification).

Detail

The badge shows how many fires were merged; the title lists the rules.

Sources

No external source: computed in the app.

Technologies

  • mergeIntoHistory (2 h, mesma historia)

Alert Center

controlalerts-center

Live feed, rules, history, channels and notification preferences in one place.

Detail

Opens over any page (the a key, Meridian on the map, the alerts badge in the bar or the /alerts route). Esc closes only the top layer: with the wizard open, it closes the wizard first. The browser Back button also closes the Alert Center. The alert engine runs on every page.

Sources

No external source: computed in the app.

Alert sound

controlalerts-prefs-sound

Plays a synthesized sound when an alert arrives through the on-screen notification.

Detail

Starts off. The sound only plays after a gesture (the Test button unlocks audio) and only for fires at the chosen severity or above. With several tabs open, only the leader tab plays.

Sources

No external source: computed in the app.

Technologies

  • WebAudio (src/lib/live/audio.ts)

On-screen notifications

controlalerts-prefs-toast

Picks the corner and how long the notice stays visible.

Detail

Applies to the In the app channel of every rule. The default is the top right corner; at the bottom right, in the Console and Ripple, notices move up so they do not cover the page ones. Until dismissed keeps the notice until you close it. The change shows at once and in every open tab.

Sources

No external source: computed in the app.

Technologies

  • sonner (shadcn/ui)

System notifications

controlalerts-prefs-browser

Browser permission state, request and test.

Detail

Permission is only requested when you click Allow. If it is blocked, allow it in the site permissions of the browser. Applies to rules with the Browser notification channel on.

Sources

SourceRouteLicense
Web Notifications API (MDN)—not verified

Technologies

  • Notification API

Minimum severity to notify

controlalerts-prefs-min-severity

Below this severity the fire goes to History only, with no toast, notification or sound.

Detail

Global filter for this device, applied after the rule quiet hours. It does not change push or webhook, which follow the published rule.

Sources

No external source: computed in the app.

Default quiet hours

controlalerts-prefs-default-quiet

Pre-fills the quiet hours of new rules.

Detail

Uses the same editor as the Cadence step (mode and window in the Ops clock time zone). Existing rules do not change.

Sources

No external source: computed in the app.

Technologies

  • quietDecision

Rules and limits

What the module promises about data honesty, licenses and restrictions, and what is still marked as coming soon.

  • Evaluated only while the app is open

    Rules live in the browser and are evaluated by the open page, on any screen of the app (not only /alerts). Nothing fires while the app is closed, and the interface says so. With several tabs only the leader tab evaluates, to avoid duplicates.

  • Alert Center and Preferences for this device

    The Center opens over any page (key a, the Meridiano Alerts button, the top-bar alerts badge); /alerts is just a direct link that opens the Center. The Preferences tab stores on this device the sound, the position and duration of notices, the system notification, the minimum severity to notify and the default quiet hours for new rules. Push and webhook, delivered by the server, do not use these preferences: they follow the published rules.

  • Channels

    In-app: toast, bell and history; in the browser: the Notification API (opt-in), delivered while the app is open. Push (Web Push) and webhook (a JSON POST signed with HMAC-SHA256 to an https URL) are delivered by the server, every 5 min and even with the app closed, from the published copy of the rules that use those channels. E-mail remains unavailable (there is no provider): nothing is sent by e-mail.

  • No plan limit

    The original limit of 3 alerts is not applied; there is only a technical cap of 50 rules and a ring history of 200 firings.

  • Real routes with a tested extractor

    Rules can only target the 19 feeds that have a real route in the app and a tested extractor.

Decisions

Decisions recorded in the clone register for this module (text in Portuguese, as written in the repository).

IDDecisionReasonCost if wrong
D-A-11Alertas (Task 12) — modelo e persistência. Regra v2 versionada com zod (src/lib/ops/alerts/model.ts): nome, ligada, fontes (ids api.* do registry real de conectores; só as 12 com extrator), palavras (qualquer/todas + negações; texto simples, sem regex, sem acento/caixa), região (lugares por texto, caixa lat/lng com antimeridiano, zona = polígono/retângulo/círculo do Cartographer copiado para a regra ao salvar), severidade mínima normalizada (info→crítica; mapeamento por fonte) e magnitude mínima (só itens com magnitude), cadência (tempo real com intervalo mínimo, resumo por hora, resumo diário) e canais. Regras, estado do avaliador e histórico ficam em localStorage atrás de AlertsRepository (async; trocar por Supabase = mesma interface); entradas corrompidas são descartadas uma a uma. Regras do wizard antigo (metaquantics.ops.alerts.v1) migram uma vez para o v2 (fontes sem extrator saem; regra sem fonte restante é descartada; o v1 não é apagado). Sem expiração de 90 dias (nada no servidor para limpar).O wizard antigo só guardava regras; o pedido é ponta a ponta.Mapear outro backend é local ao repositório.
D-A-12Limite de plano do original (3 alertas no Hobbyist) NÃO é aplicado; só um teto técnico de 50 regras (mensagem ao atingir) e histórico em anel de 200 disparos.Não há contas/planos neste app; o teto evita localStorage inchado.Trocar o teto é uma constante (MAX_RULES).
D-A-13Avaliação só com o app aberto. O runtime (runtime.ts, ligado pelo AlertsPanel, que também está em /alerts) consulta SOMENTE as rotas dos feeds das regras ativas, com a mecânica do use-feed (pausa com a aba oculta, sem fetch concorrente, timeout). Avaliador puro (evaluate.ts): 1ª leitura de cada fonte por regra só marca o existente como visto (não dispara), dedupe por chave estável (fonte:id; GDACS usa o link porque o id da rota é contador instável; furacão inclui a categoria), cooldown com acúmulo em lote, teto de 12 disparos/h por regra, fila limitada (excedente vira contador dropped, total honesto) e digest determinístico (severidade ↓, data ↓, chave ↑; amostra de 10). Editar/religar uma regra reinicia o estado (re-priming). Com várias abas só a "líder" (heartbeat em localStorage, TTL 20 s) avalia, para não duplicar disparos. Nada é avaliado com o app fechado e a UI diz isso. Canais reais: toast + sino + histórico (in-app) e Notification API (opt-in; permissão pedida SÓ no clique do botão).Sem servidor com contas/armazenamento não há avaliação em segundo plano honesta.Avaliar no servidor exige contas + cron (pg_cron/pgmq, D-05).
D-A-14Webhook entregue como indisponível (desligado, com tooltip explicando). Entregar webhook com segurança exige servidor com autenticação e armazenamento: sem conta não há onde guardar o segredo HMAC por regra, e um endpoint público que dispara URLs informadas pelo usuário é um relé aberto (SSRF/abuso) mesmo com https-only, bloqueio de IP privado/loopback, redirect: manual, timeout de 5 s e retry 0 (rebinding de DNS e uso como proxy continuam possíveis). Por isso não há validador de URL nem rota de webhook; o modelo não tem esse canal. Reabrir quando houver auth + storage (segredo gerado e guardado no servidor).Regra do pedido: só entregar se for seguro.Implementar depois, com conta por usuário.
D-A-15POST /api/alerts/evaluate NÃO foi criada. As regras ficam no navegador; uma rota protegida por bearer (como as de cron) exigiria o segredo no cliente (impossível) ou ficaria aberta, e avaliaria os mesmos snapshots públicos que o navegador já lê — sem valor novo.Sem armazenamento/conta no servidor a rota só duplicaria o cliente.Criar junto com o armazenamento de regras no servidor.
D-A-16E-mail = "em breve" (sem provedor; mostrado desabilitado, nada é enviado). Zona desenhada = real (polígono/retângulo/círculo do repositório do Cartographer, ringOfShape); a caixa de coordenadas é por campos numéricos (a câmera do mapa não é exposta pelo OpsMap, que não foi tocado) — para desenhar no mapa usa-se a zona. Fontes sem coordenadas (notícias, KEV, FEMA, vulcões) ficam de fora quando há caixa/zona; em conflitos a coordenada é a do centro da zona.Honestidade: nada simulado.Expor o viewport do mapa é uma mudança isolada no OpsMap.
D-A-17Integração com /alerts e LiveAlerts: a página /alerts ganhou o botão "Alertas" (sino de não lidos, regras e histórico, e roda o avaliador enquanto estiver aberta); LiveAlerts.tsx (1300 linhas, legado) não foi alterado. O botão "Testar regra" usa previewRule (pura): consulta as fontes uma vez, mostra contagem e amostra, não grava histórico, não consome o estado de "visto" e não notifica. alert-rules.ts (v1) foi removido (superseded; sem importadores).Não quebrar o feed legado.—
D-A-18Onda de correções do painel de alertas. (1) O <Toaster/> do sonner vai por createPortal ao document.body: dentro da nav da SubBar o backdrop-filter vira o bloco contendor de filhos fixed e cortava o toast. (2) Pollers de alerta NÃO pausam com a aba oculta (decisão): continuam em cadência lenta (as fontes já são ≥ 300 s; piso 60 s), porque o canal útil com a aba oculta é justamente a notificação do navegador; os widgets continuam pausando. Texto da UI: "enquanto o app estiver aberto, inclusive em segundo plano; nada roda com o app fechado". (3) Leitura inválida NÃO é leitura vazia: o poller lança em error no corpo (mesma regra bodyHasUpstreamError da sondagem do painel Dados), HTTP não-OK ou extrator inválido, e a fonte não é "primada" (sem enxurrada na 1ª leitura sã). (4) Estado do avaliador: grava só se mudou, no máx. 1×/10 s + flush no pagehide, teto de ~400 KB (encurta seen), SEEN_CAP 1500→500; falha de gravação (quota) vira faixa no painel em vez de ser engolida. (5) Multi-aba: o seguidor acompanha STATE_KEY pelo evento storage, o líder recarrega o estado ao assumir, removeRule num seguidor não grava estado, e o lock é liberado no pagehide. (6) Casamento por palavra inteira (frRevisão final (I-1..I-6, M-1..M-3, M-8, M-10..M-12, M-17).Mover o líder/estado para o servidor exige contas (D-05).
D-A-19Central de Alertas global e preferências por dispositivo. O feed ao vivo, as regras, o histórico, os canais e as preferências vivem num modal de tela cheia (AlertCenter, z-[550]) montado uma vez no layout.tsx pelo AlertCenterHost; todos os menus (botão Alertas do Meridiano, destaque da TopBar, selo "n achados", tecla a, KpiStrip, BriefWidget, ReadingPanel) chamam openAlertCenter. /alerts virou link direto: abre a Central uma vez e, ao fechar, volta no histórico ou vai para /. O AlertsPanel foi removido (supera D-A-13/D-A-17 no ponto "ligado pelo AlertsPanel"): o motor de regras (runtime.ts) agora roda em todo o app, não só em /alerts, Console e Ripple, continuando só com o app aberto e com líder único entre abas. As preferências (som, toast posição/duração, notificação do sistema, severidade mínima global, horário silencioso padrão das regras novas) ficam em localStorage (metaquantics.ops.alerts.prefs.v1, versionado, leitura corrompida vira padrão) e são aplicadas por deliveryDecision (prefs.ts) só nos canais deste dispositivo; push e webhook (servidor) ignoram as preferências. O Toaster dos alertas tem id="alerts" e o host global não monta Toaster sem id. Polish (2026-10-13): posiAlertas relevantes precisam aparecer em qualquer tela e o usuário precisa controlar o incômodo sem editar regra por regra.Preferências sincronizadas entre dispositivos exigem contas (D-05).

Read from docs/clone/decisoes.md at build time. Text in Portuguese.

Module

Connectors

A navigable map Provider, Source, Connector, Job, Storage, BFF route, Query, Consumer, generated from the scanner registry in three synchronized views (Documentation, Code, Board).

Open module
  • 99documented elements

Rules and limits

What the module promises about data honesty, licenses and restrictions, and what is still marked as coming soon.

  • One source of truth

    Everything comes from registry.generated.json, produced by npm run connectors:scan; npm run connectors:scan -- --check fails on drift or on a rule violation (it runs in CI). Nothing is typed by hand.

  • Private in production

    In production the registry and health routes answer 403 registry_private unless CONNECTORS_PUBLIC_REGISTRY=1 or an admin bearer is sent.

  • Status is never invented

    Without a measured health a node is unknown. Original-catalog feeds are transcribed reference data (provenance catalog), never fake connectors, and a license stays unverified until someone reads the terms.

  • Admin routes fail closed

    Test, import, share and audit routes need CONNECTORS_ADMIN_SECRET; without it they answer 503 in production. In production they also need MQ_DATABASE_URL so the audit trail is durable.

  • License gate

    npm run license-gate checks registry/sources; with METAQUANTICS_COMMERCIAL=1 it fails on any source that is not cleared for commercial use.

Decisions

Decisions of the Connectors track (docs/connectors/decisoes.md), by title. The full text is in the repository.

IDDecision
DC-01Retrofit centralizado em src/lib/connectors/declarations/ (Task 2)
DC-02Fluxo "novo feed em ≤ 10 linhas" fica para a Task 8
DC-03Node ≥ 22.15
DC-04Scanner de segredos
DC-05Saúde unificada (Task 3)
DC-06Repositórios: interface + localStorage (padrão) + Postgres (MQ_DATABASE_URL)
DC-07Histórico de saúde (connector_health) e job
DC-08Banco: modelo de acesso e validação executada
DC-09Página /conectores, Documentação e entradas (Task 4)
DC-10Teste de conector, exportar/importar, link somente-leitura e auditoria (Task 7)
DC-11Integração final, desempenho e acessibilidade (Task 8, F9)
DC-12Catálogo dos 320 feeds do original no registry (Task 9b)
DC-13Exposição em produção: registry/saúde privados por padrão e auditoria durável obrigatória (onda transversal)
DC-14Licenças de código e trava comercial (onda transversal)
DC-15Consolidação (tickets; nada migrado nesta onda além do indicado)
DC-16Decisões abertas com o usuário
DC-17Fechamento da documentação: consumidores por item, números gerados e /docs completo (Task 14)
DC-18Camada estática gerada por script, com teto de 2,5 MB gzip (Onda 9, R-3)
DC-19HTML de terceiros é lido como texto, sem DOM (EASA CZIB, Onda 9)
DC-20Fixture real × fixture sintética, e o "Step 0" (Onda 9)
DC-21Defaults conservadores enquanto o dono não decide (Onda 9)
DC-22Fonte nova nasce pending-human; o perfil comercial reprova de propósito (Onda 9, D-12)
DC-23Lista consolidada de sanções (CSL) entra só como agregado, sem nomes (Onda 9, R-11, D.3)

docs/connectors/decisoes.md

Connectors

Menus and controls

Every menu, filter, control and tab of the /conectores page: what it is, where its data comes from and what it is for. Same text as the tooltips.

Open /conectores

Connectors

menutopbar-connectors

A navigable map of the whole data path: providers, sources, BFF routes, queries and the widgets/layers that consume them.

Detail

Opens /conectores. Everything comes from the registry the scanner generates from the code (connectors:scan), with measured health injected. Answers in a few clicks where a widget’s data comes from, what breaks if a source goes down and which tunnel is out of SLA.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • Next.js App Router

Documentation view

menuview-docs

Documentation generated from the registry: Module → Consumer → Tunnels tree, pages per consumer/provider and indexes.

Detail

Nothing is hand-written: tables, Mermaid diagrams (up to 40 nodes) and indexes (glossary, matrix, secrets, risks, out of SLA) are derived by tested pure functions.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Code view

menuview-code

The registry as code (YAML, JSON, TypeScript, OpenAPI, SQL, Mermaid), with diff and notes editing.

Detail

Read-only editor with search and folding, module/tunnel/node scope, diff against the committed registry and notes editing. Selection and filters are shared with the other views.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Board view

menuview-board

An n8n-style board: cards per kind in lanes, edges animated by status, tunnels with SLA, lineage and impact.

Detail

React Flow + ELK (Arrange), notes, proposed edges with Generate task, undo/redo and an accessible list mode. Widget and layer deep links open here with the path isolated.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Technologies

  • @xyflow/react
  • elkjs

Module filter

controlfilter-module

Restricts to the nodes of one product module (Console, Stress, Live, Ripple, OSINT or shared).

Detail

Each node’s module is inferred by the scanner from its file path or page route. Several values add up (OR).

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Kind filter

controlfilter-kind

Shows only the chosen kinds: Provider, Source, API, Query, Consumer, Secret and so on.

Detail

Kinds of the registry model (spec §4). Handy to list, say, only BFF routes or only consumers.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Status filter

controlfilter-status

Filters by each node’s current health (ONLINE, STALE, ERROR, … UNKNOWN).

Detail

Health comes from /api/connectors/registry (probe with a 30 s cache, 2× interval rule). Nodes with no measurement or declaration stay UNKNOWN: a status is never invented.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Provider filter

controlfilter-provider

Shows a provider’s whole path: the provider, its sources and everything downstream (routes, queries, consumers).

Detail

Computed by a downstream search from each provider on the registry graph.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Cost filter

controlfilter-cost

Free, freemium or paid — counting the node’s own cost and that of its upstream sources.

Detail

A consumer inherits the cost of the sources that feed it, so you can see everything that depends on a freemium source.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Plan filter

controlfilter-plan

Separates consumers with no real data (coming soon) or that depend on an external key/plan.

Detail

Uses the registry planGate field; "No plan restriction" groups the nodes without planGate.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Origin filter

controlfilter-origin

Separates connected (real) nodes from nodes of the original catalog.

Detail

"Original catalog" gathers the feeds transcribed from the original; "Catalog: no connector" only those GeoIntel does not have. Uses the registry tags original-catalog and sem-conector.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Catálogo do original (transcrição, somente leitura)registry/sources/original-catalog.jsonnot verified

Tunnel filter

controlfilter-tunnel

Restricts to one consumer’s tunnel: the consumer, the edges on the path and the sources.

Detail

Tunnels are derived by the core (upstream BFS from each consumer to its sources). The list shows tunnels with more than one node.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Tunnel picker

controlboard-tunnel

Pick a tunnel (consumer ← sources) and paint the whole path on the board, with the SLA chip.

Detail

Expands the member lanes and frames the tunnel. With "Out of SLA only" on, it lists only stale or failing tunnels.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Out-of-SLA tunnels only

controlboard-sla

Highlights the union of STALE or ERROR tunnels and dims everything else.

Detail

Uses the status and staleSince of the unified health, refreshed every 30 s while the tab is visible.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Snap to grid

controlboard-snap

While dragging, nodes snap to a 16 px grid.

Detail

Only affects manual dragging; Arrange uses the spacing computed by ELK.

Sources

No external source: computed in the app.

Technologies

  • @xyflow/react

List mode

controlboard-list

Accessible alternative to the canvas: lanes, nodes, proposals and notes as keyboard-navigable HTML.

Detail

Same slice, same health and same highlight as the board; Enter selects the node in every view.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Minimap

controlboard-minimap

Overview of the board with kind colors; drag to navigate.

Detail

Hidden on narrow screens so it does not cover the cards; click and drag to move the view.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • @xyflow/react

Board shortcuts

controlboard-shortcuts

F fits, L arranges, G groups, N adds a note, Delete removes a note/proposal, Ctrl/⌘+Z undoes.

Detail

With a card focused: arrows walk between linked nodes and Enter selects. ⌘K / Ctrl+K opens the global command palette.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Export

controlexport

Board PNG/SVG, documentation PDF and Markdown, JSON/YAML/Mermaid/OpenAPI, CSV and notes.

Detail

Generates files in the browser from the current registry (scanner + your notes). Every file leaves without sensitive data and with secrets by name only. Also opens Import and Share.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Technologies

  • SVG
  • canvas
  • ZIP (STORE)

Link expiry

controlshare-expiry

For how many days the link works (1, 7 or 30).

Detail

After expiry the link no longer opens; the server caps the expiry at 90 days.

Sources

SourceRouteLicense
Links compartilhados (Postgres ou localStorage)connector_shares · localStorage metaquantics.connectors.shares.v1not verified

Isolated path

controlisolation

Shows only the lineage and/or impact of the selected node.

Detail

Turned on by "Isolate path" (both directions) or "Impact" (downstream only) and by deep links (isolate=1 in the URL).

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Mermaid diagram

controldoc-diagram

A drawing of the tunnel with at most 40 nodes.

Detail

Above 40 nodes, the most numerous kinds are grouped. The preview loads Mermaid on demand and becomes an image; if it fails, the code stays visible.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • Mermaid

View markdown

controldoc-markdown

Switches between the formatted document and the generated markdown.

Detail

The markdown is rendered by a safe parser (no HTML); code blocks are highlighted by Shiki.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • markdown-lite
  • shiki

View in documentation

controldoc-view-docs

Opens this item’s sheet in /docs › Documented catalog: what it is, how to use it, how it is computed, sources, license, limitations, data state and history.

Detail

The link comes from the documentation contract built on the server; nodes without their own sheet (routes, sources) open the catalog of their group or do not show the button.

Sources

SourceRouteLicense
Catálogo documentado (/docs)src/lib/docs/contract.tsnot verified

Export format

controlcode-format

Chooses the language of the generated text; the editor changes its highlighting to match.

Detail

YAML and JSON are the whole registry; TypeScript is defineFeed/defineLayer declarations; OpenAPI comes from the BFF routes; SQL from tables and policies; Mermaid is a diagram of up to 40 nodes; .env.example has names only.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • CodeMirror 6

Export scope

controlcode-scope

Defines how much of the registry goes into the file: everything, one module, one consumer tunnel, or a node with its neighborhood.

Detail

The Node scope uses the node selected in the other views and includes neighbors within N hops (both directions). Edges are only included when both ends are in scope.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Neighborhood hops

controlcode-hops

How many edge hops from the node are included in the scope (0 to 4).

Detail

1 hop brings what feeds and what is fed by the node; larger values grow fast around hubs such as providers and routes.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Redact sensitive nodes

controlcode-redact

Removes description, notes, owner and code references from nodes flagged as sensitive.

Detail

On by default so the file can be shared. In any case the file only contains variable names, and text that looks like a credential is masked.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Clear filters

actionfilter-clear

Removes every active filter (search and selection stay).

Detail

Filters live in the URL; clearing them also simplifies the shareable link.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Arrange (ELK)

actionboard-layout

Repositions nodes in left-to-right layers, keeping the lane order.

Detail

elkjs (layered, partitioned by lane) runs in a lazily loaded Web Worker; the result is undoable and saved per board. Shortcut L.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • elkjs (layered)
  • Web Worker

Fit view

actionboard-fit

Zooms to show every node of the current slice.

Detail

Shortcut F. The isolated deep link already opens framed on the node path.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • @xyflow/react

Group lanes

actionboard-group

Collapses or expands the lane of the selected node (or all lanes, with no selection).

Detail

Collapsed lanes become a summary node with counts per status; edges between lanes are aggregated (×n). Above 300 nodes the board opens collapsed. Shortcut G.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Undo

actionboard-undo

Reverts the last board edit (positions, Arrange, notes, proposed edges).

Detail

History of up to 100 steps (pure reducer). Shortcut Ctrl/⌘+Z; the undone state is also written to the repository.

Sources

SourceRouteLicense
Repositório do quadro (posições, notas, propostas)localStorage metaquantics.connectors.v1not verified

Redo

actionboard-redo

Re-applies the undone edit.

Detail

Shortcuts Ctrl/⌘+Shift+Z or Ctrl+Y; the redone edit is written to the repository again.

Sources

SourceRouteLicense
Repositório do quadro (posições, notas, propostas)localStorage metaquantics.connectors.v1not verified

New note

actionboard-note

Creates a markdown note at the center of the screen, with color and an optional link.

Detail

Notes are custom nodes (kind note) saved by the repository; markdown goes through the safe parser (no HTML). Shortcut N; Delete removes the selected note.

Sources

SourceRouteLicense
Repositório do quadro (posições, notas, propostas)localStorage metaquantics.connectors.v1not verified

Technologies

  • markdown-lite

Proposed edges

actionboard-proposed

Drag from an output port to another node input to propose a link that does not exist yet.

Detail

They are blue and dotted, keep a justification and generate a task; they never enter the real lineage or the registry tunnels.

Sources

SourceRouteLicense
Repositório do quadro (posições, notas, propostas)localStorage metaquantics.connectors.v1not verified

Technologies

  • @xyflow/react

Generate task

actionboard-task

Generates issue markdown with a defineFeed() skeleton and, when it applies, the BFF route.

Detail

Pure function of the proposed edge and its endpoints; secrets by name only. Copy or download the .md.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Repositório do quadro (posições, notas, propostas)localStorage metaquantics.connectors.v1not verified

Technologies

  • defineFeed()

Propose edge

actionboard-propose

Creates a proposed edge by picking from and to in lists, without dragging (keyboard accessible).

Detail

Validates with the registry rules (job/storage/API cycle, lane direction, kind pairs) before saving; also available in list mode.

Sources

SourceRouteLicense
Repositório do quadro (posições, notas, propostas)localStorage metaquantics.connectors.v1not verified
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified

Board as PNG

actionexport-png

Image of the board with the current view and saved positions.

Detail

The SVG is drawn from the same data as the board, with theme token colors resolved on the spot, and rasterized on a canvas (scaled down if the board is huge).

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Repositório do quadro (posições, notas, propostas)localStorage metaquantics.connectors.v1not verified

Technologies

  • SVG
  • canvas 2D

Board as SVG

actionexport-svg

Board vector: lanes, cards, notes and edges by health state.

Detail

Standalone SVG (no scripts or external images); escaped text and masked credentials; sensitive nodes leave without metadata.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Repositório do quadro (posições, notas, propostas)localStorage metaquantics.connectors.v1not verified

Technologies

  • SVG

Documentation as PDF

actionexport-pdf

Opens the browser print dialog with the documentation of the visible consumers.

Detail

Uses a print stylesheet (no dependency): choose "Save as PDF". Generated from the redacted registry; honors the current filters.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Technologies

  • window.print
  • CSS @media print

Markdown/MDX ZIP

actionexport-bundle

One file per consumer and source, an index, CSVs and the registry as YAML.

Detail

Uncompressed ZIP generated in the browser. Mermaid diagrams of up to 40 nodes per tunnel. In MDX, braces and less-than signs are escaped outside code blocks.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • ZIP (STORE)
  • Mermaid
  • markdown-lite

JSON, YAML, Mermaid and OpenAPI

actionexport-data

The same exporters as the Code view, applied to the whole registry.

Detail

Mermaid uses the selected node and its neighborhood (or a registry summary with no selection). No health, no secret values.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • yaml
  • OpenAPI 3.1
  • Mermaid

Inventory and matrix CSV

actionexport-csv

Spreadsheets of the node inventory and the Consumer × Source matrix.

Detail

Text cells starting with = + - @ get an apostrophe (no formula injection). Opens with accents in Excel (UTF-8 with BOM).

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • CSV (RFC 4180)

Notes and positions

actionexport-notes

Downloads your notes, tags, owners, fallbacks, SLAs and board positions as JSON.

Detail

It is the format Import accepts back, to move your work to another browser.

Sources

SourceRouteLicense
Overrides locais (notas, tags, dono)localStorage metaquantics.connectors.v1not verified
Repositório do quadro (posições, notas, propostas)localStorage metaquantics.connectors.v1not verified

Technologies

  • JSON

Import notes and positions

actionimport

Merges notes, tags, owner, fallback, SLA and positions from JSON or YAML.

Detail

Only what is human is imported; structural fields are rejected and listed. A preview shows before applying; limit of 8 MiB and 12000 entries.

Sources

SourceRouteLicense
Overrides locais (notas, tags, dono)localStorage metaquantics.connectors.v1not verified
Repositório do quadro (posições, notas, propostas)localStorage metaquantics.connectors.v1not verified
Validação de importação (POST, admin)/api/connectors/importnot verified

Technologies

  • zod
  • yaml

Choose file

actionimport-file

Loads a JSON or YAML file into the import preview.

Detail

The file is read in the browser; files above 8 MiB are not even opened.

Sources

No external source: computed in the app.

Technologies

  • File API

Share link

actionshare

Generates a read-only documentation page, with an expiry.

Detail

With Postgres and the admin secret the link works for whoever receives it (connector_shares table). Without them it generates a local link, only for this browser, always labeled. Secrets, sensitive nodes, owners and emails never enter.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Link somente-leitura (POST, admin)/api/connectors/sharenot verified
Links compartilhados (Postgres ou localStorage)connector_shares · localStorage metaquantics.connectors.shares.v1not verified

Technologies

  • crypto.randomUUID
  • PostgreSQL

Test connector

actionaction-test

Makes 1 GET request to the node target and shows latency, status, size and an anonymized sample.

Detail

Sources and APIs only; the URL comes from the server (never the browser), without credentials, without following redirects and without writing anything. Limited to 10 per minute, audited, admin only; a paid or credentialed source requires explicit allowance and the admin secret.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Teste de conector (POST, admin)/api/connectors/testnot verified
Trilha de auditoria (GET, admin)/api/connectors/auditnot verified

Technologies

  • fetch
  • AbortController
  • sliding window rate limit

Rescan (dev)

actionrescan

Shows the command that regenerates the registry from the code. Only appears on the development server.

Detail

The button runs nothing: the scanner runs in the terminal (npm run connectors:scan; --check checks drift without writing). Then reload the page.

Sources

SourceRouteLicense
npm run connectors:scanscripts/connectors-scan.mjsnot verified

Isolate path

actionaction-isolate

Shows only this node’s lineage and impact in every view.

Detail

Writes isolate=1 into the URL: the link can be shared and opens already isolated.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Impact

actionaction-impact

Shows only what breaks if this node goes down (downstream).

Detail

Writes isolate=1&dir=down into the URL.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Open in editor

actionaction-editor

Opens the node’s file in VS Code at the exact line.

Detail

Uses vscode://file/<absolute path>:<line>. The repository path is only provided by the development server.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified

Technologies

  • VS Code URL (vscode://file)

Copy text

actioncode-copy

Copies all the generated text to the clipboard.

Detail

Copies exactly what the editor shows (current format and scope).

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Download file

actioncode-download

Downloads the generated text as a file, named after the format and scope.

Detail

The file is created in the browser; nothing is sent to servers.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Go to line

actioncode-goto

Opens the field to jump to a line of the text (Ctrl+Alt+G).

Detail

Useful in long YAML and JSON, where each node takes a block.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • CodeMirror 6

Fold and unfold

actioncode-fold

Folds or unfolds all blocks; you can also click the arrow next to the line number.

Detail

Folding everything shows only the top levels, handy for browsing the whole registry.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • CodeMirror 6

Save notes

actioncode-notes-save

Validates, sanitizes and saves the changes in this browser; the UI updates right away and rolls back on failure.

Detail

Uses the overrides repository (localStorage by default). Text that looks like a credential is masked.

Sources

SourceRouteLicense
Overrides locais (notas, tags, dono)localStorage metaquantics.connectors.v1not verified

Technologies

  • zod

Summary

tabtab-summary

Name, kind, module, current status and description of the node.

Detail

Status comes from unified health; the description, from the scanner.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Technical

tabtab-technical

Protocol, format, authentication, rate limit, interval, TTL, cost, license, plan and secret names.

Detail

Structural registry fields (owned by the scanner). Secrets appear only by variable name.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Lineage

tabtab-lineage

Where the data comes from (upstream) and what depends on it (downstream).

Detail

Breadth-first search on the registry graph, ignoring proposed-only edges. Click a node to navigate.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Code

tabtab-code

Files and lines where the node is defined or used.

Detail

Scanner references (codeRefs). "Open in editor" uses the vscode://file protocol and only works on the development server.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • VS Code URL (vscode://file)

Sample

tabtab-sample

Result of the last connector test: latency, status and an anonymized sample.

Detail

Run "Test connector" to see the target response: 1 GET request, truncated and anonymized sample, nothing is stored.

Sources

SourceRouteLicense
Teste de conector (POST, admin)/api/connectors/testnot verified

Technologies

  • fetch

Notes

tabtab-notes

Human notes, tags and owner of the node.

Detail

They come from local overrides (only notes/tags/owner are human-editable). Editing arrives with the Code view; for now it is read-only, in safe markdown.

Sources

SourceRouteLicense
Overrides locais (notas, tags, dono)localStorage metaquantics.connectors.v1not verified

Technologies

  • markdown-lite

History

tabtab-history

Current health state and the audit trail of the node connector tests.

Detail

The full history (connector_health, every 5 min) only exists with Postgres active. The test audit trail comes from connector_audit (Postgres) or the server memory, and requires the admin secret.

Sources

SourceRouteLicense
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified
Trilha de auditoria (GET, admin)/api/connectors/auditnot verified

Export the registry

tabcode-mode-export

Generates the registry (or a slice) as YAML, JSON, TypeScript, OpenAPI, SQL, Mermaid, .env.example or JSON Schema.

Detail

The text is generated in the browser from the current registry (scanner + your notes), without health data or secret values. The same scope and format always give the same text.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Technologies

  • yaml
  • OpenAPI 3.1
  • Mermaid
  • JSON Schema

Diff against the committed registry

tabcode-mode-diff

Shows nodes, edges and tunnels added, removed or changed against registry.generated.json.

Detail

Compares the file committed in the repository with the current registry (running scanner + your local notes). Health fields are ignored; each changed entity is shown as a unified diff.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Overrides locais (notas, tags, dono)localStorage metaquantics.connectors.v1not verified

Edit notes

tabcode-mode-notes

Edits the node notes, tags and owner, edge fallback and tunnel SLA; everything else stays locked.

Detail

Edits are validated with the same rules as the registry merge, sanitized (no HTML) and saved in this browser (localStorage). They show in every view right away.

Sources

SourceRouteLicense
Overrides locais (notas, tags, dono)localStorage metaquantics.connectors.v1not verified

Technologies

  • zod
  • markdown-lite

Live health

panelboard-health

Time of the last health measurement, fetched every 30 s.

Detail

Current mode: polling /api/connectors/health, paused while the tab is hidden. There is no Realtime subscription because the app has no Supabase client.

Sources

SourceRouteLicense
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Technologies

  • polling 30 s

Node card

panelboard-card

Kind (color and icon), name, status, 3–5 metadata fields and the node inputs/outputs.

Detail

Drag to move, pull the ports to propose edges, resize when selected and collapse with the button. ERROR status pulses.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Technologies

  • @xyflow/react

Lane

panelboard-lane

Data-flow column: Sources → Connectors → Jobs → Storage → API → Queries → Consumers.

Detail

Collapse swaps the lane for a summary node; secrets (env names) sit in the Connectors lane.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Tunnel chip

panelboard-chip

Status, SLA, freshness target and since when the tunnel is out of SLA.

Detail

The freshness target is the smallest interval on the path; staleSince comes from the unified health.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Lineage and impact

panelboard-impact

Selecting a consumer highlights where its data comes from; selecting a source shows what breaks downstream.

Detail

Lists the affected consumers (impact) and offers Isolate path, which becomes the ?isolate=1 deep link.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Live counters

panelcounters

Totals of the current slice: nodes, edges, tunnels, sources, providers, consumers and health.

Detail

Recomputed on every filter and every health refresh (every 30 s). "Out of SLA" counts STALE or ERROR tunnels.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Detail panel

paneldetail

Everything about the selected node, shared by the three views.

Detail

Summary, Technical, Lineage, Code, Sample, Notes and History tabs, plus the Isolate path, Impact and Open in editor actions. On phones it opens as a drawer.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified
Overrides locais (notas, tags, dono)localStorage metaquantics.connectors.v1not verified

Module → Consumer → Tunnels tree

paneldocs-tree

Every consumer grouped by module, with its tunnel’s status and sources.

Detail

Honours filters and search. Click a consumer to open its generated document; a source, to open its page.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Consumer document

paneldoc-consumer

Purpose, tunnel diagram, sources table, routes, tables, jobs, hooks, secrets, fallbacks, notes and code.

Detail

Generated from the registry by pure functions; the sources table lists provider, protocol, format, auth, rate limit, interval, TTL, license, cost and plan.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified
.env.example (somente nomes).env.examplenot verified

Technologies

  • markdown-lite
  • shiki

Provider/source page

paneldoc-provider

License and terms, impacted consumers and health.

Detail

Impacted consumers are everything downstream of the source/provider; health adds up the known statuses.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Original catalog

panelcatalog-badge

This node comes from the original catalog, not from a GeoIntel connector.

Detail

Catalog nodes have "catalog (transcribed)" provenance and an "unverified" license; they are not probed and collect no data.

Sources

SourceRouteLicense
Catálogo do original (transcrição, somente leitura)registry/sources/original-catalog.jsonnot verified

Covered by GeoIntel

panelcatalog-level-covered

The same source is already queried by GeoIntel; the node shown delivers the data.

Detail

Decided by the coverage table (src/lib/connectors/original/coverage.ts); the scanner fails if the cited node does not exist.

Sources

SourceRouteLicense
Catálogo do original (transcrição, somente leitura)registry/sources/original-catalog.jsonnot verified
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified

Partial coverage

panelcatalog-level-partial

GeoIntel covers only part of this feed (same source without the slice, or an equivalent from another provider).

Detail

The node note explains what is missing. Partial does not count as a real connector for the feed.

Sources

SourceRouteLicense
Catálogo do original (transcrição, somente leitura)registry/sources/original-catalog.jsonnot verified
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified

No connector

panelcatalog-level-none

A feed listed in the original that GeoIntel does not have yet.

Detail

Candidates for new connectors are in docs/connectors/cobertura-320.md. No data is simulated.

Sources

SourceRouteLicense
Catálogo do original (transcrição, somente leitura)registry/sources/original-catalog.jsonnot verified

Locked fields

panelcode-notes-locked

Structural scanner fields (id, kind, module, protocol...) can only change in the source code.

Detail

The scanner owns the structural data; humans only add notes, tags, owner, fallback and SLA.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Connectors

Views and indexes

The views (Documentation, Code, Board), the generated indexes and the entry points from other screens.

Overview

indexindex-overview

Totals per kind and consumers per module.

Detail

The documentation’s starting point; honours filters.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Glossary

indexindex-glossary

Node kinds, statuses and concepts (tunnel, lineage, impact, SLA…).

Detail

Terms follow the registry model (spec §4).

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Consumer × Source matrix

indexindex-matrix

Heatmap: which sources feed each consumer, coloured by the source’s status.

Detail

Columns go from the most used source to the least used; rows are paginated to fit many consumers.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Secrets inventory

indexindex-secrets

Environment variable names, who reads them and how many consumers depend on them.

Detail

Names only (the scanner never reads values). Cross-checked with .env.example by the registry validation rules.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
.env.example (somente nomes).env.examplenot verified

Risks

indexindex-risks

No fallback, unverified license, single point of failure and paid cost.

Detail

Derived from the graph: each item shows how many consumers it affects.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified

Tunnels out of SLA

indexindex-sla

Stale or failing tunnels, and since when.

Detail

Uses the status and staleSince from unified health; refreshes every 30 s.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Registry + saúde/api/connectors/registrynot verified
Saúde unificada (sondagem 30 s)/api/connectors/healthnot verified

Original catalog

indexindex-catalog

Compares GeoIntel's real sources with the original's feeds, with coverage by category.

Detail

Lists covered, partial and no-connector feeds; each row opens the node. Respects the page filters.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Catálogo do original (transcrição, somente leitura)registry/sources/original-catalog.jsonnot verified

Public API

indexindex-api

Operations of the v1 data API, generated from the contract: path, key scope and sources with their registry license.

Detail

Same generator as /api/v1/openapi.json (OpenAPI 3.1 from the zod schemas). The API is off without PUBLIC_API_ENABLED=1; keys are issued by the admin from the user menu and every source links to its node.

Sources

SourceRouteLicense
Contrato da API pública v1 (defineOperation)src/lib/api-v1/operations.tsnot verified
Fontes públicas do registry (licença)src/lib/connectors/sources.public.generated.jsonnot verified

Technologies

  • OpenAPI 3.1
  • zod (z.toJSONSchema)

Agents (MCP)

indexindex-mcp

Read-only tools of the MCP server, generated from the same catalog as tools/list: cost in quota units, key scope, API v1 operations and sources with license.

Detail

The server speaks JSON-RPC 2.0 over POST /api/mcp (protocol 2025-06-18, no SSE) and is off without MCP_ENABLED=1. Every tool reads only the public API v1 operations (same loading path, same license filter); tools/call needs an admin-issued public API key.

Sources

SourceRouteLicense
Catálogo das ferramentas MCP (tools/list)src/lib/mcp/catalog.tsnot verified
Contrato da API pública v1 (defineOperation)src/lib/api-v1/operations.tsnot verified
Fontes públicas do registry (licença)src/lib/connectors/sources.public.generated.jsonnot verified

Technologies

  • Model Context Protocol 2025-06-18
  • JSON-RPC 2.0
  • zod (z.toJSONSchema)

View connectors

entry pointentry-widget

Opens this widget’s tunnel in /conectores with the path isolated.

Detail

Only appears when the widget exists in the registry (consumer.widget.<id>).

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Catálogo de widgetssrc/lib/ops/catalog.tsnot verified

View connectors

entry pointentry-layer

Opens this layer’s tunnel in /conectores with the path isolated.

Detail

Only appears when the layer exists in the registry (consumer.layer.<id>).

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Catálogo de camadas do mapasrc/lib/ops/map/layer-catalog.tsnot verified

View on board

entry pointentry-data-row

Opens this feed’s BFF route in /conectores with lineage and impact.

Detail

Only appears when the route exists in the registry (api.<route>).

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Manifesto de Fontes e Statussrc/lib/ops/feeds-manifest.tsnot verified

View connectors

entry pointentry-tool

Opens this tool’s tunnel in /conectores (tool → route → source), with the path isolated.

Detail

Only appears for runnable tools that exist in the registry (consumer.tool.<id>): from the data to its origin in one click.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Catálogo de ferramentas do OSINTsrc/lib/cases/tools.tsnot verified

View connectors

entry pointentry-signal

Opens this signal’s tunnel in /conectores (signal → route → source), with the path isolated.

Detail

Only appears when the internal signal exists in the registry (consumer.signal.<id>): from the number to its origin in one click.

Sources

SourceRouteLicense
Connector Registry (scanner)src/lib/connectors/registry.generated.jsonnot verified
Catálogo de sinais da Geopolíticasrc/lib/geopolitics/signals.tsnot verified
Platform

Global filters, palette and states

The shared foundations every module builds on: the global filters in the top bar, the command palette, keyboard shortcuts, map render modes, the widget state vocabulary, the feed contract, the offline policy of the service worker and the appearance (text size, follow system). Every list and number below is generated from the registries in the code when the page is built; nothing is typed by hand.

Global filters

  • What it is

    Three chips in the top bar (Window, Region/Country, Severity) that set one scope for the whole app: 7 time windows, 10 regions and 198 countries. Severity (5 levels) is coming soon: no module uses it yet; it arrives with Alerts in Wave 1.

  • What it is for

    To look at the same slice of the world without re-setting each module. The window applies to the Console map, Live, Ripple and Stress; region/country applies to the Console map, Stress, news and OSINT.

  • How to use

    Click a chip and pick a value; a small x on the chip clears it back to the default. The choice is saved in your browser and mirrored to the URL (?t=&r=&c=&s=) only when it differs from the default. The URL is an input: opening or navigating to an address with those parameters moves them into the global filter, and they win over local overrides of the same fields. After that the precedence is: module local override, then the global filter, then the default. "Copy link" writes all four fields explicitly (defaults included, with c=none for "no country"), so the link reproduces the view even in another browser. A module can override locally (shown as a "local" badge and a dot on the chip); "Clear overrides" removes them all.

  • Where the data comes from

    Windows and severities come from the global filter model; regions and the country table come from the Stress reference data. Each module applies the filter to its own data source.

  • Limitations

    Each module maps the window to its closest native range (marked with the approximation badge), so a range may not be exact. Modules without a time or geographic dimension ignore those chips; severity is not applied by any module yet. Filters are per browser, not per account.

Windows and severities

ValueMeaning
t=1h1h
t=6h6h
t=24h24h
t=48h48h
t=7d7d
t=30d30d
t=allAll
s=infoAll
s=lowLow+
s=mediumMedium+
s=highHigh+
s=criticalCritical

Command palette

  • What it is

    A universal search (Ctrl/Cmd+K) with 8 channels over the real catalogs of the app, including 10 regions and 198 countries.

  • What it is for

    To jump to a page, fly the map to a country, toggle a layer, add a widget, open a source or a OSINT tool, set the global filters or find a docs section without touching the mouse.

  • How to use

    Press Ctrl/Cmd+K, type, then Enter. Prefixes pin a channel: > actions, # layers, + widgets, @ countries. Tab shows more results from other channels. Commands for a module that is not open navigate there and run when it mounts.

  • Where the data comes from

    Each channel reads an existing catalog (navigation registry, country table, layer catalogs, widget catalog, the public source list, OSINT tools, docs menu). No list is copied.

  • Limitations

    Layers without a data source are listed last as coming soon. The source channel loads its list on demand, so it can appear a moment after the others.

Channels

ValueMeaning
navigateGo to: Top bar modes and app pages (shared navigation registry).
countriesCountries: The 10 Stress regions and 198 countries of the Stress reference table. Fly the map, open Stress or set the global filter.
layersLayers: Console map layers and World Live layers from their catalogs. Layers without a data source are listed last as coming soon. Prefix #.
widgetsWidgets: Console widget catalog; adds the widget to the active deck. Prefix +.
sourcesSources: Real source nodes from the public source list (sources.public.generated.json, loaded on demand). Opens the node in Connectors.
actionsActions: Global time window and region, copy link, clear filters and shortcuts. Prefix >.
casesOSINT: Runnable OSINT tools (real runner only). Opens the tool form.
docsDocs: Documentation sections and the API endpoint catalog of /docs.

Keyboard shortcuts

  • What it is

    The single registry of 26 shortcuts of the app, grouped by scope (global, Console, map, Live).

  • What it is for

    To work faster and to keep the help dialog honest: the dialog and the handlers read the same registry.

  • How to use

    Press ? to open the list. Esc closes dialogs and the palette.

  • Where the data comes from

    The shortcut registry in the code; this table is generated from it.

  • Limitations

    Shortcuts never fire while you type in a field. One accepted exception: ? does not open this list on / (the legacy map has its own panel).

Shortcuts

ValueMeaning
Ctrl/⌘KOpen the command paletteGlobal
?Show these shortcutsGlobal
EscClose the palette or dialogGlobal
↑↓Move between resultsGlobal
EnterRun the highlighted actionGlobal
TabCycle the row actions (fly, Stress, filter…)Global
>Palette prefix: actions onlyGlobal
#Palette prefix: layers onlyGlobal
+Palette prefix: widgets onlyGlobal
@Palette prefix: countries onlyGlobal
Alt0Text size back to 100% (Style Studio › Text size)Global
Ctrl/⌘K+Add a widget to the deckConsole
Ctrl/⌘ZUndo the last grid layout action (add, remove, move, resize)Console
Alt1–5Go to deck tab 1 to 5Console
AltPageDownNext deck tabConsole
AltPageUpPrevious deck tabConsole
Ctrl/⌘Shift← →Move the focused deck tab left or rightConsole
DeleteClose the focused deck tab (the deck stays saved)Console
F2Rename the focused deck tabConsole
ShiftTStart or stop TV modeConsole
EscExit TV modeConsole
Ctrl/⌘K#Toggle a map layerMap
EnterFinish the drawing (Cartographer)Map
BackspaceUndo the last point (Cartographer)Map
EscCancel the drawing (Cartographer)Map
Ctrl/⌘K#Toggle a Live layerWorld Live

Map render modes

  • What it is

    10 ways to draw a layer on the Console map. Dense points can be grouped into clusters (40 px radius, up to zoom 9) and a heat map turns into individual circles from zoom 9; labels appear from zoom 3.

  • What it is for

    To keep dense layers readable and to show the right geometry for each kind of data (points, lines, areas, arcs, trails).

  • How to use

    Layers pick their mode in the layer catalog; turn a layer on in the layers panel and zoom in to expand clusters.

  • Where the data comes from

    The render mode of each layer is declared in the Console map layer catalog; the modes are built by pure functions with colors from design tokens.

  • Limitations

    Layers with no data source (coming soon) draw nothing. Clusters are grouped on the client, so very large feeds still cost browser memory.

Modes

ValueMeaning
circlePoints as circles (the basic mode).
lineLines and routes.
rasterPublic raster tiles (weather radar, night lights).
clusterDense points grouped into clusters with a count.
heatmapDensity heat map; becomes circles at high zoom.
polygonFilled area plus outline.
textText labels.
arcGeodesic arcs between two places.
trailTrail with a gradient following the movement.
stormCyclone: point, solid past track, dashed forecast track and shaded cone of uncertainty.

Widget states

  • What it is

    A single vocabulary of 11 states shown in the pill of every widget that consumes data.

  • What it is for

    To tell a quiet topic apart from a broken or missing source: "no data" is not "no events".

  • How to use

    Read the pill and hover it for the explanation. States that point to a problem (source down, cached, partial, no coverage, not monitored) offer a shortcut to Data sources and Status.

  • Where the data comes from

    Derived from the polling state of the feed (data, error, age, envelope flags) and from what each widget declares (coming soon, license, not monitored, no coverage). Priority runs from the declared states, to loading, source down, no data, cached, partial (only some source feeds answered), no AI and finally live.

  • Limitations

    Not monitored means the topic has no connected source yet, so an empty widget there proves nothing. Cached shows the last saved data and its age, which can be old.

States

ValueMeaning
loadingLOADINGFetching data from the source.
liveLIVEData received from the source on the last refresh.
cachedCACHEDShowing the last saved data: the source is late or the last attempt failed.
partialPARTIALCurrent but incomplete data: only some of the source feeds answered in this reading (see n/m sources). A missing event may be a source that is down.
emptyNO DATAThe source covers this topic and recorded nothing in the current window.
unmonitoredNOT MONITOREDThis topic has no connected source yet; no data does not mean no events.
source-downSOURCE DOWNThe source did not respond. See the reason in Sources and Status.
license-omittedOMITTED BY LICENSEThe data exists, but the source license does not allow showing it here.
soonCOMING SOONPlanned feature, not available yet.
no-aiNO AISummary produced by deterministic rules, with no AI model.
no-coverageNO COVERAGENo source covers this region or topic.

Feed envelope, backoff and circuit breaker

  • What it is

    A shared response envelope (7 metadata fields; on routes that return a list, the same data travels in 8 X-Metaquantics-* headers), one request per route in the browser (every widget, map layer and Stress signal reading the same route shares one response, one cache entry and one poll scheduler, at the shortest interval among them) and a polling policy: after a failure the wait doubles up to 8x the interval (at least 5 min); after 5 consecutive failures the circuit opens and the feed retries only every 10 min or when the tab becomes visible again.

  • What it is for

    To show how fresh and how complete the data is, and to avoid hammering a source that is already failing.

  • How to use

    Nothing to do as a reader: widgets and map layers apply it. Developers answer a route with the envelope helper (object: _meta in the body; list: untouched body plus headers) and read it with the feed hook. In widgets the badge shows “Degraded” and the data age under CACHED; the tooltip carries the license and attribution.

  • Where the data comes from

    The metadata is added by the BFF routes; the polling policy lives in the per-route feed store shared by the feed hook and the map, and in its pure backoff module. Each request times out between 15 and 60 s depending on the route interval.

  • Limitations

    Adoption is progressive (a test lists the routes still pending and only lets that list shrink): routes that do not use the envelope simply carry no metadata and the old consumers ignore it. Polling pauses while the tab is hidden or while no widget of that route is on screen; when the tab comes back (or gains focus, both grouped within 250 ms) only a feed that failed or whose data is older than its interval is refetched, at most once per cycle. The per-route cache lives in the browser session only: reopening a route within its interval shows the cached response until the next poll.

Envelope fields

ValueMeaning
obtidoEmWhen the server fetched the data (ISO 8601).
itemMaisNovoEmTime of the newest item, or empty if no item has a date.
desatualizadoServed from an expired cache or a late source.
degradadoPartial answer or fallback.
licencaLicense of the data, when known.
atribuicaoAttribution to show with the data, when required.
itensNumber of items in the payload.
ValueMeaning
Consecutive failures: 060 s
Consecutive failures: 1120 s
Consecutive failures: 2240 s
Consecutive failures: 3480 s
Consecutive failures: 4480 s
Consecutive failures: 5600 s (circuit open)

Wait before the next attempt (interval of 60 s)

Offline mode and service worker

  • What it is

    A service worker installed by the browser on the first visit in production. It follows an explicit cache policy: API calls always go to the network, static files with a hash in the name are kept, map fonts and sprites are kept up to 50 MB, and pages try the network first. It also receives the Web Push of the alert channels.

  • What it is for

    To open the app faster and to keep the frame usable when the network drops, without ever presenting stale data as live, and to show alert notifications with the tab closed.

  • How to use

    Nothing to install by hand: it registers itself. Preferences › Offline mode shows whether the app is installed and the worker version. When a new version is downloaded a “New version available” toast appears; only its Reload button switches versions. Offline, the 2 shell routes open the saved frame and every widget shows SOURCE DOWN; other routes open the No connection page.

  • Where the data comes from

    The policy is a fixed list of path rules in the code (shown below), mirrored in the worker script and pinned by a test that runs the real script. The cache is named after the build version, so each deploy starts a clean cache and the previous one is deleted when the new worker takes over.

  • Limitations

    Only GET requests are handled; data never comes from the worker cache, so offline there is no data at all (by design). Only the shell routes keep a saved frame; any other page offline shows the No connection page. The worker is off in development. Browsers without service worker support (or private modes that block it) simply run without it.

Cache rules

ValueMeaning
/api/**Always the network, never the cache (live data, alert channels, status).
/_next/static/** /vendor/maplibre/**Cache first, kept until the next version: the file name carries a hash or version.
*.pbf · sprite* · 50 MBBasemap fonts and sprites: cache first, oldest removed past the size cap. Map tiles are not kept.
HTML → /offlinePages: network first; offline, the saved frame of a shell route or the No connection page (saved again in the new language when you switch languages).
/ /consoleShell routes: their HTML carries only the frame, the data comes from the API, so it can open offline (only the address without a query; with a query, offline goes to the No connection page).
metaquantics-v<build> · SKIP_WAITINGA new version waits until you click Reload in the toast; caches of older versions are deleted.
push · notificationclickAlert notifications: title and short body from the server; a click only opens addresses of this same site, focusing the tab already there or opening a new one (never changes another tab).

Appearance: text size

  • What it is

    A global text size from 90 % to 150 % (steps of 5 %) in Preferences › Style Studio › Text size and an own text size per widget in the Console (the gear on the widget header). The app is dark only.

  • What it is for

    Reading the dense HUD comfortably on any screen and distance (wall display, laptop, ultrawide) without changing the browser zoom, and enlarging only the widget that needs it.

  • How to use

    Open Preferences › Style Studio and, under Text size, use −, 100 % (back to the default) and + or drag the slider; the change is immediate. On a widget, the gear opens the same control just for it. Alt+0 returns to 100 % from any screen.

  • Where the data comes from

    The preference is saved in this browser and applied by a small script in the page head before the first paint (no flash at 100 %). It sets a CSS variable on the page root that multiplies the base font size and every fixed-pixel text size; the widget size lives in the deck layout and multiplies the global one.

  • Limitations

    There is no light palette in the design system: the app is dark only (an old follow-system preference is ignored and discarded). Text drawn inside the map (WebGL), chart labels drawn in SVG, a few legacy panels with sizes set in their own CSS and the map popups keep their size. Spacing does not grow with a widget size, only text. Saved only in this browser (not in the settings export).

What the scale touches

ValueMeaning
--metaquantics-text-scale: 90–150 % · metaquantics.app.appearance.v1Global size on the page root: the base font size (and the 2560/3440 px screens) is multiplied, so every size in rem follows.
--metaquantics-widget-text-scale: 90–150 %Own size of one widget body: multiplies the global size; the other widgets do not change. Saved in the deck layout.
text-[Npx] × --metaquantics-text-scale × --metaquantics-widget-text-scaleFixed-pixel HUD sizes (text-[7px] … text-[52px]) are multiplied by both sizes; a test fails if a new size lacks the rule.
color-scheme: dark · data-appearance="dark"Dark only: color-scheme is always dark on the page root; there is no light theme and no follow system.
Style Studio → <body> · --metaquantics-text-scale → <html>The Style Studio writes on the body and the appearance on the page root: changing preset keeps the text size.
Platform

Methodology

Formula, factors, weights, sources and method version of every deterministic score. Numbers and lists on this page are generated from the engine constants (src/lib/intel/*, src/lib/geopolitics/*); weights are editorial judgement of this project, declared, not calibrated.

Every score carries a method version. A contract test pins a fingerprint of the weights to each version: changing a weight without bumping the version fails CI. Current Stress fingerprint: c5f31b2a.

Methods index

Every versioned method, its current version and the items that use it. Weight or threshold changes bump the version (fingerprint test) and enter the history below.

MethodVersionRouteLast changeSheets
Multi-domain convergencev3/api/convergence2026-10-053
Theater force posturev2/api/force-posture2026-10-041
Chokepoint statusv4/api/chokepoints2026-10-051
Stress index (contract)v2026.12/stress2026-10-1437
Correlation by adaptersv1/api/correlation2026-10-055
Focal points (who matters now)v1.2/api/focal-points2026-10-141
Seasonal baseline and temporal anomalyv2/api/geopolitics/anomaly2026-10-141
Analyst: providers and data classv2/api/ai/analyze2026-10-144
Curated hotspotsv1/api/hotspots2026-10-072
GPS jamming (inferred)v1/api/flights2026-10-121

Multi-domain convergencev3/api/convergence

Question it answers

Where are events from different domains, seen by independent sources, piling up in the same place and time?

How it is computed

Events from the app feeds are linked pairwise when at most 110 km apart; each connected component (transitive closure) within a 24 h window is a candidate. A component becomes a card when it holds at least 3 DISTINCT domains EACH witnessed by a DIFFERENT independent source family (maximum domain → family matching). GDELT and the conflict RSS are both news media and count as one witness, so media alone (conflict + protest) never counts twice; ADS-B, AIS, USGS, FIRMS, NHC and radiation are families of their own. score = min(100, 15 × domains + 6 × log2(1 + events) + 3 × min(severe events, 5)); critical ≥ 75, high ≥ 60, otherwise medium. The card id (conv:<lat>:<lng>) is the 1° cell of the centroid: stable across polls while the centroid stays in the cell.

What it is not

Not a forecast nor a threat assessment: a deterministic co-occurrence flag, with published weights.

Limits: the id changes if the centroid moves to another 1° cell; ADS-B/AIS only see transmitting platforms; fires are the 80 strongest FIRMS detections. Each source feed has an 8 s server deadline: an unanswered feed counts as down (degraded answer, never invented).

FactorWeightSourceStatus
conflictsconflict—/api/conflictslive
gdeltconflict | unrest—/api/gdelt-events?quad=3,4&limit=300live
flightsmilitary-air—/api/flightslive
maritimenaval—/api/maritimelive
earthquakesseismic—/api/earthquakeslive
firesfire—/api/fireslive
hurricanescyclone—/api/hurricaneslive
radiationradiation—/api/radiationlive

radiusKm=110 · cellDeg=1 · windowHours=24 · minDomains=3 · minSources=3 · wDomain=15 · wVolume=6 · wSevere=3 · severeCap=5 · highAt=60 · criticalAt=75 · labelRadiusKm=300 · domains=8

Sheets Convergence, Convergence, Alert source /api/convergence

Version history

VersionDateWhat changedCommits
v32026-10-05Grouping by connected components: events within 110 km of each other (transitive closure) instead of the fixed 1° grid; score, weights and family gate as in v2; id = 1° cell of the centroid.be9c5706f1488c43d2b40
v22026-10-04Each counted domain needs an independent source family (domain → family matching); news alone never counts as two domains.069eeb77f29e3a
v12026-10-04First version: 1° × 1° cell, 24 h window, ≥ 3 distinct domains; score = 15·D + 6·log2(1+N) + 3·min(S,5).b36dbbb5d2c716

Theater force posturev2/api/force-posture

Question it answers

How much military air and naval activity is visible in each theater now, and is it rising?

How it is computed

Per theater (6 fixed boxes): points = 1 × aircraft + 2 × naval vessels + 3 × bombers + 10 if a strike package is present. Strike package = fighter + tanker + surveillance present at the same time. Level: critical ≥ 40 (or package with ≥ 20), elevated ≥ 15 (or package), otherwise normal. Trend: against the server reading 1–6 h earlier with the same AIS availability; rising/falling needs |Δ| ≥ 3 and ≥ 20 %; otherwise unknown.

What it is not

Not an order of battle: it only counts transponders that are on (ADS-B/AIS).

Limits: aircraft type comes from the ICAO model code (unknown codes count as "other"); naval is null — not zero — when AIS has no data; the trend memory resets when the server restarts. Each source feed has an 8 s server deadline: an unanswered feed counts as down (degraded answer, never invented).

FactorWeightSourceStatus
air1/api/flightslive
bomber3/api/flightslive
naval2/api/maritimelive
package10/api/flightslive

wAir=1 · wNaval=2 · wBomber=3 · packageBonus=10 · elevatedAt=15 · criticalAt=40 · packageCriticalAt=20 · trendMinHours=1 · trendMaxHours=6 · trendAbs=3 · trendRelPct=20 · theaters=6 · package=fighter + tanker + surveillance

Sheets Military Postures

Version history

VersionDateWhat changedCommits
v22026-10-04Trend compares only samples with the same AIS availability.069eeb7
v12026-10-04First version: weighted air, bomber and naval points per theater, package bonus and trend against 1–6 h old samples.b36dbbb5d2c716

Chokepoint statusv4/api/chokepoints

Question it answers

How disrupted is each maritime chokepoint according to observed signals?

How it is computed

Each of 13 chokepoints has 6 components normalized to 0–1. score = 100 × Σ(weight × value) / Σ(weight) over the components WITH a reading; coverage = weight with a reading / total weight. Warnings = NGA MSI navigational warnings in force within 300 km or naming the chokepoint, saturating at 5; warnings route down = no reading; stale feed (newest warning older than 7 days) = no reading. Flow (only with RADAR_ENABLE_NONCOMMERCIAL=1) = 1 − ships on the latest IMF PortWatch day / median of the 7 previous days, clamped to 0–1; fewer days = no comparison; median below 5 ships/day = no reading (too few ships); newest day older than 14 days = no reading; flag off = omitted by license. Without any OBSERVED component (conflict, congestion, naval, warnings, flow) the score is null and the row shows only the editorial threat level as context. Bands: elevated ≥ 25, high ≥ 45, critical ≥ 70. A missing component is never 0 or 100.

What it is not

Not a navigation warning nor official traffic data: NGA MSI warnings enter only as a count (NGA does not endorse this product) and IMF PortWatch transits only as a drop versus the previous 7 days, and only with the non-commercial flag on (Source: International Monetary Fund, PortWatch).

Limits: the editorial threat baseline is a declared judgement; transit flow (IMF PortWatch) is published days late and only enters with the non-commercial flag (otherwise coverage tops at 95 %); the Danish Straits have no PortWatch counterpart. Source: International Monetary Fund, PortWatch. Warnings: only the first coordinate in the text counts for distance and the per-chokepoint name list is editorial; NGA does not endorse this product. Each source feed has an 8 s server deadline: an unanswered feed counts as down (degraded answer, never invented).

FactorWeightSourceStatus
threat0.35/api/conflictslive
conflict0.25/api/conflictslive
congestion0.15/api/maritimelive
naval0.1/api/maritimelive
warnings0.1/api/maritime-warningslive
flowRADAR_ENABLE_NONCOMMERCIAL=1 (DM-18)0.05/api/portwatchlive

wThreat=0.35 · wConflict=0.25 · wCongestion=0.15 · wNaval=0.1 · wWarnings=0.1 · wFlow=0.05 · elevatedAt=25 · highAt=45 · criticalAt=70 · aisRadiusKm=100 · conflictRadiusKm=300 · zoneRadiusKm=500 · conflictRef=10 · navalRef=3 · warningsRadiusKm=300 · warningsRef=5 · warningsMaxAgeDays=7 · flowBaselineDays=7 · flowMaxAgeDays=14 · flowMinMedianShips=5 · minShips=5 · stoppedKn=0.5 · maxCoveragePct=100 · maxCoveragePctNoFlow=95 · observed=conflict, congestion, naval, warnings, flow · chokepoints=13

Sheets Maritime Intelligence

Version history

VersionDateWhat changedCommits
v42026-10-05IMF PortWatch daily transits become the observed flow component, only with RADAR_ENABLE_NONCOMMERCIAL=1 (DM-18): ratio = ships on the latest published day / median of the 7 previous days, value = 1 − ratio clamped to 0–1 (a traffic drop raises the score); fewer than 8 days = no comparison (never 100 %); median below 5 ships/day = no reading (too few ships); newest day older than 14 days = no reading; flag off = NOT MONITORED (omitted by license, never 0); Danish Straits have no PortWatch counterpart. The chokepoint → PortWatch id map enters the fingerprint.4e0e3a13bb7c8afed3a75
v32026-10-05NGA MSI navigational warnings in force become an observed component: warnings within 300 km of the chokepoint or naming it, saturating at 5; warnings route down = no reading (never 0); stale feed (newest warning older than 7 days) = no reading, never lifts a chokepoint out of "editorial reference only". Only flow (IMF PortWatch) stays unmonitored.230a2c1d690a66
v22026-10-04Without any observed component the score is null (editorial reference only).069eeb7
v12026-10-04First version: weighted threat, conflict, congestion and naval components; warnings and flow as unmonitored.b36dbbb5d2c716

Stress index (contract)v2026.12/stress

Question it answers

How intense is global and regional activity across the wired signal dimensions?

How it is computed

Global/regional index = weighted average of the dimensions with a live reading (weights below); each dimension = weighted average of its components saturated against editorial references. Per country, missing signals are classified: 0 (covered, nothing recorded), — (not monitored) or ✕ (source down); only zeros enter the score. Country floors: score = max(raw score, floor), with floor 55 for a level 4 travel advisory, 35 for level 3, 60 for an editorial-list war zone (weight ≥ 2) and 40 for displacement ≥ 5% of the population — only with a live or stale reading of the input (never from an absent one); with insufficient data the score is the floor itself and gets no trend. Per-country 24 h trend: Δ against the measured reading closest to 24 h ago (server `index_reading` or this browser); |Δ| < 3 = stable; no comparable reading = "no comparison".

What it is not

Not a country risk rating: it is an activity index over the feeds that are live, with explicit coverage.

Limits: saturation references and floors are editorial (D-P-04); the server comparison needs the `radar-index` job (Postgres) — without it the trend stays in the browser or says "no comparison"; low confidence = coverage < 0.6 or a source down.

Method corrections

Each reading stored in this browser’s history carries the method version in force. Readings from before this record are loaded as "legacy". When the version changes, the chart does not join the series: it cuts the line and marks "method changed (from → to)", and the 24 h and 30 d deltas do not cross the break (empty until there is an earlier reading under the current method).

FactorWeightSourceStatus
theater27conflictZoneSeverity, conflictStrikes, conflictHeadlines, conflictTerror, conflictSieges, gdeltAirstrikes, gdeltClashes, gdeltTerror, gdeltSiegeslive
strategic22gdeltPosture, gdeltCbrnlive
cyber18kevRecent, c2Online, iodaOutages, ooniBlocking, cisaAlerts, nvdCves, kevRansomware, internetShutdownslive
biospheric16quakesM45, quakesM6, gdacsWildfire, gdacsCyclones, gdacsFloods, gdacsVolcano, gdacsRedOrange, volcanoElevated, nhcStorms, tsunamiBulletins, nwsTornado, whoOutbreakslive
market8vix, fearGreed, circuitBreakerlive
civil10gdeltProtests, gdeltRiots, travelHigh, pressRepressionlive
floor:travel-l4min55/api/travel-advisorieslive
floor:travel-l3min35/api/travel-advisorieslive
floor:active-war-zonemin60/api/conflictslive
floor:displacement-highmin40/api/refugees + /api/worldbank-indicatorslive

dimensions=6 · components=38 · countrySignals=20 · floorTravelL4=55 · floorTravelL3=35 · floorWarZone=60 · floorDisplacement=40 · warZoneMinWeight=2 · displacementMinPct=5 · trendWindowHours=24 · trendDeadband=3 · trendMinCoverage=0.6

Sheets Conflict headlines, Strikes and attacks, Siege and blockade reports, Terrorism-related reports, Conflict zone severity, Earthquakes M4.5+, Earthquakes M6+, Tropical cyclones, Flood alerts, Volcano alerts, GDACS wildfire alerts, CISA KEV recent additions, Online botnet C2 servers, VIX volatility index, Protests (GDELT), Riots (GDELT), Airstrikes (GDELT), Clashes (GDELT), Terror (GDELT), Blockades (GDELT), WMD use (GDELT), Force posture (GDELT), GDACS red/orange alerts, Volcanoes on alert (US), Active cyclones (NHC), Tsunami bulletins with danger, Tornado warnings (US), Internet outages (IODA), Countries with censorship (OONI), CISA advisories (7 days), Crypto Fear & Greed, Circuit-breaker proximity, Level 3/4 travel advisories, Critical CVEs published (NVD), Outbreaks reported by WHO, Claimed ransomware victims (proxy), Countries with an internet shutdown (Access Now)

Version history

VersionDateWhat changedCommits
v2026.122026-10-14Four new signals enter the index with a small weight (half of the mean weight of the dimension, rounded down to 0.05): critical NVD CVEs in 7 days (Cyber, 0.15, saturates at 100), claimed ransomware victims from ransomware.live (Cyber, 0.15, proxy, saturates at 100), countries with an internet shutdown documented by Access Now #KeepItOn (Cyber, 0.15, saturates at 80; structural: an annual file on its own does not make the dimension observed, so without any recent reading Cyber has no score) and WHO Disease Outbreak News in 30 days (Biospheric, 0.05, saturates at 10). WHO DON and ransomware.live only count with RADAR_ENABLE_NONCOMMERCIAL=1 and never in commercial mode (METAQUANTICS_COMMERCIAL=1): when they are off they do not affect the score at all. The V-Dem electoral democracy index (CC BY-SA 4.0) is shown, not scored (owner decision D-W1c-6): it stays in the Radar panel and the country brief and is left out of the index, the series, the decomposition (JSON/CSV) and the API, so the share-alike licence does not spread. The country index gains one annual structural signal: KeepItOn shutdowns (Cyber, 0.15, log, saturates at 10; a tracked country with no shutdown documented reads 0); data older than 3 years = no reading (only the coverage changes). The index_reading series and the baseline restart on the new version.c4deeccb3c8217
v2026.112026-10-05Per-country floors (level 4 travel advisory = 55, level 3 = 35, editorial war zone = 60, displacement above 5% = 40; only with a live or stale reading of the input, never from an absent one), raw score kept, per-signal provenance, 24 h trend with the comparison origin (dead band 3; "no comparison" ≠ "stable"; a floor-only score never gets a trend) and the public route `GET /api/geopolitics/country` (W2-8, E45).6bba39b3a54928
v2026.102026-10-04Index contract: method version and fingerprint on every global, regional and country result (E45).b36dbbb5d2c716

Correlation by adaptersv1/api/correlation

Question it answers

Which different signal kinds, from independent sources, are piling up in the same place or country right now — and is it rising?

How it is computed

3 declarative adapters over 16 signal kinds from 16 app routes. Force posture: connected components of 150 km within 24 h, requires military air or naval. Escalation: per country within 48 h (country of coordinate-only signals by point-in-polygon over simplified borders); outage and censorship only count with conflict or unrest in the same country; needs 2 source families (conflict + unrest, both media, are not enough — editorial decision). Disaster cascade: components of 250 km within 72 h. In all: ≥ 2 distinct kinds, each from a different source family. score = min(100, Σ per kind [weight × highest severity of the kind / 100] + 8 × (kinds − 1)) — ten weak signals of one kind are worth less than one strong. A card needs score ≥ 30; HIGH ≥ 55, CRITICAL ≥ 75, otherwise MODERATE. Cycle of 15 min (intel-cycle job): the trend compares with the matched card (same country or centroids within half the radius) of the cycle aged between 1 and 2 intervals; |Δ| < 5 = stable; no comparable cycle = "no comparison" (never "stable"). Up to 20 source signals per card.

What it is not

Not a forecast nor a threat assessment: a deterministic co-occurrence flag per adapter, with published weights and gates.

Limits: weights, radii, windows and severity steps are declared editorial judgement; FEMA enters by country only (no coordinate); CDC health notices only when they cite a single country; OONI only with the licence switch and with a synthetic time (daily aggregate); simplified country borders (an event a few km from a border may fall in the neighbour or at sea); each feed has an 8 s deadline and the whole load a 12 s budget — an unanswered feed counts as down; the server comparison needs the intel-cycle job (Postgres) or the process memory — without them the trend falls back to this browser or "no comparison". Not a forecast nor a threat assessment.

FactorWeightSourceStatus
force-posture:military-airrequireAny35/api/flightslive
force-posture:navalrequireAny30/api/maritimelive
force-posture:conflict25/api/conflicts + /api/gdelt-eventslive
force-posture:unrest10/api/gdelt-eventslive
escalation:conflict30/api/conflicts + /api/gdelt-eventslive
escalation:unrest20/api/gdelt-eventslive
escalation:outageif conflict|unrest20/api/radarlive
escalation:censorshipif conflict|unrest15/api/ooni-censorshiplive
escalation:advisory15/api/travel-advisorieslive
escalation:sanction10/api/sanctionslive
escalation:health5/api/health-noticeslive
disaster-cascade:seismic30/api/earthquakes + /api/fema-disasterslive
disaster-cascade:tsunami30/api/tsunamis + /api/fema-disasterslive
disaster-cascade:cyclone30/api/hurricanes + /api/fema-disasterslive
disaster-cascade:radiation25/api/radiationlive
disaster-cascade:volcano20/api/fema-disasterslive
disaster-cascade:flood20/api/weather + /api/fema-disasterslive
disaster-cascade:fire15/api/fires + /api/fema-disasterslive

diversityBonus=8 · trendDeadband=5 · minScore=30 · highAt=55 · criticalAt=75 · maxSignals=20 · fpRadiusKm=150 · fpWindowHours=24 · escWindowHours=48 · escMinFamilies=2 · cycleIntervalMinutes=15 · dcRadiusKm=250 · dcWindowHours=72 · adapters=3 · kinds=16 · feeds=16

Sheets Military Postures, Escalation, Disaster cascade, Correlation, Alert source /api/correlation

Version history

VersionDateWhat changedCommits
v12026-10-05First version: 3 declarative adapters (force posture 150 km/24 h, escalation per country 48 h, disaster cascade 250 km/72 h), score = Σ weight × highest severity of the kind + 8 per extra kind, thresholds 30/55/75, cycle-to-cycle trend with dead band 5.be9c5702429bd46f1488c43d2b40

Focal points (who matters now)v1.2/api/focal-points

Question it answers

Which countries are being named in the news right now AND show measured signals on the map — and how urgent is each?

How it is computed

Per country, two sides. Headlines: the news feed (/api/news) within 24 h, de-duplicated (url, then folded title), each attributed to countries by whole-word match against a static editorial dictionary (198 countries with name, demonym and capital aliases; 14 conflict zones; 13 chokepoints with declared coastal states — never people); sports/culture/business headlines (declared negative list) are dropped; a headline naming several countries credits each. H = headlines, Hc = those with a security category (conflict/unrest/disaster/cyber by declared keywords — the feed has no category field), Heff = Hc + 0.5 × (H − Hc), S = distinct sources, R = headlines in the last 6 h. mention = min(40, 8 × log2(1 + Heff) + 6 × min(S − 1, 2) + 8 × min(R, 3) / 3). Map signals: the 13 non-structural signals of the country index (same engine as /stress; floors and the RSS headline signal never count), eligible when observed (value > 0) with score ≥ 35 — GDELT classes also need ≥ 3 events; the travel advisory is explicit: level 4 strong, level 3 moderate, below is not a signal. Per dimension (5: theater, strategic, cyber, biospheric, civil): 14 if the best eligible score ≥ 60 (strong), 7 if ≥ 35 (moderate), else 0; signal = min(40, Σ); strongDims = strong dimensions. both = 10 if Heff ≥ 2 and strongDims ≥ 1, 5 if Heff ≥ 2 and signal > 0, else 0; coherence = 10 if a headline category maps to a STRONG dimension. score = min(100, mention + signal + both + coherence), with the mention part rounded first so the displayed integer parts add up to the score. Urgency: CRITICAL when (score ≥ 70 and strongDims ≥ 1 and Hc ≥ 2 and S ≥ 2) or strongDims ≥ 3; ELEVATED at score ≥ 40; otherwise WATCH. A country without a headline enters only with signal ≥ 28; without headline and without signal it never appears. Order: score desc, ISO asc; id focal:<ISO2>, stable across polls. Up to 3 headlines per point.

What it is not

Not a ranking of people and not a forecast: a deterministic count of headline mentions and measured signals per country, with published weights; no name of any person enters the computation.

Limits: dictionary, keywords and the negative list are editorial (remaining homonyms such as Chad or "Indian Ocean" may credit a country; strong homonyms — Georgia, Jordan — need a second cue; the dictionary may grow without a version bump — only weights and thresholds are versioned); /api/news has no category field, so categories come from keywords in English headlines and a negative word such as "final" can drop a security headline; a headline naming several countries credits each in full; the news feed has an 8 s deadline and the country index a 12 s budget — an input that does not answer is reported down and the score uses the side that answered (nothing invented); a source disabled by the licence switch (OONI) is not a failure; the index is read with its own 60 s cache. Not a ranking of people and not a forecast.

FactorWeightSourceStatus
mention:log2(1+Heff)Heff = Hc + 0.5·(H − Hc)8/api/newslive
mention:sources× min(S − 1, 2)6/api/newslive
mention:recent× min(R, 3) / 3 · cap 408/api/newslive
dimension:theaterstrong 14 (score ≥ 60) | moderate 7 (score ≥ 35) · airstrikes, clashes, terror, sieges14/api/geopolitics/countrylive
dimension:strategicstrong 14 (score ≥ 60) | moderate 7 (score ≥ 35) · posture, cbrn14/api/geopolitics/countrylive
dimension:cyberstrong 14 (score ≥ 60) | moderate 7 (score ≥ 35) · outages, censorship14/api/geopolitics/countrylive
dimension:biosphericstrong 14 (score ≥ 60) | moderate 7 (score ≥ 35) · quakes, disasters14/api/geopolitics/countrylive
dimension:civilstrong 14 (score ≥ 60) | moderate 7 (score ≥ 35) · protests, riots, travel14/api/geopolitics/countrylive
signal:capGDELT k ≥ 3 · travel L4 strong, L3 moderate, below: not a signal40/api/geopolitics/countrylive
bonus:bothHeff ≥ 2 ∧ strong dimension; 5 with Heff ≥ 2 ∧ any signal10/api/news + /api/geopolitics/countrylive
bonus:coherenceheadline category × STRONG dimension10/api/news + /api/geopolitics/countrylive
category:conflicttheater | strategic · airstrike, airstrikes, air strike, air strikes, missile strike, missile strikes, drone strike, drone strikes, drones strike, rocket strike, rocket strikes, artillery strike, artillery strikes, strike on, strikes on, strike hits, missile, missiles, drone, drones, shelling, bombing, bombardment, troops, offensive, ceasefire, war, frontline, front line, artillery, rocket, rockets, attack, attacks, clash, clashes, military, warship, warships, fighter jets, invasion, fighting, intercepted, explosion, explosions, militants, gunmen, ambush—/api/newslive
category:unrestcivil · protest, protests, protesters, riot, riots, rioters, unrest, demonstration, demonstrations, demonstrators, uprising, crackdown, coup, curfew, looting, general strike, general strikes, workers strike, workers strikes, nationwide strike, strike action—/api/newslive
category:disasterbiospheric · earthquake, quake, flood, floods, flooding, hurricane, typhoon, cyclone, wildfire, wildfires, eruption, volcano, tsunami, landslide, storm, drought, heatwave, tornado—/api/newslive
category:cybercyber · outage, outages, blackout, blackouts, internet shutdown, internet cut, power cut, power cuts, censorship, cyberattack, cyber attack, hack, hacked, hackers, ransomware, malware, ddos—/api/newslive
exclude:headlineleague, leagues, tournament, tournaments, playoff, playoffs, olympic, olympics, paralympic, paralympics, grand prix, football, soccer, cricket, rugby, tennis, golf, fifa, uefa, nba, nfl, nhl, mlb, goalkeeper, world cup, davis cup, fa cup, ryder cup, stanley cup, asian cup, africa cup, gold cup, cup final, cup finals, cup tie, cup match, cup qualifier, cup qualifiers, grand final, semi final, semi finals, semifinal, semifinals, quarter final, quarter finals, quarterfinal, quarterfinals, final whistle, final score, reach final, reaches final, reached final, reach the final, reaches the final, reached the final, into the final, winning goal, late goal, own goal, scores goal, scored goal, scores a goal, scored a goal, goal of the season, football match, test match, friendly match, title match, match report, match preview, world tour, concert tour, tour dates, tour de france, pga tour, atp tour, wta tour, festival, film, films, movie, box office, premiere, concert, concerts, album, celebrity, fashion, award ceremony, awards ceremony, wins award, won award, top award, award winning, music awards, film awards, oscar, oscars, grammy, grammys, emmy, emmys, golden globe, golden globes, earnings, ipo, dividend, quarterly results—/api/newslive
excluded:headlinesnot a map signal0/api/geopolitics/countrynot monitored
excluded:stabilitynot a map signal0/api/geopolitics/countrynot monitored
excluded:pressnot a map signal0/api/geopolitics/countrynot monitored
excluded:inflationnot a map signal0/api/geopolitics/countrynot monitored
excluded:displacementnot a map signal0/api/geopolitics/countrynot monitored
excluded:internetShutdownsnot a map signal0/api/geopolitics/countrynot monitored
excluded:democracynot a map signal0/api/geopolitics/countrynot monitored

mentionLogWeight=8 · sourceWeight=6 · sourceCap=2 · recencyWeight=8 · recencyCap=3 · uncategorizedWeight=0.5 · mentionCap=40 · signalMinScore=35 · strongSignalAt=60 · strongTier=14 · moderateTier=7 · signalCap=40 · gdeltMinClassEvents=3 · travelMinLevel=3 · travelStrongLevel=4 · bothStrong=10 · bothWeak=5 · coherenceBonus=10 · criticalAt=70 · criticalHeadlines=2 · criticalSources=2 · criticalStrongDimsAlone=3 · elevatedAt=40 · minSignalWithoutHeadline=28 · windowHours=24 · recentHours=6 · maxHeadlines=3 · dictionaryCountries=198 · dictionaryZones=14 · dictionaryChokepoints=13 · mapSignals=13 · dimensions=5

Sheets GET /api/focal-points

Version history

VersionDateWhat changedCommits
v1.22026-10-14The two new annual structural country signals (Access Now #KeepItOn internet shutdowns and V-Dem electoral democracy) join the excluded list: they are not map signals. Weights and thresholds unchanged.c4deecc
v1.12026-10-06Negative list by phrase: "final", "cup", "goal", "award", "tour" and "match" only exclude inside a sports/culture phrase ("world cup", "cup final", "winning goal", "world tour"...); sports and leagues (cricket, NHL, FIFA...) enter as words; "final warning" counts again. Weights and thresholds unchanged.704ae01
v12026-10-05First version (recalibrated before publication, fix round 1): entity dictionary (countries, conflict zones, chokepoints — never people), negative list for sports/culture/business headlines; mention = min(40, 8·log2(1+Heff) + 6·min(S−1,2) + 8·min(R,3)/3) with Heff = security headlines + 0.5·others; one tier per dimension (strong 14 at score ≥ 60, moderate 7 at ≥ 35; GDELT k ≥ 3; travel L4 strong / L3 moderate), signal cap 40; both 10/5, coherence 10 only with a strong dimension; CRITICAL needs score ≥ 70 + strong dimension + 2 security headlines from 2 sources, or 3 strong dimensions; ELEVATED ≥ 40; without a headline only with signal ≥ 28.b545959b052d0d1d182d1

Seasonal baseline and temporal anomalyv2/api/geopolitics/anomaly

Question it answers

Is this signal (or dimension, or the index) outside what is normal for it on this weekday and 4 h band (UTC), judged against its own readings except the last 24 h — and by how much?

How it is computed

Series = a Stress signal, a dimension (`dimension:<id>`) or the index (`index`), in a scope (`world` + 10 regions; 62 possible series per scope). The radar-readings job writes every 30 min the value MEASURED on the server (same engine as the page, 11 routes read in-process; no feed = no reading, never zero) into signal_reading. Seasonal key = (series, scope, UTC weekday, UTC 4 h band — 6 bands per day). Baseline of a key = mean and sample standard deviation (Welford; in Postgres count/avg/stddev_samp in SQL — same statistic) of the last 90 d of readings, EXCLUDING the last 24 h (a value is never compared with its own day); dimensions and the index only count readings from the current engine version. z = (current value − mean) / sdEff, with sdEff = max(sd, floors): 10% of |mean| on every series, 2 points on 0–100 series (dimensions and index) and √max(mean, 1) on counts. No z with fewer than 24 readings or fewer than 3 distinct values ("baseline forming", never "normal"). Level by |z|: moderate ≥ 1.5 · high ≥ 2.5 · critical ≥ 3.5; negative z = "below normal"; the API returns the raw z and the UI clamps the display at ±10. Structural signals (worldBank, unhcr, keepiton, vdem) are excluded.

What it is not

Not a forecast nor a significance test: a z-score against the mean and (floored) deviation of the server readings themselves (90 d, same seasonal key, never its own day), with declared editorial thresholds; without 24 readings and 3 distinct values in the key there is no comparison ("forming", never "normal").

Limits: the baseline needs the job on Postgres (without a database everything is forming, never compared in the browser); a key needs ~3 weeks (24 readings in 4 h per weekday) and the 90 d window gives at most ~12 weeks per key (yearly seasonality is not captured); server series cover only the 11 country-engine routes (market, KEV, C2, Kp, FIRMS, NWS, volcanoes, NHC, tsunami have no baseline); the z-score assumes roughly symmetric dispersion — the sd floors bound the |z| of rare counts and near-constant series but do not remove it; thresholds and floors are declared editorial judgement. Not a forecast nor formal statistical significance.

FactorWeightSourceStatus
level:moderate|z| ≥1.5/api/geopolitics/anomalylive
level:high|z| ≥2.5/api/geopolitics/anomalylive
level:critical|z| ≥3.5/api/geopolitics/anomalylive
key:weekdayUTC—signal_reading (job radar-readings)live
key:bandh (UTC)4signal_reading (job radar-readings)live
minSampleswindow 90 d, last 24 h excluded24signal_reading (job radar-readings)live
minDistinctdistinct values3signal_reading (job radar-readings)live
sdFloor:relative× |mean|, every series0.1/api/geopolitics/anomalylive
sdFloor:scalepoints, dimension:* and index (0-100)2/api/geopolitics/anomalylive
sdFloor:countsqrt(max(mean, 1)), count signals—/api/geopolitics/anomalylive
zDisplayMaxdisplay clamp only (API keeps raw z)10/api/geopolitics/anomalylive
excluded:worldBankstructural (annual)0/api/geopolitics/anomalynot monitored
excluded:unhcrstructural (annual)0/api/geopolitics/anomalynot monitored
excluded:keepitonstructural (annual)0/api/geopolitics/anomalynot monitored
excluded:vdemstructural (annual)0/api/geopolitics/anomalynot monitored

minSamples=24 · minDistinct=3 · windowDays=90 · bandHours=4 · bands=6 · excludeRecentHours=24 · zModerate=1.5 · zHigh=2.5 · zCritical=3.5 · zDisplayMax=10 · sdFloorScale=2 · sdFloorRelativePct=10 · readingGapMinutes=30 · regions=10 · series=62 · structural=worldBank, unhcr, keepiton, vdem

Sheets GET /api/geopolitics/anomaly

Version history

VersionDateWhat changedCommits
v22026-10-14Access Now #KeepItOn and V-Dem (annual files) join the structural feeds excluded from the baseline (with World Bank and UNHCR). The series restart on method 2026.12 (dimensions and index are compared only within the same engine version).c4deecc
v12026-10-05First version (recalibrated before publication, fix round 1): radar-readings job (1 reading per series and scope every 30 min into signal_reading; only values measured on the server, never a client body); seasonal key (series, scope, UTC weekday, UTC 4 h band); mean and sample deviation by Welford (SQL count/avg/stddev_samp on Postgres) over 90 d excluding the last 24 h; dimensions and index only from the current engine version; z = (value − mean)/max(sd, floors: 10% of the mean, 2 points on 0–100 scales, √mean on counts) with at least 24 readings and 3 distinct values; moderate ≥ 1.5 · high ≥ 2.5 · critical ≥ 3.5, displayed z clamped at ±10; structural signals (World Bank, UNHCR) excluded; GET /api/geopolitics/anomaly, per-dimension badge in Stress, count vs baseline in Data feeds and the detector.anomaly alert source (high/critical only; once per level).b64afc05652885

Analyst: providers and data classv2/api/ai/analyze

Question it answers

Which AI provider may receive this request, given what kind of data it carries — and if none may, why does the screen say NO AI?

How it is computed

Not a score: the policy every AI call follows (AI Analysis, Daily Briefing, one-click overviews). Each call declares a data class. publico = items from the 9 allowlisted public feeds, the public-feed panels sent to the overview, and the AI Analysis question AFTER the personal-data gate (e-mail, CPF, CNPJ, card, phone => 422, never sent). sensivel = OSINT text, any personal data and any origin that is not provably public. sensivel may only go to a local provider or one with a data processing agreement (DPA); the catalog has 1 provider(s) and 0 of them qualify (Gemini: cloud, no DPA), so a sensitive call is refused before cache, quota or provider and the screen shows NO AI · sensitive data. Public calls go through the chain: real timeout of 9 s per attempt, cache by SHA-256 of the request for 10 min (separate per class), 5 requests per user per UTC day (signed-in account; without a session, per internet address; a plan can set another value; the master has no limit). Without a key, on failure/timeout/empty text or with the quota spent the answer is 200 with the deterministic synthesis (overview: heuristic analyst). The footer shows the provider and model that actually answered, or NO AI with the reason. Each call writes one log line with route, provider, model, data class, duration and a code — never the prompt or the answer.

What it is not

Not a content classifier nor a guarantee of what the provider does with public data: the class comes from the origin of the text (allowlisted feed, panel, OSINT) and a pattern-based personal-data gate; Gemini’s free tier may keep prompts, which is why sensitive data never goes to it. The question typed in AI Analysis counts as public data after the personal-data guard (DM-31): a person’s name the patterns do not catch still goes to Gemini, as before — this contradicts the "sensitive = anything not proven public" policy and is pending the owner’s decision.

Limits: the class is decided by origin, not by reading the content — a public-feed headline that names a person stays publico; the personal-data gate is a pattern heuristic, not a full PII classifier. Only Gemini exists (D-3): sensitive data has no AI at all until the owner adds a local or DPA provider. The cache is per server process; the AI quota is per user, on a counter shared across instances (without a database, each instance counts its own). A local model server is documented as a reserved variable only; no code reads it. The one-click overview only accepts public-feed panel payloads (Alerts, Markets, Chain): a guard test fails if a OSINT component ever mounts it.

FactorWeightSourceStatus
provider:geminilocal=no · DPA=no · receives: publico—GEMINI_API_KEY_1..8 · gemini-2.0-flashlive
class:publico9 allowlist feeds · overview panels (alerts, markets, chain) · question after the personal-data gate—/api/ai/analyze + /api/ai/briefing + /api/ai/overviewlive
class:sensivelOSINT text · personal data · unknown origin => local or DPA provider only; none => refused (NO AI · sensitive data)—/api/ai/analyze + /api/ai/briefing + /api/ai/overviewlive
fallback:deterministicno key · provider error/timeout/empty · quota spent · sensitive data => 200 with deterministic synthesis/heuristic—/api/ai/analyze + /api/ai/briefing + /api/ai/overviewlive
log:callroute, provider, model, dataClass, durationMs, code — never prompt or answer—server loglive

providers=1 · sensitiveEligible=0 · feeds=9 · quota=5 · timeoutSec=9 · cacheMin=10

Sheets POST /api/ai/analyze, POST /api/ai/briefing, POST /api/ai/overview, GET /api/ai/status

Version history

VersionDateWhat changedCommits
v22026-10-14Per-user AI quota (W4a, D-W4-11): the cap of 200 calls per day per server process and the separate per-plan quota are gone; a single quota of 5 requests per user per UTC day replaces them (signed-in account by the session e-mail; without a session, by internet address), on the counter shared across instances. The plan's "AI per day" in /admin/planos wins when filled in; the master has no limit. It counts once per request that reaches the provider (cache, no key and empty context do not spend). When spent, the routes answer 200 without AI with the reason "daily quota used" and the reset time.412da961e4fcc9f9c5d41
v12026-10-05First version (W2-6, D-3): data class publico/sensivel on every call; sensivel only to a local or DPA provider — with only Gemini (cloud, no DPA) refused with NO AI · sensitive data; /api/ai/overview moved onto the provider chain (timeout, cache, quota); provider and model shown in the AI Analysis and Daily Briefing footers come from the response; read-only Intelligence section in the Preferences menu (GET /api/ai/status); call log with route, provider, model, class, duration and code, never content.8466e5b

Curated hotspotsv1/api/hotspots

Question it answers

In which tension zones chosen by METAQUANTICS is the conflict and news activity of the last 24 h highest right now?

How it is computed

For each of the 10 own zones: count = conflict events of the current feed state whose point falls inside the zone rectangle (in an accepted overlap, only in the smaller zone) + headlines of the last 24 h naming a country of the zone (each item counts once per zone). Level 1 to 5 by the bands 2 / 5 / 10 / 20 (1 below the first). Hysteresis of 1: it goes up as soon as it reaches the upper band of the previous level; it goes down only below the lower band minus 1.

What it is not

Not a risk assessment nor a forecast: a banded count, with hysteresis so it does not flicker, over fixed zones chosen editorially.

Limits: zones, rectangles and bands are an editorial choice (nothing is measured outside the zones); the rectangle is approximate; rectangles do not overlap except for two documented cases (Yemen × Horn, Great Lakes × Horn) resolved by the smaller zone; each country belongs to one zone only; undated headlines do not count; the previous level is kept 6 h and only written when both feeds answered; with one feed down the reading is degraded; without both, no level.

FactorWeightSourceStatus
count:conflictscurrent feed state (no window): events whose point falls inside the zone bbox; in an accepted overlap only the smaller zone counts1/api/conflictslive
count:newsheadlines of the last 24 h naming a zone country (entity dictionary); undated headlines excluded1/api/newslive
bandaslevel 1 below 2; levels 2..5 from 2 / 5 / 10 / 20—/api/hotspotslive
histereseup as soon as the count reaches the upper band; down only below the lower band − 1; previous level kept 6 h, written only when both feeds answered1/api/hotspotslive

zones=10 · windowHours=24 · bands=2 / 5 / 10 / 20 · hysteresis=1

Sheets Curated hotspots, GET /api/hotspots

Version history

VersionDateWhat changedCommits
v12026-10-07First version: 10 own zones (rectangle + countries, no overlap except 2 cases resolved by the smaller zone), current conflicts inside the rectangle + headlines by country of the last 24 h, bands 2/5/10/20 and hysteresis of 1.939572b651e9df

GPS jamming (inferred)v1/api/flights

Question it answers

In which 2° cells are several aircraft reporting a degraded position accuracy right now, a possible sign of GPS interference?

How it is computed

Every aircraft in flight (not on the ground) whose ADS-B record reports NACp ≤ 4 counts. Each one falls in a 2° grid cell (latitude and longitude rounded down to a multiple of 2); a cell is published only with at least 3 such aircraft and is identified by its centre. Severity = round((1 − mean NACp of the cell ÷ 4) × 100), from 0 (mean exactly at the threshold) to 100 (mean NACp 0). Level 1 to 5 = severity ÷ 20 rounded down, plus 1, capped at 5.

What it is not

Not a confirmation of jamming or spoofing, nor an attribution of who causes it: it only counts aircraft that report a low position accuracy, on a coarse grid, from the current state of the ADS-B feeds.

Limits: an inference from the NACp that aircraft report, not a confirmation of GPS jamming or spoofing (a low NACp can also come from the aircraft’s own equipment); NACp only exists in adsb.fi records (OpenSky states carry none) and, with OpenSky as the main snapshot, adsb.fi contributes mainly its military feed, so most cells reflect military traffic; a 2° cell is coarse and does not say where inside it the interference is; a cell with fewer than 3 aircraft is not published, so no cell does not mean no interference; it shows the current state of the feed (no history, no time window); the licence is inherited from adsb.fi and OpenSky (non-commercial: the layer is blocked with METAQUANTICS_COMMERCIAL=1).

FactorWeightSourceStatus
input:nacpNACp ≤ weight, aircraft in flight only (not on the ground); NACp only exists in adsb.fi records (OpenSky carries none)4/api/flightslive
cell:griddegrees per side; latitude and longitude rounded down to a multiple of weight; the cell is reported by its centre2/api/flightslive
cell:min-aircrafta cell with fewer aircraft is not published (nothing is filled in)3/api/flightslive
severityround((1 − mean NACp ÷ 4) × 100): 0 = mean at the threshold, 100 = mean NACp 0—/api/flightslive
levelmap layer gps-jamming: 1..5 = severity ÷ weight rounded down, plus 1 (capped at 5); same colour scale as the hotspots20/api/flightslive

nacpThreshold=4 · minAircraft=3 · gridDeg=2 · levelStep=20 · levels=5

Sheets GPS jamming (inferred)

Version history

VersionDateWhat changedCommits
v12026-10-12First version (O9-B.10): publishes the calculation /api/flights already ran — NACp ≤ 4 in flight, 2° grid, at least 3 aircraft per cell, severity 0-100 from the mean NACp — and adds the level 1 to 5 (bands of 20) and the map layer.2821483

Forecast accuracyv3/api/forecasts/placar

The daily forecasts job publishes, for each template, the probability that a measurable event happens in the next 7 days: the Laplace base rate (k+1)/(n+2) over the past weekly windows of the same source (k windows reached the threshold out of n). Each forecast carries its resolution rule (judging source, metric, threshold, window) and is resolved automatically by the same source after the deadline. No language model and no prediction market are involved.

Published templates: M5+ (threshold 30), M6+ (threshold 3) and M7+ (threshold 1) earthquakes worldwide in 7 days, from the USGS count, and new entries in the CISA KEV catalog in 7 days (threshold 15).

The public scorecard uses only resolved, real forecasts with a deadline in the last 245 days: the Brier score (mean of (p − outcome)²), the in-sample climatological reference ȳ(1 − ȳ) computed after the fact, and a calibration chart with 10 buckets. These numbers are published only for a minimum cohort — 30 resolved forecasts, 5 that happened and 5 that did not; below that the scorecard is "In audit" and shows only the counts.

Known limits

  • The KEV history is rebuilt from the current catalog: entries CISA has removed no longer count in past windows.
  • Each forecast window starts at 00:00 UTC on the publication day, but the forecast is published at about 05:10 UTC, so the first hours of the window have already passed (the historical windows are aligned the same way).
  • With fewer than 30 historical windows (new source, or the history query failed) no forecast is published: the template shows "warming up (n/30)".
  • Each template history is kept in the shared cache and moves forward one weekly window at a time: between two closed windows, the series in use can lag the publication day by up to 6 days. A new window the source did not answer is left out (nothing is estimated); a lost or invalid cache redoes the 104 queries. A series saved with up to 10% of windows that failed in the full query keeps those gaps (they are not filled later) until they leave the 104-window range.
  • A judging source that is down at the deadline never resolves a forecast as "did not happen": it stays pending and, 7 days after the deadline, becomes "no resolution", outside the metric.
  • Synthetic forecasts (fixtures, demo seeding) are never listed and never enter the score.
  • Minimum cohort: with fewer than 30 resolved forecasts, fewer than 5 that happened or fewer than 5 that did not, the scorecard shows "In audit (n/30; yes x/5; no y/5)" and publishes no Brier score, climatological reference or per-bucket calibration frequency — never zero. Synthetic forecasts and "no resolution" are not in the cohort.
  • The job publishes one forecast per template per day, with 7-day windows that overlap: resolved forecasts of consecutive days of the same template are not independent, and so, since method v3, the scorecard counts one forecast per family (M5/M6/M7 earthquakes together; KEV) per non-overlapping 7-day window, and the minimum cohort counts those independent windows (the other resolved forecasts show in "N independent of M resolved"). A published probability is not rewritten (one forecast per template and deadline; the first one stays).

Live scorecard

Version history

VersionDateWhat changedCommits
v32026-10-14Forecasts v3 (W4a): the scorecard counts only independent forecasts — one per family (M5/M6/M7 earthquakes together; KEV) per non-overlapping 7-day window, picked in deadline order (same deadline: M6 before M5 before M7). The minimum cohort (30/5/5) now counts independent windows; `nBruto` shows the resolved forecasts before de-duplication, and pending and coverage keep the raw count. The probability `p` is computed as before.4f72bf6d1618d9
v22026-10-12Scorecard with a minimum cohort (O9-A.7): the Brier score, the climatological reference and the frequency per calibration bucket are published only with 30 resolved forecasts, at least 5 that happened and 5 that did not; below that the scorecard is "In audit (n/30; yes x/5; no y/5)" with those numbers null (never 0). The probability of each forecast is computed as in v1; the version is now stored with new forecasts.9b00da7
v12026-10-06First version (W3-1): probability = Laplace base rate (k+1)/(n+2) over the past weekly windows of the same public source (at least 30 windows); automatic resolution by the same source after the deadline; public scorecard with the Brier score, the in-sample climatological reference and a 10-bucket calibration over the resolved forecasts of the last 180 days, with no minimum cohort.df9c79b4c72dce1f42567

Source tier

The tier (T1 to T4) is METAQUANTICS’s own editorial judgement about each outlet, not a score copied from third parties. It applies to the Sources and Status filter, the coverage presets and the alerts tier gate. The stored value is still 1 to 4 and the news credibility base (85/70/50/30) is unchanged.

A tier only counts with a recorded human review (author “human:name” and a written basis). Unconfirmed proposals show as “Proposal:” in the tooltip and filter nothing. Outlets with an effective tier today: 9 of 10. An outlet without an effective tier shows as “Unclassified”, even when its state affiliation is documented.

ValueNameCriterion
T1Primary sourcePublishes the data or act itself (agency, instrument, service), or is a reference wire with a public corrections policy.
T2Established newsroomIdentifiable newsroom (bylines, public corrections, declared ownership) with no documented state link.
T3Interested partyOutlet of a declared party (state or institutional) or with a documented aligned line; use with corroboration.
T4Aggregator / open channelReposts or aggregates third-party content; anonymous or open channel with no identifiable newsroom of its own.
—UnclassifiedNo human review on record. It does not mean low tier or the last level: the classification is missing.

In the Sources and Status filter an unclassified outlet stays visible (it only goes away when you hide unclassified). In the alerts tier gate an unclassified outlet never passes the maximum tier, not even T4. “State” only appears when documented: its absence does not mean independent. The tier does not change the source’s license nor authorize redistribution.

Geoeconomicsmethod v3 · corridor table v3/api/geoeconomia/cenario

For each importer and HS chapter, vulnerability is 100 × concentration × transit exposure. Concentration is the Herfindahl index of the partner shares (0 to 1) and transit exposure is the fraction of the imported value whose shipping corridor passes a catalogued chokepoint. Scenarios add the potential annual impact: exposed value × disruption percentage. Trade data are the annual UN Comtrade imports of 36 large importers in 10 HS chapters (owner key, daily job, snapshot).

The corridor table is editorial and versioned: it maps each pair of regions to the chokepoints on the usual route, from public geographic knowledge, with no volumes. A chokepoint listed is potential exposure, not the share of cargo that actually passes. Land-locked seas (Bosphorus, Danish Straits) are applied by exporting country and by plausible maritime destination, never by region alone: from the Black Sea to the Baltic and the Nordics the route pays Bosphorus + Gibraltar. Mediterranean Africa (Egypt, Libya, Tunisia, Algeria, Morocco) forms one basin with the Mediterranean (measured zero between them) and pays only Gibraltar with the North Sea, the Atlantic and the Baltic/Nordics, in both directions; Baltic exports (Sweden, Finland, Poland and the Baltic states) to it also pay the Danish Straits.

The observed flow baseline is declarative only: it tells whether a chokepoint has a flow baseline today, and a chokepoint without one is reported as "no baseline". The scenario number never uses the flow.

Value of unknown corridor is never zero: other areas (OUTROS), partners without a region, region pairs without a catalogued corridor and exporters with more than one outlet (for example Russia to the Netherlands or China) go into an unknown basket. Up to 20% of the value the pair is evaluated as a lower bound; above that it is missing with the reason "unknown corridor".

The concentration ignores the undivided rest and is a lower bound whenever a partner "OUTROS" is present: either because the snapshot was compacted (top 20 partners plus "OUTROS") or because areas without a known ISO3 code were grouped into it; the result carries the flag.

A scenario total with any missing pair, or with value of unknown corridor, is shown as "≥ US$ X" with the lower-bound seal. With no evaluated pair there is no total ("no evaluated pairs"), never US$ 0. Without the owner key every pair is missing with the reason "no key".

Known limits

  • Annual data: the latest year with data, usually one to two years old; no seasonality.
  • The corridor table works at the level of the 10 Stress regions, so a country-specific route can differ.
  • Morocco is treated as a Mediterranean country; the exposure of its Atlantic ports (Casablanca) is overstated.
  • Mediterranean Africa (EG, LY, TN, DZ, MA) is treated as a whole Mediterranean basin: Egypt's Red Sea ports are not modelled (Egypt with Asia follows the regional corridor); Black Sea → Africa keeps the regional list (including Gibraltar and the Cape); inland Europe (AT, CH, CZ, HU, SK) follows the Africa–Europe corridor; the Kattegat/Sound leg is not charged from Africa to the Baltic.
  • A scenario takes up to 30 countries per request, out of 36 monitored importers; for the rest, make another request.
  • The disruption percentages of the presets are working hypotheses, not forecasts.

Version history

VersionDateWhat changedCommits
v32026-10-08Corridor table v3: Mediterranean Africa with Germany, Denmark, Sweden, Finland, Poland and the Baltic states pays only Gibraltar, as with the North Sea (before, they fell into the Africa–Europe corridor with Gibraltar, Suez, Bab-el-Mandeb and the Cape); Baltic exports (SE, FI, PL, EE, LV, LT) to Mediterranean Africa pay the Danish Straits + Gibraltar and no longer count Suez, Bab-el-Mandeb and the Cape.4823b2f
v22026-10-07Corridor table v2: Mediterranean Africa (EG, LY, TN, DZ, MA) with the Mediterranean is intra-basin (measured zero) and with the North Sea/Atlantic pays only Gibraltar, in both directions (MA treated as Mediterranean); Black Sea → Baltic and Nordics (DE, DK, SE, FI, PL, Baltic states, NO) pays Bosphorus + Gibraltar by rule instead of falling into the empty European corridor; Russia → Germany stays intra-basin. Importers go from 30 to 36 (+Denmark, Sweden, Finland, Norway, Egypt, South Africa).74e2a3af3a1f88
v12026-10-06First version: vulnerability = 100 × concentration (partner HHI) × transit exposure from an editorial corridor table between the 10 Stress regions; closed seas (Bosphorus, Danish Straits) by exporting country and plausible maritime destination; ambiguous routes and unknown corridors go into the unknown basket (lower bound up to 20%, missing above); traffic inside the same basin is measured zero; 30 importers × 10 HS chapters.36ff748a153aeeb0777d6fcb578ec3f2850fbe6bb4a80ba43361fb8f

Source: UN Comtrade (United Nations Statistics Division), https://comtradeplus.un.org

Municipal indicators (IBGE)/api/v1/indicadores/municipais

9 official IBGE metrics for the 5571 municipal units of Brazil (universe ibge-localidades-2026-10-13: municipalities, Brasília and Fernando de Noronha). Each value is an observation with territory (key br.ibge.municipio:<7-digit code>), period, unit and state; a value is never imputed. The same reading feeds the Local map, the municipal sheet, API v1 and the MCP tool indicadores_municipais.

Each observation has one of 6 states: observed; published zero (SIDRA "-" becomes 0 and is kept as zero); no record (the source lacks the unit or period, such as a municipality installed after the series); not applicable (".."); confidential ("X"); collection failure. Only the first two carry a value. The others stay uncolored on the map, with the state and the original symbol in the tooltip, and are counted apart in the legend.

The color splits the present values of the chosen scope (Brazil or one state) for the metric period into 5 bands (quintiles). Cuts are positions in the sorted list; a value equal to a cut goes to the lower band. A published zero counts for the cuts but has its own color. The legend shows N, the years and how many units have no data in each state; ties that repeat cuts are flagged.

Counts (population, area, GDP) add up. Rates, proportions, densities and per capita values aggregate only as the ratio of the sums of numerator and denominator of the same period, never as the mean of rates. Different periods between numerator and denominator return "incomparable" instead of a number, and a missing denominator is counted under its real state.

The generator (scripts/gen-br-municipal.mjs) checks the full grid (each unit × metric), the historical nulls and documented zeros of the research, the Brazil and 27-state totals of the 2026 population estimate against the official controls, and the input hashes. If any control diverges, nothing is written. The published manifest lists each control with the expected and obtained value.

Limits

  • Colors are quintiles relative to the scope and period; they do not compare different scopes or years.
  • Six indicators come from the 2022 Census (a census, not annual); GDP and GDP per capita are 2023, at current prices, and per capita GDP is not income.
  • Sewage is the Census category "general network, storm drain or septic tank linked to the network"; it says nothing about treatment. Water and sewage are percentages of occupied permanent private households.
  • Boa Esperança do Norte (MT, 5101837) was installed in 2025 and does not exist in the 2022 Census or 2023 GDP series: it shows as no record, never with an estimated value. The operational areas of RS (Lagoa Mirim and Lagoa dos Patos) are not municipalities and stay outside the universe.
  • IBGE data under CC BY 4.0 (released by the owner on 2026-10-14): attribution is required; cite IBGE, table, period and source URL.
Platform

Documented catalog

One sheet per item of every app catalog (widgets, map and Live layers, OSINT tools, Stress signals, alert sources, Sources & Status categories, palette channels, shortcuts and API routes), generated from the same registries as the tooltips and from the Connectors tunnel. Every sheet has the same fixed sections; `contract.test.ts` fails when a field is missing in either language.

Standard: DOCUMENTACAO.md (repository root). Required fields: What it is, What it is for, How to use, How it is computed, What it is not, Where the data comes from, Update interval, License, Limitations, Environment variables.

795 sheets

Console widget catalog (real and coming soon).

Console map layers, by group.

World Live globe layers (live feed, pluggable adapter or coming soon).

OSINT module tools (runnable or coming soon).

Stress internal signals, each born from a real feed.

Routes that alert rules can evaluate.

Feed groups of the Sources & Status panel.

Channels of the Ctrl+K palette.

Single shortcut registry (the "?" dialog reads the same list).

BFF routes from the API catalog (reference with parameters in API › endpoints).

Platform

Corrections

Public log of published changes that altered a displayed number or a visible behaviour. Each line names the item, the commit and the effect; it also appears in the History of the affected sheets. Generated from src/lib/docs/corrections.ts.

A bug fix that changes what the user sees adds a line here in the same commit; a change to a method weight or threshold also bumps its version in Methodology.

Effective dateRevisionPublished effectSheets
2026-10-14Forecast accuracyForecasts v3: the scorecard Brier now counts only independent forecasts (one per family per 7-day window).Forecasts published every day with 7-day windows, and the M5/M6/M7 thresholds of the same deadline, were counted as if they were independent, inflating the cohort. The scorecard now shows "N independent of M resolved" and may go back to "in audit" until it gathers 30 independent windows.O10-2.10 · 4f72bf6 · d1618d9
2026-10-14LocalLocal: 5,571 Brazilian municipalities, checked against the official listThe municipal mesh of the Local menu went from 5,570 to 5,571 units: Boa Esperança do Norte (MT, 5101837, installed on 2025-01-01) now has its own polygon and, in the 2026 Elections layer, its own result. Municipal codes are now checked against the official IBGE list (5,569 municipalities + Brasília + Fernando de Noronha) instead of the check digit, which wrongly refused 9 valid codes (2201919, 2201988, 2202251, 2611533, 3117836, 3152131, 4305871, 5203939, 5203962).
    L2 · Q31 · Q34
    2026-10-14SystemJobs: a switched-off job no longer counts as a successIn /admin/jobs and in the body of /api/jobs/run each run now has a status: ok (wrote records), ok_vazio (ran, nothing to write), skipped (flag or configuration off, e.g. alert-dispatch with flag-off) or falha (failed, including locked and timeout). Before, a job switched off by flag showed as a success. Three failures in a row highlight the job. The job lock became transactional (safe under the Supabase transaction pooler).L6 · L7 · Q10 · Q64
    2026-10-14Earth & EnvironmentStatus bar: earthquakes read from /api/earthquakesThe status bar now lists M4+ earthquakes of the last 24 h from the BFF route /api/earthquakes (USGS). It used to read /api/v1/events, whose Gold tables are empty in production, so it showed no earthquake; that route also needs a key once the public API is on. A degraded source shows the status as unknown, never online.L8
    2026-10-14Public API (v1)API v1: Gold routes get the per-IP limit and the v1 key/api/v1/search, /events, /layers and /entities now answer 429 above 120 requests per minute per IP. With PUBLIC_API_ENABLED=1 they need the public API key (401/403 in the v1 error envelope) and count on the same per-key limit as the v1 operations. /api/v1/search adds nao_e_contagem: true, because its total is the number of candidates found, not a count.L8 · Q05 · Q47 · Q56
    2026-10-14LocalMunicipal indicators: the database only serves a complete published versionThe municipal indicators (API, MCP, map and sheet) read from the database only when it holds exactly the rows of the published version (same count per indicator and year, all from the same manifest); an interrupted load keeps serving the previous complete version from the static files. Pagination cursors now carry the version: a cursor from an older version is refused instead of mixing versions. The database also refuses a published zero without a value (correction migration 0026).
      R1 · R2
      2026-10-14SystemJobs: a run that loses its lock fails as lock-lostIf the connection holding a job lock drops mid-run, the job is cancelled, can no longer open new database writes or publish a last-good snapshot, and the run is reported as falha with reason lock-lost. Before, it kept running and could be reported as a success.R3
      2026-10-14Stress index (contract)Stress: method 2026.12 adds small-weight signals; V-Dem shown onlyWorld, region and country scores can move: critical NVD CVEs, Access Now #KeepItOn shutdowns (also per country, weight 0.15) and, only in non-commercial mode, WHO outbreak news and ransomware.live victims now count with a small weight in Cyber and Biospheric. In commercial mode the restricted sources do not affect the score. V-Dem is shown in the Radar panel and the country brief but does not enter the score, the series, the decomposition or the API. An annual file alone no longer makes a dimension observed. The index series and the baseline restart on the new version. Weights and thresholds: Methodology, version 2026.12.O10-1.7 · c4deecc · b3c8217
      2026-10-13Analyst: providers and data classAnalyst and AI summary: Telegram channels no longer reach the modelBefore, headlines from the public Telegram channels in the news feed went into the AI Analysis and Daily Briefing context and, in the Alerts AI summary (the AI OVERVIEW button, POST /api/ai/overview, alerts mode), the client sent them to the model. The Telegram terms prohibit AI use, so every channel item (kind: telegram, or a t.me origin, also inside also_reported_by) is now dropped on the server before any fact is built, and the panel only sends agency (RSS) items. Channels stay on screen with a link; answers lean a little more on agencies. Collection uses the app User-Agent instead of a browser look-alike, and GET /api/news items gained the kind field (telegram or wire).N-003 · O9-A.2 · O9-E.2 · f994a5f · 389084b
      2026-10-12Forecast accuracyForecasts v2: the scorecard publishes the Brier score only with a minimum cohort (30 resolved, 5 yes, 5 no)Before, the Brier score and calibration showed up with the first resolved forecast; now, with fewer than 30 resolved forecasts, fewer than 5 that happened or fewer than 5 that did not, the scorecard (GET /api/forecasts/placar and the Forecasts tab) shows "In audit (n/30; yes x/5; no y/5)" and returns brier, brierClimatologia and the frequency of each bucket as null. The fields n, pendentes and cobertura stay; the new field auditoria carries the three counts.N-004 · O9-A.7 · 9b00da7
      2026-10-12Energy, climate and FXAir quality: the route stops answering 502 and says "source down"The OpenAQ API v2 was retired (HTTP 410) and v3 needs a key. Before, GET /api/air-quality answered 502; now it answers 200 with sourceDown: true, error "upstream_retired", empty lists and _meta.degradado, without querying OpenAQ and without any invented reading. Migration to v3 depends on a key.O9-A.4 · N-087 · 2253f07
      2026-10-12World Map and CartographerCameras: YouTube channel links are no longer resolvedGET /api/cctv/resolve no longer opens YouTube channel pages (/@channel/live, /channel/…/live) to find the video. Only SkylineWebcams pages are still resolved; a channel link answers 400 not_resolvable (with the legacy switch on; by default the route stays in quarantine and answers 410) and the viewer falls back to the external link. A link that already names a specific video is still embedded without a request.O9-A.6 · ffe83ff
      2026-10-08GeoeconomicsGeoeconomics v3: Mediterranean Africa with the Baltic and the Nordics only via GibraltarNumbers change by rule, not by fallback: trade between Mediterranean Africa (Egypt, Libya, Tunisia, Algeria, Morocco) and Germany, Denmark, Sweden, Finland, Poland and the Baltic states now counts only Gibraltar and no longer counts Suez, Bab-el-Mandeb and the Cape (EG → DE, DE → EG, DK → EG, EG → SE, EG → PL, MA → LT fell into the regional Africa–Europe corridor); exports from Sweden, Finland, Poland, Estonia, Latvia and Lithuania to it count the Danish Straits + Gibraltar and no longer count Suez, Bab-el-Mandeb and the Cape (SE → EG, PL → EG, FI → MA, LT → EG, EE → TN, LV → DZ). Netherlands ↔ Egypt, Egypt → Italy, Russia → Egypt, Ukraine → Germany and inland Europe (Egypt → Austria) do not change.O6-2.1 · 4823b2f
      2026-10-07Analyst: providers and data classAnalyst: injection filter now covers English, Portuguese and SpanishFeed text sent to the Analyst is cleaned of instruction-injection phrases in en, pt and es (ignore/forget/override previous instructions, "you are now", "act as", "new instructions:", asking to reveal the prompt). Only the imperative at the start of a clause is removed (replaced by "[removido]"), so ordinary news that merely mentions instructions is kept. Residual limitation: paraphrases, other languages and an injection in the middle of a sentence without punctuation or conjunction are not caught; the answer is also grounded (links and sources outside the context are removed). Routes and answer format are unchanged.O1-3 · §4.14 · 719f41f · ba3d128
      2026-10-07AlertsAlerts: fusion and corroboration use the same story identityAlert fusion (one notification for the same fact fired by different rules) used the exact story hash while corroboration used a fuzzy grouping, so the two could disagree. Both now use the same canonical story id (the leader of the group of equivalent headlines). A duplicate keeps its own keys in the "seen" memory: when the leader leaves the rolling feed the same story does not fire again; only a genuinely newer item fires, once. The story key stored in the event memory is unchanged.O1-6 · §4.19 · 8d3f730 · 4d207da
      2026-10-07GeopoliticalProtests: the layer reads the last hour of GDELT, with coverage n/4The protests layer used only the latest 15-minute export. With janela=1h /api/gdelt-events reads the 4 latest exports (deduplicated by GLOBALEVENTID) and reports the coverage as { n, m: 4 }; missing exports give a degraded 200, never an invented count. The route now validates its input (zod), limits to 60 calls/min per IP with Retry-After, and the internal loaders (alerts, convergence) are exempt from that limit. The default (15m) keeps its previous behaviour.O1-11 · ca2d67b · 68f034e
      2026-10-07Stress index (contract)Stress: browser history records the method version and breaks the seriesEach reading saved in this browser now carries the index method version; earlier readings count as "legacy". When the version changes the chart cuts the line and marks "method changed (from → to)", and the 24 h and 30 d deltas do not cross the break (no value until there is a reading under the current method). Scores and weights are unchanged; the method version itself was not bumped.
        O1-8 · 4e9c144 · 8de7fcd
        2026-10-07World Map and CartographerMap: day/night line is continuous at the equinoxNear the equinoxes (declination under 0.1°, about ±6 h) the terminator used a tiny epsilon and jumped ±90° between neighbouring longitudes, drawing a broken line. It now uses a single exact formula (atan2 over the absolute tangent of the declination), finite and within [-90°, 90°] on every date, which gives exactly ±90° as the declination goes to zero; there is no special window, and the "is it night here" test matches the drawn polygon at the equinox too.O1-12 · e1623fa · eceb31a
        2026-10-07ReportsReports: deck export reads the feed cache; redaction follows the source classDeck export first uses the browser feed cache (younger than the widget polling interval) and only fetches what is missing or stale; each item says its origin (cache or network) and age, and an oversized cache entry is omitted with the reason. In board exports, sanctions-list names are redacted by the class of the source (personal-data sources, today the OFAC SDN list), not by the title text; an item whose source is unknown fails closed and is redacted when its title is the generated "OFAC SDN #uid". Residual: an imported board that falsely declares a public feed with an SDN-looking title and no official URL is not redacted.
          O1-14 · E32 · 997812c · 32adfeb
          2026-10-07GeoeconomicsGeoeconomics v2: Mediterranean Africa and Black Sea → Baltic corridors; 36 importersNumbers change by rule, not by fallback: imports from Mediterranean Africa (Egypt, Libya, Tunisia, Algeria, Morocco) into Mediterranean countries no longer count Gibraltar, Suez, Bab-el-Mandeb and the Cape (measured zero) and, into the North Sea/Atlantic (and the other way round), count only Gibraltar; Morocco is treated as Mediterranean, so the exposure of its Atlantic ports is overstated. Black Sea imports (Ukraine, Romania, Bulgaria, Georgia) into Germany, Denmark, Sweden, Finland, Poland and the Baltic states now count Bosphorus + Gibraltar (zero before); Russia → Germany stays measured zero. The matrix goes from 300 to 360 pairs (36 importers); the scenario still takes up to 30 countries per request.O5-2.1 · O5-2.2 · 74e2a3a · f3a1f88
          2026-10-06News and alertsLive Alerts: a channel that answered with no posts is no longer reported as downEach source in `GET /api/news` now carries `status`: `ok` (brought posts), `empty` (a valid channel page or feed document with no posts) or `source-down` (the fetch failed, or the provider answered something that is not a channel page or feed — e.g. a WAF/challenge page with HTTP 200 — and there was no last good copy). Before, an empty channel and a channel that failed both came out as `latest: null`, counted as a failure and set `_meta.degradado`, and the Live Alerts source list showed both as "unreachable". Now `_meta.degradado` is set only when some source actually failed (down, or its refresh failed and the last good copy was served, which also sets `_meta.desatualizado`), computed from the same snapshot as each source `status`; an empty source shows "responded, no posts". The items, counts and `fontes` do not change.E3a · HANDOFF-ONDA-3 · c998f94 · 322b36d
          2026-10-06GeopoliticalSupplier risk: fire and GDACS overlays now apply`GET /api/scm-suppliers` read the fire and GDACS overlays over HTTP from `http://127.0.0.1:3000`. On Vercel deployments nothing listens there, so both overlays were missing on every request (the response was always `_meta.degradado`) and supplier risk came from earthquakes alone; in the Docker image the server binds 0.0.0.0:3000, so the GDACS overlay did work there. The fire overlay never flagged a supplier anywhere, because it read a key (`data`) that the fire route does not return. Both overlays are now read in-process from the `/api/fires` and `/api/gdelt` handlers (10 s each, result kept for 10 min per process) and the fire overlay reads `fires`: a supplier within 50 km of a FIRMS hotspot is now HIGH with "WILDFIRE PROXIMITY", and within 100 km of a GDACS alert CRITICAL, as documented. GDACS only counts when its feed answered with alerts (its empty degraded answer is not a reading). The three overlays are independent (an earthquake feed failure no longer skips the other two). Any query string now answers 400 and there is a limit of 20 calls/min per client.E3a · HANDOFF-ONDA-3 · c998f94 · 322b36d
          2026-10-06Sources & StatusPublic status: the IMF PortWatch seed no longer counts as old 3 h after the jobThe `seeds` counts of `GET /api/status` use each seed job's interval (fresh within 3× the interval). The IMF PortWatch job runs once a day but had no declared interval and fell back to the 1 h default: the seed showed as old 3 h after each successful run. The interval is now 24 h (fresh for up to 72 h). The same rule feeds the new Seed column in Sources & Status. SEC EDGAR (10 min) and CelesTrak (1 h) are unchanged.E3b · S05 · W2-5 · f7f0673
          2026-10-06Focal points (who matters now)Focal points v1.1: headline negative list by phraseThe negative list (sports, culture, business) dropped headlines by single word, so words such as "final", "cup", "goal", "award" and "tour" removed security headlines from the count ("final warning", "UN awards contract", Jerusalem's Al-Tour neighborhood). These words now exclude only inside a sports or culture phrase ("world cup", "cup final", "winning goal", "world tour", "awards ceremony"); sports and leagues (cricket, NHL, FIFA...) enter as words. In the 2026-10-06 probe (112 headlines), India went from ELEVATED 46 to WATCH 30 (a cricket headline no longer counts); the 4 CRITICAL points did not change. Weights and thresholds unchanged.E3b · E27 · 704ae01
          2026-10-06Multi-domain convergenceConvergence: PARTIAL badge when some source feeds are downThe Convergence widget showed LIVE even when only 1 of its 8 source feeds had answered, and the "no component" text showed the radius placeholder unreplaced. The badge is now PARTIAL · n/m sources whenever a source feed failed (LIVE only with all of them answering) and offers the Sources & Status shortcut; the text shows the real radius (110 km). Cards, scores and the /api/convergence route are unchanged.E3b · E13 · E20 · 31c0083
          2026-10-06World LiveLive: last good copy is no longer reported as "the source stopped publishing"The World Live notice said "the source stopped publishing" for every feed with stale content, including when METAQUANTICS could not reach the source and the route served its last good copy (degraded). The two cases are now separate notices: content stale because the source stopped publishing, and "showing the last good copy (we could not reach the source right now)". Both still do not count as live. Events, counters and routes are unchanged.A2 · S01 · 7d893e5
          2026-10-05Stress index (contract)Country index with floors, per-signal provenance and trend (method 2026.11)A country score no longer falls below a floor when a strong fact has a live or stale reading of its input (never from an absent one): US travel advisory level 4 (minimum 55) or 3 (35), an editorial-list war zone attributed to the country (60) and forced displacement above 5% of the population (40); the raw score stays in the result (`rawScore`). Measured effect on the 2026-10-05 reading (8 of 9 sources live; OONI disabled): 50 of the 198 countries got a floor; the State Department level 3 floored 25 countries and in 21 of them the score settled at 35, moving them to the "guarded" band; level 4 floored 23, war zones 8, displacement 18. A country with "insufficient data" and a floor now shows the floor as its score, labelled "minimum score by … — insufficient data" (it had no number before; 35 countries in that reading); such a score is excluded from the "with index" statistics (min, max and average use measured scores only) and never gets a trend. The per-country 24 h trend now says where the comparison came from (server via `index_reading`, this browser) and "no comparison" when there is no comparable reading — never "stable". New `GET /api/geopolitics/country?code=XX` (`?all=1`) with per-signal provenance and real `_meta.degradado/desatualizado`; Overview and List show only "n/9 live" + exceptions; the List gained the "low confidence only" filter (coverage < 60% or a source down).E45 · 6bba39b · 3a54928
          2026-10-05Multi-domain convergenceConvergence v3: connected components by radius instead of the fixed gridThe detector now links events within 110 km of each other (transitive closure) instead of requiring the same 1° × 1° cell: nearby events in neighbouring cells, which never converged before, now form a card; a group spread over several cells becomes a single card. The score formula did not change. v2 fixture (conflict, quake and military flight ~4 km apart, in cells 33 and 34): 0 cards in v2, 1 card in v3. The id stays `conv:<lat>:<lng>`, now the cell of the centroid; the map layer draws the 110 km circle around the centroid instead of the cell square.E13 · E14 · be9c570 · 6f1488c · 43d2b40
          2026-10-05Correlation by adaptersAlert and map titles in the runtime language, with the country nameAlert titles from the api.correlation source and the detector.anomaly detector (and the features of the Correlation map layer) now come out in the active language (en or pt-BR) instead of always pt-BR, and show the country name instead of the ISO2 code (“Escalation · HIGH 62 · Conflict + Travel advisory · Iran”, previously “… · IR”; in Portuguese “Escalada · ALTO 62 · … · Irã”). Dedupe keys, severity and the search text (which keeps the ISO2) are unchanged; the Test rule button and a running poller follow a language switch without restarting.E14 · E48 · acc04a4
          2026-10-05Energy, climate and FXStale CO₂ threshold: 14 to 21 daysThe weekly CO₂ series (NOAA GML, `GET /api/co2`, carbon-emissions/climate-monitor widget) is now marked STALE only when the latest week is more than 21 days old (it was 14): NOAA publishes weekly and 14 days raised a false alarm at the end of the cycle. Exactly 21 days is still current; 22 is stale. The FX threshold (4 business days) did not change. Owner decision (DM-17).S11 · DM-17 · 065700f
          2026-10-05Chokepoint statusChokepoints v3: NGA MSI navigational warnings enter the scoreThe "warnings" component (weight 0.10) is no longer NOT MONITORED: it counts NGA MSI navigational warnings in force within 300 km of the chokepoint or naming it, saturating at 5 (2 warnings = 0.4). With the warnings route down, or the feed STALE (newest warning older than 7 days — the feed seen on 2026-10-05 has been frozen since 2024-05-08), the component has no reading (never 0) and sustains no score; `/api/chokepoints` and `/api/maritime-warnings` report degraded/stale. Maximum coverage rises from 85 % to 95 % and, with a current feed, a score may change because the weight is renormalized over one more component. The Maritime Warnings layer (map and Live) moves from COMING SOON to real (with the STALE badge when the feed stops) and the OSINT tool shows the count. NGA does not endorse this product (DM-18).S01 · E19 · E26 · DM-18 · 230a2c1 · d690a66
          2026-10-05Chokepoint statusChokepoints v4: IMF PortWatch transit flow enters the score (non-commercial flag)The "flow" component (weight 0.05) is no longer NOT MONITORED when RADAR_ENABLE_NONCOMMERCIAL=1: it compares ships on the latest day published by IMF PortWatch with the median of the 7 previous days (value = 1 − ratio, so a 40 % drop = 0.4; traffic at or above the median = 0). Fewer than 8 days = no comparison; a median below 5 ships/day = no reading (too few ships: 1 versus 3 is not a 67 % drop), PortWatch route down or newest day older than 14 days = no reading (never 0, never lifts a chokepoint out of "editorial reference only"); the Danish Straits have no PortWatch counterpart. With the flag on, maximum coverage rises from 95 % to 100 % and a score may change because the weight is renormalized over one more component; flow alone can now lift a chokepoint out of "editorial reference only". With the flag OFF (default) nothing changes in the score: flow shows OMITTED BY LICENSE instead of NOT MONITORED. The Supply Chain Intelligence widget leaves COMING SOON with a Chokepoint flow tab (COMING SOON with the license reason while the flag is off). Source: International Monetary Fund, PortWatch (DM-18).S05 · E19 · W2-3 · DM-18 · 4e0e3a1 · 3bb7c8a · fed3a75
          2026-10-05AlertsAlerts: quiet hours, fixed-time digest and polling with a circuit breakerRules with quiet hours now honour them in the app and in browser notifications too: with "Critical only" and "Silence all" the fire goes to the history already read, with no toast, notification or bell, and does not use up the minimum interval (it goes out in batches, at most one per minimum interval, and what was silenced stays silent after the window); with "Critical only" critical items still notify right away and never merge into a silent entry; with a full history, already-read entries are dropped first; with "Hold and deliver" the queue waits for the end of the window and goes out as a single notice. Daily, twice-daily and weekly digests go out at a fixed full hour (Console clock time zone) instead of "24 h since the last one"; older rules keep the period until edited. Each source read gets backoff and a circuit breaker (5 failures in a row: next try in 10 min or when the tab is shown again) and pauses while the tab is hidden when no rule of that source uses browser notifications. An item that leaves the feed, is evicted from the seen memory and comes back within the rule minimum interval does not alert again.E33 · W2-9 · A1 · A2 · A6 · 47d3a42 · 5ab4b07 · 395cbd6
          2026-10-05Analyst: providers and data classOne-click overview goes through the AI provider chain`POST /api/ai/overview` (Alerts, Markets and Chain panels) called Gemini directly, with no timeout, cache or daily quota. It now uses the same server provider chain as AI Analysis and the Daily Briefing: 9 s timeout per attempt, 10-minute cache for an identical request, the shared daily quota and a call log without content. The response keeps its fields and adds `provider`, `model`, `fallbackReason` and `dataClass`; without a key, on failure or with the quota spent it still answers 200 with the heuristic analyst. The AI Analysis and Daily Briefing footers now show the provider that actually answered, or NO AI with the reason (no key, sensitive data, provider failed, no data).W2-6 · E10 · D-3 · 8466e5b
          2026-10-04Multi-domain convergenceConvergence v2: one independent source family per domainA cell only becomes a card with ≥ 3 domains, each witnessed by a different source family (GDELT and the conflict RSS count as one: media). Cards built only from news disappeared; the score formula is unchanged.E13 · 069eeb7 · 7f29e3a
          2026-10-04Chokepoint statusChokepoints v2: no score without an observed componentWith no observed reading (conflict, congestion, naval) the score is null and the row says "NO OBSERVED DATA"; the editorial threat level no longer shows as a real band.E19 · 069eeb7
          2026-10-04Chokepoint statusChokepoints with score and band on the map and in OSINTThe map chokepoints layer now reads /api/chokepoints and colors each point by band (normal, elevated, high, critical); a chokepoint with no score is neutral and labeled "no score". The Maritime chokepoint status tool in OSINT shows the score, band and method version instead of the /api/maritime risk. The score itself did not change.C29 · E42 · e980dfc
          2026-10-04Theater force postureForce posture v2: trend with the same AIS stateThe trend only compares samples with the same AIS availability; points no longer rise or fall just because ship data came back or dropped.E18 · 069eeb7
          2026-10-04ECB reference ratesECB rates with the published decimalsRates use the DECIMALS attribute of the series; rates ≥ 100 (e.g. JPY) are no longer rounded.S12 · 72ae37c
          2026-10-04Energy, climate and FXStale by data age (CO₂ and FX)CO₂ older than 14 days and FX older than 4 business days are marked STALE; CO₂ no longer shows LIVE.S11 · S12 · 72ae37c
          2026-10-04Widget statesNo data and no error = EMPTYWidgets without data and without an error show EMPTY instead of SOURCE DOWN.
            F31 · 23cc349
            2026-10-04World Map and CartographerRaster layers without endless "loading"Tile layers (e.g. weather radar) no longer stay in the loading state forever in the layer list.E37 · 68fd6e2
            2026-10-04World Map and CartographerChoropleth stable by valueCountry colours only change when the value changes; periodic polls no longer redraw the choropleth (Console and Live).
              C32 · 25382f0
              2026-10-04Global filtersCountry by headline without false positivesPossessives, hyphens and ambiguous words no longer assign news to the wrong country under the global Country filter.E02 · 56fa890 · 94ce00e
              2026-10-04News and alertsStory identity with order and negationsHeadlines with opposite meaning (negation on one side) no longer merge into one story; a conflict place re-alerts on the next day (24 h bucket).E17 · E22 · 49554be
              2026-10-04Health and travelFCDO: temporary exclusion and partial statusCountries that fail are excluded only temporarily and the response reports partial status instead of complete coverage.S07 · c2584d6 · fe14a03
              2026-10-04SanctionsOpenSanctions (non-commercial use) behind RADAR_ENABLE_NONCOMMERCIALWithout the flag, the legacy sanctions search answers "disabled for licence reasons" and the IP, domain and wallet screening (`/api/osint/crypto`) and the sanctioned-wallets section of the daily chain brief (`/api/chain/daily`) report "disabled" instead of "no hits". The official OFAC search is unchanged.DM-04 · 2415671
              2026-10-04Daily BriefingDaily Briefing with server context, provider chain and NO AIThe widget no longer collects feeds or sends context: `POST /api/ai/briefing` accepts only `{ locale }`, rejects `context` (400) and builds the context on the server from the same 9-feed allowlist as AI Analysis. Without an AI key, with the provider failing or the daily quota exhausted it answers 200 marked NO AI (previously 503) with a deterministic synthesis and the source list; links and out-of-context sources written by the model are removed; the same answer is cached for 10 min.E29 · bd7644e
              2026-10-04Health and travelCountry brief with the UK FCDO second opinionThe country brief (`/stress/pais/<ISO2>`, card and evidence, and the exported Markdown) now shows, next to the US advisory, the UK FCDO advisory (level by coverage) and whether the two sources differ (approximation: the scales are not identical; "high" = US 3 or 4 vs FCDO against travel to the whole country), with the Open Government Licence v3.0 attribution. When the FCDO reading is still partial and the country has not been read, the brief says "FCDO not read yet", never "no advisory". The travel signal value did not change.E46 · S07 · 9a9c795
              2026-10-04SanctionsSanctions with country x program counts`GET /api/sanctions` gained, additively, `countries[].programCounts` (`{ code, count }`) and `programs[].countryCounts` (`{ iso2, count }`), with the same cuts as `programs` (8) and `countries` (12); the old fields are unchanged and no SDN name is included. In the Sanctions tab, the programs of a country show the record count and the program-filtered ranking now shows the PROGRAM records in each country (it used to add up all of the country programs); on an old reading without the new fields, the banner says the sum covers all programs.S04 · 9a9c795
              Platform

              Data sources

              How many real sources are connected compared with the 320 feeds of the original catalog. Every number is counted from the Connectors registry (registry.generated.json) when the page is built; nothing is typed by hand.

              379 real sources are declared in the registry (364 reach at least one consumer), against 320 feeds in the original catalog: 46 covered, 49 partial and 225 without a connector.

              • 379

                Real sources declared

              • 320

                Original catalog feeds

              • 46

                Original catalog feeds: covered

              • 49

                Original catalog feeds: partial

              Covered means the app already queries the same endpoint family and delivers the data. Partial means the same source without that feed cut, or an equivalent function from another provider. The status the original showed is reference only, never GeoIntel health.

              Registry graph: 2386 nodes, 5892 edges, 599 tunnels

              Consumers and tunnels

              A consumer (widget, layer, panel, page, signal, tool, Live layer, Ripple feed, alert source) has a complete tunnel when it reaches at least one source and every source of the tunnel has a provider upstream. Stubs are catalog items coming soon: they declare no data and are not counted as complete.

              599 consumers: 317 with a complete tunnel, 282 stubs, 0 incomplete.

              Consumer groupTotalCompleteStubs
              Alert sources19190
              Map layers1418853
              Live layers1033073
              mcp-tool770
              Ripple feeds440
              Pages28280
              Console panels651
              Stress signals59590
              OSINT tools16138123
              Console widgets713932
              Open /conectores
              Platform

              Licenses and risks

              Summary of the licenses of the real sources, counted from the registry (the license field of each declaration). A license is only recorded when the terms were read at the provider; the rest stay unverified, which is a pending human review and not a statement that the source is free or forbidden. Ask before any commercial use.

              • 379

                real sources

              • 301

                with recorded terms

              • 55

                unverified

              • 23

                non-commercial

              • 12

                freemium or paid

              Non-commercial sources

              These sources block commercial use of METAQUANTICS without an agreement. OONI is additionally off by default (RADAR_ENABLE_NONCOMMERCIAL).

              SourceTermAction
              source.adsbfi.opendataadsb.fi open data terms (uso pessoal, nao comercial; citar adsb.fi)Citar adsb.fi com link; comercial: contatar adsb.fi.
              source.airplaneslive.apiairplanes.live terms (educacional/nao comercial)Educacional/não comercial; a API gratuita teve restrições recentes — monitorar disponibilidade.
              source.archive.waybackInternet Archive Terms of Use — acesso concedido "for scholarship and research purposes only" (uso nao comercial: desligado com METAQUANTICS_COMMERCIAL=1); uso do acervo limitado a uso nao infrator/fair use; so o link da copia de pagina publica e guardado (revisao humana pendente)see riscos-licenca.md
              source.cloudflare.radarCC BY-NC 4.0 (dados da API Cloudflare Radar)Comercial: pedir licença à Cloudflare ou só exibir gráficos (CC BY 4.0) em vez dos dados.
              source.epa.radnetDado federal dos EUA; reuso comercial ambíguo (EPA: "uso não comercial, científico e educacional" em documentos) — rota atrás de RADAR_ENABLE_NONCOMMERCIAL=1; revisão humana pendentesee riscos-licenca.md
              source.imf.portwatch-chokepointsIMF Copyright and Terms — reuso não comercial com atribuição; comercial só com permissãosee riscos-licenca.md
              source.ipapi.geoip-api.com terms (endpoint gratuito so nao comercial)Endpoint gratuito só não comercial: em produção comercial, plano Pro ou substituir por ipapi.co/FreeIPAPI.
              source.ooni.aggregationCC BY-NC-SA 4.0 (OONI data license; nao comercial; rota desligada sem RADAR_ENABLE_NONCOMMERCIAL=1)see riscos-licenca.md
              source.opensanctions.dataCC BY-NC 4.0 (OpenSanctions; uso comercial exige licenca; rotas desligadas sem RADAR_ENABLE_NONCOMMERCIAL=1)Comercial exige licença OpenSanctions (Screening API/Licença). Manter fora de plano pago até contratar.
              source.osrm.routerOSRM demo server policy (uso razoavel nao comercial, 1 req/s, atribuicao ODbL)Uso razoável, não comercial, ≤ 1 req/s, User-Agent válido, atribuição ODbL/OSRM. Produção: servidor OSRM próprio.
              source.rainviewer.radarRainViewer API terms: free for personal or educational use only (non-commercial); attribution with link required; commercial use not verifiedsee riscos-licenca.md
              source.ransomwarelive.victimsransomware.live: personal use only, not intended for corporate or business use (rota desligada sem RADAR_ENABLE_NONCOMMERCIAL=1 e com METAQUANTICS_COMMERCIAL=1)see riscos-licenca.md
              source.registrobr.rdapRegistro.br Use and Privacy Policy (registro.br/upp) — uso não comercial; distribuição, comercialização e reprodução proibidassee riscos-licenca.md
              source.registry.intl.imf.portwatch-chokepointsimf-copyright-and-terms-noncommercialsee riscos-licenca.md
              source.registry.intl.ooni.web-connectivitycc-by-nc-sa-4.0see riscos-licenca.md
              source.registry.intl.who.doncc-by-nc-sa-3.0-igosee riscos-licenca.md
              source.ripe.statRIPEstat terms (nao comercial; comercial: contatar RIPE NCC; atribuicao)Não comercial; comercial: contatar o RIPE NCC; atribuir RIPE NCC.
              source.safecast.measurementsCC0 (domínio público; dados e API — o NC do site não se aplica a eles). Atribuição por cortesia; user_id/device_id descartadossee riscos-licenca.md
              source.shodan.internetdbShodan InternetDB terms (gratuito so nao comercial)Gratuito só não comercial; comercial exige licença enterprise Shodan.
              source.ssp-rs.indicadoresCC0 1.0 (license_id CC0-1.0 por pacote no CKAN do RS; os anos CC-BY-NC nunca sao lidos); revisao humana pendentesee riscos-licenca.md
              source.telegeography.submarine-cablesTeleGeography submarine cable data: subscriber-only database; snapshot of unverifiable licence (source repository removed); non-commercial internal use onlyNão comercial / licença não verificável (O9-A.3, N-008): o repositório de origem foi removido e a base atual é só para assinantes; o arquivo distribuído é um snapshot. Bloqueia uso comercial da camada "sub-cables" e é rotulada na Órbita; substituir por fonte aberta (Onda 11).
              source.telegram.public-channelsTelegram Terms of Service (2026-02-03): scraping and AI/LLM use prohibited; public display with link only; non-commercialClasse não comercial (bloqueada no perfil comercial) e fora da IA (NO_LLM_SOURCES; o contexto do Analista não recebe itens de canal). A rota busca t.me/s/<canal> com o User-Agent do app, não mais com um navegador falso (O9-A.2). Se a plataforma recusar o UA do app, o canal fica source-down e o feed segue com as agências. Desligar a coleta é decisão do dono (D-8)
              source.who.donCC BY-NC-SA 3.0 IGO (OMS; nao comercial; rota desligada sem RADAR_ENABLE_NONCOMMERCIAL=1 e com METAQUANTICS_COMMERCIAL=1)see riscos-licenca.md

              55 sources still have no verified license. Each one has a concrete action in docs/connectors/riscos-licenca.md.

              Commercial lock: with METAQUANTICS_COMMERCIAL=1, npm run license-gate fails on any source in registry/sources/*.yaml that is not cleared for commercial use. It is not a secret, only a switch.

              Open decision for the owner: commercial-use licensing (non-commercial sources and the unverified ones) and the Esri tile terms. See the pending-items handoff in the repository.

              Cross-cutting decisions

              Decisions that apply to the whole product (licensing posture, third-party evidence, glossary, default locale), read from docs/clone/decisoes.md at build time. Text in Portuguese.

              IDDecisionReasonCost if wrong
              D-X-01ADR-0002 (clean-room/AGPL): aprovação pendente com o usuário. O ADR não foi editado nesta onda (decisão do usuário). Enquanto isso o produto segue as regras clean-room: sem marca do original na UI/registry/API (teste brand-guard.test.ts), descrições próprias.Decisão do usuário; o controlador não aprova ADR por ele.Se reprovado, rever docs/clone/* e o catálogo transcrito.
              D-X-02docs/clone/img/ e os "Textos originais" mantidos a pedido do usuário como evidência de pesquisa interna; docs/clone/README.md declara que são material de terceiros, não redistribuível; risco registrado em docs/connectors/riscos-licenca.md §7.Pedido explícito do usuário.Remover do histórico antes de publicar o repositório.
              D-X-03Glossário EN → pt-BR (docs/clone/glossario.md): Console = Console, Global Radar = Radar Global, World Live = Live Mundial, Case Builder = Construtor de Casos, Custom = Personalizado. Títulos de página e rótulos do TopBar pt-BR seguem o glossário.Requisito "toda a interface em pt-BR".Trocar um termo = glossário + src/i18n/messages/pt-BR + src/app//page.tsx.
              D-X-04Locale padrão continua en (decisão aberta com o usuário): DEFAULT_LOCALE/<html lang> são globais e pré-existentes; não foram alterados. Ver docs/connectors/decisoes.md DC-16.Afeta o app inteiro, fora do escopo da onda.Flash em inglês no SSR para quem usa pt-BR até a decisão.
              D-X-05/docs gerado de todos os módulos (Task 14): as seções de Radar, Casos, Nexus, Live, Mapa, Alertas e Conectores saem dos registries de elementos (os mesmos dos tooltips) + regras do módulo em i18n + as decisões desta tabela por prefixo (e os DC-xx de docs/connectors/decisoes.md); "Fontes de dados", "Licenças e riscos", "Variáveis de ambiente" (só nomes do .env.example, com teste de cobertura), "Segurança" e "Como adicionar um feed" são seções transversais. Os números vêm do registry de Conectores (nada digitado); o conteúdo de docs/clone/img e os "Textos originais" não entram na página. Título Documentação.Pedido do usuário ("atualize também o menu docs e o menu connectors") e D-09/D-11 (a documentação alimentada pelos registries).Voltar a seções à mão para módulos novos: a página defasa a cada feed ou ferramenta adicionados.
              Platform

              Environment variables

              Names only, taken from .env.example, with what each variable enables and what the app does without it. Values are never read or shown. Secrets must never be committed.

              82 variables in .env.example

              VariableWhat it enablesWithout it
              SCANNER_URL
              fail-closed
              URL of the separate METAQUANTICS scanner backend that powers the RECON toolkit.The RECON features answer 503.
              SCANNER_KEY
              fail-closedsecret
              Key for the scanner backend (must equal the backend METAQUANTICS_KEY).The RECON features answer 503.
              CLOUDFLARE_API_TOKEN
              fail-closedsecret
              Cloudflare Radar token for the Internet Outages and Attack Origins map layers./api/cloudflare-radar answers 503 and both layer toggles stay hidden.
              ETHERSCAN_API_KEY
              secret
              Deepens chain intel with internal transactions and richer Ethereum data.The baseline stays keyless through Blockscout.
              HELIUS_API_KEY
              secret
              Parsed Solana transfers for chain intel.Solana transfer amounts and counterparties stay blank (the public RPC lists signatures only).
              FIRMS_API_KEY
              secretreserved
              Reserved for the per-area NASA FIRMS API.No effect: the app uses the keyless FIRMS CSV.
              OPENSKY_CLIENT_ID
              secret
              OpenSky OAuth2 client id, for higher rate limits on /api/flights.Flights use the keyless feeds.
              OPENSKY_CLIENT_SECRET
              secret
              OpenSky OAuth2 client secret (pairs with OPENSKY_CLIENT_ID).Flights use the keyless feeds.
              FAA_NOTAM_CLIENT_ID
              secret
              Client id of the FAA NOTAM API (free signup at api.faa.gov). With the pair FAA_NOTAM_CLIENT_ID and FAA_NOTAM_CLIENT_SECRET, /api/airspace/spectrum counts GNSS-interference NOTAMs per country; sent only in a header to external-api.faa.gov and never logged.The GNSS NOTAM column of the airspace spectrum panel reads "source not configured yet" (fontes.notam = no-key) and the FAA is never queried.
              FAA_NOTAM_CLIENT_SECRET
              secret
              Client secret of the FAA NOTAM API (pairs with FAA_NOTAM_CLIENT_ID); sent only in a header to external-api.faa.gov and never logged.With either variable missing the NOTAM source stays off (no-key), without calling the FAA.
              N2YO_API_KEY
              secretreserved
              Reserved for satellite pass predictions.No effect: the current code does not read it.
              AIS_API_KEY
              fail-closedsecret
              aisstream.io key for live vessel positions (/api/maritime).The maritime route has no AIS data and answers with a clear error.
              COMTRADE_API_KEY
              fail-closedsecret
              UN Comtrade subscription key (annual imports by HS2 chapter for the geoeconomy engine). Sent only in the Ocp-Apim-Subscription-Key header by the seed-comtrade job.The job fetches nothing (skipped: no-key) and every country x chapter pair stays missing; no value is ever shown as 0.
              EIA_API_KEY
              secret
              U.S. EIA API v2 key (free). Enables the daily spot prices of WTI, Brent and Henry Hub in /api/markets; sent only in the query string of api.eia.gov calls and never logged.Oil and gas fall back to the monthly IMF primary commodity prices on DBnomics, labeled monthly (never presented as daily).
              DATAJUD_API_KEY
              fail-closedsecret
              Public DataJud API key, published by the CNJ on the DataJud wiki (copy the current value; the CNJ may rotate it). Enables /api/osint/br/datajud (case header by CNJ number); sent only in the Authorization header of api-publica.datajud.cnj.jus.br calls and never logged. The API terms allow non-commercial use only./api/osint/br/datajud answers 200 with an empty list and motivo no-key, without calling the CNJ (also when the CNJ rejects the key).
              GEOECONOMY_ENABLED
              fail-closed
              Exact value 1 turns on geoeconomics: /api/geoeconomia (all pairs), /api/geoeconomia/vulnerabilidade, POST /api/geoeconomia/cenario, the v1 operation geoeconomia.vulnerabilidade and the Geoeconomics tab of the Analyst. It needs the UN Comtrade snapshot (COMTRADE_API_KEY and the seed-comtrade job).The routes /api/geoeconomia/vulnerabilidade and /cenario answer 404 and read nothing; /api/geoeconomia answers 200 with estado unmonitored (reason flag) and no number; the v1 operation answers not monitored; the Analyst tab shows COMING SOON with the reason.
              GEMINI_API_KEY_1
              secret
              Google Gemini key for /api/ai/analyze, /api/ai/briefing and /api/ai/overview (numbered, several are rotated)./api/ai/analyze and /api/ai/briefing answer NO AI (deterministic synthesis of the same feeds); /api/ai/overview answers with its heuristic analyst (200, never 503). Keys sent by the browser are never accepted.
              GEMINI_API_KEY_2
              secret
              Additional Gemini key #2, rotated with GEMINI_API_KEY_1 to spread the quota of the AI endpoints.Optional: without it the rotation uses only the other configured keys.
              GEMINI_API_KEY_3
              secret
              Additional Gemini key #3, rotated with GEMINI_API_KEY_1 to spread the quota of the AI endpoints.Optional: without it the rotation uses only the other configured keys.
              GEMINI_API_KEY_4
              secret
              Additional Gemini key #4, rotated with GEMINI_API_KEY_1 to spread the quota of the AI endpoints.Optional: without it the rotation uses only the other configured keys.
              GEMINI_API_KEY_5
              secret
              Additional Gemini key #5, rotated with GEMINI_API_KEY_1 to spread the quota of the AI endpoints.Optional: without it the rotation uses only the other configured keys.
              GEMINI_API_KEY_6
              secret
              Additional Gemini key #6, rotated with GEMINI_API_KEY_1 to spread the quota of the AI endpoints.Optional: without it the rotation uses only the other configured keys.
              GEMINI_API_KEY_7
              secret
              Additional Gemini key #7, rotated with GEMINI_API_KEY_1 to spread the quota of the AI endpoints.Optional: without it the rotation uses only the other configured keys.
              GEMINI_API_KEY_8
              secret
              Additional Gemini key #8, rotated with GEMINI_API_KEY_1 to spread the quota of the AI endpoints.Optional: without it the rotation uses only the other configured keys.
              OLLAMA_BASE_URL
              reserved
              Reserved: base URL of a self-hosted local model server, an owner option for sensitive data (OSINT text) that today goes to no AI provider.No effect: the current code does not read it; sensitive data keeps answering NO AI · sensitive data.
              SDK_INGEST_KEY
              fail-closedsecret
              Shared secret for POST /api/sdk/ingest.The endpoint is disabled.
              GITHUB_WEBHOOK_SECRET
              fail-closedsecret
              HMAC secret that verifies GitHub webhook payloads./api/github-webhook is disabled.
              GITHUB_WEBHOOK_FORWARD_URL
              fail-closed
              URL that verified GitHub payloads are forwarded to (required together with the secret)./api/github-webhook is disabled.
              INTEL_URL
              Entity resolution backend for /api/entity/expand.Entity expansion has no backend.
              UMAMI_URL
              Base URL of the Umami analytics server (page views go to <URL>/api/send). Needs UMAMI_WEBSITE_ID too.Analytics are simply absent (no request is made).
              SENTRY_DSN
              secret
              DSN that turns on Sentry error reporting (@sentry/nextjs, loaded only when set, no tracing). Also receives the consecutive-failure alerts of the seed jobs.Sentry stays off; failure alerts go to the server log ([ops]).
              OPS_FAILURE_THRESHOLD
              Number of consecutive failures of a seed job that triggers one alert (default 3). It alerts once on crossing and again only after a success resets the streak.Default 3 is used; invalid values count as unset.
              UMAMI_WEBSITE_ID
              Umami analytics site id.Analytics are simply absent.
              METAQUANTICS_PORT
              Host port the web UI is published on (the container always listens on 3000).Port 3000.
              METAQUANTICS_TELEGRAM_CHANNELS
              reserved
              Documented in .env.example as the channel list for the Telegram OSINT layer.No effect: the current code does not read it.
              NODE_ENV
              Runtime mode. Already set by the Docker image; it also decides production-only protections.Next sets it by command (development or production).
              PORT
              Port the server listens on inside the container (already set by the image).3000.
              HOSTNAME
              Interface the server binds to (already set by the image).The image default (0.0.0.0).
              MQ_DEMO
              Loads synthetic demo data (src/server/demo-seed.ts) when set to 1.The Gold store starts empty.
              MQ_DATABASE_URL
              secret
              Postgres connection for connector overrides, boards, health history, the durable audit trail, and the shared cache and shared rate counter across instances (migration 0009).Overrides and boards live in the browser localStorage and there is no health history. Cache and rate counter stay in each instance's memory (they work, but are not shared). In production the admin routes answer 503 audit_store_required.
              RATE_KEY_SECRET
              secret
              HMAC secret that pseudonymises the client IP in the shared rate counter (Postgres): only the truncated hash reaches the database. At least 32 characters.The shared Postgres counter is not used, even with MQ_DATABASE_URL: the rate limit applies per instance, with a random per-process salt.
              METAQUANTICS_TRUSTED_PROXY
              fail-closed
              Declares the reverse proxy whose headers carry the client IP for rate limiting: `vercel` (x-vercel-forwarded-for, x-real-ip, rightmost X-Forwarded-For), `cloudflare` (cf-connecting-ip) or `hops:N` (the N-th X-Forwarded-For entry from the right; nginx/ALB in front of the app: `hops:1`). `none` trusts no header.On Vercel (VERCEL=1) the Vercel profile applies; anywhere else no forwarded header is trusted and every anonymous caller shares one rate-limit bucket (stricter, never looser). Self-hosting behind nginx: set hops:1. Cloudflare in front of Vercel: set cloudflare. An invalid value counts as none and logs one warning. Outside Vercel, set none or hops:N explicitly: `vercel env pull` writes VERCEL="1" to .env.local, and a local or self-hosted run with that env would trust client-written headers. With VERCEL=1 outside a Vercel deployment (VERCEL_ENV other than production/preview), the server logs a warning.
              CONNECTORS_CRON_SECRET
              fail-closedsecret
              Bearer secret for the health sampler POST /api/connectors/health/sample, called by pg_cron or a scheduler.The sampler stays disabled.
              JOBS_CRON_SECRET
              fail-closedsecret
              Bearer secret for the pre-aggregation jobs POST /api/jobs/run?job=<id> (seed-sec, seed-celestrak, housekeeping), called by pg_cron + pg_net or an external scheduler. At least 32 characters. Jobs only write with MQ_DATABASE_URL.The jobs route answers 503 (fails closed), unless CRON_SECRET exists; a value shorter than 32 characters counts as unset.
              CRON_SECRET
              fail-closedsecret
              Alias of JOBS_CRON_SECRET for schedulers that already use this name: applies only when JOBS_CRON_SECRET is unset. It is the secret Vercel Cron sends (Authorization: Bearer, GET /api/jobs/run, scheduled by vercel.json).Nothing changes if JOBS_CRON_SECRET exists; without both, the jobs route answers 503.
              MQ_PROBE_ORIGIN
              Origin used by the connector health probe (server configuration only, never the request Host).Defaults to https://$VERCEL_URL on Vercel, otherwise http://127.0.0.1:$PORT.
              CONNECTORS_ADMIN_SECRET
              fail-closedsecret
              Bearer secret (32 characters or more) for the connector admin routes: test, import, share and audit.In production those routes answer 503. Only the development server lets them through.
              METAQUANTICS_MASTER_ADMIN_EMAIL
              fail-closed
              Email of the master admin, the app’s only password login (/login).Without it sign-in returns 503 and the Connectors and Docs menus stay hidden for everyone.
              METAQUANTICS_MASTER_ADMIN_PASSWORD_HASH
              fail-closedsecret
              scrypt hash of the master admin password, generated by scripts/hash-master-password.mjs (the plain password never goes into the environment).Without it sign-in returns 503.
              METAQUANTICS_SESSION_SECRET
              fail-closedsecret
              Secret (32 characters or more) that signs the master admin session cookie.Without it, or with fewer than 32 characters, sign-in returns 503.
              CONNECTORS_DEV_BYPASS
              fail-closed
              Development shortcut: lets the admin routes run without a bearer on loopback.No shortcut. It never applies in production.
              CONNECTORS_PUBLIC_REGISTRY
              fail-closed
              Publishes the registry and health routes (and the pages that read them) in production.In production they answer 403 registry_private, unless an admin bearer is sent.
              METAQUANTICS_COMMERCIAL
              Commercial-use lock: npm run license-gate fails on sources not cleared for commercial use, and the public API v1 and the MCP tools remove data from sources the gate would fail (registry YAML) or, without a YAML, with an undocumented license (reported in omitidos_por_licenca).The gate only reports; sources not cleared for commercial use do not fail it, the public API v1 serves every source with its license listed in _meta, and the MCP tools list each source with its license in the result (IMF PortWatch never reaches agents).
              SEC_EDGAR_USER_AGENT
              fail-closed
              Identifying User-Agent (name and e-mail) that the SEC requires for /api/sec-edgar.The route answers 503 and does not query the SEC; the seed-sec job is skipped (no-key), not counted as a failure, and the SEC rejects generic User-Agents so there is no default value.
              RADAR_ENABLE_NONCOMMERCIAL
              fail-closed
              Turns on non-commercial sources (OONI, CC BY-NC-SA 4.0; EPA RadNet radiation monitors, whose commercial reuse is not confirmed; IMF PortWatch daily chokepoint transits, commercial reuse only with IMF permission). It also picks the memo variant read by the first-paint bootstrap (/api/bootstrap, chokepoints)./api/ooni-censorship and /api/portwatch answer 200 with disabled: true and fetch nothing; the OONI signal stays out of the score. /api/radiation omits EPA RadNet (omitted: license, shown as OMITTED BY LICENSE) and keeps Safecast. The seed-portwatch job fetches nothing and the chokepoint flow component is NOT MONITORED (OMITTED BY LICENSE).
              ALERT_CHANNELS_ENABLED
              fail-closed
              With the exact value 1 and MQ_DATABASE_URL, turns on server-side alert channels (Web Push and webhook delivered with the tab closed; migration 0012). The server stores only the sha256 of the device token, no e-mail and no IP.External channels stay COMING SOON: /api/alerts/channels/* and /api/alerts/publish answer 200 with disabled: true and the reason (flag-off or postgres-inactive), and nothing is stored; the alert-dispatch job evaluates and sends nothing. In-app and browser channels keep working.
              VAPID_PUBLIC_KEY
              fail-closed
              Public VAPID key (P-256, base64url) the browser uses to subscribe to Web Push. Generated locally by the owner (node scripts/gen-vapid.mjs).The Push channel stays COMING SOON (vapid-missing); webhook and local channels are unchanged.
              VAPID_PRIVATE_KEY
              fail-closedsecret
              Private VAPID key that signs the ES256 JWT of every Web Push send. Secret: never leaves in a response, log or /api/status.No push is sent; the Push channel stays COMING SOON (vapid-missing).
              VAPID_SUBJECT
              fail-closed
              Sender contact required by push services (mailto: or the operator https URL), sent in the VAPID JWT.No push is sent; the Push channel stays COMING SOON (vapid-missing).
              PUBLIC_API_ENABLED
              fail-closed
              With the exact value 1, turns on the public data API v1 (13 read-only operations, /api/v1/openapi.json and admin key issuance at /api/connectors/admin/api-keys; migration 0013). Keys are issued by the admin, stored only as sha256 and shown once; 60 requests/min per key. The five Gold routes (search, events, layers, entities/[id], entities/[id]/timeline) require the same flag and a key with scope `dados`.Every new /api/v1 route, the OpenAPI document and key issuance answer 404 without reading any source or the database. The five Gold /api/v1 routes (search, events, layers, entities/[id] and entities/[id]/timeline) answer 404 too (Wave 10 · W0 change: they used to be anonymous).
              MCP_ENABLED
              fail-closed
              With the exact value 1, turns on the MCP server at POST /api/mcp (JSON-RPC 2.0, protocol 2025-06-18, no SSE): 16 read-only tools over the public API v1 operations. initialize and tools/list answer without a key; tools/call needs a public API key (or an OAuth access token when MCP_OAUTH_SECRET is set) and spends its daily quota (500 units)./api/mcp answers 404 without reading any source, the database or the rate counter.
              MCP_OAUTH_SECRET
              fail-closedsecret
              Secret (at least 32 bytes) that turns on OAuth 2.1 with PKCE S256 for the MCP server, without a database: it signs the client ids, codes and tokens (access mqat_ 1 h, refresh mqrt_ 30 days, rotated on every use). MCP clients then discover the flow from the 401 (WWW-Authenticate with resource_metadata). Requires METAQUANTICS_APP_URL, the OAuth origin. Changing the value revokes every token.OAuth is off: /.well-known/oauth-protected-resource, /.well-known/oauth-authorization-server, /api/oauth/* and /oauth/authorize answer 404, the MCP 401 carries no WWW-Authenticate and tools/call accepts only osk_ API keys.
              EMBED_ENABLED
              fail-closed
              With the exact value 1, turns on the read-only map embed at /embed/mapa (layers, window and bbox from the URL; no toolbar, drawing or filters). With METAQUANTICS_COMMERCIAL=1 layers from non-commercial or pending-review sources are never rendered and the footer lists them as omitted by license./embed/mapa answers 404 and renders nothing.
              EMBED_FRAME_ANCESTORS
              fail-closed
              Comma-separated list of origins (https://host[:port], no wildcard, path or http:) allowed to frame the embed routes, sent as Content-Security-Policy: frame-ancestors. Only the embed routes relax X-Frame-Options; every other route stays SAMEORIGIN. Read at build time: the value goes into the headers manifest, so changing it needs a new build (or deploy).Empty or only invalid entries: frame-ancestors is just the own origin, so no third-party site can embed the map.
              EVENT_MEMORY_ENABLED
              fail-closed
              With the exact value 1 and MQ_DATABASE_URL, turns on the event memory (migration 0014): the event-memory job, once a day, stores the items of 8 public feeds (earthquakes, conflicts, weather, cyber threats, health notices, tropical cyclones, tsunami bulletins and GDACS disaster alerts; never sanctions) and the coverage of each day. It keeps only a short title, source, country, point, severity, instant and link; 180-day retention.The event-memory job answers skipped (flag or no-db) without fetching any source or storing anything; the event memory stays without coverage (never "0 events").
              EVENT_MEMORY_EMBEDDINGS
              reserved
              Reserved (D-3): embeddings of the events in the memory (the vector(384) column of migration 0014 stays null until there is a provider).No effect: the current code does not read it; "similar events" uses only text, distance and country.
              FORECASTS_ENABLED
              fail-closed
              With the exact value 1 and MQ_DATABASE_URL, turns on the auditable forecasts (migration 0015): the forecasts job, once a day, resolves the forecasts whose deadline has passed against the same source (USGS earthquakes, CISA KEV) and publishes new ones with the base rate over 104 past weekly windows. A template with fewer than 30 windows publishes nothing; a source that does not answer never resolves a forecast as "did not happen".The forecasts job answers skipped (flag or no-db) without fetching any source or storing anything; there are no forecasts and no score.
              NEXT_PUBLIC_METAQUANTICS_BUILD
              Build version of the service worker, fixed at build time: it goes in the /sw.js query and names the worker cache, so each value starts a clean cache.The build uses the Vercel commit, else the local git commit (plus the build time when the tree has uncommitted changes), else the build time (Docker builds have no .git: pass it as --build-arg).
              METAQUANTICS_CCTV_SNAPSHOT
              Path of the camera catalogue saved on disk; off disables the snapshot.Uses .cache/cctv-catalog.json.
              METAQUANTICS_NOMINATIM_CACHE
              Path of the Nominatim geocoder cache; off disables it.Uses .cache/nominatim.json.
              METAQUANTICS_NOMINATIM_GAP_MS
              Minimum gap in ms between Nominatim requests; in production values below 1000 are raised to 1000.2000 ms between requests.
              METAQUANTICS_LEGACY_UNSAFE
              fail-closed
              Set to on to re-enable the quarantined legacy modules (docs/legacy-removal.md).The quarantined routes answer 410.
              METAQUANTICS_USER_AGENT
              User-Agent used by lookups made through src/lib/stealthFetch.ts.A built-in browser User-Agent.
              RESEND_API_KEY
              fail-closedsecret
              Resend API key for transactional email (account approved, invite, password reset) and the daily health-report job alert to the master admin. Needs METAQUANTICS_MAIL_FROM too.No email is sent; the master admin panel shows the invite/reset link to copy and send by other means.
              METAQUANTICS_MAIL_FROM
              fail-closed
              Sender of the transactional emails, on a domain verified in Resend.No email is sent (same as without RESEND_API_KEY).
              METAQUANTICS_APP_URL
              Public base URL of the links sent by email (invite, password reset, approval). Also the OAuth origin of the MCP server (issuer, resource and token audience): REQUIRED when MCP_OAUTH_SECRET is set.In development the request origin is used; in production no link is built (the request host can be forged).
              TELEGRAM_BOT_TOKEN
              fail-closedsecret
              Telegram bot token (@BotFather) that sends the Telegram channel alerts. Also needs TELEGRAM_WEBHOOK_SECRET, TELEGRAM_BOT_USERNAME and ALERT_CHANNELS_ENABLED=1. It only goes into the send URL; never into logs or responses.The Telegram channel stays COMING SOON (telegram-missing); nothing is sent.
              TELEGRAM_WEBHOOK_SECRET
              fail-closedsecret
              Secret ([A-Za-z0-9_-], 1 to 256 characters) that Telegram echoes in the X-Telegram-Bot-Api-Secret-Token header of the webhook; compared in constant time.The /api/alerts/telegram/webhook endpoint answers 503 (with the flag on) and the Telegram channel stays COMING SOON.
              TELEGRAM_BOT_USERNAME
              fail-closed
              Bot @username (without @), used to build the t.me link that confirms the channel with /start.The Telegram channel stays COMING SOON: without the username there is no confirmation link.
              METAQUANTICS_SECRETS_KEY
              fail-closedsecret
              Vault key of the master admin panel (/admin/chaves): encrypts the keys and secrets set or rotated in the panel.The Keys and secrets menu is read-only; secrets come only from the environment.
              SUPABASE_URL
              fail-closed
              Supabase project URL (https://<ref>.supabase.co) used by the catalog Bronze: allowed raw copies in Storage, private bucket bronze. Needs SUPABASE_SERVICE_ROLE_KEY too.The catalog-harvest job harvests the catalog as usual but keeps no raw copy in the Bronze.
              SUPABASE_SERVICE_ROLE_KEY
              fail-closedsecret
              Supabase service_role key, used only on the server to write to the private Storage bucket bronze. Never sent to the browser or logged.No raw copy in the Bronze (same as without SUPABASE_URL).
              Platform

              Security

              How access is protected today. The app has no user login yet, so admin features use bearer secrets and fail closed.

              • Admin routes need a bearer secret

                Connector test, import, share and audit routes require Authorization: Bearer with CONNECTORS_ADMIN_SECRET (32 characters or more; shorter counts as absent). Without the variable they answer 503 in production (fail-closed); only the development server (NODE_ENV=development) lets them through without it. Paid or authenticated sources also need the secret configured and the right bearer.

              • Development bypass

                CONNECTORS_DEV_BYPASS=1 lets the admin routes run without a bearer, only with NODE_ENV=development, with no valid secret, and only on loopback: it is refused when x-forwarded-for, x-real-ip or forwarded point outside loopback. It never applies in production. Never enable it outside the developer machine.

              • Rate limits per instance

                Limits use an in-memory sliding window per process: failed admin authentication is limited to 20 per 60 s, and connector tests to 10 per 60 s. On serverless platforms each instance has its own window, so the limit is per instance, not global.

              • Registry privacy in production

                In production the registry and health routes (and the pages that read them: /conectores, the Sources & Status panel and the Data Feed Status widget) answer 403 registry_private unless CONNECTORS_PUBLIC_REGISTRY=1 or an admin bearer is sent. Health is cacheable (s-maxage 30 s) only when it is shareable; an admin-only response is private, no-store. lastError is always a short code.

              • Durable audit is mandatory

                In production an authenticated admin route with an in-memory audit store answers 503 audit_store_required and runs nothing. Set MQ_DATABASE_URL so the audit trail is stored in Postgres.

              • Health sampler

                POST /api/connectors/health/sample, called by pg_cron or a scheduler, needs the CONNECTORS_CRON_SECRET bearer, compared in constant time. Without the variable the sampler stays disabled.

              • Third-party content

                Text from feeds and registries is rendered as text, never as HTML. External links are only http or https. Secrets appear only by name (never the value), and the secret scanner fails the build when a secret-like literal appears in the code or in an export. Read-only share links are redacted and validated again on the server.

              Platform

              How to add a feed

              The guide below is read from docs/connectors/guia-novo-feed.md when the page is built, so it never drifts from the repository. The text is in Portuguese, as written there.

              Como colocar uma fonte nova no menu Conectores (Documentação · Código · Quadro) sem editar o registry à mão. Critério de aceite do spec §11; provado pelo teste `src/lib/connectors/new-feed.acceptance.test.ts`.

              O que conta como "declaração"

              Hoje (decisão DC-01) o `defineFeed()` não é chamado dentro do adaptador: as fontes ficam numa tabela central, `src/lib/connectors/declarations/upstream.ts` (`UPSTREAMS`), e o scanner chama `defineFeed()` para cada entrada × rota. Cada entrada é um `UpstreamDecl` = o `FeedSpec` do `defineFeed()` + `hosts`/`routes` que o scanner confere contra o código. A declaração de um feed novo é uma entrada dessa tabela, em 3–5 linhas (o teste conta e exige ≤ 10).

              // src/lib/connectors/declarations/upstream.ts — dentro de UPSTREAMS
              { id: 'acme.tides', provider: 'acme', providerName: 'ACME Tides', category: 'maritime',
                protocol: 'https-rest', format: 'json', auth: 'none', cost: 'free', license: 'CC BY 4.0',
                hosts: ['api.acme-tides.example.org'], routes: ['/api/tides'] },

              Isso gera `provider.acme` → `source.acme.tides` → `api.tides` (+ as consultas e consumidores que o scanner já acha lendo o código) e o túnel até cada consumidor. Rótulos: o nome exibido sai de `providerName`/descrição/id humanizado (DC-09), então não é preciso chave i18n.

              Passo a passo

              1. Código do feed (não é declaração, existiria de qualquer forma): a rota BFF `src/app/api/<rota>/route.ts`

              com o `fetch('https://<host>/...')` literal (o scanner lê o host) e quem consome a rota (`useFeed('/api/<rota>', { intervalMs })` num widget/painel/página, ou `source: { type: 'feed', route }` numa camada do catálogo).

              1. Declaração (≤ 10 linhas): a entrada em `UPSTREAMS` acima. Campos obrigatórios: `id`, `provider`,

              `providerName`, `hosts`, `license` (`'unverified'` se ainda não verificada — vai para [riscos-licenca.md](riscos-licenca.md)). Segredos só por nome em `secretRefs` e o nome tem de estar no `.env.example`.

              1. Gerar: `npm run connectors:scan` (reescreve `src/lib/connectors/registry.generated.json`, arquivo gerado).
              2. Conferir: `npm run connectors:scan -- --check` (o mesmo do CI). Falha se o host da rota não estiver declarado

              (`undeclared-upstream`), se um host declarado sumiu da rota (`declared-host-unseen`), rota inexistente, fonte sem licença, segredo fora do `.env.example`, túnel não conexo ou ciclo.

              1. Pronto: abrir `/conectores` — o feed aparece na árvore e na página do consumidor (Documentação), em todos os

              exportadores YAML/JSON/TypeScript/OpenAPI/Mermaid (Código) e como cards/arestas no Quadro.

              1. Documentar (obrigatório; norma em `DOCUMENTACAO.md`, na raiz): entrada da rota em

              `src/app/docs/apiCatalog.ts`; doc do elemento que consome a fonte no registry do módulo (`element-docs.ts`, com fontes, intervalo e limitações) e os textos nos dois idiomas; o consumidor ganha ficha no Catálogo documentado de `/docs` sozinho (origem, licença, intervalo e variáveis vêm do túnel). Confira com `npx vitest run src/lib/docs` — `contract.test.ts` falha se faltar campo, tooltip, nó ou rota no catálogo da API.

              Opcionais (não são necessários para aparecer nas 3 visões)

              • Saúde medida: para o painel Dados / widget Data Feed Status / quadro mostrarem ONLINE/ERRO medidos, inclua a

              rota no manifesto `src/lib/ops/feeds-manifest.ts` (`CURATED`, 1 linha) — sem isso o nó fica DESCONHECIDO (nunca inventado; DC-05).

              • Fonte de ingestão com YAML (`registry/sources/*.yaml`): é outro caminho (pipeline Gold); passa por

              `npm run license-gate` e o scanner a converte em `source.registry.*` sozinho.

              • Testar conector: só fontes da tabela fixa `SOURCE_URLS` (`src/lib/connectors/dryrun/targets.ts`) — acrescentar a

              URL GET sem credencial se quiser o dry-run da fonte (DC-10).

              Padrões novos (Onda 9)

              Cinco padrões que a Onda 9 repetiu em várias fontes e que agora têm receita. Decisões que os sustentam: DC-18 a DC-23 em [decisoes.md](decisoes.md).

              Camada estática gerada por script (não é feed)

              Dado que muda por ano ou por revisão (portos, áreas, escritórios, usinas) não precisa de rota BFF nem de host em tempo de execução:

              1. Script `scripts/gen-<nome>.mjs` (modelo: `gen-ports.mjs`, `gen-br-uf.mjs`): baixa a fonte só quando um humano roda, aceita `--input`, filtra só as colunas que a camada usa, grava `public/data/<nome>.json|geojson` com cabeçalho `source`, `license`, `source_url`, `retrieved_at` e `count`, imprime o relatório (contagens e descartes) e aborta sem gravar abaixo do mínimo de itens ou acima do teto de 2,5 MB gzip (acima do teto a camada vai para PMTiles, D-16). `scripts/*` é ignorado pelo git: use `git add -f` no script novo.
              2. Declaração (uma entrada de dado, sem rota): uma entrada em `CLIENT_SOURCES` (`src/lib/connectors/declarations/client.ts`) com `protocol: 'file'`, `hosts: []` e `codeRefs` do arquivo e do script; a chave `static:<parser>` em `LAYER_SOURCE_IDS` (mesmo arquivo) ligando a camada à fonte; e, se a licença pede crédito, a linha em `LAYER_CREDIT_KEYS` (`src/lib/ops/map/layer-card.ts`) com o texto nos três idiomas.
              3. Camada: em `src/lib/ops/map/layer-catalog.ts`, `source: { type: 'static', parser: '<parser>', url: '/data/<nome>.json' }` (o `<parser>` entra em `ParserId`) e um ramo por parser em `src/components/ops/map/OpsMap.tsx` (o Console; não o `MetaquanticsMap.tsx` protegido), que lê o arquivo com `useStaticJson` e memoiza o parse em `static-layer-features.ts`. Sem arquivo, a camada abre vazia: nunca dado de exemplo.
              4. Licença sem YAML: o texto da licença em `CLIENT_SOURCES` define a classe (`documented`, `non_commercial`...); não escreva "non-commercial" num texto que não é não comercial (a classe sai desse texto). Acrescente a linha da tabela "Dados empacotados" em `THIRD_PARTY_NOTICES.md` (origem, licença, atribuição, data) e a tabela da §6 de [riscos-licenca.md](riscos-licenca.md).
              5. Regenerar (quando a fonte mudar): `node scripts/gen-<nome>.mjs`, conferir `retrieved_at`, contagem e tamanho gzip e depois `npm run connectors:scan`, `node scripts/gen-feeds-registry.mjs`, `node scripts/api-license-ledger.mjs` e `node scripts/connectors-docs.mjs`.
              Parser de HTML de terceiros

              Quando a fonte só publica HTML (EASA CZIB), o parser é uma função pura em `src/lib/feeds/` que lê o corpo como texto não confiável: sem DOM, sem `innerHTML`, sem executar nada; separa tabelas e linhas, remove as tags e decodifica as entidades (`parse-utils.ts`). Baixe com `fetchTextCapped` e um teto de tamanho declarado. Devolva `{ items, total, malformed }`: `total === null` (ou todas as linhas ilegíveis) é falha da fonte, nunca "lista vazia". Campo ausente vira `null`; o parser nunca preenche o que a página não diz (a EASA não traz o nível do boletim: `level` é sempre `information`).

              Envelope de falha: `sourceDown`, `degradado`, `desatualizado`

              Toda rota nova responde pelo envelope único (`jsonEnvelope`, `withEnvelope`): fonte fora com última cópia boa = `lastGood: true` + `_meta.degradado` + `_meta.desatualizado`; fonte fora sem cópia = 200 `{ sourceDown: true, error }` com listas vazias, nunca 500 nem lista vazia fingindo "nada aconteceu"; rota com duas fontes independentes falha por metade (`feeds.<metade>` = `ok` | `lastGood` | `down`). Atribuição exigida pela licença vai em `_meta.atribuicao`; as fontes realmente servidas, em `_meta.fontes`.

              Licença: YAML `pending-human` e perfil comercial

              Fonte de ingestão ou de feed novo com termos de reuso ainda não lidos por uma pessoa entra em `registry/sources/<id>.yaml` com `status: draft` e `license.reviewed_by: pending-human` (nunca `human:<nome>`: só o humano grava). O gate dev passa; `METAQUANTICS_COMMERCIAL=1` reprova de propósito até a revisão (DC-22). Rode `node scripts/api-license-ledger.mjs` ao criar ou mudar um YAML.

              Teste: fixture REAL e "nunca inventar dado"
              • O parser nasce com a captura real da fonte como fixture (`src/lib/feeds/__fixtures__/<fonte>.real.<ext>`); se não houve rede, a fixture é **sintética e se chama `*.synthetic.*`**, e a captura real vira pendência anotada (DC-20). Fixture sintética nunca vira "real" por omissão.
              • O teste de rota cobre: corpo real, corpo vazio válido (`items: []` com `total: 0` é dado), formato desconhecido (falha, não vazio), fonte fora com e sem cópia boa, e metade independente que cai sozinha.
              • Regras que o teste trava: coordenada ausente não vira ponto; atraso, apuração ou contagem só saem do dado real; abaixo da coorte mínima o placar não publica Brier; dado pessoal da fonte (nomes do CSL) nunca sai do servidor, só o agregado.

              Honestidade sobre o "≤ 10 linhas"

              • O critério vale para a declaração (a entrada acima). O adaptador/rota e o consumidor são o código do próprio feed.
              • Diferença para o spec: o spec previa `defineFeed()` no adaptador; a decisão DC-01 centralizou as declarações para

              ter uma lista única revisável de provedores/licenças, conferida pelo scanner. Mover a chamada para o adaptador exigiria o scanner avaliar módulos de rota (efeitos colaterais de `import` em rotas Next) — não compensa agora.

              • Se a rota for nova, o scanner já a enxerga; se o feed reaproveitar uma rota existente, basta acrescentar o host na

              rota e a entrada aqui.

              Source: docs/connectors/guia-novo-feed.md. Acceptance proven by src/lib/connectors/new-feed.acceptance.test.ts.