- Test always shows current data for the rule's feed categories
- RF rules show live SFI/Kp/R/S/G and ducting conditions
- Weather rules show active NWS alert count and headlines
- Fire rules show active fire/hotspot count
- Stream rules show current gauge readings
- Mesh rules show current health score and infra status
- Send Current Conditions delivers live snapshot through channel
- Send Test Alert delivers example through channel
- Send Live Alert available when real conditions match
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add helper text and info (?) buttons to every field in Config.tsx
- Add section descriptions at the top of each config section
- Battery thresholds now show voltage equivalents (e.g., "30% ≈ 3.60V")
- NWS severity dropdown shows descriptions per option
- Alert rules grouped by category with full explanations
- Add InfoButton popover component for detailed field documentation
- Add info buttons to Environment.tsx RF propagation panels
- VOLTAGE_MAP and getVoltageApprox helper for Li-ion voltage lookup
Researched defaults and descriptions include:
- Li-ion voltage curve (4.20V=100%, 3.60V=30%, 3.50V=15%, 3.40V=7%)
- LoRa channel utilization (firmware throttles at 25%, issues at 50%)
- Packet flood detection (normal 1-5/min, suspicious >10/min)
- NWS severity levels with actionable descriptions
- Tropospheric ducting M-units/km refractivity gradients
- NOAA Space Weather R/S/G scales
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 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>
- 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>
- 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>
- 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>
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>
- 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>
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>
- 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>