Skip to content

Latest commit

 

History

3,979 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Featured

Icon Tracker Topic Region Live
⚔️ Iran Conflict 2026 Iran-US/Israel conflict — Operation Epic Fury / Roaring Lion Middle East Dashboard
🇺🇦 Ukraine War Russia's full-scale invasion — frontlines, casualties, diplomacy Eastern Europe Dashboard
🕊️ Gaza War Israel-Gaza war — ground ops, humanitarian crisis, ICJ proceedings Israel/Gaza Dashboard
🕊️ Israel-Palestine The full arc from 1948 founding to present Middle East Dashboard
🗽 September 11 2001 attacks, War on Terror, 9/11 Commission USA Dashboard
🧬 CRISPR Gene Therapy Gene editing breakthroughs — from Cas9 to clinical trials Global Dashboard
🌿 Reforestation Global tree-planting initiatives, deforestation reversal, carbon sinks Global Dashboard
Fusion Energy ITER, NIF breakthrough, commercial fusion startups, net energy gain Global Dashboard
All 95+ trackers
Icon Tracker Topic Region Link
🏔️ Afghanistan-Pakistan War US invasion, Taliban insurgency, ISIS-K, TTP attacks Afghanistan/Pakistan Dashboard
🤖 AI for Good Beneficial AI applications in healthcare, climate, accessibility Global Dashboard
🌹 AMLO Presidency Fourth Transformation, Tren Maya, AIFA, constitutional reforms (2018–2024) Mexico Dashboard
🌙 Artemis II Mission Crewed lunar flyby, SLS, Orion capsule, journey to the Moon USA/Global Dashboard
🕯️ Ayotzinapa Forced disappearance of 43 students in Iguala, Guerrero (2014) Mexico Dashboard
🐰 Bad Bunny SoundCloud to reggaeton star, YHLQMDLG, Un Verano Sin Ti, world tours Puerto Rico/Global Dashboard
🔋 Battery Revolution Solid-state, sodium-ion, grid storage, EV battery breakthroughs Global Dashboard
🎤 BTS K-pop global rise, UN speeches, military service, ARMY fandom South Korea/Global Dashboard
⚔️ Felipe Calderón Presidency War on drugs, military vs cartels, Mérida Initiative (2006–2012) Mexico Dashboard
🎗️ Cancer Breakthroughs CAR-T, mRNA vaccines for cancer, early detection, immunotherapy Global Dashboard
☢️ Chernobyl Disaster 1986 nuclear disaster — reactor explosion, liquidators, fallout Ukraine/USSR Dashboard
🇨🇱 Chile: Allende to Pinochet Socialist government, CIA intervention, 1973 coup, Operation Condor Chile Dashboard
🤖 China Tech Revolution Made in China 2025, AI race, Huawei, TikTok, DeepSeek, US decoupling China/Global Dashboard
🌍 Climate Solutions Carbon capture, renewable energy, climate policy, adaptation Global Dashboard
🦠 COVID-19 Pandemic Wuhan origin, lockdowns, vaccines, variant waves, WHO response Global Dashboard
🧬 CRISPR Gene Therapy Gene editing from Cas9 to clinical trials, sickle cell cure Global Dashboard
🇨🇺 Cuba Crises Revolution, Bay of Pigs, Missile Crisis, embargo, 2021 protests Cuba/Caribbean Dashboard
🔫 Culiacanazo October 2019 Culiacán Crisis and January 2023 Chapo Jr. capture Sinaloa, Mexico Dashboard
📱 Digital Inclusion Internet access, digital literacy, tech for underserved communities Global Dashboard
European Conquest of the Americas Columbus, conquistadors, Aztec/Inca fall, colonization, Columbian Exchange Americas Dashboard
🦊 Vicente Fox Presidency Mexico's first opposition president, democratic transition (2000–2006) Mexico Dashboard
☢️ Fukushima Daiichi 2011 nuclear disaster — tsunami, meltdowns, TEPCO, decommission Japan Dashboard
Fusion Energy ITER, NIF, commercial fusion, net energy gain pursuit Global Dashboard
🕊️ Gaza War Ground operations, ceasefire talks, humanitarian crisis, displacement Israel/Gaza Dashboard
📉 Global Recession Risk Tariff escalation, bond stress, China slowdown, central bank policy Global Dashboard
🇭🇹 Haiti Collapse Moïse assassination, gang control, transitional council, UN intervention Haiti/Caribbean Dashboard
🛂 ICE History ICE creation post-9/11, family separations, mass deportation campaign USA/Mexico Dashboard
🇮🇳 India-Pakistan Conflict Partition, Kashmir dispute, four wars, nuclear tests, Kargil, Mumbai South Asia Dashboard
⚔️ Iran Conflict 2026 Iran-US/Israel conflict — Operation Epic Fury Middle East Dashboard
🕊️ Israel-Palestine Conflict 1948 to present — wars, Oslo Accords, intifadas, settlements Middle East Dashboard
🎯 El Mencho / CJNG February 2026 killing of El Mencho, CJNG territorial control Mexico Dashboard
🗺️ Mexico-US Wars Texas Revolution, Alamo, Mexican-American War, Treaty of Guadalupe Hidalgo Mexico/USA Dashboard
💉 mRNA Revolution mRNA vaccines beyond COVID, cancer vaccines, rare diseases Global Dashboard
✈️ MH17 Shootdown 2014 downing of Malaysia Airlines Flight 17 over eastern Ukraine Eastern Ukraine Dashboard
🇲🇽 Mexican Political History PRI hegemony, democratic transition, PRI/PAN/PRD/Morena evolution Mexico Dashboard
🇲🇲 Myanmar Civil War Post-coup civil war following February 2021 military takeover Myanmar/SE Asia Dashboard
🛡️ NATO-US Tensions Burden-sharing disputes, Article 5 questions, European autonomy Europe/N. America Dashboard
🌊 Ocean Cleanup Plastic removal, coral restoration, marine conservation Global Dashboard
🔴 October 7th Attack Hamas-led assault on Israel — kibbutz raids, hostages, IDF response Israel/Gaza Dashboard
🕊️ Peace Processes Active peace negotiations, ceasefires, conflict resolution Global Dashboard
🏛️ Enrique Peña Nieto Presidency Structural reforms, Ayotzinapa crisis, Casa Blanca scandal (2012–2018) Mexico Dashboard
⚛️ Quantum Theory Planck, Einstein, Bohr, Heisenberg, Copenhagen, Bell theorem, quantum computing Global Dashboard
🌿 Reforestation Tree-planting initiatives, deforestation reversal, carbon sinks Global Dashboard
🌍 Sahel Insurgency JNIM/ISGS expansion, military coups, Wagner Group, French withdrawal Sahel/North Africa Dashboard
🗽 September 11 Attacks 2001 al-Qaeda attacks, War on Terror, 9/11 Commission USA Dashboard
🔬 Claudia Sheinbaum Presidency First female president of Mexico, judicial reform, US-Mexico relations Mexico Dashboard
💊 Sinaloa Cartel Fragmentation Mayo Zambada capture, Chapitos vs Mayos faction war, fentanyl (2024–) Mexico/Sinaloa Dashboard
🦁 Somalia Conflict Al-Shabaab insurgency, AMISOM, US drone strikes, state fragility Somalia/Horn of Africa Dashboard
🌊 SE Asia Escalation South China Sea militarization, AUKUS, Philippines-China clashes SE Asia/Pacific Dashboard
🚀 SpaceX History Falcon 1, Falcon 9 reusability, Dragon, Starlink, Starship, Mars USA/Global Dashboard
🦎 Species Recovery Endangered species comebacks, rewilding, conservation successes Global Dashboard
⚔️ Sudan Civil War SAF vs RSF, Khartoum battle, Darfur ethnic violence, displacement Sudan/East Africa Dashboard
🗺️ Taiwan Strait Tensions PLA exercises, TSMC, US arms sales, Taiwan Strait incidents Taiwan/East Asia Dashboard
🕯️ Tlatelolco Massacre October 2, 1968 massacre at Plaza de las Tres Culturas, Mexico City Mexico City Dashboard
🦅 Trump Presidencies 45th and 47th president — immigration, trade wars, Jan 6, tariffs USA/Global Dashboard
🇺🇦 Ukraine War Russia's full-scale invasion — frontlines, casualties, diplomacy Eastern Europe Dashboard
🌎 US Interventions in Latin America CIA coups, Operation Condor, Panama, Guatemala 1954, Nicaragua Contras Latin America Dashboard
FIFA World Cup 2026 First 48-team tournament, tri-host USA/Mexico/Canada, venues, schedule USA/Mexico/Canada Dashboard
🪖 World War I The Great War 1914–1918 — Somme, Verdun, Gallipoli, Versailles Europe/Global Dashboard
⚔️ World War II WWII 1939–1945 — Holocaust, Stalingrad, Normandy, atomic bombs Europe/Pacific Dashboard

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.

