Skip to content

hakaitech/netr

Repository files navigation

Netr

Real-time global monitoring dashboard with a composable applet architecture.

Netr is a high-performance, extensible intelligence dashboard that aggregates live data from dozens of open sources — earthquakes, flights, news, markets, cyber threats, weather, infrastructure status, and more — into a single customizable board.

Originally inspired by koala73/worldmonitor. Netr is a ground-up rewrite that replaces the monolithic SPA with a modular applet-based architecture, delivering dramatically better performance and extensibility.


What's Different

Performance Overhaul

Area Original Netr
Framework React (virtual DOM diffing) Solid.js (fine-grained reactivity, no VDOM)
Map engines 4 (Deck.gl + MapLibre + D3 + Globe.gl) 1 (Deck.gl + MapLibre, unified)
CSS 366KB monolithic stylesheet Tailwind CSS 4 (~15KB gzipped)
Architecture 155-panel monolith, all mounted at once Composable applets — only active panels consume resources
State Single god-object AppContext Applet-local signals + typed EventBus
Polling 30+ independent setInterval loops Visibility-gated polling per applet with auto-cleanup
Backend 26 Vercel Edge Functions Single Hono server on Cloudflare Workers
Build output Single bundle 66 code-split chunks (applets: 2-4KB gzipped each)
Map lib loading Eager (800KB+ upfront) Lazy — loaded only when map applet is on board

Applet SDK — The Major Upgrade

The Netr SDK is a batteries-included toolkit for building applets in minutes, not hours:

Hooks:

  • usePolling(fetcher, interval) — auto-cleaning interval fetch with loading/error states
  • useMapLayer(services, id, layerFn) — reactive Deck.gl layer lifecycle on the shared map
  • useEventBus(services, channel, handler) — typed pub/sub with auto-unsubscribe
  • useAppletState(props, defaults) — persist applet config to IndexedDB across reloads
  • useFilter(items, filterFn) — reactive list filtering

Components:

  • AppletShell — standard frame with header, toolbar slot, and scrollable body
  • DataList — virtualized list with built-in loading, error, and empty states
  • StatGrid — numeric KPI grid
  • FilterBar — pill-based category filter
  • Badge, Sparkline, TimeAgo, LoadingState, ErrorState

Layer Factories:

  • createScatterLayer(), createPathLayer(), createArcLayer(), createGeoJsonLayer()
  • Pre-configured with dark-theme defaults, just pass your data

Utilities:

  • timeAgo, formatNumber, formatAltitude, formatSpeed, colorScale, debounce, generateId

A typical applet is 80-150 lines of code. See docs/applet-development.md for a full tutorial.


52 Built-In Applets

Category Applets
Geospatial Live Map, Geocoder Search, Country Profile, Timezone Clock, Coordinate Converter, POI Bookmarks, Geofence Editor, Distance Measure
Intelligence Live News, Conflict Tracker, Sanctions List, OSINT Feed, Threat Alerts, Refugee Tracker, Cyber Threat Map, Election Monitor, Protest Tracker
Markets Stock Ticker, Crypto Prices, Forex Rates, Commodity Prices, Economic Calendar, Market Heatmap, Bond Yields, Trade Flow Map
Infrastructure Flight Tracker, Vessel Tracker, Internet Outages, Power Grid, Subsea Cables, Satellite Tracker, Port Congestion, Rail Traffic, Pipeline Monitor
Environment Earthquake Monitor, Weather Radar, Wildfire Tracker, Hurricane Tracker, Volcano Monitor, Air Quality, Sea Temperature, Drought Monitor, Flood Alerts
Analytics Event Timeline, Anomaly Detector, Correlation Matrix, Data Export
Utility Notepad, Embed iFrame, RSS Reader, Countdown Timer, System Status

Quick Start

Option A: Docker (recommended)

git clone https://github.com/hakaitech/netr.git
cd netr

# Development — hot-reload for frontend and backend
docker compose up

That's it. Vite HMR on localhost:5173, API on :8787.

Source files are bind-mounted, so edits in src/ and server/src/ reflect instantly — no rebuild needed.

# Production — optimized single container
docker compose --profile prod up --build

The production image builds the Vite frontend, serves it through nginx on port 80, and runs the Hono API internally. One container, one port.

Mode Frontend API URL
docker compose up Vite HMR on :5173 tsx watch on :8787 localhost:5173
--profile prod nginx on :80 Node on :8787 (internal) localhost

Option B: Native Node

git clone https://github.com/hakaitech/netr.git
cd netr

# Install dependencies
npm install
cd server && npm install && cd ..

# Start backend (port 8787)
cd server && npm run dev:node &

# Start frontend (port 5173)
npm run dev

Open http://localhost:5173. Pick a preset board or build your own from the catalog.

Requirements: Node 22+, npm 10+

Docker Commands Reference

# Start dev environment
docker compose up

# Start dev environment in background
docker compose up -d

# View logs
docker compose logs -f frontend-dev
docker compose logs -f api

# Rebuild after dependency changes (package.json)
docker compose up --build

# Production build & run
docker compose --profile prod up --build

# Stop everything
docker compose down

# Stop and remove volumes
docker compose down -v

Extending Netr

Netr is designed to be extended. Two paths:

Built-in Applets

Create a new directory under src/applets/, export a manifest and a default Solid component, register it in builtin-registry.ts. Done.

External Plugins

Bundle your applet as an ESM module, host it anywhere, and load it at runtime via the plugin registry. No rebuild required.

Full guides:


Tech Stack

Layer Technology
UI Framework Solid.js
Map Engine Deck.gl + MapLibre GL
Grid Layout GridStack.js
Styling Tailwind CSS 4
Icons Lucide
Backend Hono on Cloudflare Workers
Build Vite
Persistence IndexedDB via idb-keyval

Open Data Sources & Credits

Netr aggregates data from these open services. We are grateful for their public APIs:

Service Data License / Terms
USGS Earthquake Hazards Program Real-time earthquake feed (GeoJSON) Public domain
OpenSky Network Live aircraft positions (ADS-B) OpenSky Terms
CARTO Basemaps Dark Matter map tiles CC BY 3.0
NASA FIRMS Active fire / hotspot data Public domain
NOAA / NHC Hurricane & tropical cyclone tracks Public domain
OpenWeatherMap Weather data OWM Terms
CoinGecko Cryptocurrency market data CoinGecko Terms
ACLED Armed conflict & protest events ACLED Terms
Smithsonian / GVP Global volcanism data Public
TeleGeography Submarine cable data TeleGeography Terms

Note: Many applets currently use realistic mock data. As you connect real API keys and endpoints, the live data will flow through the same SDK hooks — just swap the fetcher function.


Original Project

This project was inspired by and builds upon the work of koala73/worldmonitor — an AI-powered global monitoring system. Netr takes the original concept and reimagines it with a focus on performance, modularity, and extensibility.


License

MIT

About

Real-time global monitoring dashboard with composable applet architecture. 52 built-in applets, extensible SDK, Solid.js + Deck.gl + MapLibre.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages