mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2026-04-04 12:17:57 +03:00
202 lines
7.1 KiB
Markdown
202 lines
7.1 KiB
Markdown
# Frontend Requirements Context (Living)
|
|
|
|
Status: Active
|
|
Last reviewed: 2026-02-12
|
|
Review scope: `components/wifi-manager/webapp`, `components/wifi-manager/http_server_handlers.c`, `components/wifi-manager/wifi_manager_http_server.c`, `spiffs_src/CMakeLists.txt`
|
|
|
|
## Purpose
|
|
|
|
This document captures reverse-engineered **product requirements** for the embedded web UI, with measurable constraints.
|
|
It is intentionally not an implementation walkthrough.
|
|
|
|
Use this as session handoff context for UI refactoring and footprint control.
|
|
|
|
## Snapshot Findings (Current State)
|
|
|
|
### 1. What actually ships to firmware
|
|
|
|
SPIFFS packaging currently copies only:
|
|
|
|
- `components/wifi-manager/webapp/dist/*.gz`
|
|
- `components/wifi-manager/webapp/dist/*.png`
|
|
|
|
Evidence: `spiffs_src/CMakeLists.txt`.
|
|
|
|
Current shipped web payload:
|
|
|
|
- Total shipped bytes: `219741` (`~214.6 KiB`, `~0.21 MiB`)
|
|
- Largest asset: `dist/js/node_vendors.bundle.js.gz` (`166729` bytes)
|
|
|
|
### 2. What looks large but is not currently shipped
|
|
|
|
- `dist/` total is about `4.5M`, dominated by source maps (`*.map`).
|
|
- Source maps are large in repo artifacts, but not copied to SPIFFS by current packaging.
|
|
|
|
### 3. Major technical debt signal
|
|
|
|
- UI source references many legacy endpoints (`/status.zzz`, `/messages.zzz`, `/commands.zzz`, etc.).
|
|
- Active server registration in `wifi_manager_http_server.c` is centered on `/data.bin` + static handlers; many legacy handlers are commented out.
|
|
|
|
This indicates API/contract drift and unclear migration state.
|
|
|
|
### 4. Modularity and proto usage signal
|
|
|
|
- Main UI logic is largely monolithic in `src/js/custom.ts` (~2.5k LOC).
|
|
- `index.ts` imports generated protobuf bundle (`configuration_pb.js`) up front.
|
|
- `dist/js/index.bundle.js` includes many generated proto message definitions, not only request/response minimum set.
|
|
|
|
Implication: upfront JS parse/execute and bundle weight are likely higher than needed.
|
|
|
|
## Reverse-Engineered Product Requirements
|
|
|
|
These are the requirements we should preserve while refactoring.
|
|
|
|
### RQ-UI-001 Captive Portal Bootstrap
|
|
|
|
The UI must reliably open and render from AP/captive-portal entry points with no manual URL knowledge.
|
|
|
|
Acceptance:
|
|
|
|
- Landing page reachable from captive portal probes.
|
|
- First meaningful controls visible without requiring cloud services.
|
|
|
|
### RQ-UI-002 Network Onboarding and Recovery
|
|
|
|
Users must be able to scan APs, join/disconnect Wi-Fi, and understand current link mode (Wi-Fi vs Ethernet) with clear status.
|
|
|
|
Acceptance:
|
|
|
|
- Scan, connect, disconnect workflows remain available and understandable.
|
|
- Connection state transitions are visible and unambiguous.
|
|
|
|
### RQ-UI-003 Runtime Observability
|
|
|
|
Users must see operational status and logs needed for diagnosis (network, playback, OTA progress, errors).
|
|
|
|
Acceptance:
|
|
|
|
- Status view remains available in normal and recovery mode.
|
|
- Error and warning paths are visible in UI without dev tools.
|
|
|
|
### RQ-UI-004 Safe Configuration Editing
|
|
|
|
Users must be able to view/edit/apply configuration with guardrails (validation feedback, clear commit/apply behavior).
|
|
|
|
Acceptance:
|
|
|
|
- Config edit path supports both selective and global update actions.
|
|
- Validation errors are explicit before/after submit.
|
|
|
|
### RQ-UI-005 OTA Operations
|
|
|
|
Users must be able to trigger firmware update by URL or upload, with progress and failure feedback.
|
|
|
|
Acceptance:
|
|
|
|
- OTA action always yields deterministic status progression or explicit terminal error.
|
|
- Recovery path remains accessible if normal OTA path fails.
|
|
|
|
### RQ-UI-006 Advanced Control Access
|
|
|
|
Power-user controls (commands/NVS/diagnostics) must exist but should not degrade common-task UX.
|
|
|
|
Acceptance:
|
|
|
|
- Advanced functions remain accessible.
|
|
- Main tasks are not blocked by advanced UI complexity.
|
|
|
|
### RQ-UI-007 Backward Compatibility Envelope
|
|
|
|
The UI must support currently deployed firmware API variants during migration (legacy and protobuf-era endpoints), with explicit deprecation strategy.
|
|
|
|
Acceptance:
|
|
|
|
- Contract compatibility matrix is documented and tested.
|
|
- Legacy paths have clear sunset criteria.
|
|
|
|
### RQ-UI-008 Embedded Footprint Discipline
|
|
|
|
Web assets must stay within explicit firmware budget and be measurable in CI.
|
|
|
|
Acceptance:
|
|
|
|
- Shipping budget exists and is enforced.
|
|
- Size regressions fail checks unless explicitly approved.
|
|
|
|
## Non-Functional Budgets (Proposed)
|
|
|
|
These are targets, not yet enforced:
|
|
|
|
- `NB-001` Shipped web payload (`*.gz` + `*.png` in `dist/`) <= `180 KiB` target, `220 KiB` hard cap.
|
|
- `NB-002` Main JS gzip <= `120 KiB` target.
|
|
- `NB-003` Vendor JS gzip <= `120 KiB` target.
|
|
- `NB-004` No runtime dependency on external CDNs for critical UI function.
|
|
- `NB-005` One canonical API transport for new features (`/data.bin` protobuf), with compatibility shim for legacy endpoints during migration only.
|
|
|
|
## UX + Footprint Improvement Directions
|
|
|
|
Prioritized by impact/risk.
|
|
|
|
### P1 Contract Unification (High impact, medium risk)
|
|
|
|
- Define one frontend API client contract around protobuf request/response.
|
|
- Treat legacy `.zzz` paths as compatibility layer, not primary path.
|
|
- Add explicit compatibility table (firmware version -> supported endpoints).
|
|
|
|
### P2 Modularization by Capability (High impact, medium risk)
|
|
|
|
- Split monolithic UI logic into capability modules:
|
|
- onboarding
|
|
- status/logs
|
|
- config editor
|
|
- OTA
|
|
- advanced
|
|
- Lazy-load non-critical modules (advanced, release browser, heavy editors).
|
|
|
|
Expected result: lower startup JS cost and clearer ownership boundaries.
|
|
|
|
### P3 Proto Surface Minimization (High impact, medium risk)
|
|
|
|
- Stop importing broad generated config surface on initial load.
|
|
- Create thin protobuf DTO layer for startup-critical flows.
|
|
- Load heavy schema modules only when entering related screens.
|
|
|
|
### P4 UI Responsiveness and Clarity (Medium impact, low risk)
|
|
|
|
- Replace mixed polling patterns with a single scheduler and explicit backoff policy.
|
|
- Standardize in-progress/error/success state rendering across all actions.
|
|
- Reduce ambiguous icon-only cues with text fallback in constrained/offline contexts.
|
|
|
|
### P5 Build Output Hygiene (Medium impact, low risk)
|
|
|
|
- Keep generating sourcemaps for dev/debug if needed, but separate from shipping artifact workflow.
|
|
- Enforce shipped-size budget on what SPIFFS actually receives, not raw `dist/`.
|
|
|
|
## Living Maintenance Protocol
|
|
|
|
This file must be updated when any of the following changes:
|
|
|
|
- web routes/endpoints
|
|
- protobuf request/response schema used by UI
|
|
- shipped asset packaging rules
|
|
- significant UI feature flow
|
|
|
|
Required update steps:
|
|
|
|
1. Run `build-scripts/ui_footprint_snapshot.sh`.
|
|
2. Update Snapshot Findings and budget deltas in this file.
|
|
3. Update compatibility notes if API contract changed.
|
|
4. Add an entry to Decision Log.
|
|
|
|
## Decision Log
|
|
|
|
| Date | Decision | Why | Follow-up |
|
|
|------|----------|-----|-----------|
|
|
| 2026-02-12 | Treat this file as requirements-first context, not implementation notes | Reduce drift and speed up session handoffs | Add CI size gate and API contract checks |
|
|
|
|
## Open Questions
|
|
|
|
- Are legacy `.zzz` endpoints still required for deployed firmware versions, and for which versions exactly?
|
|
- Is the intended long-term model pure protobuf over `/data.bin` for all dynamic data?
|
|
- What startup latency target is acceptable on AP-mode captive portal connections?
|