Methodology
How a report becomes a dot on the globe.
Source tiers
Every record on this site is tagged with a tier. Tiers determine how a report is treated and whether a case is plotted.
- T1Health authorities. WHO, WHO Europe, CDC, ECDC, PAHO, RIVM, UKHSA, Argentina MinSalud, Chile MINSAL, Texas DSHS, Swiss BAG/OFSP, German RKI. A single Tier-1 report is sufficient to plot a case.
- T2Expert surveillance. ProMED, HealthMap, CIDRAP, infectious disease experts. Become news items, never standalone cases.
- T3Press. Reuters, AP, AFP, BBC, NYT Health, STAT, Nature News, Science. Two independent Tier-3 reports within 72 hours are required to plot a case.
Allowlist filter
We never accept reports from arbitrary domains. The seed source list is committed to the repository and replayed into Supabase on every deploy. Anything outside that list is dropped at ingestion.
Extraction
Each ingestion tick runs three Grok-4.3 agentic searches in parallel. The cases run calls x_search against the curated handles and web_searchagainst the Tier-1 health-authority domains, and is constrained to a strict JSON schema (status, case_count, deaths, country, city, reported_at, summary). A case is dropped unless its source_url appears in the citations of the same response — model-only knowledge never produces a row.
Geocoding
Latitude and longitude come only from the source itself or from Nominatim. We never invent coordinates. If neither yields a result, the case appears in the news feed with country only and is excluded from the globe.
Your privacy
The "closest confirmed case" banner uses the rough latitude/longitude that Vercel attaches to the request at the network edge. We compute the distance, return it, and forget. We never persist your IP, your coordinates, your city, or your country anywhere — not in logs, not in Supabase, not in analytics. Umami, when enabled, only receives a coarse distance bucket (<100, 100-500, 500-2000, >2000).
Deduplication
Each case row is keyed by sha256(source_url + reported_at + country + status). Re-ingesting the same report updates counts in place rather than creating duplicates.
Update cadence
Ingestion runs every four hours on Vercel cron with a hard ceiling of 100K Grok tokens per tick. The page revalidates every five minutes. Banner state polls the Edge endpoint once a minute. The footer shows the timestamp of the last successful run.
Corrections
Found a wrong number, a missing source, or an incorrect attribution? Email contact@hantavirus.wtf. We treat correction speed as a first-class metric.