Firmware:
- Fixed WiFi reconnection bug after power cycle by adding WiFi.persistent(false)
and disabling auto-connect/auto-reconnect
- Fixed AP mode not broadcasting by properly handling WIFI_AP_STA mode transitions
- Refactored to service-oriented architecture:
- device_state: Central state management with event callbacks
- config_service: NVS persistence (renamed from config_manager)
- wifi_service: WiFi STA/AP management (extracted from main.cpp)
- mqtt_service: MQTT client and message routing (extracted from main.cpp)
- ble_service: BLE GATT services (renamed from ble_services)
- web_service: HTTP configuration portal (renamed from web_portal)
- main.cpp reduced from ~470 lines to ~60 lines (thin orchestrator)
- Each service is self-contained with setup()/loop() pattern
Backend:
- Added heart rate variation endpoint
- UI improvements
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>