Watchboard

April 28, 2026 · View on GitHub

Watchboard

Multi-Topic Intelligence Dashboard Platform

Track conflicts, science breakthroughs, political histories, and more — with AI-powered hourly updates, interactive maps, and 3D globes.

GitHub Stars Last Commit License: MIT Build Status JSON API Powered by Claude Code

Live DashboardHow to Add a TrackerRequest a Topic


Features

  • 60+ active trackers across conflicts, disasters, political histories, science, and culture
  • Config-driven architecture — each tracker is a tracker.json + data directory; no code changes needed
  • AI nightly updates — Claude Code with web search refreshes eligible trackers automatically at 6 AM UTC
  • Hourly breaking news scan — 24+ RSS feeds from Reuters, Al Jazeera, France24, SCMP, and more; AI triage classifies events and updates trackers in real time
  • Interactive 2D maps — Leaflet with strike arcs, overlay layers (no-fly zones, GPS jamming, earthquakes), live flights, and day/night terminator
  • 3D globe visualization — CesiumJS with missile animations, satellite tracking, cinematic event mode, and live ship AIS data
  • Full-text search — Pagefind indexes all 190+ pages at build time; zero runtime overhead
  • Source tier system — every data point classified Tier 1–4 (official → unverified); contested claims explicitly flagged
  • One-command tracker creation — GitHub Actions init-tracker.yml generates a fully populated tracker in ~25 minutes via Claude Code
  • Embeddable widgets — each tracker has a /embed/{slug}/ page (~4 KB, theme-aware) for third-party embedding
  • Public JSON API — static REST API with CORS, no auth required; powers third-party integrations
  • MCP server — Model Context Protocol integration for AI agents
  • Push notifications — subscribe to specific trackers for breaking news and daily digest browser notifications

Active Trackers