Endpoint Description
/api/v1/trackers.json All tracker metadata
/api/v1/trackers/{slug}.json Full data for a single tracker
/api/v1/breaking.json Current breaking news events
/api/v1/kpis/{slug}.json Key performance indicators for a tracker
/api/v1/events/{slug}.json Event timeline for a tracker
/api/v1/search-index.json Full-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:

Tier Label Examples
1 Primary / Official Government statements, UN, IAEA, official bodies
2 Major Outlet Reuters, AP, BBC, CNN, Al Jazeera
3 Institutional CSIS, HRW, Oxford Economics, think tanks
4 Unverified Social media, unattributed claims

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


Tech Stack

Layer Technology Purpose
Framework Astro 5 Static site generation + TypeScript
UI React 19 Interactive islands (map, timeline, globe)
3D Globe CesiumJS + Resium Missile animations, satellites, cinematic mode
2D Map Leaflet Strike arcs, overlays, live flights, AIS ships
Validation Zod 3 Runtime schema validation for all data files
Search Pagefind Build-time full-text index, zero runtime JS
AI Claude Code (Max OAuth) Nightly data updates via web search
CI/CD GitHub Actions Build + deploy + nightly data refresh
Hosting GitHub Pages Static 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.

Workflow Trigger Purpose
Nightly Data Update Daily 6 AM UTC + manual Updates eligible trackers (interval-gated) via Claude Code web search
Initialize New Tracker Manual dispatch Generates tracker.json + empty data files from a topic description
Seed Tracker Data Manual (or chained from init) Deep historical backfill — populates all sections with research data
Deploy Push to main Builds 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.

Step Light scan Heavy scan
Poll curated wires + Bluesky + Telegram full RSS (24+) + per-tracker dynamic feeds + Bluesky + Telegram + pending-candidates.json
Score / triage keyword-match (deterministic, no LLM) Claude Sonnet triage
Above threshold Telegram post + queue to pending (≥ 0.85) tracker update workflow
Below threshold queue 0.5–0.85, discard < 0.5 discard
Audit append to triage-log.json append to triage-log.json (+ 14-day prune)
Cadence 15 min 6 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.

About

AI-powered intelligence dashboards for any topic. 48 trackers, 3D globe, interactive maps, nightly AI updates. Create a new tracker in 25 minutes.

Topics

Resources

Contributing

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages