spaxel/dashboard/help_articles.json
jedarden 8708c02929 feat(dashboard): polish tap-to-jump UX and remove expert-mode gating
- Improve link highlighting with Fresnel health color mapping
- Route re-provision through live page via query param for reliability
- Remove simple-mode gating from command palette (now available everywhere except ambient)
- Update Fresnel tests, fleet page unpaired node UX, and help articles

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 23:16:56 -04:00

513 lines
29 KiB
JSON

[
{
"id": "sensing-link",
"title": "What is a sensing link?",
"content": "A sensing link is the path between two spaxel nodes (one transmitting, one receiving). Motion in the space between them changes the WiFi signal, which spaxel detects. Each link contributes to detecting people in your space.",
"category": "Basics",
"action": null
},
{
"id": "fresnel-zone",
"title": "What is the Fresnel zone?",
"content": "The Fresnel zone is the region in space where motion has the most impact on the signal between two nodes. Spaxel uses this geometry to estimate where in the room a person is. Zone 1 is the most sensitive area directly between the nodes.",
"category": "Basics",
"action": null
},
{
"id": "csi-technology",
"title": "How does CSI detection work?",
"content": "CSI (Channel State Information) is data about how WiFi signals travel through space. When a person moves between WiFi devices, they affect the signal. Spaxel analyzes these tiny changes to detect motion and location without cameras.",
"category": "Basics",
"action": null
},
{
"id": "detection-quality",
"title": "Why is my detection quality low?",
"content": "Low quality usually means interference from other WiFi devices, an obstacle in the sensing zone, or the node is too far from your router. Click \"Diagnose\" on the link in the Fleet Status panel to find the specific cause.",
"category": "Troubleshooting",
"action": { "label": "View Fleet Status", "url": "#/fleet" }
},
{
"id": "node-offline",
"title": "My node shows as offline",
"content": "Check that the node is powered (LED should be lit). If it's powered but offline, verify WiFi is working. The node may have disconnected from your network. Try power cycling it by unplugging and replugging.",
"category": "Troubleshooting",
"action": { "label": "View Fleet Status", "url": "#/fleet" }
},
{
"id": "false-positives",
"title": "Why am I getting false detections?",
"content": "False detections can be caused by RF interference from microwaves, other WiFi networks, or environmental changes. Use the feedback buttons on detections to help the system learn and reduce false positives over time.",
"category": "Troubleshooting",
"action": { "label": "View Timeline", "url": "#/timeline" }
},
{
"id": "gdop-coverage",
"title": "What is GDOP coverage?",
"content": "GDOP (Geometric Dilution of Precision) measures how well your node positions can localize people. Green areas have excellent accuracy, yellow areas are good, red areas may need additional nodes for reliable detection.",
"category": "Setup",
"action": { "label": "Open Setup", "url": "#/setup" }
},
{
"id": "node-placement",
"title": "Where should I place my nodes?",
"content": "Place nodes at different heights and around the perimeter of the space you want to monitor. Avoid placing all nodes at the same height. Corners of rooms work well. The coverage painting tool in Setup shows the best positions.",
"category": "Setup",
"action": { "label": "Open Setup", "url": "#/setup" }
},
{
"id": "add-node",
"title": "How do I add a new node?",
"content": "Connect your ESP32-S3 node via USB to the device running this dashboard. Click \"Add Node\" and follow the on-screen instructions. The node will be automatically configured and should appear within 2 minutes.",
"category": "Setup",
"action": { "label": "Add Node", "url": "#/setup/add" }
},
{
"id": "floorplan-calibration",
"title": "How do I calibrate my floor plan?",
"content": "Upload an image of your floor plan, then click two points that you know the real-world distance between. Enter that distance and the system will scale the image correctly. Drag the calibrated floor plan to position it in your 3D space.",
"category": "Setup",
"action": { "label": "Open Setup", "url": "#/setup" }
},
{
"id": "automations",
"title": "How do automations work?",
"content": "Automations trigger actions when specific conditions are met. You can define trigger volumes in 3D space and set conditions like \"when someone enters\", \"when someone dwells for 30 seconds\", or \"when the room becomes vacant\". Actions can send webhooks or MQTT messages.",
"category": "Features",
"action": { "label": "View Automations", "url": "#/automations" }
},
{
"id": "trigger-volumes",
"title": "How do I create a trigger zone?",
"content": "In Setup mode, draw a 3D box or cylinder in the scene where you want to detect presence. Choose the condition (enter, leave, dwell, vacant, count) and configure the action. Trigger volumes are shown as translucent shapes in the 3D view.",
"category": "Features",
"action": { "label": "Open Automations", "url": "#/automations" }
},
{
"id": "fall-detection",
"title": "How does fall detection work?",
"content": "Fall detection monitors the Z-axis (height) of detected people. A rapid descent to below 0.5m followed by sustained stillness for 10+ seconds triggers a fall alert. This requires nodes at mixed heights for best accuracy.",
"category": "Features",
"action": null
},
{
"id": "ble-identity",
"title": "How does person identification work?",
"content": "Spaxel detects BLE signals from phones, watches, and tags. By registering your devices in the People panel, the system can match detected people to specific identities. The closer the device is to the person, the better the match.",
"category": "Features",
"action": { "label": "View People", "url": "#/people" }
},
{
"id": "register-ble-device",
"title": "How do I register a BLE device?",
"content": "Go to the People panel and look at the \"Discovered\" section. Devices that have been seen nearby appear here. Click on a device to assign it a label (like \"Alice\"), choose a type and color, and register it.",
"category": "Features",
"action": { "label": "View People", "url": "#/people" }
},
{
"id": "predictions",
"title": "What are presence predictions?",
"content": "After 7 days of learning, spaxel predicts where each person will be next. Predictions are based on learned patterns for each person, time of day, and day of week. Predictions appear in the Predictions panel and can be used for automations.",
"category": "Features",
"action": { "label": "View Predictions", "url": "#/predictions" }
},
{
"id": "sleep-tracking",
"title": "How does sleep tracking work?",
"content": "Define a bedroom zone and spaxel will analyze breathing patterns and motion during nighttime hours. Sleep reports include duration, onset latency, restlessness, and breathing regularity. Requires 7+ nights of data for accurate patterns.",
"category": "Features",
"action": { "label": "View Sleep", "url": "#/sleep" }
},
{
"id": "diurnal-baseline",
"title": "What is the diurnal baseline?",
"content": "The diurnal baseline learns the RF environment for each hour of the day. Some homes have patterns like HVAC cycling that affect WiFi signals. The system adapts to these patterns to reduce false positives during predictable environmental changes.",
"category": "Advanced",
"action": { "label": "View Settings", "url": "#/settings" }
},
{
"id": "time-travel",
"title": "What is time-travel debugging?",
"content": "Time-travel lets you rewind and replay past detection events. Pause live view, scrub through history, and adjust algorithm parameters to see how detection would have differed. Great for understanding why something was (or wasn't) detected.",
"category": "Advanced",
"action": null
},
{
"id": "feedback-learning",
"title": "How does feedback improve accuracy?",
"content": "When you mark detections as correct or incorrect, spaxel learns from your feedback. True positives reinforce the current settings. False positives slightly raise thresholds and adjust link weights. Over time, this customizes detection to your specific environment.",
"category": "Advanced",
"action": null
},
{
"id": "security-mode",
"title": "What is security mode?",
"content": "Security mode enhances sensitivity and treats any motion as suspicious. When armed, all detections trigger alerts. You can arm/disarm manually or via automation. Perfect for when you're away from home.",
"category": "Features",
"action": null
},
{
"id": "zones",
"title": "How do I define zones?",
"content": "In Setup mode, draw room boxes to define zones. Zones represent logical areas like \"Kitchen\", \"Living Room\", or \"Bedroom\". Zone occupancy is tracked automatically via portal crossings or blob positions.",
"category": "Setup",
"action": { "label": "Open Setup", "url": "#/setup" }
},
{
"id": "portals",
"title": "What are portals?",
"content": "Portals are invisible doorways you draw between zones. They detect directional crossings (e.g., from hallway to kitchen) and maintain accurate room occupancy counts. Draw portals across doorways in the Setup editor.",
"category": "Setup",
"action": { "label": "Open Setup", "url": "#/setup" }
},
{
"id": "accuracy-trends",
"title": "How can I track accuracy over time?",
"content": "The Accuracy panel shows how detection accuracy has improved based on your feedback. It tracks the median localization error from BLE ground truth and shows how user corrections have reduced false positives over weeks and months.",
"category": "Advanced",
"action": { "label": "View Accuracy", "url": "#/accuracy" }
},
{
"id": "rebaseline",
"title": "When should I re-baseline?",
"content": "Re-baseline after moving nodes, changing furniture, or if you notice consistent false positives. The system suggests re-calibration when environment changes are detected. You can trigger manual re-baselining from the Fleet Status panel.",
"category": "Maintenance",
"action": { "label": "View Fleet", "url": "#/fleet" }
},
{
"id": "ota-update",
"title": "How do I update node firmware?",
"content": "When a new firmware version is available, you'll see an \"Update available\" badge on affected nodes. You can update individual nodes or use \"Update All\" for a rolling update. The system automatically updates one node at a time with a 30-second gap between updates.",
"category": "Maintenance",
"action": { "label": "View Fleet", "url": "#/fleet" }
},
{
"id": "ambient-mode",
"title": "What is Ambient Mode?",
"content": "Ambient Mode is a display-only mode for wall-mounted tablets. It shows a simplified floor plan with colored dots for people and room labels. The display dims when the house is empty and brightens when someone arrives. Access at /ambient on your tablet.",
"category": "Interface",
"action": null
},
{
"id": "command-palette",
"title": "How do I use the command palette?",
"content": "Press Ctrl+K (Cmd+K on Mac) to open the command palette. Search for zones, people, nodes, or commands like \"update all nodes\" or \"re-baseline\". It's the fastest way to navigate and control the system.",
"category": "Interface",
"action": null
},
{
"id": "timeline",
"title": "What does the timeline show?",
"content": "The timeline shows every event the system has observed: detections, zone transitions, alerts, system events, and more. Tap any event to jump to that moment in time-travel mode. You can filter by person, zone, event type, or search naturally.",
"category": "Interface",
"action": { "label": "View Timeline", "url": "#/timeline" }
},
{
"id": "explainability",
"title": "What is detection explainability?",
"content": "Explainability shows exactly why a person was detected at a specific location. Tap \"Why?\" on any detection to see which links contributed, their signal strength, Fresnel zone intersections, and confidence breakdown. Helps you understand and debug detection.",
"category": "Advanced",
"action": null
},
{
"id": "passive-radar",
"title": "What is passive radar mode?",
"content": "Passive radar mode uses your existing WiFi router as the transmitter. ESP32 nodes operate in receive-only mode, capturing CSI from router beacons and data traffic. This provides presence detection with just 2 nodes instead of 4+.",
"category": "Basics",
"action": null
},
{
"id": "crowd-flow",
"title": "What is crowd flow visualization?",
"content": "Crowd flow aggregates movement patterns over time into directional flow maps. Arrows show common paths, colored dots show where people linger. Use the time filter to see patterns by hour, day, or week. Helps optimize furniture placement and understand space usage.",
"category": "Features",
"action": null
},
{
"id": "notifications",
"title": "How do push notifications work?",
"content": "Configure notification channels (Ntfy, Pushover, Gotify, webhooks) in Settings. Notifications include floor plan thumbnails and natural language descriptions. Smart batching combines rapid-fire events. Quiet hours suppress non-critical alerts.",
"category": "Interface",
"action": { "label": "Notification Settings", "url": "#/settings/notifications" }
},
{
"id": "backup-restore",
"title": "How do I backup my data?",
"content": "Use the Export button in Settings to download a complete configuration backup. This includes nodes, zones, triggers, BLE registry, and settings. Import on a new installation to restore. For full backups including database, use the /api/backup endpoint.",
"category": "Maintenance",
"action": { "label": "Export Config", "url": "#/settings/export" }
},
{
"id": "mqtt-integration",
"title": "How do I integrate with Home Assistant?",
"content": "Configure MQTT broker settings in the Integration panel. Spaxel publishes occupancy, person presence, and alerts to MQTT topics. Home Assistant auto-discovery creates sensors automatically. No additional software needed on the Home Assistant side.",
"category": "Integration",
"action": { "label": "Integration Settings", "url": "#/settings/integration" }
},
{
"id": "self-healing",
"title": "What is self-healing?",
"content": "When a node goes offline, spaxel automatically re-optimizes roles among remaining nodes to maintain the best possible coverage. When the node reconnects, roles are re-optimized again. The dashboard shows before/after coverage comparisons.",
"category": "Advanced",
"action": null
},
{
"id": "adaptive-sensing",
"title": "What is adaptive sensing rate?",
"content": "Spaxel automatically adjusts the CSI capture rate based on activity. Idle links drop to 2 Hz to save bandwidth, while active links run at 20-50 Hz. Motion detection triggers instant ramp-up. This reduces bandwidth by 90%+ during quiet periods.",
"category": "Advanced",
"action": null
},
{
"id": "breathing-detection",
"title": "How does breathing detection work?",
"content": "Spaxel analyzes the 0.1-0.5 Hz frequency band in CSI phase data, which corresponds to human breathing. When a person is stationary, the system can detect breathing rate and regularity. This requires at least 7 days of learning for accurate patterns.",
"category": "Features",
"action": { "label": "View Sleep", "url": "#/sleep" }
},
{
"id": "quick-actions",
"title": "What are quick actions?",
"content": "Right-click (desktop) or long-press (mobile) on any 3D element to get context-sensitive actions. Available on blobs, nodes, zones, portals, and trigger volumes. Provides quick access to common tasks like diagnostics, identify, reposition, and history.",
"category": "Interface",
"action": null
},
{
"id": "morning-briefing",
"title": "What is the morning briefing?",
"content": "The morning briefing is a daily summary card that appears when you first open the dashboard. It includes sleep report, overnight events, system health, and predictions for the day ahead. Also available as a push notification at your configured time.",
"category": "Features",
"action": null
},
{
"id": "guided-troubleshooting",
"title": "What is guided troubleshooting?",
"content": "When the system detects issues like degraded quality or repeated setting changes, it proactively offers contextual help. Banners appear with guided flows to diagnose and fix problems. Help is reactive, not proactive - appears only when something seems wrong.",
"category": "Interface",
"action": null
},
{
"id": "accuracy-trends-detail",
"title": "How do I track my accuracy improvements?",
"content": "The Accuracy panel tracks median localization error over time using BLE ground truth. It shows how user feedback (thumbs up/down) has improved detection. The trend graph shows weekly progress, helping you see the impact of corrections and node placement changes.",
"category": "Advanced",
"action": { "label": "View Accuracy", "url": "#/accuracy" }
},
{
"id": "crowd-flow-filters",
"title": "How do I use crowd flow filters?",
"content": "Use the time filter dropdown to show flow patterns for specific periods: last 24 hours, last 7 days, or morning/evening routines. You can also filter by person to see individual movement patterns. The overlay updates dynamically as you change filters.",
"category": "Features",
"action": null
},
{
"id": "anomaly-detection",
"title": "How does anomaly detection work?",
"content": "After 7 days of learning, spaxel builds a statistical model of typical occupancy per zone, per hour. Unusual events (like motion at 3am in the kitchen) are scored and can trigger alerts. Security mode treats all motion as suspicious.",
"category": "Features",
"action": { "label": "View Security", "url": "#/security" }
},
{
"id": "zone-occupancy",
"title": "How is zone occupancy tracked?",
"content": "Zone occupancy is tracked via portal crossings (doorways between zones) and blob positions. Portals detect directional crossings, while blob positions provide real-time presence. The system reconciles both sources and recovers after restarts.",
"category": "Setup",
"action": { "label": "Open Setup", "url": "#/setup" }
},
{
"id": "fresnel-weights",
"title": "What are Fresnel zone weights?",
"content": "Each link has a learned weight that affects how much it contributes to localization. Links that consistently predict BLE-confirmed positions get higher weights. The system learns these automatically over 2-4 weeks of BLE-carrying occupants.",
"category": "Advanced",
"action": { "label": "View Accuracy", "url": "#/accuracy" }
},
{
"id": "virtual-nodes",
"title": "What are virtual nodes?",
"content": "Virtual nodes are simulated nodes for planning coverage without hardware. Place them in the simulator to see how additional nodes would improve detection. Once satisfied, convert virtual nodes to real nodes by onboarding actual hardware.",
"category": "Setup",
"action": { "label": "Open Simulator", "url": "#/simulator" }
},
{
"id": "baseline-learning",
"title": "How does baseline learning work?",
"content": "The baseline represents the 'empty room' signal state. An exponential moving average (EMA) continuously adapts, but only when no motion is detected (motion-gated). After 7 days, hourly baselines are learned for diurnal patterns like HVAC cycling.",
"category": "Advanced",
"action": { "label": "View Settings", "url": "#/settings" }
},
{
"id": "dwell-automations",
"title": "How do dwell automations work?",
"content": "Dwell automations trigger after someone remains in a zone for a configured duration. Use this for 'couch potato' detection, 'reading in bed' automations, or 'someone in the kitchen' triggers. The timer resets when the person leaves.",
"category": "Features",
"action": { "label": "View Automations", "url": "#/automations" }
},
{
"id": "count-automations",
"title": "How do count automations work?",
"content": "Count automations trigger when the number of people in a zone crosses a threshold. Use for 'more than 2 people in living room' or 'kitchen vacant' triggers. Counts are based on detected blobs, so accuracy depends on your system's detection quality.",
"category": "Features",
"action": { "label": "View Automations", "url": "#/automations" }
},
{
"id": "time-constraints",
"title": "How do automation time constraints work?",
"content": "Time constraints restrict automations to specific hours. For example, only trigger 'bedroom occupied' between 22:00 and 06:00, or only enable security mode during work hours. Overnight ranges (from > to) are handled correctly.",
"category": "Features",
"action": { "label": "View Automations", "url": "#/automations" }
},
{
"id": "predicted-enter",
"title": "What are predicted enter automations?",
"content": "After learning patterns, spaxel can predict zone entries 5-30 minutes in advance. Use 'predicted enter' automations to preemptively trigger actions like 'turn on lights 15 minutes before Alice gets home'. Accuracy improves over time.",
"category": "Features",
"action": { "label": "View Predictions", "url": "#/predictions" }
},
{
"id": "link-health-details",
"title": "What are link health metrics?",
"content": "Link health is based on 4 metrics: Packet Delivery Rate (PDR), Signal-to-Noise Ratio (SNR), Phase Stability, and Baseline Drift. Each is scored 0-1 and combined into a composite score. Links below 40% are considered poor and may need attention.",
"category": "Advanced",
"action": { "label": "View Fleet", "url": "#/fleet" }
},
{
"id": "csi-replay",
"title": "What is CSI replay?",
"content": "CSI replay stores raw WiFi signal data for up to 48 hours. In time-travel mode, you can replay this data with adjusted algorithm parameters to see how detection would have differed. Great for tuning thresholds and understanding missed detections.",
"category": "Advanced",
"action": null
},
{
"id": "router-as-tx",
"title": "Can I use my existing WiFi router?",
"content": "Yes! Enable passive radar mode to use your router as the transmitter. ESP32 nodes operate in receive-only mode. This provides presence detection with just 2 nodes. Your router's BSSID is auto-detected during setup.",
"category": "Basics",
"action": null
},
{
"id": "node-roles",
"title": "What are node roles?",
"content": "Nodes can be TX (transmit only), RX (receive only), TX/RX (both), or PASSIVE (router RX). The system automatically assigns roles for optimal coverage. TX nodes transmit in time-staggered slots to avoid packet collisions.",
"category": "Basics",
"action": { "label": "View Fleet", "url": "#/fleet" }
},
{
"id": "captive-portal",
"title": "What is the captive portal?",
"content": "If WiFi credentials are invalid or the network is gone, nodes start an AP called 'spaxel-XXXX'. Connect to it and enter new WiFi credentials. The node will reconnect and resume normal operation automatically.",
"category": "Troubleshooting",
"action": null
},
{
"id": "privacy-first",
"title": "Is Spaxel privacy-friendly?",
"content": "Yes! Spaxel uses WiFi signals, not cameras. No video or images are recorded. Person identification uses anonymized BLE device IDs. All data stays on your local device. You are in complete control of your information.",
"category": "Basics",
"action": null
},
{
"id": "web-serial",
"title": "What is Web Serial provisioning?",
"content": "Web Serial is a browser API that lets Spaxel flash your ESP32-S3 node directly over USB. No separate software installation needed. Connect the node via USB, click 'Add Node', and follow the guided wizard. Works in Chrome and Edge browsers.",
"category": "Setup",
"action": { "label": "Add Node", "url": "#/setup/add" }
},
{
"id": "multi-person",
"title": "How many people can Spaxel track?",
"content": "Spaxel can reliably track 2-3 people. Beyond that, accuracy degrades as Fresnel zones overlap. The system can detect 'more than 2 people' but cannot distinguish individuals without BLE devices. Consider adding more nodes for larger spaces.",
"category": "Basics",
"action": null
},
{
"id": "z-axis-accuracy",
"title": "How accurate is height detection?",
"content": "Z-axis accuracy is ±1-2 meters with mixed-height node placement. This is enough to distinguish standing from lying down, and detect falls. For better Z accuracy, place nodes at different heights (some low, some high).",
"category": "Setup",
"action": { "label": "Open Setup", "url": "#/setup" }
},
{
"id": "ota-rollback",
"title": "What happens if OTA fails?",
"content": "ESP32 has dual OTA partitions. If new firmware fails to connect within 60 seconds, the device automatically rolls back to the previous partition. The dashboard shows a ROLLBACK badge when this occurs.",
"category": "Maintenance",
"action": { "label": "View Fleet", "url": "#/fleet" }
},
{
"id": "pin-setup",
"title": "How do I set up the dashboard PIN?",
"content": "On first run, the dashboard shows a PIN setup page. Choose a 4-digit PIN to protect access. The PIN is required on subsequent visits. You can change the PIN from Settings. Never share your PIN with untrusted parties.",
"category": "Interface",
"action": { "label": "Settings", "url": "#/settings/auth" }
},
{
"id": "crowd-flow-accumulate",
"title": "How long is crowd flow data kept?",
"content": "Crowd flow data is accumulated in 1-hour, 1-day, and 1-week buckets. The database retains this data indefinitely. Use the time filter to analyze patterns over different periods. High-traffic areas may accumulate more data quickly.",
"category": "Features",
"action": null
},
{
"id": "keyboard-shortcuts",
"title": "What keyboard shortcuts are available?",
"content": "Ctrl+K opens the command palette for quick navigation and commands. Ctrl+? opens this help overlay. Escape closes modals and overlays. In replay mode, Space plays/pauses, arrow keys step through frames.",
"category": "Interface",
"action": null
},
{
"id": "export-full",
"title": "What does full backup include?",
"content": "The /api/backup endpoint provides a complete backup including the SQLite database, floor plan images, and briefings. This is larger than the config export but includes all historical data. Use this before major changes or when migrating to a new device.",
"category": "Maintenance",
"action": null
},
{
"id": "weather-storms",
"title": "Do storms affect detection?",
"content": "Electrical storms can cause RF interference that affects detection. The system's adaptive baseline and diurnal learning help compensate for predictable patterns. After a storm, consider re-baselining if detection quality remains low.",
"category": "Troubleshooting",
"action": { "label": "Re-baseline", "url": "#/fleet/rebaseline" }
},
{
"id": "performance-requirements",
"title": "What are the system requirements?",
"content": "Spaxel runs on any device with Docker support. Minimum: 256MB RAM and 1 CPU core for 2 nodes. For 8+ nodes: 512MB RAM and 2 CPU cores recommended. The dashboard works in modern browsers (Chrome, Firefox, Safari, Edge).",
"category": "Basics",
"action": null
},
{
"id": "explainability-use",
"title": "When should I use explainability?",
"content": "Use explainability when you're curious why a detection occurred or didn't occur. Tap 'Why?' on any blob to see contributing links, signal strength, and confidence. This helps debug missed detections, false positives, and understand system behavior.",
"category": "Interface",
"action": null
},
{
"id": "simulator-use",
"title": "How do I use the pre-deployment simulator?",
"content": "Open the simulator panel and add virtual nodes. The simulator shows expected detection quality using GDOP overlays. Walk virtual people through paths to see how they would be detected. This helps determine optimal node placement before buying hardware.",
"category": "Setup",
"action": { "label": "Open Simulator", "url": "#/simulator" }
},
{
"id": "quiet-hours",
"title": "What are quiet hours?",
"content": "Quiet hours suppress non-critical notifications during configured times (e.g., sleeping hours). Critical alerts like fall detection are never suppressed. Configure quiet hours per notification channel in Settings.",
"category": "Interface",
"action": { "label": "Notification Settings", "url": "#/settings/notifications" }
},
{
"id": "daily-summary",
"title": "What is the daily summary notification?",
"content": "The daily summary is an optional push notification sent at your configured time. It includes home occupancy duration, per-person time at home, and system health status. Helps you stay informed without opening the dashboard.",
"category": "Features",
"action": { "label": "Notification Settings", "url": "#/settings/notifications" }
},
{
"id": "fingerprints",
"title": "What are BLE device fingerprints?",
"content": "Some devices rotate their MAC address for privacy. Spaxel uses manufacturer data fingerprints to track these rotating addresses. The identity persists through rotations, though there may be brief gaps during rotation.",
"category": "Advanced",
"action": { "label": "View People", "url": "#/people" }
}
]