Skip to content

style: VocaGateway WebUI redesign and operator polish - #3

Merged
jatinkrmalik merged 27 commits into
mainfrom
style/align-webui-vocahq-paper
Aug 9, 2026
Merged

style: VocaGateway WebUI redesign and operator polish#3
jatinkrmalik merged 27 commits into
mainfrom
style/align-webui-vocahq-paper

Conversation

@jatinkrmalik

@jatinkrmalik jatinkrmalik commented Aug 9, 2026

Copy link
Copy Markdown
Member

Summary

Full WebUI redesign aligned with VocaHQ paper branding, plus operator UX for pairing, models, live ops, and network exposure.

image image

Brand and theme

  • Light paper desk tokens (vocahq DESIGN.md) plus graphite dark
  • System-aware light/dark with header toggle (system → light → dark)
  • Square VocaHQ app icon in the header; circular mark stays as favicon
  • VocaGateway naming in shell, title, and meta

Navigation and onboarding

  • Tabs: Overview, Models, Pair & test, Settings
  • Pairing + mic test on Pair & test (not Overview)
  • Header model pill opens Models; hover shows listener / this-host URL
  • Overview: readiness hero → live ops → system capability strip → short CTAs

Live operations

  • KPI cards (latency, jobs, capacity) with sparkline history
  • In-memory samples (deque, ~5s cadence); no DB trend store
  • "Updates every 5s" copy on the ops strip

System info

  • Capability hero with GPU/RAM/CPU chips
  • Vendor marks: NVIDIA eye, AMD arrow (file-icons), Intel icon (vectorlogo.zone)
  • Hardware details disclosure with CPU name, multi-GPU rows, CPU features

Models

  • Family tiles (collapsed by default) with expand/collapse all
  • Left filter rail (not a popup): multi-select family, language (searchable), engine; max download size; installed-only; fits this machine
  • Within a dimension: OR; across dimensions: AND
  • Nested titles drop a clean family prefix; family pill sits next to the info control
  • Active model: solid check chip + teal wash (not the same as recommended outline)
  • Info popover: source link, license, languages; tile shows 2-line blurb with full title tooltip
  • Catalog source URLs fixed (Handy → handy.computer, Breeze → MediaTek HF, Moonshine org rename, archive models → release tag)
  • BYO Whisper form + HF browse / request-catalog-model links

Network exposure

  • Full-width one-line banner when bound to 0.0.0.0 / :: (× dismiss 24h via localStorage)
  • Persistent network panel on Pair & test
  • Pairing QR copies JSON {v,url,token} with a "Copied" chip (no toast)

Other

  • Google Fonts (Epilogue, Atkinson) allowed in CSP
  • Basic SEO meta (noindex), skip link, a11y on token field / tabs

Test plan

  • Hard-refresh http://127.0.0.1:8765/ after checkout
  • Theme cycles system/light/dark; square header logo; circular favicon
  • Overview: live ops update; system hero shows vendor icons and GPU names
  • Header model pill: hover addresses; click opens Models
  • Pair & test: QR copy JSON; exposure panel present when wildcard bind
  • Exposure banner: show on wildcard bind; × hides 24h
  • Models: filter rail multi-select; clear; expand all; short nested titles + family pill
  • Active vs recommended look different; blurb hover shows full description
  • Info pop: real source links (Handy/Breeze/Moonshine/sherpa)
  • Download/select/delete keep filters applied
  • Token connect and 401 overlay still work

Match vocahq.com design tokens (warm paper, ink, teal accent) and
type (Epilogue + Atkinson Hyperlegible). Add basic SEO/meta, a skip
link, and a11y polish on the token field and tab panel.
Comment thread app/webui/index.html
- Rename shell/title to VocaPhone; allow Google Fonts in CSP
- Move pairing off Overview into Pair & test with mic check
- Clickable header model control opens Models
- Models catalog uses expandable family tiles with denser rows
- Overview focuses on status, setup path, and short CTAs
Comment thread app/fragments/overview.py
Follow prefers-color-scheme by default, persist light/dark/system in
localStorage, and expose a sun/moon control in the header. FOUC-safe
boot script applies the resolved theme before first paint.
Drop Listener/On this host from Overview and stop repeating the
active engine under Ready for dictation. Network details live in a
hover/focus card on the header model control instead.
Front page is status, onboarding CTAs, and live operations only.
Setup detail belongs in Get started when needed; host inventory is
not a daily operator concern.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit fc0c0cb. Configure here.

Comment thread app/webui/styles.css
Family tiles start closed for density. A funnel Filter control
filters by family and language (plus installed only), with a badge
for active filters and a clear action.
@cursor

cursor Bot commented Aug 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_1686aa59-5624-4fce-a281-00ddf44b4c74)

Bring back the host facts card (chip, CPU, memory, OS, version)
under live operations for capacity context.
@cursor

