A live situation room for world events.
monitr aggregates 150+ news sources into an interactive dashboard — trending topics, a 3D world map, elections, conflicts, and markets — with a real-time social layer of chat, profiles, and presence layered on top.
Staying genuinely informed about the world has never been harder. The raw information is out there, but it is scattered across hundreds of outlets, social feeds, market tickers, and maps — each with its own bias, refresh rate, and login. Holding a real-time picture in your head means juggling a dozen tabs and still missing how the pieces connect.
News, markets, conflict, elections, weather, even satellites each sit in a separate tool with its own mental model.
Most dashboards are static snapshots or refresh on a timer. Real events move faster than the screen in front of you.
With no credibility weighting or de-duplication, ten versions of one story crowd out the one that matters.
Following world events is oddly isolating — there is no shared space to react, discuss, or see what others track.
Every jump between apps drops the thread; the link between a market move and a headline gets lost in the gaps.
Off-the-shelf readers can’t be arranged, themed, or tuned to the handful of things any one person actually watches.
Surface and connect primary sources, and always link back out — never pretend to be the origin.
Default-deny rules, rate limiting, and quota-aware deploys are part of the product, not an afterthought.
Cheap data feeds, serverless, and a hybrid backend keep a one-operator situation room sustainable.
Six systems that could each be their own product, working together.
150+ sources, including GDELT global event data, distilled into trending topics with credibility scoring and a websocket-backed live feed.
A 3D globe and 2D maps, country deep-dives, an Elections mode, conflict and geopolitics panels (nuclear, tariffs, trade blocs), plus markets, weather, space, and live cams.
Track topics and countries with tiered alert sensitivity — off, important-only, or all — a daily AI-style digest, and browser notifications.
Global chat with @mentions, friends and requests, public profiles with badges, live presence, and opt-in "what are you viewing" activity.
An admin panel with user management, roles, a reports queue, word filters, a global chat kill-switch, badge granting, and an immutable audit log.
Google and X OAuth plus anonymous guest sessions and a username-onboarding gate.
A hybrid of an always-on Dockerized backend and serverless, with security and cost treated as features.
React + Vite SPA, code-split by feature so the Three.js globe, maps, and charts load on demand. Hook-driven with real-time Firestore listeners, optimistic UI with debounced cloud saves, and error boundaries that degrade a failed call inline instead of crashing the app.
A Dockerized Node.js service on a DigitalOcean droplet (docker-compose + nginx reverse proxy) behind Cloudflare with origin TLS. PostgreSQL storage, a websocket server for live presence and feed, and scheduled news-ingestion and rundown jobs.
Around 57 Firebase Cloud Functions (2nd-gen / Cloud Run), Firestore real-time DB, Cloud Storage, and Hosting — a deliberate hybrid of always-on droplet and serverless.
Default-deny Firestore and Storage rules, server-side validation and sanitization, Firestore-backed sliding-window rate limiting, signed upload URLs with size caps, ban and mute enforcement at the request gate, roles re-derived server-side, App Check (reCAPTCHA) attestation, and audit logging of every admin action.
Worked under a hard regional Cloud Run CPU quota: tuned per-function maxInstances and built a one-at-a-time deploy strategy to keep all ~57 functions shipping under the ceiling.
Three.js · maps · charts
origin TLS · CDN · WAF
Auth · Firestore · ~57 Functions · Storage
Docker · nginx · Postgres · WebSocket
Take something from an ambitious idea to shipped, security and infra included. Open to freelance, contract, or the right full-time role.