Complete configuration Web UI with tabbed SPA (fw 0.8.2).

Add now-playing view with metadata polling, six-band EQ controls, full REST coverage, companion-chip badges, and gzip-www helper for the embedded setup page.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-07 07:36:06 +02:00
co-authored by Cursor
parent 1c38ac6f08
commit 8d826b4d73
9 changed files with 765 additions and 510 deletions
+7 -14
View File
@@ -12,8 +12,8 @@ errors, no plaintext secrets.
Working directory for all commands is `Software/`.
**Current firmware:** `0.8.1`integration service (preset recall +
audio profile), RDS/DLS metadata, CI gate.
**Current firmware:** `0.8.2`tabbed configuration Web UI (full API
coverage), integration service, RDS/DLS metadata, CI gate.
---
@@ -59,18 +59,11 @@ audio profile re-apply, and last-preset NVS. Stub removed; `app_main` and
## P2 — User interface
### T6. Complete the configuration Web UI
**Why:** `components/net/www/index.html` is functional but the
requirement is an *elegant, essential* SPA. It should cover:
Wi-Fi provisioning, station list management, tuner control (FM/DAB,
seek, play), live EQ/volume/enhancement control, Bluetooth pairing, and
now-playing metadata.
**What:** a minimal single-page app served gzipped from flash, design
tokens defined once (spacing, type scale, one accent), thin client over
the existing typed JSON API. No heavy frameworks. No business logic in
the UI.
**Done when:** every API capability has a UI control; the page is served
gzipped; no debug endpoint is exposed in a shipping build.
### T6. Complete the configuration Web UI — **DONE (fw 0.8.2)**
Tabbed SPA (`Now` / `Radio` / `Presets` / `Audio` / `BT` / `WiFi`):
now-playing hero with 5 s metadata poll, six-band EQ sliders, all REST
endpoints wired, companion-chip badges, `tools/gzip-www.sh` for the
embedded gzip blob. No debug routes in `SetupWebServer`.
---
+7 -4
View File
@@ -369,10 +369,13 @@ delegate to \texttt{AudioService}:
\item \texttt{POST /api/audio/bass-enhance} --- same schema.
\end{itemize}
The gzipped setup page (\texttt{components/net/www/index.html}) exposes master
volume, Si4684/ESP32 path levels, and enhancement sliders; saving sends
\texttt{PUT /api/audio/profile}, while slider release on enhancements sends
the dedicated POST routes for immediate safeload + persist.
The gzipped setup page (\texttt{components/net/www/index.html}) is a tabbed
SPA: a \emph{Now playing} view (RDS/DLS metadata), tuner and preset panels,
master/path levels, six PEQ band gain sliders, enhancement overlays, Bluetooth
controls, and Wi-Fi provisioning. Saving sends \texttt{PUT /api/audio/profile};
enhancement sliders call the dedicated POST routes for immediate safeload +
persist. Regenerate \texttt{index.html.gz} with \texttt{tools/gzip-www.sh}
after editing the HTML source.
\section{Typical usage patterns}
\label{sec:adau1701-patterns}
+1 -1
View File
@@ -36,7 +36,7 @@ Returns a health-check DTO serialised by
\begin{drnote}[Response schema]
\begin{drcode}[JSON]
{"status":"ok","fw":"0.8.1",
{"status":"ok","fw":"0.8.2",
"chips":{"si4684":true,"adau1701":true,"bt1035":true}}
\end{drcode}
\begin{itemize}