Skip to content

achalla18/KalView

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KalView — OSINT Intelligence Dashboard

A real-time geopolitical command-center dashboard that aggregates open-source intelligence from public APIs and renders it on a 3D globe.

DISCLAIMER: KalView is an educational OSINT visualization MVP using public data sources only. It does not access classified, private, restricted, or non-public systems. Military and government asset labels are heuristic and based only on publicly visible transponder/AIS-style data. KalView must not be used for operational, tactical, financial, safety-critical, or emergency decision-making.


Features

  • 3D Globe — fullscreen CesiumJS globe with dark CARTO basemap (no Ion token needed)
  • Military aircraft — filtered from OpenSky public state vectors by callsign heuristics
  • Military vessels — filtered from AISStream by ship type / name heuristics
  • Conflict events — ACLED and GDELT GEO 2.0 geocoded news feeds
  • Humanitarian crises — ReliefWeb disasters API
  • Natural disasters — NASA EONET open events + USGS real-time earthquake feed
  • Breaking news — NewsAPI headlines with keyword geocoding
  • Market ticker — Polygon.io stock and crypto snapshots
  • Source health panel — live/cached/no-key/failed status per source
  • Event detail drawer — click any pin or feed item for full details
  • Filter panel — toggle layers by category, severity, and keyword
  • Auto-poll — frontend refreshes every 45 s; backend refreshes every 5 min
  • No database — pure in-memory cache, zero setup

Tech Stack

Layer Technology
Backend Python · FastAPI · HTTPX · Pydantic · Uvicorn
Frontend React · Vite · TypeScript · CesiumJS · Tailwind

APIs Used

Source Key Required Category Notes
NASA EONET No Natural disasters Open EONET v3 events feed
ReliefWeb No Humanitarian crises V2 reports API — situation reports and flash updates
GDELT GEO 2.0 No News / Conflict Geocoded article mentions, 24 h rolling window
OpenSky Network No Military aircraft Public state vectors filtered by callsign heuristics
USGS Earthquake API No Earthquakes Real-time GeoJSON feed (M2.5+, past 24 h), not conflict
World Bank Indicators No Country context Background indicators (GDP, population, etc.); not plotted
Polygon.io Yes Market data Previous-day OHLCV for stocks and crypto
NewsAPI Yes Global headlines Keyword-filtered global news
ACLED Yes Conflict data Armed conflict location and event data
AISStream Yes Maritime AIS WebSocket AIS stream filtered by vessel type

Sources without a key run automatically. Sources that need a key show NO KEY in the source health panel and return no data until configured.


Quick Start (no Docker)

1 — Clone / enter the project

cd KalView

2 — Backend

cd backend

pip install -r requirements.txt

# Copy and optionally edit the env file
# Windows PowerShell: copy .env.example .env
cp .env.example .env

python -m uvicorn app.main:app --reload --port 8000

Windows note: PowerShell does not support &&. Run each command separately. Use python -m uvicorn — the bare uvicorn command may not be on PATH for Windows Store Python installations.

Visit http://localhost:8000/health — should return {"status":"ok", ...}.

3 — Frontend (separate terminal)

cd frontend
npm install

# Copy env file
cp .env.example .env

npm run dev

Open http://localhost:5173.


Adding API Keys

Edit backend/.env and fill in the values you have:

POLYGON_API_KEY=your_key_here
NEWSAPI_KEY=your_key_here
ACLED_EMAIL=you@example.com
ACLED_API_KEY=your_key_here
AISSTREAM_API_KEY=your_key_here

Then hit Force Refresh in the dashboard or POST http://localhost:8000/api/refresh.

Where to register

Key URL
Polygon.io https://polygon.io/dashboard/signup
NewsAPI https://newsapi.org/register
ACLED https://acleddata.com/register/
AISStream https://aisstream.io/
Cesium Ion https://cesium.com/ion/signin/

The Cesium Ion token goes in frontend/.env as VITE_CESIUM_ION_TOKEN. Without it the globe uses CARTO dark tiles, which is fine for the MVP.


API Reference

Endpoint Method Description
/health GET Service health check
/api/nexus GET All events + assets + markets
/api/events GET Events (filterable by category etc.)
/api/assets GET Asset tracks (aircraft, vessels)
/api/markets GET Market snapshots
/api/refresh POST Trigger immediate re-fetch

Known Limitations

  • OpenSky does not guarantee complete military aircraft coverage; the callsign heuristics produce false positives and miss real military flights.
  • AIS classification (vessel military/government detection) is imprecise.
  • GDELT GEO 2.0 uses the API's built-in geocoordinates, which are more precise than text-geocoding but still reflect where GDELT located the article, not necessarily the exact incident site.
  • NewsAPI geocoding is approximate — articles are pinned to the country of their source outlet, not necessarily the event location.
  • ACLED requires credentialed access and only returns the most recent 100 events per refresh.
  • Polygon.io free tier has strict rate limits and may not return real-time prices during market hours on the basic plan.
  • All data is cached in-memory; restarting the backend clears the cache.

Future Improvements

  • Alert / notification system for critical events

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors