Skip to content

docs: three visual refresh concepts for the web UI - #91

Draft
dougrathbone wants to merge 1 commit into
masterfrom
dougrathbone/web-ui-visual-refresh-concepts-4c7d
Draft

docs: three visual refresh concepts for the web UI#91
dougrathbone wants to merge 1 commit into
masterfrom
dougrathbone/web-ui-visual-refresh-concepts-4c7d

Conversation

@dougrathbone

Copy link
Copy Markdown
Owner

Summary

Exploration of what a visual refresh to the web UI (public/index.html) could look like, as three viewable static prototypes rather than a written proposal. Each opens in a browser with fake data and supports ?theme=dark|light and ?tab=status|labels|events|import.

No production code is touched. public/index.html is unchanged.

The problems all three are aimed at: connection state on the Status tab renders at the same size and weight as the version string, so health takes a read rather than a glance; health is only visible on one tab; the palette is Mantine's default blue rather than HA's, so the ingress panel looks like a separate product; and the device table combines zebra striping, row hairlines and a header underline while giving addresses no visual distinction from labels.

A - "Refined": same DOM, new tokens

Segmented tabs, elevation instead of borders, state dots on the status tiles, monospace address chips, pill badges, and a real button hierarchy. Costs the <style> block only - no markup, no JS, no API change - and the mobile nth-child column-hiding rules keep working because column order does not move. Rows grow 31px → 35px, so it buys legibility with a little density.

Variation A, device labels

B - "Home Assistant Native": looks like part of HA

Primary-coloured app bar, ha-card surfaces, HA blue and dark palettes, entity rows with icon plus primary/secondary text, and devices grouped by area with excluded ones under "Not exposed to Home Assistant". Live Events becomes a logbook feed. Best phone experience of the three, lowest density; renderTable() becomes a grouped-list renderer and inline editing needs new affordances.

Variation B, device labels

C - "Operator Console": density first, dark first

Icon rail instead of tabs, a health strip in the top bar on every view, and a 24px-row data grid (about a third more devices per screen). Selecting a row opens an inspector with the full record plus live level, last-seen, and the four MQTT topics for that group - information that currently only exists in the docs. Largest change of the three, and some of it wants data the API does not expose yet.

Variation C, device labels

Changes

  • docs/design/web-ui-refresh/variation-{a,b,c}-*.html - three static prototypes, self-contained, no external fonts or icon CDNs
  • docs/design/web-ui-refresh/README.md - what each concept costs, what it gives up, the constraints any refresh must respect, and a suggested path
  • docs/design/web-ui-refresh/screenshots/ - reference renders used by the README

Test plan

  • Docs-only change; no source, config or version files touched
  • No test asserts on UI markup (tests/webServer.test.js only checks that index.html is served), so nothing here is blocked by the suite
  • All three prototypes rendered and checked in headless Chrome at 1280x860 and 390x844, in both light and dark

Checklist

  • No version bump needed (not a release)
  • No CHANGELOG entry needed (no user-facing change)
  • No sensitive data or credentials included
Open in Web Open in Cursor 

The web UI has grown feature by feature and its visual language has not been
revisited since it was a single labels table. Rather than argue about a refresh
in the abstract, this adds three static prototypes that can be opened in a
browser and compared side by side, each answering the same brief in a different
way: token-level polish that keeps the DOM, a Home Assistant-native re-layout so
the ingress panel stops looking like a separate product, and a density-first
operator console aimed at the 400-group installs.

The README records what each concept costs to implement, what it gives up, and
the constraints any refresh has to respect - single file with no build step, no
CDN for fonts or icons, an ingress iframe that cannot read the HA theme, and the
iOS zoom and touch-target rules already in the shipped CSS.

No production code is touched; public/index.html is unchanged.

Co-authored-by: Doug Rathbone <dougrathbone@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants