diff --git a/frontend/src/components/ChangelogModal.tsx b/frontend/src/components/ChangelogModal.tsx
index 8a307de..6b17bdc 100644
--- a/frontend/src/components/ChangelogModal.tsx
+++ b/frontend/src/components/ChangelogModal.tsx
@@ -2,45 +2,45 @@
import React, { useState, useEffect } from "react";
import { motion, AnimatePresence } from "framer-motion";
-import { X, Rss, Server, Zap, Shield, Bug } from "lucide-react";
+import { X, Zap, Gauge, Anchor, Layers, Bug } from "lucide-react";
-const CURRENT_VERSION = "0.6";
+const CURRENT_VERSION = "0.7";
const STORAGE_KEY = `shadowbroker_changelog_v${CURRENT_VERSION}`;
const NEW_FEATURES = [
{
- icon: ,
- title: "Custom News Feed Manager",
- desc: "Add, remove, and prioritize up to 20 RSS intelligence sources directly from the Settings panel. Assign weight levels (1-5) to control feed importance. No more editing Python files — your custom feeds persist across restarts.",
- color: "orange",
+ icon: ,
+ title: "Parallelized Data Fetches",
+ desc: "Stock and oil ticker fetches now run in parallel via ThreadPoolExecutor — backend data updates ~4x faster (~2s vs ~8s serial).",
+ color: "green",
},
{
- icon: ,
- title: "Global Data Center Map Layer",
- desc: "2,000+ data centers plotted worldwide from a curated dataset. Click any DC for operator details — and if an internet outage is detected in the same country, the popup flags it automatically.",
- color: "purple",
+ icon: ,
+ title: "AIS WebSocket Stability",
+ desc: "Exponential backoff now properly resets after 200 consecutive successes. Removed lock-contention vessel pruning — replaced with time-based logging every 60s.",
+ color: "blue",
},
{
icon: ,
- title: "Imperative Map Rendering",
- desc: "High-volume layers (flights, satellites, fire hotspots) now bypass React reconciliation and update the map directly via setData(). Debounced updates on dense layers. Smoother panning and zooming under load.",
+ title: "Deferred Icon Loading",
+ desc: "~35 critical map icons load immediately on startup. ~50 non-critical icons (fire markers, satellites, color variants) are deferred — faster initial map render.",
color: "yellow",
},
{
- icon: ,
- title: "Enhanced Health Observability",
- desc: "The /api/health endpoint now reports per-source freshness timestamps and counts for all data layers — UAVs, FIRMS fires, LiveUAMap, GDELT, and more. Better uptime monitoring for self-hosters.",
+ icon: ,
+ title: "Smarter Data Tiering",
+ desc: "Satellites removed from fast endpoint (was duplicated). Geopolitics polling reduced from 5min to 30min. Single-pass ETag serialization — clients get 304 Not Modified most of the time.",
color: "cyan",
},
];
const BUG_FIXES = [
- "Settings panel now has tabbed UI — API Keys and News Feeds on separate tabs",
- "Data center coordinates fixed for 187 Southern Hemisphere entries (were mirrored north of equator)",
- "Docker networking: CORS_ORIGINS env var properly passed through docker-compose",
- "Start scripts warn on Python 3.13+ compatibility issues before install",
- "Satellite and fire hotspot layers debounced (2s) to prevent render thrashing",
- "Entries with invalid geocoded coordinates automatically filtered out",
+ "News feed entrance animations capped at 15 items — no more 100+ simultaneous Framer Motion instances",
+ "FIRMS fire hotspots and internet outages use heapq.nlargest() instead of full sort — faster processing of 60K+ records",
+ "Ship counts in left panel memoized with single-pass loop instead of 3 separate filter calls",
+ "Color map objects extracted to module-level constants — no allocation on every 2s tick",
+ "GDELT headline extraction improved — skips gibberish URL slugs and hex IDs",
+ "Multi-arch Docker images now available (amd64 + arm64) — runs on Raspberry Pi and Apple Silicon",
];
export function useChangelog() {