cursor Bot commented Aug 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_ea3b0bf5-19b7-43f8-9189-0c8d5e4ad4be)

Vendor voca-logo.svg and voca-logo-dark.svg from vocahq brand assets.
Header and favicon swap with the active theme (dark glyph on light,
light glyph on dark).
@cursor

cursor Bot commented Aug 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_72cbbb5c-7191-4f70-8e7c-6b041b76f219)

@jatinkrmalik jatinkrmalik changed the title style: align gateway WebUI with VocaHQ paper design style: VocaPhone WebUI redesign and onboarding pass Aug 9, 2026
Toggle next to Filter opens or closes every family tile. Label flips
with the open state and stays in sync when tiles are toggled by hand.
@cursor

cursor Bot commented Aug 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_c6cc3b7f-2242-40d0-951e-cae8ea64d3ff)

Rewrite operator-facing copy in plain language, remove em-dash prose,
and stop mid-sentence HTML wraps plus tight max-width ch caps that
fought responsive layout.
@cursor

cursor Bot commented Aug 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_224c7f2e-48f3-4a38-9822-7eebaa825b20)

Under bring-your-own Whisper, point people at Hugging Face ggml/GGUF
sources and open a prefilled GitHub issue to request catalog models.
@cursor

cursor Bot commented Aug 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_4bea127f-813d-4fc3-b12b-3dc8b614cac6)

Render host facts as an icon grid instead of a plain definition list.
Probe nvidia-smi (and rocm-smi/lspci when present) so the GPU tile
shows product name and VRAM instead of only "NVIDIA CUDA".
@cursor

cursor Bot commented Aug 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_ce2dbea5-ae80-4e58-bd86-d7694b4f909a)

Models: multi-select filters (family/language/engine, size, fits-machine)
in a collapsible left rail; short nested titles with family pill; active
check label vs recommended outline; info popover with fixed source links.

Overview: live ops KPIs and sparkline history, capability system hero
with NVIDIA/AMD/Intel marks, square VocaHQ app icon in the header.

Network: wildcard-bind exposure banner (24h dismiss) plus Pair & test
panel; pairing QR copies JSON address+token with a Copied chip.

Catalog: Handy/Breeze/Moonshine source URLs, release-tag pages for
archive models, safer description and license copy.
@cursor

cursor Bot commented Aug 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_82cb3bed-402e-45fd-ab06-6c797299d2de)

@jatinkrmalik jatinkrmalik changed the title style: VocaPhone WebUI redesign and onboarding pass style: VocaGateway WebUI redesign and operator polish Aug 9, 2026
Family header and models panel are grid siblings. Opening a family parks
the models strip after the last tile on that visual row so it spans full
width without yanking the card left or pushing row-mates below the strip.
Use None defaults for multi-value Query/Form list filters, contextlib.suppress
for optional GPU label reads, wrap long lines, and clear related format/mypy issues.
Give the header a stacking context above sticky .tabs so the model pill
network popover is not painted under the tab bar on hover/focus.
@jatinkrmalik

Copy link
Copy Markdown
Member Author

Automated fix summary

Quality was red on ruff (B006, SIM105, plus a pile of E501), with format/mypy fallout on the same pass.

CI

  • B006 in app/routes/admin_models.py: multi-value Query/Form filter lists no longer use = []. Type aliases are list[str] | None with = None (FastAPI still binds repeated keys; callers already normalize with or []).
  • SIM105 in app/system.py: optional GPU label read uses contextlib.suppress(OSError).
  • E501: wrapped long description/HTML copy in catalog and fragment templates.
  • format + mypy: ran ruff format; typed family_sort_key return as tuple[bool, bool, int, str].
  • Local: ruff check, ruff format --check, mypy app, and full pytest all green.

Review

  • Unresolved Bugbot thread on engine popover under sticky tabs: header now position: relative; z-index: 30 above .tabs (20). Replied and resolved.

Commits: 549d552, (popover z-index on this push). Quality should re-run on synchronize.

Keep teal wash for Active only, even collapsed tile heights, stop pairing
exposure from stacking on QR swaps, and treat empty filter bools as false.
Bring back the dependency table from main so operators can see which
engines and CLIs are installed without downloading diagnostics.
Bring back main's counters (succeeded/failed, avg latency, last
inference, RTF, model cache) and keep capacity plus latency/outcomes/
pipeline charts for trends.
Replace the old dense table with a system-card hero and tile grid,
and fill the Live operations KPI row so the layout stays even.
Get started was saying "Download a model" whenever the engine was not
ready, including when models were already on disk.
Keep open families across download/select swaps, make language search
respect hidden rows, smooth download progress polling, and give the
stale-token pairing notice real spacing.
@jatinkrmalik
jatinkrmalik merged commit fb1e564 into main Aug 9, 2026
1 check passed
@Mr-Sunglasses
Mr-Sunglasses deleted the style/align-webui-vocahq-paper branch September 3, 2026 10:03
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.

1 participant