NomadLink

NomadLink One · NomadLink OS · NomadLink Console · NomadLink Cloud — v0.1.0 — generated 2026-10-01 12:10 UTC

Requirements

A requirement is marked VERIFIED only when a physical measurement supports it, with the exact command and observed output recorded. See ADR-002: where the PRD and a measurement disagree, the measurement wins.
IDRequirementSpecPriStatusTasks
REQ-001Wi-Fi SoftAP with internal DHCP
Broadcast customizable SoftAP (e.g. NomadLink-XXXX), run internal DHCP server issuing 192.168.4.x addresses, and provide an admin page reachable on the local network. DEVIATION FROM SPEC (recorded per ADR-002, not silently absorbed): the spec asks for a captive-portal redirect, which this firmware cannot produce. lwIP's DNS server is compiled out of the Arduino core, so DHCP clients are handed public resolvers and an OS connectivity probe reaches the real internet with no interception point. Replaced with direct-IP access at http://192.168.4.1 plus mDNS at nomadlink.local. The DHCP pool is also 192.168.4.2-12, not .2-254, because the core ships CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8. See ADR-007.
FR-1.1P0PARTIALLY_VERIFIEDTASK-101, TASK-102, TASK-103
REQ-002Wi-Fi STA scan, credential entry and auto-connect
Web UI scans available networks, accepts SSID/password, auto-connects on boot with fallback to cellular.
FR-1.2P0NOT_STARTEDTASK-102, TASK-105
REQ-003Cellular connection management over A7670E
A7670E managed via UART AT commands / PPP. Automatic APN detection. Real-time monitoring of RSSI, registration state, operator name.
FR-1.3P0PARTIALLY_VERIFIEDTASK-106, TASK-107
REQ-004Dual-WAN automatic failover with NAT routing
Primary WAN is Wi-Fi STA, secondary is 4G LTE. On Wi-Fi loss or internet loss, seamlessly route all SoftAP client traffic over LTE via LwIP IP forwarding / NAT. Recovery within 3 seconds of packet loss detection.
FR-1.4P0PARTIALLY_VERIFIEDTASK-020, TASK-108, TASK-109, TASK-110
REQ-005Camera capture and MJPEG stream over HTTP
Capture frames from OV2640/OV5640 via ESP32-S3 camera interface using PSRAM for frame allocation. Stream MJPEG over HTTP /stream.
FR-2.1P1PARTIALLY_VERIFIEDTASK-201, TASK-202
REQ-006Camera control web page
Endpoint /camera with resolution (QVGA/VGA/SVGA), JPEG quality slider, frame rate adjustment, snapshot capture.
FR-2.2P2NOT_STARTEDTASK-203
REQ-007GNSS acquisition, NMEA parsing and position fix
Communicate with A7670E GNSS via AT commands. Parse raw NMEA to extract latitude, longitude, altitude, speed, fix status, satellite count.
FR-3.1P0VERIFIEDTASK-301, TASK-302
REQ-008Cellular LBS position fallback
When no GNSS fix is available, obtain an approximate position from the cellular network using AT+CLBS=1,1, reporting longitude/latitude and an accuracy radius in metres.
FR-3.1 (implicit; not in PRD)P0VERIFIEDTASK-303
REQ-009Location web page with live map
Display live latitude, longitude, altitude, speed, satellite count. Embedded interactive Leaflet.js / OpenStreetMap map showing real-time location marker.
FR-3.2P2NOT_STARTEDTASK-304
REQ-010Cloud broker credential configuration UI
HiveMQ: broker URL, port (8883 MQTTS / 1883 MQTT), client ID, username, password, telemetry topic, command topic. Adafruit IO: username, AIO key, location feed key, command feed key.
FR-4.1P1NOT_STARTEDTASK-401, TASK-402
REQ-011Telemetry publish controls and interval
Select destination (Disabled / HiveMQ / Adafruit IO). Start/stop publication from web UI. Configurable interval 5 to 3600 seconds.
FR-4.2P1NOT_STARTEDTASK-403, TASK-404
REQ-012Direct MQTT telemetry publish from device over LTE
Publish device telemetry to a cloud broker directly from the device over the cellular data path, with no external bridge, tunnel or relay. No cloudflared, no reverse proxy, no machine-dependent relay.
FR-4.2P0PARTIALLY_VERIFIEDTASK-405, TASK-406
REQ-013MQTT subscriber command engine
Subscribe to command topic, parse JSON command payloads (command_id, action, params), execute GET_STATUS / TOGGLE_ROUTER / REBOOT / SEND_SMS / DIAL_NUMBER, and publish a result to a response topic with matching command_id.
FR-4.3P1NOT_STARTEDTASK-407, TASK-408
REQ-014SMS receiver engine with whitelist
Intercept incoming SMS via +CMTI URC, read with AT+CMGR, check sender against authorized whitelist before acting.
FR-5.1P1PARTIALLY_VERIFIEDTASK-501, TASK-502
REQ-015SMS command parser and auto-reply
Case-insensitive commands: STATUS (IP, WAN mode, signal, GPS), LOCATION (Google Maps link), STREAM ON/OFF, REBOOT, CALL <number>. Reply to sender via AT+CMGS.
FR-5.2P2NOT_STARTEDTASK-503
REQ-016Incoming call management with auto-answer and whitelist
Detect RING/+CLIP. Configurable auto-answer after N rings (ATA), auto-reject unauthorized (ATH), whitelist mode, web UI popup with Accept/Hang Up.
FR-6.1P1PARTIALLY_VERIFIEDTASK-601, TASK-602
REQ-017Outgoing call execution and dialpad UI
Dial arbitrary numbers or saved contacts from web dialpad or API (ATD<number>;). Show call duration, connection state, active status. Full-duplex I2S audio via MEMS mic and speaker DAC.
FR-6.2P2NOT_STARTEDTASK-603, TASK-604
REQ-018Offline speech recognition engine (ESP-SR)
ESP-SR with WakeNet + MultiNet running on ESP32-S3 vector instructions, fully offline, no cloud voice API and no per-use fees.
FR-7.1P2NOT_STARTEDTASK-701, TASK-702
REQ-019Voice contacts directory with wake-word dialing
Web UI to manage contacts and assign phonetic triggers (e.g. 'Call Amma' -> +91 <10-digit-number>). Sequence: wake word 'Hi ESP' with audio feedback beep, 5 second recognition window, command match, verbal confirmation, then ATD dial.
FR-7.2, FR-7.3P3NOT_STARTEDTASK-703
REQ-020Asynchronous responsive web portal
ESPAsyncWebServer-hosted SPA with navigation: Dashboard, Network & Router Setup, Live Camera, Location & Mapping, Telemetry & Commands, SMS Manager, Telephony & Voice Dialing.
Section 4P0PARTIALLY_VERIFIEDTASK-801, TASK-802, TASK-803
REQ-021NVS persistence of configuration and secrets
Persist Wi-Fi credentials, cloud API keys, contacts, voice trigger mappings, SMS whitelist and APN config across reboot in NVS / LittleFS.
NFR 5P0NOT_STARTEDTASK-404, TASK-402
REQ-022Security hardening
WPA2-PSK / WPA3-SAE SoftAP, HTTP Basic Auth on the admin portal, telephony and SMS whitelisting, TLS 1.2/1.3 for all cloud connectivity. No secrets in source control.
NFR 4P0NOT_STARTEDTASK-804, TASK-405
REQ-023SD card storage for captures and logs
FAT32 SD card mounted for storing camera snapshots, GNSS track logs and device logs.
Hardware table (Storage)P2PARTIALLY_VERIFIEDTASK-805