frontend: Ghost-in-the-Shell overhaul — map-first landing, event blips, tickers #1

Merged
sirius merged 4 commits from frontend-overhaul into master 2026-08-27 17:48:59 -04:00
Owner

What

Full frontend overhaul per the Excalidraw brief — the interactive map is now the landing page, wrapped in a Ghost-in-the-Shell / Section-9 HUD theme (near-black navy, cyan+magenta accents, Orbitron/Rajdhani/Share Tech Mono, chamfered panels, scanlines, boot splash, UTC clock).

Map (unchanged core, new chrome)

  • Full-viewport NASA GIBS satellite globe — existing fires heatmap, camera popups + HLS playback, GIBS time navigation, and the California-bbox fix are preserved verbatim
  • New Event Blips layer: geolocated ingest events, color-coded by source type, since-filter, clickable popups
  • Layer slots reserved for Weather Warnings / Flights (ADS-B) / Vessels (AIS) — marked FEED PENDING until their backends exist

Tickers (bottom dock)

  • Market strip: configurable symbols (Settings), STANDBY placeholders now; auto-promotes to LIVE when GET /api/market returns {"symbols": [{symbol, price, change, change_pct, updated_at}]} — contract documented in the Settings panel
  • Breaking-news marquee: LLM executive-summary flash (click → News) + top headlines, 15-minute cycle

Navigation & Settings

  • Dropdown MENU (Live Map / News Brief / Events / Alerts / Entities / Ingest / API Keys / Settings), keyboard navigable
  • Settings view: tracked market symbols, map layer defaults (fires/blips since, on-by-default layers) persisted to localStorage; System status panel

Backend

  • GET /api/events gains bbox / since / has_coords filters (powers the blips layer, mirrors /api/fires)
  • Bug fix: events.camera enum value was added to the DB enum by migration 004 but never added to models.py/schemas.py — any events query 500s once camera events flow in. Now aligned.

Verified

  • 24/24 tests pass (12 unit + 12 integration against a migrated test DB)
  • End-to-end local run: real USGS earthquakes API→NATS→ingester→Postgres→map blips; 15,195 real cameras scraped from ALERTWest/Live-Environment/public-ip-cams feeds; fires/news fixtures
  • Zero JS console errors across all views; screenshots reviewed pixel-level
## What Full frontend overhaul per the Excalidraw brief — **the interactive map is now the landing page**, wrapped in a Ghost-in-the-Shell / Section-9 HUD theme (near-black navy, cyan+magenta accents, Orbitron/Rajdhani/Share Tech Mono, chamfered panels, scanlines, boot splash, UTC clock). ### Map (unchanged core, new chrome) - Full-viewport NASA GIBS satellite globe — existing fires heatmap, camera popups + HLS playback, GIBS time navigation, and the California-bbox fix are preserved verbatim - **New Event Blips layer**: geolocated ingest events, color-coded by source type, since-filter, clickable popups - Layer slots reserved for **Weather Warnings / Flights (ADS-B) / Vessels (AIS)** — marked FEED PENDING until their backends exist ### Tickers (bottom dock) - **Market strip**: configurable symbols (Settings), STANDBY placeholders now; auto-promotes to LIVE when `GET /api/market` returns `{"symbols": [{symbol, price, change, change_pct, updated_at}]}` — contract documented in the Settings panel - **Breaking-news marquee**: LLM executive-summary flash (click → News) + top headlines, 15-minute cycle ### Navigation & Settings - Dropdown **MENU** (Live Map / News Brief / Events / Alerts / Entities / Ingest / API Keys / Settings), keyboard navigable - **Settings view**: tracked market symbols, map layer defaults (fires/blips since, on-by-default layers) persisted to localStorage; System status panel ## Backend - `GET /api/events` gains `bbox` / `since` / `has_coords` filters (powers the blips layer, mirrors /api/fires) - **Bug fix**: `events.camera` enum value was added to the DB enum by migration 004 but never added to `models.py`/`schemas.py` — any events query 500s once camera events flow in. Now aligned. ## Verified - 24/24 tests pass (12 unit + 12 integration against a migrated test DB) - End-to-end local run: real USGS earthquakes API→NATS→ingester→Postgres→map blips; 15,195 real cameras scraped from ALERTWest/Live-Environment/public-ip-cams feeds; fires/news fixtures - Zero JS console errors across all views; screenshots reviewed pixel-level
sirius added 1 commit 2026-08-27 17:24:47 -04:00
- Map is now the landing view: full-viewport NASA GIBS globe, existing
  fires/cameras/HLS map machinery preserved verbatim
- New 'Event Blips' layer: geolocated ingest events, color-coded by source,
  bbox/since/has_coords filters added to GET /api/events
- Weather / Flights(ADS-B) / Vessels(AIS) layer slots reserved (feed pending)
- Market ticker strip with configurable symbols — auto-promotes to LIVE when
  GET /api/market returns {symbols:[...]} (contract documented in Settings)
- Breaking-news ticker: LLM exec-summary flash + headline marquee, 15-min cycle
- Dropdown nav (Map/News/Events/Alerts/Entities/Ingest/API Keys/Settings),
  Settings view (localStorage: symbols, map layer defaults), System panel
- Section-9 theme: near-black navy, cyan/magenta accents, Orbitron/Rajdhani/
  Share Tech Mono, chamfered HUD panels, scanlines, boot splash, UTC clock
- Fix: events.camera enum value missing from models.py/schemas.py caused 500s
  on every events query once camera events flowed in (migration 004 added it
  to the DB enum only)
sirius closed this pull request 2026-08-27 17:26:15 -04:00
sirius reopened this pull request 2026-08-27 17:26:26 -04:00
sirius added 1 commit 2026-08-27 17:31:16 -04:00
Author
Owner

looks good

looks good
sirius added 2 commits 2026-08-27 17:46:37 -04:00
# Conflicts:
#	app/static/index.html
Master's b2369bc fixed cameras vanishing after opening a popup and zooming:
Leaflet 1.9.4's Map.closePopup() never nulls map._popup, so the old
'if (map._popup) return' guard skipped every overlay reload forever after
the first popup. Port the fix into the redesigned frontend: track popup
state via popupopen/popupclose, close on user zoom/drag so moveend reloads
always run, and keep the autopan skip for the popup's own pan.
sirius merged commit fd43a6165a into master 2026-08-27 17:48:59 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: sirius/osint-dashboard#1
No description provided.