Implemented comprehensive bulk operations for BLE sensor management to improve efficiency when working with multiple sensors simultaneously. Features Added: - bulkDisconnect: Disconnect multiple sensors at once - bulkReboot: Reboot multiple sensors sequentially - bulkSetWiFi: Configure WiFi for multiple sensors with progress tracking Implementation Details: - Added BulkOperationResult and BulkWiFiResult types to track operation outcomes - Implemented bulk operations in both RealBLEManager and MockBLEManager - Exposed bulk operations through BLEContext for easy UI integration - Sequential processing ensures reliable operation completion - Progress callbacks for real-time UI updates during bulk operations Testing: - Added comprehensive test suite with 14 test cases - Tests cover success scenarios, error handling, and edge cases - All tests passing with appropriate timeout configurations - Verified both individual and sequential bulk operations Technical Notes: - Bulk operations maintain device connection state consistency - Error handling allows graceful continuation despite individual failures - MockBLEManager includes realistic delays for testing - Integration with existing BLE service architecture preserved 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
394 lines
90 KiB
JSON
394 lines
90 KiB
JSON
{
|
|
"_schemeog": {
|
|
"schema_id": "cml2yvpx7000tllp7rtd5mzka",
|
|
"name": "WellNuo Web - ASCII Prototypes",
|
|
"description": "Web version screen prototypes for WellNuo BLE sensor management from desktop",
|
|
"synced_at": "2026-01-31T23:55:00.000Z"
|
|
},
|
|
"elements": [
|
|
{
|
|
"id": "system-info",
|
|
"type": "card",
|
|
"title": "📋 SYSTEM INFO",
|
|
"color": "light_gray",
|
|
"borderColor": "gray",
|
|
"tags": ["docs"],
|
|
"description": "## API Endpoints\n\n**WellNuo API**: https://wellnuo.smartlaunchhub.com/api\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| /auth/request-otp | POST | Send OTP to email |\n| /auth/verify-otp | POST | Verify OTP, returns JWT |\n| /auth/me | GET | Get user profile |\n| /auth/profile | PATCH | Update user profile |\n| /me/beneficiaries | GET | List beneficiaries |\n| /me/beneficiaries | POST | Create beneficiary |\n| /me/beneficiaries/:id | PATCH | Update beneficiary |\n| /me/beneficiaries/:id | DELETE | Remove beneficiary |\n\n**Legacy API** (sensors): https://eluxnetworks.net/function/well-api/api\n- device_list_by_deployment - list sensors\n- device_form - update sensor metadata\n\n## Equipment Statuses\n- none → 'Get kit' (gray)\n- ordered → 'Kit ordered' (blue)\n- shipped → 'In transit' (yellow)\n- delivered → 'Delivered' (green)\n- active → 'Monitoring' (green)\n- demo → 'Demo mode' (purple)\n\n## User Roles\n- Custodian: full access\n- Guardian: all except remove\n- Caretaker: dashboard, edit, sensors only\n\n## Room Locations (Legacy API codes)\n- Bedroom (102), Living Room (103), Kitchen (104)\n- Bathroom (105), Hallway (106), Entrance (111)\n- Garage (108), Basement (109), Attic (110), Other (200)"
|
|
},
|
|
{
|
|
"id": "browser-check",
|
|
"type": "card",
|
|
"title": "Browser Check",
|
|
"color": "light_yellow",
|
|
"borderColor": "orange",
|
|
"tags": ["entry"],
|
|
"description": "Entry point - Web Bluetooth support check\n\n**Detection**: navigator.bluetooth API\n\n**Supported**: Chrome 56+, Edge 79+, Opera 43+\n**Unsupported**: Safari, Firefox",
|
|
"connections": [
|
|
{"to": "unsupported", "label": "Safari/Firefox"},
|
|
{"to": "login", "label": "Chrome/Edge"}
|
|
]
|
|
},
|
|
{
|
|
"id": "unsupported",
|
|
"type": "ascii",
|
|
"title": "Unsupported Browser",
|
|
"borderColor": "red",
|
|
"tags": ["error"],
|
|
"asciiContent": "┌────────────────────────────────────────────┐\n│ │\n│ ⚠️ Browser Not Supported │\n│ │\n│ To work with Bluetooth sensors │\n│ please use: │\n│ │\n│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │\n│ │ Chrome │ │ Edge │ │ Opera │ │\n│ │[Download]│ │[Download]│ │[Download]│ │\n│ └──────────┘ └──────────┘ └──────────┘ │\n│ │\n│ ──────────── or ──────────── │\n│ │\n│ Mobile app: │\n│ ┌────────────┐ ┌────────────┐ │\n│ │ App Store │ │Google Play │ │\n│ └────────────┘ └────────────┘ │\n│ │\n└────────────────────────────────────────────┘"
|
|
},
|
|
{
|
|
"id": "login",
|
|
"type": "ascii",
|
|
"title": "Login",
|
|
"borderColor": "blue",
|
|
"tags": ["auth"],
|
|
"description": "**API**: POST /auth/request-otp\n\n**Validation**:\n- Email: required, valid format\n\n**States**:\n- Default: empty form\n- Loading: spinner on button\n- Error: inline error below field\n\n**Errors**:\n- Invalid email format\n- Rate limit exceeded (wait 60s)\n- Network error",
|
|
"asciiContent": "┌────────────────────────────────────────────┐\n│ │\n│ WellNuo │\n│ │\n│ Sign In │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ Email │ │\n│ └──────────────────────────────────────┘ │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ Get Code │ │\n│ └──────────────────────────────────────┘ │\n│ │\n│ │\n│ No account? Start in the mobile app │\n│ │\n└────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "verify-otp", "label": "OTP sent"},
|
|
{"to": "error-rate-limit", "label": "too many"}
|
|
]
|
|
},
|
|
{
|
|
"id": "verify-otp",
|
|
"type": "ascii",
|
|
"title": "Verify OTP",
|
|
"borderColor": "blue",
|
|
"tags": ["auth"],
|
|
"description": "**API**: POST /auth/verify-otp\n\n**Validation**:\n- Code: 6 digits, required\n- Auto-submit when 6 digits entered\n\n**States**:\n- Default: empty inputs\n- Loading: verifying\n- Error: shake animation + clear\n\n**Errors**:\n- Invalid code (401)\n- Code expired (410)\n- Max attempts exceeded (429)\n\n**Timer**: 60s countdown for resend\n\n**Navigation**:\n- New user (no firstName) → Enter Name\n- Existing user → Dashboard",
|
|
"asciiContent": "┌────────────────────────────────────────────┐\n│ ← Back │\n├────────────────────────────────────────────┤\n│ │\n│ Enter the code from email │\n│ │\n│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │\n│ │ _ │ │ _ │ │ _ │ │ _ │ │ _ │ │ _ │ │\n│ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ │\n│ │\n│ Resend code (59 sec) │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ Verify │ │\n│ └──────────────────────────────────────┘ │\n│ │\n└────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "enter-name", "label": "new user"},
|
|
{"to": "dashboard", "label": "existing"},
|
|
{"to": "error-otp-invalid", "label": "wrong code"}
|
|
]
|
|
},
|
|
{
|
|
"id": "error-otp-invalid",
|
|
"type": "ascii",
|
|
"title": "Error: Invalid OTP",
|
|
"borderColor": "red",
|
|
"tags": ["error"],
|
|
"asciiContent": "┌────────────────────────────────────────────┐\n│ ← Back │\n├────────────────────────────────────────────┤\n│ │\n│ Enter the code from email │\n│ │\n│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │\n│ │ │ │ │ │ │ │ │ │ │ │ │ │\n│ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ │\n│ │\n│ ⚠️ Invalid code. Please try again. │\n│ │\n│ Resend code (45 sec) │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ Verify │ │\n│ └──────────────────────────────────────┘ │\n│ │\n└────────────────────────────────────────────┘",
|
|
"connections": [{"to": "verify-otp", "label": "retry"}]
|
|
},
|
|
{
|
|
"id": "error-rate-limit",
|
|
"type": "ascii",
|
|
"title": "Error: Rate Limit",
|
|
"borderColor": "red",
|
|
"tags": ["error"],
|
|
"asciiContent": "┌────────────────────────────────────────────┐\n│ │\n│ WellNuo │\n│ │\n│ Sign In │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ john@example.com │ │\n│ └──────────────────────────────────────┘ │\n│ │\n│ ⚠️ Too many attempts. │\n│ Please wait 60 seconds. │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ Get Code (0:45) │ │\n│ └──────────────────────────────────────┘ │\n│ │\n└────────────────────────────────────────────┘",
|
|
"connections": [{"to": "login", "label": "timer done"}]
|
|
},
|
|
{
|
|
"id": "enter-name",
|
|
"type": "ascii",
|
|
"title": "Enter Name",
|
|
"borderColor": "blue",
|
|
"tags": ["auth"],
|
|
"description": "**API**: PATCH /auth/profile\n\n**Validation**:\n- First Name: required, min 2 chars\n- Last Name: optional\n\n**States**:\n- Default: empty form\n- Loading: saving\n- Error: inline validation",
|
|
"asciiContent": "┌────────────────────────────────────────────┐\n│ │\n│ What's your name? │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ First Name │ │\n│ └──────────────────────────────────────┘ │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ Last Name (optional) │ │\n│ └──────────────────────────────────────┘ │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ Continue │ │\n│ └──────────────────────────────────────┘ │\n│ │\n└────────────────────────────────────────────┘",
|
|
"connections": [{"to": "add-beneficiary", "label": "next"}]
|
|
},
|
|
{
|
|
"id": "add-beneficiary",
|
|
"type": "ascii",
|
|
"title": "Add Loved One",
|
|
"borderColor": "blue",
|
|
"tags": ["auth"],
|
|
"description": "**API**: POST /me/beneficiaries\n\n**Validation**:\n- First Name: required, min 2 chars\n- Last Name: optional\n\n**States**:\n- Default: empty form\n- Loading: creating\n- Error: inline validation\n\n**Navigation after success**:\n- → Purchase (for new setup)",
|
|
"asciiContent": "┌────────────────────────────────────────────┐\n│ ← Back │\n├────────────────────────────────────────────┤\n│ │\n│ Add a loved one │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ First Name │ │\n│ └──────────────────────────────────────┘ │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ Last Name (optional) │ │\n│ └──────────────────────────────────────┘ │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ Add │ │\n│ └──────────────────────────────────────┘ │\n│ │\n└────────────────────────────────────────────┘",
|
|
"connections": [{"to": "purchase", "label": "success"}]
|
|
},
|
|
{
|
|
"id": "purchase",
|
|
"type": "ascii",
|
|
"title": "Purchase / Demo",
|
|
"borderColor": "blue",
|
|
"tags": ["auth"],
|
|
"description": "**Stripe Checkout**\n\n**Options**:\n- Purchase hardware kit → Stripe checkout\n- Start Demo mode → immediate activation\n\n**Navigation**:\n- After payment → Equipment (track order)\n- After demo → Dashboard",
|
|
"asciiContent": "┌────────────────────────────────────────────┐\n│ ← Back │\n├────────────────────────────────────────────┤\n│ │\n│ Choose your option │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ 📦 WellNuo Starter Kit │ │\n│ │ 3 motion sensors + hub │ │\n│ │ $99.99 │ │\n│ │ │ │\n│ │ [Order Now] │ │\n│ └──────────────────────────────────────┘ │\n│ │\n│ ──── or ──── │\n│ │\n│ ┌──────────────────────────────────────┐ │\n│ │ 🎮 Try Demo Mode │ │\n│ │ Experience with simulated data │ │\n│ │ Free │ │\n│ │ │ │\n│ │ [Start Demo] │ │\n│ └──────────────────────────────────────┘ │\n│ │\n└────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "dashboard", "label": "demo"},
|
|
{"to": "equipment-tracking", "label": "ordered"}
|
|
]
|
|
},
|
|
{
|
|
"id": "equipment-tracking",
|
|
"type": "ascii",
|
|
"title": "Equipment Tracking",
|
|
"borderColor": "blue",
|
|
"tags": ["main"],
|
|
"description": "**Status progression**:\nordered → shipped → delivered → (activate)\n\n**Data**: from beneficiary.equipmentStatus",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Dashboard Equipment Status │\n├─────────────────────────────────────────────────────┤\n│ │\n│ Mom's WellNuo Kit │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ │ │\n│ │ ○ ─────── ● ─────── ○ ─────── ○ │ │\n│ │ Ordered Shipped Delivered Active │ │\n│ │ │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ Order #WN-2024-1234 │\n│ Shipped via FedEx │\n│ Tracking: 1234567890 │\n│ │\n│ Estimated delivery: Feb 5, 2026 │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ When your kit arrives: │\n│ 1. Unbox and plug in sensors │\n│ 2. Come back here to set up │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ I received my kit │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [{"to": "add-sensor", "label": "received"}]
|
|
},
|
|
{
|
|
"id": "dashboard",
|
|
"type": "ascii",
|
|
"title": "Dashboard",
|
|
"borderColor": "green",
|
|
"tags": ["main"],
|
|
"description": "**API**: GET /me/beneficiaries\n\n**States**:\n- Loading: skeleton cards\n- Empty: prompt to add loved one\n- Error: retry button\n- Data: list of beneficiary cards\n\n**Card shows**:\n- Name, Avatar\n- User's role (Custodian/Guardian/Caretaker)\n- Equipment/Subscription status badge\n\n**Status badges**:\n- 🟢 Monitoring (active + subscription)\n- 🔴 No subscription (active, no sub)\n- 🎮 Demo mode (equipmentStatus=demo)\n- 📦 Kit ordered (ordered)\n- 🚚 In transit (shipped)\n- 📬 Delivered (delivered)\n- ⚪ Get kit (none)",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ WellNuo [Profile] │\n├─────────────────────────────────────────────────────┤\n│ │\n│ Welcome, John! │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Mom │ │\n│ │ ───────────────────────────────────────── │ │\n│ │ You: Custodian │ │\n│ │ [🟢 Monitoring] │ │\n│ │ [>] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Dad │ │\n│ │ ───────────────────────────────────────── │ │\n│ │ You: Guardian │ │\n│ │ [🔴 No subscription] │ │\n│ │ [>] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Grandma │ │\n│ │ ───────────────────────────────────────── │ │\n│ │ You: Caretaker │ │\n│ │ [🎮 Demo mode] │ │\n│ │ [>] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ + Add loved one │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "beneficiary-detail", "label": "open"},
|
|
{"to": "profile", "label": "profile"},
|
|
{"to": "add-beneficiary", "label": "+ add"},
|
|
{"to": "dashboard-empty", "label": "no data"},
|
|
{"to": "dashboard-loading", "label": "loading"}
|
|
]
|
|
},
|
|
{
|
|
"id": "dashboard-empty",
|
|
"type": "ascii",
|
|
"title": "Dashboard (Empty)",
|
|
"borderColor": "green",
|
|
"tags": ["main"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ WellNuo [Profile] │\n├─────────────────────────────────────────────────────┤\n│ │\n│ Welcome, John! │\n│ │\n│ │\n│ │\n│ 👨👩👧 │\n│ │\n│ No loved ones added yet │\n│ │\n│ Add a family member to start monitoring │\n│ their wellbeing with WellNuo sensors. │\n│ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ + Add loved one │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [{"to": "add-beneficiary", "label": "+ add"}]
|
|
},
|
|
{
|
|
"id": "dashboard-loading",
|
|
"type": "ascii",
|
|
"title": "Dashboard (Loading)",
|
|
"borderColor": "green",
|
|
"tags": ["main"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ WellNuo [Profile] │\n├─────────────────────────────────────────────────────┤\n│ │\n│ Welcome, ... │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │\n│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │\n│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │\n│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │\n│ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘"
|
|
},
|
|
{
|
|
"id": "beneficiary-detail",
|
|
"type": "ascii",
|
|
"title": "Beneficiary Detail",
|
|
"borderColor": "green",
|
|
"tags": ["main"],
|
|
"description": "**Tabs**: Dashboard, Chat, Sensors, Subscription, Settings\n\n**API**: GET /me/beneficiaries/:id\n\n**Default tab**: Dashboard (Overview)\n\n**Tab content**:\n- Dashboard: wellness score, activity, alerts\n- Chat: AI conversation with context\n- Sensors: device list + add new\n- Subscription: plan, billing, cancel\n- Settings: edit name, manage access, remove",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Dashboard ⋮ Menu │\n├─────────────────────────────────────────────────────┤\n│ │\n│ ┌────────┐ │\n│ │ Mom │ 🟢 Monitoring │\n│ │ 👵 │ You: Custodian │\n│ └────────┘ │\n│ │\n│ ┌─────────┐┌─────────┐┌─────────┐┌─────────┐┌─────────┐\n│ │Dashboard││ Chat ││ Sensors ││Subscribe││Settings │\n│ │ ══════ ││ ││ ││ ││ │\n│ └─────────┘└─────────┘└─────────┘└─────────┘└─────────┘\n│ │\n│ ═══════════════════════════════════════════════ │\n│ │\n│ Wellness Score │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ │ │\n│ │ 85% Doing Well │ │\n│ │ ████████████████░░░░░ │ │\n│ │ │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ Recent Activity │\n│ • Kitchen: Motion detected 5 min ago │\n│ • Bedroom: Activity ended 2 hours ago │\n│ • Living Room: No motion for 6 hours ⚠️ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "beneficiary-sensors", "label": "Sensors tab"},
|
|
{"to": "beneficiary-chat", "label": "Chat tab"},
|
|
{"to": "beneficiary-subscription", "label": "Subscription tab"},
|
|
{"to": "beneficiary-settings", "label": "Settings tab"}
|
|
]
|
|
},
|
|
{
|
|
"id": "beneficiary-sensors",
|
|
"type": "ascii",
|
|
"title": "Beneficiary: Sensors Tab",
|
|
"borderColor": "green",
|
|
"tags": ["main"],
|
|
"description": "**API**: GET devices via Legacy API\n\n**States**:\n- Loading: skeleton list\n- Empty: prompt to add sensors\n- Error: retry button\n- Data: sensor cards\n\n**Sensor status**:\n- 🟢 Online (seen < 30 min)\n- 🟡 Away (seen 30min-2hr)\n- 🔴 Offline (seen > 2hr)",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Dashboard ⋮ Menu │\n├─────────────────────────────────────────────────────┤\n│ │\n│ ┌─────────┐┌─────────┐┌─────────┐┌─────────┐┌─────────┐\n│ │Dashboard││ Chat ││ Sensors ││Subscribe││Settings │\n│ │ ││ ││ ═══════ ││ ││ │\n│ └─────────┘└─────────┘└─────────┘└─────────┘└─────────┘\n│ │\n│ ═══════════════════════════════════════════════ │\n│ │\n│ Sensors (3) [+ Add] │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ WP_523_81A14C │ │\n│ │ 🍳 Kitchen • 🟢 Online • 2 min ago │ │\n│ │ [Settings] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ WP_524_92B25D │ │\n│ │ 🛏️ Bedroom • 🟢 Online • 15 min ago │ │\n│ │ [Settings] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ WP_525_A3C36E │ │\n│ │ 🛋️ Living Room • 🔴 Offline • 2 hours │ │\n│ │ [Settings] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "add-sensor", "label": "+ Add"},
|
|
{"to": "device-settings", "label": "settings"}
|
|
]
|
|
},
|
|
{
|
|
"id": "beneficiary-chat",
|
|
"type": "ascii",
|
|
"title": "Beneficiary: Chat Tab",
|
|
"borderColor": "green",
|
|
"tags": ["main"],
|
|
"description": "**AI Chat** about this beneficiary\n\nContext includes:\n- Beneficiary name\n- Sensor data\n- Activity patterns\n\n**Features**:\n- Ask about activity\n- Get recommendations\n- Check status",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Dashboard ⋮ Menu │\n├─────────────────────────────────────────────────────┤\n│ │\n│ ┌─────────┐┌─────────┐┌─────────┐┌─────────┐┌─────────┐\n│ │Dashboard││ Chat ││ Sensors ││Subscribe││Settings │\n│ │ ││ ═══════ ││ ││ ││ │\n│ └─────────┘└─────────┘└─────────┘└─────────┘└─────────┘\n│ │\n│ ═══════════════════════════════════════════════ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ 🤖 Hi! I'm Julia, Mom's AI assistant. │ │\n│ │ How can I help you today? │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ 👤 How is Mom doing today? │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ 🤖 Mom is doing well! She's been active │ │\n│ │ throughout the morning. I detected │ │\n│ │ kitchen activity at 8am and movement │ │\n│ │ in the living room around 10am. │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n├─────────────────────────────────────────────────────┤\n│ ┌─────────────────────────────────────┐ [Send] │\n│ │ Type a message... │ │\n│ └─────────────────────────────────────┘ │\n└─────────────────────────────────────────────────────┘"
|
|
},
|
|
{
|
|
"id": "beneficiary-subscription",
|
|
"type": "ascii",
|
|
"title": "Beneficiary: Subscription Tab",
|
|
"borderColor": "green",
|
|
"tags": ["main"],
|
|
"description": "**API**: Stripe Customer Portal\n\n**Shows**:\n- Current plan\n- Billing info\n- Next payment date\n- Cancel option\n\n**Roles**:\n- Custodian only can manage subscription",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Dashboard ⋮ Menu │\n├─────────────────────────────────────────────────────┤\n│ │\n│ ┌─────────┐┌─────────┐┌─────────┐┌─────────┐┌─────────┐\n│ │Dashboard││ Chat ││ Sensors ││Subscribe││Settings │\n│ │ ││ ││ ││ ═══════ ││ │\n│ └─────────┘└─────────┘└─────────┘└─────────┘└─────────┘\n│ │\n│ ═══════════════════════════════════════════════ │\n│ │\n│ Current Plan │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ 💎 WellNuo Premium │ │\n│ │ $14.99/month │ │\n│ │ Next billing: March 1, 2026 │ │\n│ │ │ │\n│ │ ✓ Unlimited sensors │ │\n│ │ ✓ AI-powered insights │ │\n│ │ ✓ Family sharing │ │\n│ │ ✓ Priority support │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Manage Subscription │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Cancel Subscription │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘"
|
|
},
|
|
{
|
|
"id": "beneficiary-settings",
|
|
"type": "ascii",
|
|
"title": "Beneficiary: Settings Tab",
|
|
"borderColor": "green",
|
|
"tags": ["main"],
|
|
"description": "**Actions by role**:\n\n**Custodian**:\n- Edit name\n- Manage access (invite/remove)\n- Remove beneficiary\n\n**Guardian**:\n- Edit name\n- View access list\n\n**Caretaker**:\n- View only",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Dashboard ⋮ Menu │\n├─────────────────────────────────────────────────────┤\n│ │\n│ ┌─────────┐┌─────────┐┌─────────┐┌─────────┐┌─────────┐\n│ │Dashboard││ Chat ││ Sensors ││Subscribe││Settings │\n│ │ ││ ││ ││ ││ ═══════ │\n│ └─────────┘└─────────┘└─────────┘└─────────┘└─────────┘\n│ │\n│ ═══════════════════════════════════════════════ │\n│ │\n│ Profile │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ First Name [Mom ] │ │\n│ │ Last Name [ ] │ │\n│ │ [Save Changes] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ Access Management │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ John (you) Custodian │ │\n│ │ jane@example.com Guardian [Remove] │ │\n│ │ │ │\n│ │ [+ Invite] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Remove Beneficiary │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘"
|
|
},
|
|
{
|
|
"id": "add-sensor",
|
|
"type": "ascii",
|
|
"title": "Add Sensor (BLE Scan)",
|
|
"borderColor": "purple",
|
|
"tags": ["ble"],
|
|
"description": "**Web Bluetooth API**\n\n**Prerequisites**:\n- Chrome/Edge browser\n- Bluetooth enabled on PC\n- Sensor powered on\n\n**Scan timeout**: 30 seconds\n\n**States**:\n- Initial: instructions + Start button\n- Scanning: spinner + found devices\n- Found: checkboxes + Add button\n- No results: retry option",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Back Add Sensor │\n├─────────────────────────────────────────────────────┤\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ 1. Plug the sensor into a power outlet │ │\n│ │ 2. Make sure it's within range of your PC │ │\n│ │ 3. Click \"Start Scan\" │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Start Scan │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ Found Sensors (3) [☑ Select All] [Rescan] │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ [☑] WP_526_B4D47F ████░░ -65dBm │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ [☑] WP_527_C5E58G ██░░░░ -78dBm │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ [☐] WP_528_D6F69H (Added) █░░░░░ -82dBm │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Add Selected (2) │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "setup-wifi", "label": "add selected"},
|
|
{"to": "error-ble-disabled", "label": "BLE off"},
|
|
{"to": "error-ble-permission", "label": "denied"},
|
|
{"to": "error-no-sensors", "label": "not found"}
|
|
]
|
|
},
|
|
{
|
|
"id": "error-no-sensors",
|
|
"type": "ascii",
|
|
"title": "Error: No Sensors Found",
|
|
"borderColor": "red",
|
|
"tags": ["error"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Back Add Sensor │\n├─────────────────────────────────────────────────────┤\n│ │\n│ │\n│ 🔍 │\n│ │\n│ No sensors found nearby │\n│ │\n│ Make sure your sensor is: │\n│ • Plugged into power │\n│ • Within 10 meters of your computer │\n│ • Not already added to another account │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Scan Again │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Need Help? │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [{"to": "add-sensor", "label": "retry"}]
|
|
},
|
|
{
|
|
"id": "setup-wifi",
|
|
"type": "ascii",
|
|
"title": "WiFi Setup",
|
|
"borderColor": "purple",
|
|
"tags": ["ble"],
|
|
"description": "**BLE provisioning flow**\n\n**Steps**:\n1. Connect to sensor via BLE\n2. Read available WiFi networks\n3. User selects network + enters password\n4. Send credentials to sensor\n5. Sensor connects to WiFi\n6. Confirm connection\n\n**Validation**:\n- Password: min 8 chars for WPA2",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Back WiFi Setup │\n├─────────────────────────────────────────────────────┤\n│ │\n│ Setting up: WP_526_B4D47F (1 of 2) │\n│ │\n│ Step 2 of 4: WiFi Setup │\n│ ████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 50% │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ Available networks: │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Home_WiFi_5G ████░░ -45dBm │ │\n│ │ Secured (WPA2) [Select] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Home_WiFi ███░░░ -58dBm │ │\n│ │ Secured (WPA2) [Select] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ Or enter manually: │\n│ │\n│ ┌─────────────────────────────────────────────┐ │\n│ │ Network name (SSID) │ │\n│ └─────────────────────────────────────────────┘ │\n│ │\n│ ┌─────────────────────────────────────────────┐ 👁 │\n│ │ Password │ │\n│ └─────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Connect Sensor │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "setup-success", "label": "success"},
|
|
{"to": "error-wifi", "label": "failed"},
|
|
{"to": "error-connection-lost", "label": "disconnected"}
|
|
]
|
|
},
|
|
{
|
|
"id": "setup-success",
|
|
"type": "ascii",
|
|
"title": "Setup Success",
|
|
"borderColor": "green",
|
|
"tags": ["ble"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ │\n│ │\n│ ✅ │\n│ │\n│ 2 sensors added successfully! │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ ✅ WP_526_B4D47F │ │\n│ │ WiFi: Home_WiFi_5G • Online │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ ✅ WP_527_C5E58G │ │\n│ │ WiFi: Home_WiFi_5G • Online │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ You can set locations in sensor settings. │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Add More Sensors │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Done │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "beneficiary-sensors", "label": "done"},
|
|
{"to": "add-sensor", "label": "add more"}
|
|
]
|
|
},
|
|
{
|
|
"id": "device-settings",
|
|
"type": "ascii",
|
|
"title": "Device Settings",
|
|
"borderColor": "orange",
|
|
"tags": ["settings"],
|
|
"description": "**API**: device_form (Legacy API)\n\n**Location dropdown options**:\n- Bedroom, Living Room, Kitchen\n- Bathroom, Hallway, Entrance\n- Garage, Basement, Attic, Other\n\n**Actions**:\n- Save location/description\n- Change WiFi (re-provision)\n- Remove sensor\n\n**Remove confirmation**: modal required",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Back Sensor Settings │\n├─────────────────────────────────────────────────────┤\n│ │\n│ WP_523_81A14C │\n│ 🟢 Online • 2 min ago │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ DEVICE INFORMATION │\n│ │\n│ Well ID 523 │\n│ MAC Address 81:A1:4C:XX:XX:XX │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ WIFI STATUS [🔄 Refresh] │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ 📶 Home_WiFi_5G │ │\n│ │ Signal: Excellent (-45 dBm) │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ SENSOR DETAILS │\n│ │\n│ Location [Kitchen ▼] │\n│ Description [Near the refrigerator ] │\n│ │\n│ [Save Changes] │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Change WiFi │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Remove Sensor │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "setup-wifi", "label": "change WiFi"},
|
|
{"to": "confirm-remove-sensor", "label": "remove"}
|
|
]
|
|
},
|
|
{
|
|
"id": "confirm-remove-sensor",
|
|
"type": "ascii",
|
|
"title": "Confirm: Remove Sensor",
|
|
"borderColor": "red",
|
|
"tags": ["modal"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ │ │\n│ │ Remove Sensor? │ │\n│ │ │ │\n│ │ WP_523_81A14C will be removed from │ │\n│ │ Mom's account. │ │\n│ │ │ │\n│ │ This sensor can be added again later. │ │\n│ │ │ │\n│ │ ┌─────────────────┐ ┌─────────────────┐ │ │\n│ │ │ Cancel │ │ Remove │ │ │\n│ │ └─────────────────┘ └─────────────────┘ │ │\n│ │ │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "device-settings", "label": "cancel"},
|
|
{"to": "beneficiary-sensors", "label": "removed"}
|
|
]
|
|
},
|
|
{
|
|
"id": "profile",
|
|
"type": "ascii",
|
|
"title": "Profile",
|
|
"borderColor": "orange",
|
|
"tags": ["settings"],
|
|
"description": "**API**: GET /auth/me, PATCH /auth/profile\n\n**Editable fields**:\n- First Name (required)\n- Last Name (optional)\n\n**Actions**:\n- Toggle notifications\n- Sign out (confirmation required)",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Dashboard Profile │\n├─────────────────────────────────────────────────────┤\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ │ │\n│ │ John Doe │ │\n│ │ john@example.com │ │\n│ │ [Edit] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ Settings │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Notifications [ON] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Sign Out │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "confirm-signout", "label": "sign out"},
|
|
{"to": "profile-edit", "label": "edit"}
|
|
]
|
|
},
|
|
{
|
|
"id": "profile-edit",
|
|
"type": "ascii",
|
|
"title": "Profile: Edit",
|
|
"borderColor": "orange",
|
|
"tags": ["settings"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ ← Profile Edit Profile │\n├─────────────────────────────────────────────────────┤\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ First Name │ │\n│ │ [John ] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Last Name │ │\n│ │ [Doe ] │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Email (cannot be changed) │ │\n│ │ john@example.com │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Save Changes │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [{"to": "profile", "label": "saved"}]
|
|
},
|
|
{
|
|
"id": "confirm-signout",
|
|
"type": "ascii",
|
|
"title": "Confirm: Sign Out",
|
|
"borderColor": "orange",
|
|
"tags": ["modal"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ │ │\n│ │ Sign out? │ │\n│ │ │ │\n│ │ You will need to enter your email and │ │\n│ │ verify a code to sign back in. │ │\n│ │ │ │\n│ │ ┌─────────────────┐ ┌─────────────────┐ │ │\n│ │ │ Cancel │ │ Sign Out │ │ │\n│ │ └─────────────────┘ └─────────────────┘ │ │\n│ │ │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "profile", "label": "cancel"},
|
|
{"to": "login", "label": "signed out"}
|
|
]
|
|
},
|
|
{
|
|
"id": "error-ble-disabled",
|
|
"type": "ascii",
|
|
"title": "Error: BLE Disabled",
|
|
"borderColor": "red",
|
|
"tags": ["error"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ │\n│ ⚠️ │\n│ │\n│ Bluetooth is disabled │\n│ │\n│ To scan for sensors you need to │\n│ enable Bluetooth on your computer. │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ Windows: Settings → Bluetooth │\n│ macOS: System Preferences → Bluetooth │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Try Again │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [{"to": "add-sensor", "label": "retry"}]
|
|
},
|
|
{
|
|
"id": "error-ble-permission",
|
|
"type": "ascii",
|
|
"title": "Error: BLE Permission",
|
|
"borderColor": "red",
|
|
"tags": ["error"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ │\n│ 🔒 │\n│ │\n│ Bluetooth access denied │\n│ │\n│ The browser requested Bluetooth access │\n│ but it was denied. │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ How to fix: │\n│ 1. Click the lock icon in the address bar │\n│ 2. Find \"Bluetooth\" │\n│ 3. Select \"Allow\" │\n│ 4. Refresh the page │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Try Again │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [{"to": "add-sensor", "label": "retry"}]
|
|
},
|
|
{
|
|
"id": "error-connection-lost",
|
|
"type": "ascii",
|
|
"title": "Error: Connection Lost",
|
|
"borderColor": "red",
|
|
"tags": ["error"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ │\n│ 📡 │\n│ │\n│ Connection to sensor lost │\n│ │\n│ Possible reasons: │\n│ • Sensor is too far away │\n│ • Sensor unplugged │\n│ • Bluetooth interference │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Reconnect │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Cancel │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [
|
|
{"to": "setup-wifi", "label": "reconnect"},
|
|
{"to": "add-sensor", "label": "cancel"}
|
|
]
|
|
},
|
|
{
|
|
"id": "error-wifi",
|
|
"type": "ascii",
|
|
"title": "Error: WiFi Failed",
|
|
"borderColor": "red",
|
|
"tags": ["error"],
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ │\n│ 📶 │\n│ │\n│ Failed to connect sensor to WiFi │\n│ │\n│ Possible reasons: │\n│ • Wrong password │\n│ • Network unavailable │\n│ • Weak WiFi signal │\n│ │\n│ ───────────────────────────────────────────────── │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Try Again │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Choose Another Network │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [{"to": "setup-wifi", "label": "retry"}]
|
|
},
|
|
{
|
|
"id": "error-network",
|
|
"type": "ascii",
|
|
"title": "Error: Network Error",
|
|
"borderColor": "red",
|
|
"tags": ["error"],
|
|
"description": "**Global error state**\n\nShown when:\n- No internet connection\n- API unreachable\n- Timeout",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ │\n│ │\n│ 🌐 │\n│ │\n│ Connection error │\n│ │\n│ Please check your internet connection │\n│ and try again. │\n│ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Try Again │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ │\n└─────────────────────────────────────────────────────┘"
|
|
},
|
|
{
|
|
"id": "error-session",
|
|
"type": "ascii",
|
|
"title": "Error: Session Expired",
|
|
"borderColor": "red",
|
|
"tags": ["error"],
|
|
"description": "**JWT expired**\n\nToken TTL: 7 days\n\nShown when API returns 401",
|
|
"asciiContent": "┌─────────────────────────────────────────────────────┐\n│ │\n│ │\n│ 🔐 │\n│ │\n│ Session expired │\n│ │\n│ Your session has expired. │\n│ Please sign in again. │\n│ │\n│ │\n│ ┌───────────────────────────────────────────────┐ │\n│ │ Sign In │ │\n│ └───────────────────────────────────────────────┘ │\n│ │\n│ │\n└─────────────────────────────────────────────────────┘",
|
|
"connections": [{"to": "login", "label": "sign in"}]
|
|
}
|
|
],
|
|
"tagsDictionary": [
|
|
{"id": "tag-docs", "name": "docs", "color": "#607D8B"},
|
|
{"id": "tag-entry", "name": "entry", "color": "#FFC107"},
|
|
{"id": "tag-auth", "name": "auth", "color": "#2196F3"},
|
|
{"id": "tag-main", "name": "main", "color": "#4CAF50"},
|
|
{"id": "tag-ble", "name": "ble", "color": "#9C27B0"},
|
|
{"id": "tag-settings", "name": "settings", "color": "#FF9800"},
|
|
{"id": "tag-error", "name": "error", "color": "#F44336"},
|
|
{"id": "tag-modal", "name": "modal", "color": "#795548"}
|
|
]
|
|
}
|