Commit graph

186 commits

Author SHA1 Message Date
5c6042c692 Merge pull request 'chore: remove unused masscan scanner' (#45) from feat/remove-masscan into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 21s
Reviewed-on: #45
2026-09-01 00:52:54 -04:00
e8060cf5d1 Merge pull request 'fix(ops): pin TiTiler digest, GIST bbox indexes, single uvicorn worker' (#44) from feat/pin-titiler-gist-single-worker into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 25s
Reviewed-on: #44
2026-09-01 00:51:40 -04:00
Sirius DevOps
158ecc6235 chore: remove unused masscan scanner
Active discovery never produced cameras rows. Drop the scanner, systemd
unit, ingest trigger, and docs/env knobs. Keep RTSP preview via ffmpeg.
2026-09-01 00:47:24 -04:00
Sirius DevOps
74722f7628 fix(ops): pin TiTiler digest, GIST bbox indexes, single uvicorn worker
Pin titiler to the Pi-running digest, make workers=1 explicit for
in-memory WS/layer caches, and add PostGIS GIST indexes for events/fires
bbox pans without dropping the existing btree indexes.
2026-09-01 00:47:06 -04:00
ef27e13e50 Merge pull request 'feat(satellites): CelesTrak GP JSON satellites API with SGP4 propagation' (#43) from osint-dashboard/t_fe710941-osint-celestrak-get-api-satellites into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 41s
Reviewed-on: #43
2026-08-31 23:18:07 -04:00
Sirius DevOps
b9558431f2
Merge origin/master into CelesTrak satellites API
Keep satellites import (this PR) and place.reverse_geocode from #37.
2026-08-31 23:15:08 -04:00
91c7ad437c Merge pull request 'feat(hud): layer counts, shortcuts, terminator, zoom-gated cams, SWPC' (#41) from osint-dashboard/t_45362857-osint-hud-counts-shortcuts-terminator-zo into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 23s
Reviewed-on: #41
2026-08-31 23:13:53 -04:00
Sirius DevOps
7d344ce636
Merge origin/master into HUD polish
Keep cheat-sheet/SWPC CSS (this PR) and place-dossier CSS from #37.
2026-08-31 23:15:08 -04:00
Sirius DevOps
c91c9ef321
Merge origin/master into CelesTrak satellites API
Keep /api/satellites (this PR) and /api/infrastructure from #36,
plus both overlay_catalog entries. Disjoint layers.
2026-08-31 22:28:23 -04:00
6caa98e0a4 Merge pull request 'feat(map): right-click place dossier (Nominatim + nearby overlays)' (#37) from osint-dashboard/t_715a3b7e-osint-map-right-click-place-dossier into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 16s
Reviewed-on: #37
2026-08-31 22:28:05 -04:00
7a627d116b Merge branch 'master' into osint-dashboard/t_715a3b7e-osint-map-right-click-place-dossier 2026-08-31 22:27:52 -04:00
Sirius DevOps
848ace15d1
Merge origin/master into place dossier
Keep place-dossier JS (this PR) and conflicts overlay loaders from #39.
Disjoint HUD features in index.html.
2026-08-31 22:23:04 -04:00
5815ccb4d4 Merge pull request 'feat(infra): GET /api/infrastructure Overpass nuclear markers (bbox)' (#36) from osint-dashboard/t_5955729a-osint-get-api-infrastructure-overpass-nu into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 17s
Reviewed-on: #36
2026-08-31 22:22:47 -04:00
f8dbfef6c2 Merge pull request 'feat(cameras): UDOT IBI 511 traffic cameras -> cameras table' (#38) from osint-dashboard/t_5bfc52e8-osint-udot-ibi-511-cameras-cameras-table into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 16s
Reviewed-on: #38
2026-08-31 22:22:11 -04:00
Sirius DevOps
f7853a354c
Merge origin/master into HUD polish
Keep terminator .lp-dot.night (this PR) and .lp-dot.conflicts from #39.
2026-08-31 22:20:18 -04:00
Sirius DevOps
640fea31f4
Merge origin/master into UDOT IBI 511 cameras
Keep both UDOT IBI 511 (this PR) and ODOT TripCheck (merged #40)
plus existing MDOT parsers. Disjoint camera sources.
2026-08-31 22:20:04 -04:00
1383305409 Merge pull request 'feat(map): Conflicts zone overlay (Leaflet)' (#39) from osint-dashboard/t_fd263e32-osint-map-conflict-zone-overlay into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 16s
Reviewed-on: #39
2026-08-31 22:15:41 -04:00
53edaa9433 Merge pull request 'feat(cameras): ODOT TripCheck parser -> cameras table' (#40) from osint-dashboard/t_93732570-osint-odot-tripcheck-cameras-cameras-tab into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 17s
Reviewed-on: #40
2026-08-31 22:14:53 -04:00
240b9e70b3 Merge pull request 'feat(api): GET /api/stats HUD counters (counts only, never 500)' (#42) from osint-dashboard/t_75d2037f-osint-get-api-stats-hud-counters into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 20s
Reviewed-on: #42
2026-08-31 22:12:55 -04:00
Sirius DevOps
3f18b40da7
Merge origin/master into place dossier
Keep lastAircraft cache for nearby-dossier and MIL filter from #35.
2026-08-31 22:12:51 -04:00
Sirius DevOps
e0e59900b2
Merge origin/master into HUD polish
Keep aircraft MIL filter from #35 and HUD setLayerCount helper
(disjoint: mil styling vs layer-count API).
2026-08-31 22:12:19 -04:00
Sirius DevOps
12467dab4d
Merge origin/master into CelesTrak satellites API
Keep both overlay_catalog entries: satellites (this PR) and
conflicts (already on master). Disjoint layers.
2026-08-31 22:11:56 -04:00
Sirius DevOps
6c41019d6c
Merge origin/master into Overpass nuclear infrastructure
Keep both overlay_catalog entries: infra_nuclear (this PR) and
conflicts (already on master). Disjoint layers.
2026-08-31 22:11:29 -04:00
Sirius DevOps
e69d19c521
Merge origin/master into UDOT IBI 511 cameras
Keep both UDOT IBI 511 and already-merged MDOT MiDrive parsers
(disjoint camera sources on camera_scraper.py / tests).
2026-08-31 22:11:09 -04:00
Sirius DevOps
604738e176
Merge origin/master into ODOT TripCheck cameras
Keep both ODOT TripCheck and already-merged MDOT MiDrive parsers
(disjoint camera sources on the same dispatch/config/tests files).
2026-08-31 22:09:34 -04:00
f072a83ca8 Merge pull request 'feat(map): aircraft popup enrichment and emergency/MIL styling' (#35) from osint-dashboard/t_1d9c5839-osint-map-aircraft-popup-enrichment-emer into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 18s
Reviewed-on: #35
2026-08-31 21:55:09 -04:00
71b6f589a5 Merge branch 'master' into osint-dashboard/t_1d9c5839-osint-map-aircraft-popup-enrichment-emer 2026-08-31 21:54:54 -04:00
af836b0414 Merge pull request 'feat(conflicts): GET /api/conflicts conflict-zone catalog + news/GDELT counts' (#33) from osint-dashboard/t_e66223e3-osint-get-api-conflicts-catalog-news-cou into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 21s
Reviewed-on: #33
2026-08-31 21:52:02 -04:00
9712ad03a7 Merge pull request 'feat(cameras): MDOT MiDrive parser -> cameras table' (#34) from osint-dashboard/t_8be8d860-osint-mdot-midrive-cameras-cameras-table into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 28s
Reviewed-on: #34
2026-08-31 21:50:45 -04:00
Sirius DevOps
6b5eec3824 feat(satellites): CelesTrak GP JSON satellites API with SGP4 propagation
GET /api/satellites?groups=stations,weather returns last-known satellite
positions propagated from CelesTrak GP JSON (OMM mean elements, not TLE)
via the real sgp4 library (TEME->geodetic), not two-body Kepler.

- Fetch gp.php?GROUP=...&FORMAT=JSON at most once per 2h per group,
  cached with a last-good blob fallback for 403 / stale responses.
- SatNOGS TLE fallback only when the CelesTrak cache is empty.
- bbox viewport culling; unknown group -> 400.
- overlay_catalog() gains id=satellites (kind=points, /api/satellites).
- OMM path handles NORAD cat numbers >= 100000 (no TLE round-trip).
2026-08-31 21:42:50 -04:00
Sirius DevOps
f61d587523
feat(hud): layer counts, shortcuts, terminator, zoom-gated cams, SWPC
Poll GET /api/stats ~30s for rail integers (404 falls back to overlay
array lengths). Keyboard: ? cheat sheet, L layers, R reset, Esc closes
panels; F/S left unbound. Cheap sun-position day/night overlay default
off. Camera/HLS thumbs only at zoom >= 12. NOAA SWPC Kp chip in the
status strip (browser-direct; hide on failure).
2026-08-31 21:41:59 -04:00
Sirius DevOps
92dd9c5803 feat(api): GET /api/stats HUD counters (counts only, never 500) 2026-08-31 21:41:45 -04:00
Sirius DevOps
41433be574 feat(cameras): ODOT TripCheck parser -> cameras table
Add parse_odot_json (Esri-style cctvinventory.js) next to parse_caltrans_json:
JPEG snapshot_url, discovery_source=odot, Oregon bbox + filename guard,
no RTSP. Wire dispatch + default CAMERA_SOURCE_URLS entry. Unit tests.
2026-08-31 21:38:09 -04:00
Sirius DevOps
0b3ca0915e Merge remote-tracking branch 'origin/master' into osint-dashboard/t_fd263e32-osint-map-conflict-zone-overlay 2026-08-31 21:37:23 -04:00
Sirius DevOps
2ec210aaa4 feat(map): Conflicts layer toggle from /api/conflicts
Default-off LAYERS row paints L.circleMarker theatres colored by
severity (war/high/elevated). Popup shows label, description, and
eventCount. Catalog is fetched once (not on moveend). A 404 hides
the toggle. Null lat/lon rows are skipped so they never pin at 0,0.
2026-08-31 21:37:10 -04:00
Sirius DevOps
a9ca98e791 feat(cameras): UDOT IBI 511 parser -> cameras table
Add parse_udot_ibi_page + scrape_udot_ibi for the UDOT IBI 511 traffic
camera feed (prod-ut.ibi511.com, no key). DataTables endpoint is POST
form-encoded and caps at 100 rows/page regardless of `length`; page walk
uses recordsTotal with a UDOT_IBI_MAX_PAGES (default 40) runaway cap.

Skip images[0].blocked/disabled, parse WKT POINT(lng lat) from
latLng.geography.wellKnownText, drop outside the Utah bbox
(lat 36.9-42.1, lon -114.2--108.9). discovery_source=udot, stable
source_url == snapshot_url == /map/Cctv/{id} (never scrape frames),
url_hash dedupe, OSINT_USER_AGENT + X-Requested-With header.

Unit tests: WKT lng/lat order, blocked/disabled skip, bbox drop,
malformed payload, missing WKT.
2026-08-31 21:35:07 -04:00
Sirius DevOps
5cef596a3c feat(map): right-click place dossier (Nominatim + nearby overlays)
Right-click (long-press on touch) opens a What's here? HUD panel: reverse
geocode via GET /api/place (honest UA, 1 req/s, 60s/500-key cache) and lists
already-loaded cameras, aircraft, vessels, fires, and alerts within 5 km.
2026-08-31 21:35:00 -04:00
Sirius DevOps
150cc5fdc4 feat(infra): GET /api/infrastructure Overpass nuclear markers (bbox)
Overpass nwr power=plant + plant:source=nuclear, bbox-required, one
in-flight per quantized bbox, 25s server query with identifying UA,
24h TTL cache. Normalized to {id,name,lat,lon,type,extra}. overlay_catalog
entry infra_nuclear. Missing bbox 400; unknown type 422.
2026-08-31 21:31:31 -04:00
Sirius DevOps
6f5c11e8a7 feat(map): aircraft popup enrichment and emergency/MIL styling
Show callsign/hex/registration/type/alt/gs/squawk in ADS-B popups, keep
Planespotters photos, badge and color squawk 7700/7600/7500 plus emergency
flags, and expose a MIL filter only after /api/aircraft sends extra.role.
2026-08-31 21:31:20 -04:00
Sirius DevOps
fbff9e5415 feat(cameras): MDOT MiDrive parser -> cameras table
Add parse_mdot_json for the MDOT MiDrive camera/list JSON where
coordinates/id live in the county field's map link (lat=/lon=/id=) and
the JPEG still lives in the image field's <img src>. Michigan bbox
filter, missing-coords drop, RTSP reject. discovery_source=mdot,
stable source_url keyed on camera id, url_hash dedupe. Wired into
scrape_source dispatch + CAMERA_SOURCE_URLS defaults.

Unit tests: HTML field extract, bbox drop, missing-coords/image drop,
malformed payload.
2026-08-31 21:31:12 -04:00
Sirius DevOps
a82b62a011 feat(conflicts): GET /api/conflicts catalog + news/GDELT event counts
Curated static catalogue of 13 conflict theatres (Ukraine, Gaza, Sudan,
Myanmar, DRC, Yemen, Syria, Lebanon, Sahel, Somalia, Red Sea, Taiwan
Strait, Korean DMZ) with war|high|elevated severity and short factual
descriptions. GET /api/conflicts returns { zones: [{id,label,severity,
lat,lon,description,eventCount,lastUpdated}], timestamp } where
eventCount rolls up pre-existing geocoded news/GDELT//api/news/map rows
inside each zone bbox (0 when the tables are empty). Adds the conflicts
entry to overlay_catalog(). No upstream scraping, no jittered coords.
2026-08-31 21:30:23 -04:00
Sirius DevOps
c48788d4b6
fix(map): geofence delete, vessel snapshots, sentinel cache, news briefs
Geofences could be drawn but not removed. VesselAPI Hormuz dots vanished
on restart and DVR skipped between the 5 daily polls. Sentinel-1 re-hit
STAC on every pan and often painted a neighbouring swath. Executive
briefs truncated; ticker stayed empty unless something was critical.

- Layer-panel list + polygon popup DELETE /api/geofences/{id}
- Persist VesselAPI polls to vessels (UTC-day purge, DVR as-of, boot hydrate)
- Cache Sentinel-1 by 2° cell; pick covering scene; clip Leaflet tiles
- Retry truncated LLM JSON; ticker falls back to medium/low; 3-min HUD poll
2026-08-29 20:40:27 -04:00
47c726d68d Merge pull request 'fix(map): geofence delete, vessel snapshots, sentinel cache, news briefs' (#32) from fix/dashboard-geofence-vessels-sentinel-news into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 23s
Reviewed-on: #32
2026-08-29 20:39:12 -04:00
fdf5969e27 Merge pull request 'fix(ingest): skip known KEV/FIRMS rows; CI skips unchanged images' (#31) from feat/lean-ingest-ci-skip-unchanged into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 17m52s
Reviewed-on: #31
2026-08-29 19:37:38 -04:00
Sirius DevOps
5651d251d0
fix(ingest): skip known KEV/FIRMS rows; CI skips unchanged images
CISA KEV republished 1685 NIST URLs every 5 min; FIRMS re-inserted
~325k global hotspots every 15 min. Producer now skips URLs already
in event_dedup and FIRMS CSVs that are unchanged (delta-only persist).

CI rebuilds only images whose paths changed and never pulls/rebuilds
Timescale or bounces osint-db unless Dockerfile.pg changes.
2026-08-29 19:32:00 -04:00
0406eb6b7b Merge pull request 'feat(gpsjam): GPS interference hex overlay API (GPSJAM/ADS-B Exchange)' (#29) from feat/gpsjam-interference-overlay into master
Some checks failed
build-and-deploy / build-push-deploy (push) Failing after 1h14m25s
Reviewed-on: #29
2026-08-29 17:54:01 -04:00
0becc8a716 Merge pull request 'feat(map): chokepoint preset buttons (Leaflet)' (#28) from feat/chokepoint-preset-buttons into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 3m42s
Reviewed-on: #28
2026-08-29 17:03:15 -04:00
4c9ffb9673 Merge pull request 'feat(map): chokepoint preset catalog + vessels ?src= filter' (#27) from feat/chokepoint-presets-vessel-src into master
All checks were successful
build-and-deploy / build-push-deploy (push) Successful in 3m17s
Reviewed-on: #27
2026-08-29 16:59:35 -04:00
Sirius DevOps
42ca6295f0 feat(gpsjam): GPS interference hex overlay API (GPSJAM/ADS-B Exchange)
GET /api/map/gpsjam?date=YYYY-MM-DD (default yesterday UTC) fetches the
daily gpsjam.org H3 resolution-4 CSV, converts hexes to GeoJSON polygons,
and tags each with level low|medium|high (0-2% / 2-10% / >10%) via GPSJAM's
denoise formula. Whole world once, 1h TTL, graceful unavailable fallback.

- overlay_catalog: add kind=geojson gpsjam stub
- tests: mocked-HTTP unit + API contract (9 new)
2026-08-29 14:17:52 -04:00
Sirius DevOps
ac03442998 feat(map): chokepoint preset buttons on the Leaflet toolbar
Fetch GET /api/map/chokepoints once. Desktop buttons / phone <select>
fly to Hormuz, Bab el-Mandeb, Suez, Malacca, Taiwan. Turns Vessels on,
uses ?src=vesselapi on Hormuz, enables Sentinel-1 there, and never
POSTs /api/vessels/subscribe outside CONUS.
2026-08-29 14:12:02 -04:00