Commit graph

18 commits

Author SHA1 Message Date
c22cf47dec feat(dashboard): move notification config to Config page
- Notifications tab in Config sidebar with Bell icon
- Channels section: add/edit/delete channels (mesh broadcast, DM, email, webhook)
- Test button sends test alert to channel
- Rules section: create rules with category checkboxes fetched from API
- Quiet hours configurable with start/end times
- Dedup window to prevent alert spam
- Full helper text and info buttons on every field
- Category list fetched from /api/notifications/categories, not hardcoded
- Added notifications and environmental to VALID_SECTIONS in config_routes.py

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-13 04:47:42 +00:00
947cce514e feat(dashboard): comprehensive config UI with help and descriptions
- Add InfoButton component with click-to-toggle popover for field help
- Add SectionDescription component for section intro paragraphs
- Add AlertRuleToggle component with grouped threshold controls
- Add detailed info and helper text for every field in all sections
- Convert Commands section to toggleable command list with descriptions
- Add dropdowns for severity_min, fire state, connection type, LLM backend
- Add region management: Add/Delete buttons with confirmation
- Group alert rules by category: Infrastructure, Power, Utilization, Health
- Remove hardcoded placeholders and Idaho-specific text
- Fix config.py DashboardConfig dataclass decorator
- Fix main.py MessageRouter initialization

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-13 04:26:17 +00:00
f8874104ad feat(dashboard): alerts page + toast notifications + polish
- Full Alerts page with active alerts, history table, subscriptions
- Active alert cards with severity styling and acknowledge button
- Alert history table with type/severity filtering and pagination
- Subscription viewer showing mesh subscriptions
- ToastProvider for app-wide toast notifications
- Toast notifications triggered on WebSocket alert_fired messages
- Auto-dismiss toasts after 8 seconds, click to navigate
- Page titles on all pages (Dashboard/Mesh/Environment/Config/Alerts)
- Improved alert_routes.py with proper pending alert handling
- Added AlertHistoryItem, Subscription types to api.ts
- Added fetchAlertHistory, fetchSubscriptions functions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-13 01:36:31 +00:00
3d74eb92b0 feat(env): add NASA FIRMS satellite fire hotspot detection
- Implement FIRMSAdapter polling NASA FIRMS area API for satellite hotspots
- Cross-reference hotspots against NIFC perimeters to identify new ignitions
- Add !hotspots command with --new flag for filtering new ignitions only
- Add FIRMSConfig dataclass with map_key, source, bbox, day_range options
- Add /api/env/hotspots endpoint for dashboard integration
- Add Satellite Hotspots section to Environment.tsx with NEW badges
- Add FIRMS configuration section to Config.tsx with source/confidence options
- Update config.example.yaml with FIRMS configuration template

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-12 23:06:55 +00:00
bb36ebb8c3 fix: remove hardcoded fallbacks + add missing config UI sections 2026-05-12 22:48:49 +00:00
f8bf7e5057 feat(env): USGS stream gauges, TomTom traffic, 511 road conditions 2026-05-12 22:22:57 +00:00
ab7392c518 feat: Add MQTT source adapter 2026-05-12 21:57:11 +00:00
2255ca5803 feat(env): NIFC fire perimeters + avalanche advisories
- WFIGS ArcGIS fire perimeter polling with proximity alerts
- Avalanche.org advisory polling (seasonal, SNFAC)
- !fire and !avy commands
- Distance-based severity for fires near mesh infrastructure
- Dashboard environment page integration
- Alert engine fires on fires within 50km of mesh area

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-12 15:22:07 -06:00
1158e30c0b Make environmental feeds band-agnostic; add Environment page
- Remove band_assessment and band_detail from SWPC adapter
- Remove all frequency-specific conclusions (906 MHz, 10m-20m, etc.)
- Store only raw indices: SFI, Kp, R/S/G scales, dM/dz gradients
- Let LLM interpret propagation data based on user's band of interest
- Add full Environment page with feed status, solar indices, and ducting data
- Update Dashboard RF Propagation card to show raw values only
- Update alert messages to be frequency-agnostic

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-12 14:59:54 -06:00
61684f0ee2 feat(dashboard): config management pages (replaces TUI)
- Tabbed config editor covering all 15 config sections
- Mesh sources: card-based list with add/edit/delete
- Mesh intelligence: region editor, critical nodes, alert rules
- Environmental feeds: per-feed toggle and config cards
- Save with validation, restart-required detection, discard changes
- Form components: text, number, toggle, select, textarea, list inputs
- Password fields with show/hide toggle
- Conditional field visibility based on enable toggles
- Replaces the 1434-line TUI configurator for daily use

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-12 13:17:28 -06:00
ef7a63fb70 fix(dashboard): edges not interactive, only nodes trigger hover/dim
- Added blur config for dimmed state (opacity 0.15 for nodes, 0.04 for edges)
- Added scale effect on node hover (1.1x)
- Explicit edgeSymbol: none to disable edge markers
- Only nodes are interactive: hover, click, tooltip
- Edges have no hover effect, no tooltip, no click handler

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-12 13:02:50 -06:00
4625740057 fix(dashboard): rewrite topology graph for performance at scale
Replaced React state-driven animation with ECharts graph rendering.
Previous approach re-rendered 263+ SVG nodes via setState in rAF loop,
causing browser lockup. New approach uses ECharts which handles force
layout and rendering natively at scale.

Changes:
- Switch from D3 force sim + React state to ECharts graph
- Remove particle animation (was fake random noise, not real packets)
- Filter out nodes with zero edges by default
- Add filter controls: Connected, Infra, All
- ECharts handles zoom/pan/drag natively (roam: true)
- Node selection dims unrelated nodes
- Force config matches Meshview: repulsion 200, edgeLength [80,120]
- Animation disabled for performance (animation: false)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-12 12:47:42 -06:00
d52abb2572 fix(dashboard): dynamic force scaling + zoom/pan on topology graph
- Dynamic force parameters based on node/edge count and density
- Per-node degree-weighted link strength for balanced layouts
- Position clamping keeps nodes within viewport
- d3-zoom for pan/zoom (wheel, drag, double-click reset)
- Zoom control buttons (+, -, reset) in corner
- Drag handlers account for zoom transform
- Legends stay fixed outside transform group
- Scales gracefully from 63 to 200+ nodes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-12 12:27:03 -06:00
8273913c1a feat(dashboard): mesh topology graph + geographic map + node table
- D3 force-directed topology graph with flowing particle animations
- Leaflet geographic map with CartoDB Dark tiles
- Drag-to-reorganize with visible settling (matches Meshview behavior)
- SNR-based edge coloring: excellent/good/fair/marginal/poor
- Node detail panel with neighbor list and external map links
- Sortable/filterable node table
- Region-colored nodes, infrastructure vs client distinction
- Click-to-select synced across graph, map, table, and detail panel

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-12 12:14:45 -06:00
7704923b8c fix(dashboard): add null checks for health.pillars
Prevents "e.pillars is undefined" crash when health object
doesn't have pillars property (e.g., during initial load or
if API response is malformed).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-12 11:45:38 -06:00
549ae4bdfb feat(env): NWS weather alerts, NOAA space weather, tropospheric ducting
- Environmental feed system with tick-based adapters
- NWS Active Alerts: polls api.weather.gov, zone-based filtering
- NOAA SWPC: Kp, SFI, R/S/G scales, band assessment, alert detection
- Tropospheric ducting: Open-Meteo GFS refractivity profile, duct classification
- !alerts command for active weather warnings
- !solar / !hf commands for RF propagation (HF + UHF ducting)
- Alert engine integration: severe weather, R3+ blackout, ducting events
- LLM context injection for weather/propagation queries
- Dashboard RF Propagation card with HF + UHF ducting display
- EnvironmentalConfig with per-feed toggles in config.yaml
2026-05-12 17:21:43 +00:00
374fb835c5 fix(dashboard): content scroll overflow bug 2026-05-12 16:46:51 +00:00
4331bcb7e1 feat(dashboard): React frontend scaffold with overview page
- Vite + React 18 + TypeScript + Tailwind CSS
- Dashboard overview with health gauge, pillar bars, alerts
- WebSocket hook for real-time updates
- Layout with sidebar navigation and live indicator
- Placeholder pages for Mesh, Environment, Config, Alerts
- Dark theme ops center aesthetic with JetBrains Mono

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-12 10:28:12 -06:00