Claude Agent Skill · by Aradotso

Worldmonitor Intelligence Dashboard

Install Worldmonitor Intelligence Dashboard skill for Claude Code from aradotso/trending-skills.

Install
Terminal · npx
$npx skills add https://github.com/nextlevelbuilder/ui-ux-pro-max-skill --skill ui-ux-pro-max
Works with Paperclip

How Worldmonitor Intelligence Dashboard fits into a Paperclip company.

Worldmonitor Intelligence Dashboard drops into any Paperclip agent that handles this kind of work. Assign it to a specialist inside a pre-configured PaperclipOrg company and the skill becomes available on every heartbeat — no prompt engineering, no tool wiring.

S
SaaS FactoryPaired

Pre-configured AI company — 18 agents, 18 skills, one-time purchase.

$27$59
Explore pack
Source file
SKILL.md605 lines
Expand
---name: worldmonitor-intelligence-dashboarddescription: Real-time global intelligence dashboard with AI-powered news aggregation, geopolitical monitoring, and infrastructure trackingtriggers:  - set up worldmonitor dashboard  - add geopolitical monitoring to my app  - integrate worldmonitor news feeds  - build situational awareness dashboard  - configure worldmonitor AI intelligence  - self-host worldmonitor  - add OSINT dashboard to project  - worldmonitor map layers and data feeds--- # World Monitor Intelligence Dashboard > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. World Monitor is a real-time global intelligence dashboard combining AI-powered news aggregation (435+ feeds, 15 categories), dual map engine (3D globe + WebGL flat map with 45 data layers), geopolitical risk scoring, finance radar (92 exchanges), and cross-stream signal correlation — all from a single TypeScript/Vite codebase deployable as web, PWA, or native desktop (Tauri 2). --- ## Installation & Quick Start ```bashgit clone https://github.com/koala73/worldmonitor.gitcd worldmonitornpm installnpm run dev          # Opens http://localhost:5173``` No environment variables required for basic operation. All features work with local Ollama by default. ### Site Variants ```bashnpm run dev:tech       # tech.worldmonitor.app variantnpm run dev:finance    # finance.worldmonitor.app variantnpm run dev:commodity  # commodity.worldmonitor.app variantnpm run dev:happy      # happy.worldmonitor.app variant``` ### Production Build ```bashnpm run typecheck        # TypeScript validationnpm run build:full       # Build all variantsnpm run build            # Build default (world) variant``` --- ## Project Structure ```worldmonitor/├── src/│   ├── components/       # UI components (TypeScript)│   ├── feeds/            # 435+ RSS/API feed definitions│   ├── layers/           # Map data layers (deck.gl)│   ├── ai/               # AI synthesis pipeline│   ├── signals/          # Cross-stream correlation engine│   ├── finance/          # Market data (92 exchanges)│   ├── variants/         # Site variant configs (world/tech/finance/commodity/happy)│   └── protos/           # Protocol Buffer definitions (92 protos, 22 services)├── api/                  # Vercel Edge Functions (60+)├── src-tauri/            # Tauri 2 desktop app (Rust)├── docs/                 # Documentation source└── vite.config.ts``` --- ## Environment Variables Create a `.env.local` file (never commit secrets): ```bash# AI Providers (all optional — Ollama works with no keys)VITE_OLLAMA_BASE_URL=http://localhost:11434       # Local Ollama instanceVITE_GROQ_API_KEY=$GROQ_API_KEY                  # Groq cloud inferenceVITE_OPENROUTER_API_KEY=$OPENROUTER_API_KEY      # OpenRouter multi-model # Caching (optional, improves performance)UPSTASH_REDIS_REST_URL=$UPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKEN=$UPSTASH_REDIS_REST_TOKEN # Map tiles (optional, MapLibre GL)VITE_MAPTILER_API_KEY=$MAPTILER_API_KEY # Variant selectionVITE_SITE_VARIANT=world   # world | tech | finance | commodity | happy``` --- ## Core Concepts ### Feed Categories World Monitor aggregates 435+ feeds across 15 categories: ```typescript// src/feeds/categories.ts patternimport type { FeedCategory } from './types'; const FEED_CATEGORIES: FeedCategory[] = [  'geopolitics',  'military',  'economics',  'technology',  'climate',  'energy',  'health',  'finance',  'commodities',  'infrastructure',  'cyber',  'space',  'diplomacy',  'disasters',  'society',];``` ### Country Intelligence Index Composite risk scoring across 12 signal categories per country: ```typescript// Example: accessing country risk scoresimport { CountryIntelligence } from './signals/country-intelligence'; const intel = new CountryIntelligence(); // Get composite risk score for a countryconst score = await intel.getCountryScore('UA');console.log(score);// {//   composite: 0.82,//   signals: {//     military: 0.91,//     economic: 0.74,//     political: 0.88,//     humanitarian: 0.79,//     ...//   },//   trend: 'escalating',//   updatedAt: '2026-03-17T08:00:00Z'// } // Subscribe to real-time updatesintel.subscribe('UA', (update) => {  console.log('Risk update:', update);});``` ### AI Synthesis Pipeline ```typescript// src/ai/synthesize.ts patternimport { AISynthesizer } from './ai/synthesizer'; const synth = new AISynthesizer({  provider: 'ollama',           // 'ollama' | 'groq' | 'openrouter'  model: 'llama3.2',            // any Ollama-compatible model  baseUrl: process.env.VITE_OLLAMA_BASE_URL,}); // Synthesize a news brief from multiple feed itemsconst brief = await synth.synthesize({  items: feedItems,             // FeedItem[]  category: 'geopolitics',  region: 'Europe',  maxTokens: 500,  language: 'en',}); console.log(brief.summary);    // AI-generated synthesisconsole.log(brief.signals);    // Extracted signals arrayconsole.log(brief.confidence); // 0-1 confidence score``` ### Cross-Stream Signal Correlation ```typescript// src/signals/correlator.ts patternimport { SignalCorrelator } from './signals/correlator'; const correlator = new SignalCorrelator(); // Detect convergence across military, economic, disaster signalsconst convergence = await correlator.detectConvergence({  streams: ['military', 'economic', 'disaster', 'escalation'],  timeWindow: '6h',  threshold: 0.7,  region: 'Middle East',}); if (convergence.detected) {  console.log('Convergence signals:', convergence.signals);  console.log('Escalation probability:', convergence.probability);  console.log('Contributing events:', convergence.events);}``` --- ## Map Engine Integration ### 3D Globe (globe.gl) ```typescript// src/components/globe/GlobeView.tsimport Globe from 'globe.gl';import { getCountryRiskData } from '../signals/country-intelligence'; export function initGlobe(container: HTMLElement) {  const globe = Globe()(container)    .globeImageUrl('//unpkg.com/three-globe/example/img/earth-dark.jpg')    .backgroundImageUrl('//unpkg.com/three-globe/example/img/night-sky.png');   // Load country risk layer  const riskData = await getCountryRiskData();   globe    .polygonsData(riskData.features)    .polygonCapColor(feat => riskToColor(feat.properties.riskScore))    .polygonSideColor(() => 'rgba(0, 100, 0, 0.15)')    .polygonLabel(({ properties: d }) =>      `<b>${d.name}</b><br/>Risk: ${(d.riskScore * 100).toFixed(0)}%`    );   return globe;} function riskToColor(score: number): string {  if (score > 0.8) return 'rgba(220, 38, 38, 0.8)';   // critical  if (score > 0.6) return 'rgba(234, 88, 12, 0.7)';   // high  if (score > 0.4) return 'rgba(202, 138, 4, 0.6)';   // elevated  if (score > 0.2) return 'rgba(22, 163, 74, 0.5)';   // low  return 'rgba(15, 118, 110, 0.4)';                    // minimal}``` ### WebGL Flat Map (deck.gl + MapLibre GL) ```typescript// src/components/map/DeckMap.tsimport { Deck } from '@deck.gl/core';import { ScatterplotLayer, ArcLayer, HeatmapLayer } from '@deck.gl/layers';import maplibregl from 'maplibre-gl'; export function initDeckMap(container: HTMLElement) {  const map = new maplibregl.Map({    container,    style: 'https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json',    center: [0, 20],    zoom: 2,  });   const deck = new Deck({    canvas: 'deck-canvas',    initialViewState: { longitude: 0, latitude: 20, zoom: 2 },    controller: true,    layers: [      // Event scatter layer      new ScatterplotLayer({        id: 'events',        data: getActiveEvents(),        getPosition: d => [d.lng, d.lat],        getRadius: d => d.severity * 50000,        getFillColor: d => severityToRGBA(d.severity),        pickable: true,      }),      // Supply chain arc layer      new ArcLayer({        id: 'supply-chains',        data: getSupplyChainData(),        getSourcePosition: d => d.source,        getTargetPosition: d => d.target,        getSourceColor: [0, 128, 200],        getTargetColor: [200, 0, 80],        getWidth: 2,      }),    ],  });   return { map, deck };}``` --- ## Finance Radar ```typescript// src/finance/radar.ts patternimport { FinanceRadar } from './finance/radar'; const radar = new FinanceRadar(); // Get market composite (7-signal)const composite = await radar.getMarketComposite();console.log(composite);// {//   score: 0.62,//   signals: {//     volatility: 0.71,//     momentum: 0.58,//     sentiment: 0.65,//     liquidity: 0.44,//     correlation: 0.78,//     macro: 0.61,//     geopolitical: 0.82//   },//   exchanges: 92,//   timestamp: '2026-03-17T08:00:00Z'// } // Watch specific exchangeconst exchange = await radar.getExchange('NYSE');const crypto = await radar.getCrypto(['BTC', 'ETH', 'SOL']);const commodities = await radar.getCommodities(['GOLD', 'OIL', 'WHEAT']);``` --- ## Language & RTL Support World Monitor supports 21 languages with native-language feeds: ```typescript// src/i18n/config.ts patternimport { setLanguage, getAvailableLanguages } from './i18n'; const languages = getAvailableLanguages();// ['en', 'ar', 'zh', 'ru', 'fr', 'es', 'de', 'ja', 'ko', 'pt',//  'hi', 'fa', 'tr', 'pl', 'uk', 'nl', 'sv', 'he', 'it', 'vi', 'id'] // Switch language (handles RTL automatically)await setLanguage('ar');  // Arabic — triggers RTL layoutawait setLanguage('he');  // Hebrew — triggers RTL layoutawait setLanguage('fa');  // Farsi — triggers RTL layout // Configure feed language filteringimport { FeedManager } from './feeds/manager';const feeds = new FeedManager({ language: 'ar', includeEnglish: true });``` --- ## Protocol Buffers (API Contracts) ```typescript// src/protos — 92 proto definitions, 22 services// Example generated client usage: import { IntelligenceServiceClient } from './protos/generated/intelligence_grpc_web_pb';import { CountryRequest } from './protos/generated/intelligence_pb'; const client = new IntelligenceServiceClient(  process.env.VITE_API_BASE_URL || 'http://localhost:8080'); const request = new CountryRequest();request.setCountryCode('DE');request.setTimeRange('24h');request.setSignalTypes(['military', 'economic', 'political']); client.getCountryIntelligence(request, {}, (err, response) => {  if (err) console.error(err);  else console.log(response.toObject());});``` --- ## Vercel Edge Function Pattern ```typescript// api/feeds/aggregate.ts — Edge Function exampleimport type { VercelRequest, VercelResponse } from '@vercel/node';import { aggregateFeeds } from '../../src/feeds/aggregator';import { getCachedData, setCachedData } from '../../src/cache/redis'; export const config = { runtime: 'edge' }; export default async function handler(req: VercelRequest, res: VercelResponse) {  const { category, region, limit = '20' } = req.query as Record<string, string>;   const cacheKey = `feeds:${category}:${region}:${limit}`;  const cached = await getCachedData(cacheKey);  if (cached) return res.json(cached);   const items = await aggregateFeeds({    categories: category ? [category] : undefined,    region,    limit: parseInt(limit),  });   await setCachedData(cacheKey, items, { ttl: 300 }); // 5 min TTL  return res.json(items);}``` --- ## Desktop App (Tauri 2) ```bash# Install Tauri CLIcargo install tauri-cli # Developmentnpm run tauri:dev # Build native appnpm run tauri:build# Outputs: .exe (Windows), .dmg/.app (macOS), .AppImage (Linux)``` ```rust// src-tauri/src/main.rs — IPC command example#[tauri::command]async fn fetch_intelligence(country: String) -> Result<CountryData, String> {    // Sidecar Node.js process handles feed aggregation    // Tauri handles secure IPC between renderer and backend    Ok(CountryData::default())} fn main() {    tauri::Builder::default()        .invoke_handler(tauri::generate_handler![fetch_intelligence])        .run(tauri::generate_context!())        .expect("error while running tauri application");}``` --- ## Docker / Self-Hosting ```bash# Docker single-containerdocker build -t worldmonitor .docker run -p 3000:3000 \  -e VITE_SITE_VARIANT=world \  -e UPSTASH_REDIS_REST_URL=$UPSTASH_REDIS_REST_URL \  -e UPSTASH_REDIS_REST_TOKEN=$UPSTASH_REDIS_REST_TOKEN \  worldmonitor # Docker Compose with Redisdocker compose up -d``` ```yaml# docker-compose.ymlversion: '3.9'services:  app:    build: .    ports: ['3000:3000']    environment:      - VITE_SITE_VARIANT=world      - REDIS_URL=redis://redis:6379    depends_on: [redis]  redis:    image: redis:7-alpine    volumes: ['redis_data:/data']volumes:  redis_data:``` ### Vercel Deployment ```bashnpm i -g vercelvercel --prod# Set env vars in Vercel dashboard or via CLI:vercel env add GROQ_API_KEY productionvercel env add UPSTASH_REDIS_REST_URL productionvercel env add UPSTASH_REDIS_REST_TOKEN production``` --- ## Common Patterns ### Custom Feed Integration ```typescript// Add a custom RSS feed to the aggregation pipelineimport { FeedRegistry } from './src/feeds/registry'; FeedRegistry.register({  id: 'my-custom-feed',  name: 'My Intelligence Source',  url: 'https://example.com/feed.xml',  category: 'geopolitics',  region: 'Asia',  language: 'en',  weight: 0.8,           // 0-1, affects signal weighting  refreshInterval: 300,  // seconds  parser: 'rss2',        // 'rss2' | 'atom' | 'json'});``` ### Custom Map Layer ```typescript// Register a custom deck.gl layer in the 45-layer systemimport { LayerRegistry } from './src/layers/registry';import { IconLayer } from '@deck.gl/layers'; LayerRegistry.register({  id: 'my-custom-layer',  name: 'Custom Events',  category: 'infrastructure',  defaultVisible: false,  factory: (data) => new IconLayer({    id: 'my-custom-layer-deck',    data,    getPosition: d => [d.lng, d.lat],    getIcon: d => 'marker',    getSize: 32,    pickable: true,  }),});``` ### Site Variant Configuration ```typescript// src/variants/my-variant.tsimport type { SiteVariant } from './types'; export const myVariant: SiteVariant = {  id: 'my-variant',  name: 'My Monitor',  title: 'My Custom Monitor',  defaultCategories: ['geopolitics', 'economics', 'military'],  defaultRegion: 'Europe',  defaultLanguage: 'en',  mapStyle: 'dark',  enabledLayers: ['country-risk', 'events', 'supply-chains'],  aiProvider: 'ollama',  theme: {    primary: '#0891b2',    background: '#0f172a',    surface: '#1e293b',  },};``` --- ## Troubleshooting | Problem | Solution ||---------|----------|| Map not rendering | Check `VITE_MAPTILER_API_KEY` or use free CartoBasemap style || AI synthesis slow/failing | Ensure Ollama is running: `ollama serve && ollama pull llama3.2` || Feeds returning 429 errors | Enable Redis caching via `UPSTASH_REDIS_REST_*` env vars || Desktop app won't build | Ensure Rust + `cargo install tauri-cli` + platform build tools || RTL layout broken | Confirm `lang` attribute set on `<html>` by `setLanguage()` || TypeScript errors on build | Run `npm run typecheck` — proto generated files must exist || Redis connection refused | Check `REDIS_URL` or use Upstash REST API instead of TCP || `npm run build:full` fails mid-variant | Build individually: `npm run build -- --mode finance` | ### Ollama Setup for Local AI ```bash# Install Ollamacurl -fsSL https://ollama.ai/install.sh | sh # Pull recommended modelollama pull llama3.2          # Fast, good qualityollama pull mistral           # Alternativeollama pull gemma2:9b         # Larger, higher quality # Verify Ollama is accessiblecurl http://localhost:11434/api/tags``` ### Verify Installation ```bashnpm run typecheck   # Should exit 0npm run dev         # Should open localhost:5173# Navigate to /api/health for API statuscurl http://localhost:5173/api/health``` --- ## Resources - **Live App**: [worldmonitor.app](https://worldmonitor.app)- **Documentation**: [docs.worldmonitor.app](https://docs.worldmonitor.app)- **Architecture**: [docs.worldmonitor.app/architecture](https://docs.worldmonitor.app/architecture)- **Self-Hosting Guide**: [docs.worldmonitor.app/getting-started](https://docs.worldmonitor.app/getting-started)- **Contributing**: [docs.worldmonitor.app/contributing](https://docs.worldmonitor.app/contributing)- **Security Policy**: [SECURITY.md](https://github.com/koala73/worldmonitor/blob/main/SECURITY.md)- **License**: AGPL-3.0 (non-commercial); commercial license required for SaaS/rebranding