IconTrackerTopicRegionLive
⚔️Iran Conflict2026 Iran-US/Israel conflict — Operation Epic Fury / Roaring LionMiddle EastDashboard
🇺🇦Ukraine WarRussia's full-scale invasion — frontlines, casualties, diplomacyEastern EuropeDashboard
🕊️Gaza WarIsrael-Gaza war — ground ops, humanitarian crisis, ICJ proceedingsIsrael/GazaDashboard
🕊️Israel-PalestineThe full arc from 1948 founding to presentMiddle EastDashboard
🗽September 112001 attacks, War on Terror, 9/11 CommissionUSADashboard
🧬CRISPR Gene TherapyGene editing breakthroughs — from Cas9 to clinical trialsGlobalDashboard
🌿ReforestationGlobal tree-planting initiatives, deforestation reversal, carbon sinksGlobalDashboard
Fusion EnergyITER, NIF breakthrough, commercial fusion startups, net energy gainGlobalDashboard
All 95+ trackers
IconTrackerTopicRegionLink
🏔️Afghanistan-Pakistan WarUS invasion, Taliban insurgency, ISIS-K, TTP attacksAfghanistan/PakistanDashboard
🤖AI for GoodBeneficial AI applications in healthcare, climate, accessibilityGlobalDashboard
🌹AMLO PresidencyFourth Transformation, Tren Maya, AIFA, constitutional reforms (2018–2024)MexicoDashboard
🌙Artemis II MissionCrewed lunar flyby, SLS, Orion capsule, journey to the MoonUSA/GlobalDashboard
🕯️AyotzinapaForced disappearance of 43 students in Iguala, Guerrero (2014)MexicoDashboard
🐰Bad BunnySoundCloud to reggaeton star, YHLQMDLG, Un Verano Sin Ti, world toursPuerto Rico/GlobalDashboard
🔋Battery RevolutionSolid-state, sodium-ion, grid storage, EV battery breakthroughsGlobalDashboard
🎤BTSK-pop global rise, UN speeches, military service, ARMY fandomSouth Korea/GlobalDashboard
⚔️Felipe Calderón PresidencyWar on drugs, military vs cartels, Mérida Initiative (2006–2012)MexicoDashboard
🎗️Cancer BreakthroughsCAR-T, mRNA vaccines for cancer, early detection, immunotherapyGlobalDashboard
☢️Chernobyl Disaster1986 nuclear disaster — reactor explosion, liquidators, falloutUkraine/USSRDashboard
🇨🇱Chile: Allende to PinochetSocialist government, CIA intervention, 1973 coup, Operation CondorChileDashboard
🤖China Tech RevolutionMade in China 2025, AI race, Huawei, TikTok, DeepSeek, US decouplingChina/GlobalDashboard
🌍Climate SolutionsCarbon capture, renewable energy, climate policy, adaptationGlobalDashboard
🦠COVID-19 PandemicWuhan origin, lockdowns, vaccines, variant waves, WHO responseGlobalDashboard
🧬CRISPR Gene TherapyGene editing from Cas9 to clinical trials, sickle cell cureGlobalDashboard
🇨🇺Cuba CrisesRevolution, Bay of Pigs, Missile Crisis, embargo, 2021 protestsCuba/CaribbeanDashboard
🔫CuliacanazoOctober 2019 Culiacán Crisis and January 2023 Chapo Jr. captureSinaloa, MexicoDashboard
📱Digital InclusionInternet access, digital literacy, tech for underserved communitiesGlobalDashboard
European Conquest of the AmericasColumbus, conquistadors, Aztec/Inca fall, colonization, Columbian ExchangeAmericasDashboard
🦊Vicente Fox PresidencyMexico's first opposition president, democratic transition (2000–2006)MexicoDashboard
☢️Fukushima Daiichi2011 nuclear disaster — tsunami, meltdowns, TEPCO, decommissionJapanDashboard
Fusion EnergyITER, NIF, commercial fusion, net energy gain pursuitGlobalDashboard
🕊️Gaza WarGround operations, ceasefire talks, humanitarian crisis, displacementIsrael/GazaDashboard
📉Global Recession RiskTariff escalation, bond stress, China slowdown, central bank policyGlobalDashboard
🇭🇹Haiti CollapseMoïse assassination, gang control, transitional council, UN interventionHaiti/CaribbeanDashboard
🛂ICE HistoryICE creation post-9/11, family separations, mass deportation campaignUSA/MexicoDashboard
🇮🇳India-Pakistan ConflictPartition, Kashmir dispute, four wars, nuclear tests, Kargil, MumbaiSouth AsiaDashboard
⚔️Iran Conflict2026 Iran-US/Israel conflict — Operation Epic FuryMiddle EastDashboard
🕊️Israel-Palestine Conflict1948 to present — wars, Oslo Accords, intifadas, settlementsMiddle EastDashboard
🎯El Mencho / CJNGFebruary 2026 killing of El Mencho, CJNG territorial controlMexicoDashboard
🗺️Mexico-US WarsTexas Revolution, Alamo, Mexican-American War, Treaty of Guadalupe HidalgoMexico/USADashboard
💉mRNA RevolutionmRNA vaccines beyond COVID, cancer vaccines, rare diseasesGlobalDashboard
✈️MH17 Shootdown2014 downing of Malaysia Airlines Flight 17 over eastern UkraineEastern UkraineDashboard
🇲🇽Mexican Political HistoryPRI hegemony, democratic transition, PRI/PAN/PRD/Morena evolutionMexicoDashboard
🇲🇲Myanmar Civil WarPost-coup civil war following February 2021 military takeoverMyanmar/SE AsiaDashboard
🛡️NATO-US TensionsBurden-sharing disputes, Article 5 questions, European autonomyEurope/N. AmericaDashboard
🌊Ocean CleanupPlastic removal, coral restoration, marine conservationGlobalDashboard
🔴October 7th AttackHamas-led assault on Israel — kibbutz raids, hostages, IDF responseIsrael/GazaDashboard
🕊️Peace ProcessesActive peace negotiations, ceasefires, conflict resolutionGlobalDashboard
🏛️Enrique Peña Nieto PresidencyStructural reforms, Ayotzinapa crisis, Casa Blanca scandal (2012–2018)MexicoDashboard
⚛️Quantum TheoryPlanck, Einstein, Bohr, Heisenberg, Copenhagen, Bell theorem, quantum computingGlobalDashboard
🌿ReforestationTree-planting initiatives, deforestation reversal, carbon sinksGlobalDashboard
🌍Sahel InsurgencyJNIM/ISGS expansion, military coups, Wagner Group, French withdrawalSahel/North AfricaDashboard
🗽September 11 Attacks2001 al-Qaeda attacks, War on Terror, 9/11 CommissionUSADashboard
🔬Claudia Sheinbaum PresidencyFirst female president of Mexico, judicial reform, US-Mexico relationsMexicoDashboard
💊Sinaloa Cartel FragmentationMayo Zambada capture, Chapitos vs Mayos faction war, fentanyl (2024–)Mexico/SinaloaDashboard
🦁Somalia ConflictAl-Shabaab insurgency, AMISOM, US drone strikes, state fragilitySomalia/Horn of AfricaDashboard
🌊SE Asia EscalationSouth China Sea militarization, AUKUS, Philippines-China clashesSE Asia/PacificDashboard
🚀SpaceX HistoryFalcon 1, Falcon 9 reusability, Dragon, Starlink, Starship, MarsUSA/GlobalDashboard
🦎Species RecoveryEndangered species comebacks, rewilding, conservation successesGlobalDashboard
⚔️Sudan Civil WarSAF vs RSF, Khartoum battle, Darfur ethnic violence, displacementSudan/East AfricaDashboard
🗺️Taiwan Strait TensionsPLA exercises, TSMC, US arms sales, Taiwan Strait incidentsTaiwan/East AsiaDashboard
🕯️Tlatelolco MassacreOctober 2, 1968 massacre at Plaza de las Tres Culturas, Mexico CityMexico CityDashboard
🦅Trump Presidencies45th and 47th president — immigration, trade wars, Jan 6, tariffsUSA/GlobalDashboard
🇺🇦Ukraine WarRussia's full-scale invasion — frontlines, casualties, diplomacyEastern EuropeDashboard
🌎US Interventions in Latin AmericaCIA coups, Operation Condor, Panama, Guatemala 1954, Nicaragua ContrasLatin AmericaDashboard
FIFA World Cup 2026First 48-team tournament, tri-host USA/Mexico/Canada, venues, scheduleUSA/Mexico/CanadaDashboard
🪖World War IThe Great War 1914–1918 — Somme, Verdun, Gallipoli, VersaillesEurope/GlobalDashboard
⚔️World War IIWWII 1939–1945 — Holocaust, Stalingrad, Normandy, atomic bombsEurope/PacificDashboard

Distribution & Integrations

Watchboard data is available through multiple channels beyond the web dashboard:

Public JSON API

Free, no authentication required. Static JSON files served from CDN with full CORS support.

EndpointDescription
/api/v1/trackers.jsonAll tracker metadata
/api/v1/trackers/{slug}.jsonFull data for a single tracker
/api/v1/breaking.jsonCurrent breaking news events
/api/v1/kpis/{slug}.jsonKey performance indicators for a tracker
/api/v1/events/{slug}.jsonEvent timeline for a tracker
/api/v1/search-index.jsonFull-text search index

📖 API Documentation

MCP Server

Model Context Protocol server for AI agents (Claude, ChatGPT, Cursor, etc.). Provides 7 tools and 3 resources for querying tracker data programmatically.

git clone https://github.com/ArtemioPadilla/watchboard.git
cd watchboard/mcp
npm install
npm start

📖 MCP Documentation

Telegram

Automated breaking news channel with real-time updates from the hourly pipeline. Join @watchboard_dev.

Bluesky

Automated social posting — breaking news, daily digests, and analysis threads. Follow @watchboard.bsky.social.

Newsletter

Weekly digest summarizing the most significant events across all active trackers. Subscribe at watchboard.dev/newsletter.


Quick Start

git clone https://github.com/ArtemioPadilla/watchboard.git
cd watchboard
npm install
npm run dev

Open http://localhost:4321/watchboard/.

npm run build    # Type-check + build static site to dist/
npm run preview  # Preview production build locally

How It Works

Tracker Structure

Each tracker is a self-contained directory under trackers/:

trackers/{slug}/
  tracker.json          # Config: name, sections, map bounds, AI prompts, categories
  data/
    meta.json           # Title, day count, last updated
    kpis.json           # Key performance indicators strip
    timeline.json       # Historical eras + crisis timeline
    map-points.json     # Geographic points of interest
    map-lines.json      # Strike arcs, supply routes, frontlines
    casualties.json     # Casualty table with tier/contested flags
    political.json      # Political figures grid
    ...                 # Other section-specific data files
    events/             # Daily partitioned event files (YYYY-MM-DD.json)

At build time, src/lib/tracker-registry.ts auto-discovers all non-draft trackers and src/pages/[tracker]/index.astro generates a page for each one via getStaticPaths().

One-Command Tracker Creation (~25 min)

  1. Go to Actions > Initialize New Tracker
  2. Enter: slug, topic description, start date, geographic region
  3. Claude Code generates tracker.json + empty data files, validates schema, builds
  4. Auto-triggers Seed Tracker Data to backfill historical data with deep web research
  5. Result: a fully populated, deployed tracker

Source Tier System

Every data point carries a source classification:

TierLabelExamples
1Primary / OfficialGovernment statements, UN, IAEA, official bodies
2Major OutletReuters, AP, BBC, CNN, Al Jazeera
3InstitutionalCSIS, HRW, Oxford Economics, think tanks
4UnverifiedSocial media, unattributed claims

Contested figures are explicitly flagged with 'yes', 'evolving', 'heavily', or 'partial'.


Tech Stack

LayerTechnologyPurpose
FrameworkAstro 5Static site generation + TypeScript
UIReact 19Interactive islands (map, timeline, globe)
3D GlobeCesiumJS + ResiumMissile animations, satellites, cinematic mode
2D MapLeafletStrike arcs, overlays, live flights, AIS ships
ValidationZod 3Runtime schema validation for all data files
SearchPagefindBuild-time full-text index, zero runtime JS
AIClaude Code (Max OAuth)Nightly data updates via web search
CI/CDGitHub ActionsBuild + deploy + nightly data refresh
HostingGitHub PagesStatic deployment at watchboard.dev/

Daily Intelligence Brief Video

A 30-second vertical (1080×1920) video summarising the top breaking trackers ships every day to Telegram + Bluesky. Built with Remotion — code-driven video, hot-reload editor, programmatic rendering.

make video-prep   # Pull latest news + bundle thumbnails for the Studio preview
make video        # Open Remotion Studio (timeline editor, like After Effects but code-driven)
make video-render # Render today's MP4 → video/output/

The Studio at http://localhost:3000 exposes every typography, position, color, and animation value as live-editable sliders/colour pickers via the right-hand "Props" panel. Tunable trees:

  • slideStyle — TrackerSlide elements (image card, headline, KPI block, source row)
  • introStyle — opening logo + subtitle + date animation
  • outroStyle — watchboard.dev card + stats line + fade-out

Edits in the panel are transient (preview only). To persist, copy the values to DEFAULT_*_STYLE constants in video/src/data/slide-style.ts — both Studio and the production renderer read from there.

Daily brief archive: /videos lists every shipped video with its trackers, headlines, KPIs, and source tiers.

For static layout iteration without the Studio, open tools/video-editor.html — a vanilla-JS mockup of the TrackerSlide layout with the same control panel.


Nightly AI Updates

Data is automatically refreshed at 6 AM UTC via GitHub Actions. Each tracker has a configurable updateIntervalDays — active conflicts update daily; historical cases update every 30–180 days. The workflow resolves which trackers are due, then uses Claude Code with web search to update each one.

WorkflowTriggerPurpose
Nightly Data UpdateDaily 6 AM UTC + manualUpdates eligible trackers (interval-gated) via Claude Code web search
Initialize New TrackerManual dispatchGenerates tracker.json + empty data files from a topic description
Seed Tracker DataManual (or chained from init)Deep historical backfill — populates all sections with research data
DeployPush to mainBuilds Astro site and deploys to GitHub Pages

All data workflows use claude-code-action with a Claude Max subscription OAuth token (CLAUDE_CODE_OAUTH_TOKEN) — no per-token API costs.

Breaking News Pipeline (two-tier)

Two scheduled scans cover breaking news end-to-end:

Light scan (every 15 min, no LLM cost): polls a curated set of high-signal wires (Reuters, BBC, AP top-stories, GDELT) plus public real-time sources (Bluesky firehose for select OSINT/news accounts, Telegram public channels). Scores each candidate against active trackers via deterministic keyword matching (src/lib/keyword-match.ts). Score ≥ 0.85 → posts to Telegram and queues to public/_hourly/pending-candidates.json so the next heavy scan promotes it to AI triage and writes the tracker event. Score 0.5–0.85 → queue only. Score < 0.5 → discards to the audit log. Telegram is the realtime alert channel; only the heavy scan writes tracker JSON.

Heavy scan (every 6 h, Claude Sonnet triage): polls the wider RSS list (24+ sources) plus per-tracker dynamic feeds (src/lib/tracker-feeds.ts — adding a Mexican tracker auto-pulls Animal Político / La Jornada / El Universal / Aristegui; an Indian tracker auto-pulls The Hindu / Indian Express / Times of India; etc.) plus the same realtime sources. Reads pending-candidates.json from light scans and merges. Sonnet classifies each: update / new_tracker_suggestion / discard. Every decision is appended to public/_hourly/triage-log.json.

Audit page (/breaking-news-audit/): public dashboard showing every triage decision in the last 14 days with filters by decision / scan type / score. Use this to spot rejected candidates that should have been accepted and tune thresholds.

StepLight scanHeavy scan
Pollcurated wires + Bluesky + Telegramfull RSS (24+) + per-tracker dynamic feeds + Bluesky + Telegram + pending-candidates.json
Score / triagekeyword-match (deterministic, no LLM)Claude Sonnet triage
Above thresholdTelegram post + queue to pending (≥ 0.85)tracker update workflow
Below thresholdqueue 0.5–0.85, discard < 0.5discard
Auditappend to triage-log.jsonappend to triage-log.json (+ 14-day prune)
Cadence15 min6 h

Setup

  1. Fork this repo
  2. Go to Settings > Pages — set source to GitHub Actions
  3. Go to Settings > Secrets > Actions — add CLAUDE_CODE_OAUTH_TOKEN
    • Generate via claude setup-token with a Claude Max subscription
  4. Push to main — the site deploys automatically; nightly updates start the next day

Local updates (direct API)

# Update all trackers
ANTHROPIC_API_KEY=sk-ant-... npm run update-data

# Update a specific tracker
TRACKER_SLUG=iran-conflict ANTHROPIC_API_KEY=sk-ant-... npm run update-data

Project Structure

watchboard/
├── trackers/                          # One directory per tracker
│   ├── iran-conflict/
│   │   ├── tracker.json               # Config: sections, map, AI prompts
│   │   └── data/                      # JSON data + events/ partitions
│   └── ...                            # 60+ more trackers
├── src/
│   ├── pages/
│   │   ├── index.astro                # Home: tracker card index
│   │   ├── search.astro               # Pagefind full-text search
│   │   ├── rss.xml.ts                 # Global RSS feed
│   │   ├── embed/[tracker].astro      # Embeddable widget pages
│   │   └── [tracker]/                 # Dynamic routes per tracker
│   │       ├── index.astro            # Dashboard
│   │       ├── globe.astro            # 3D globe (if enabled)
│   │       ├── about.astro            # About page
│   │       └── rss.xml.ts             # Per-tracker RSS feed
│   ├── layouts/BaseLayout.astro       # HTML shell, SEO, fonts
│   ├── components/
│   │   ├── static/                    # Server-rendered (zero client JS)
│   │   │   ├── Header.astro
│   │   │   ├── Hero.astro
│   │   │   ├── KpiStrip.astro
│   │   │   ├── CasualtyTable.astro
│   │   │   ├── PoliticalGrid.astro
│   │   │   └── ...
│   │   └── islands/                   # Client-hydrated React components
│   │       ├── IntelMap.tsx           # Leaflet 2D map
│   │       ├── TimelineSection.tsx    # Click-to-expand timeline
│   │       ├── MilitaryTabs.tsx       # Tabbed military view
│   │       └── CesiumGlobe/           # 3D globe + hooks
│   ├── lib/
│   │   ├── tracker-config.ts          # TrackerConfigSchema (Zod) + types
│   │   ├── tracker-registry.ts        # Auto-discovers all trackers
│   │   ├── data.ts                    # loadTrackerData(slug)
│   │   ├── schemas.ts                 # All data Zod schemas (16 schemas)
│   │   └── ...                        # Utilities (map, tier, timeline)
│   └── styles/global.css              # Dark theme, CSS custom properties
├── scripts/
│   ├── update-data.ts                 # AI nightly updater (multi-tracker)
│   ├── hourly-scan.ts                 # RSS polling + candidate extraction
│   ├── hourly-triage.ts               # AI classification of news candidates
│   └── hourly-post.ts                 # Breaking news social posting
├── .github/workflows/
│   ├── deploy.yml                     # Build + deploy to GitHub Pages
│   ├── update-data.yml                # Nightly AI data refresh
│   ├── init-tracker.yml               # One-command tracker creation
│   └── seed-tracker.yml               # Historical data backfill
└── package.json

Contributing

Contributions are welcome. The most impactful ways to contribute:

For code contributions, run npm run build to verify the TypeScript compiles and all tracker schemas validate before opening a PR.


Disclaimer

This platform aggregates publicly available information from multiple sources and perspectives. It does not endorse any particular political position or narrative. All contested claims are explicitly marked. Source tier classifications reflect general reliability categories, not endorsements of specific reporting or outlets.


License

MIT — use freely, attribute if you'd like.