Skip to content

Redesign the web UI: health-first dashboard, vault tabs, collapsible worklist - #7

Merged
cizer merged 5 commits into
mainfrom
claude/happy-lovelace-1rpn7v
Jun 18, 2026
Merged

Redesign the web UI: health-first dashboard, vault tabs, collapsible worklist#7
cizer merged 5 commits into
mainfrom
claude/happy-lovelace-1rpn7v

Conversation

@cizer

@cizer cizer commented Jun 16, 2026

Copy link
Copy Markdown
Owner

Redesigns the local hebb serve web UI around three pieces of feedback: the vault dropdown was ugly, health (not search) should lead, and a flat list of findings with no path to fixing them was noise.

All changes are in web/index.html (pure HTML/CSS/SVG/vanilla JS, no external assets, still loopback only). No server changes; the existing endpoints already carry everything needed.

What changed

Vault dropdown to tabs. The <select> is gone. A tab row sits beside the wordmark: a single vault shows as a quiet label, two or more render as switchable tabs (active highlighted; switching reloads that vault's board). Search moved into a compact box in the top bar so the tab row reads as "vaults".

Health-first, search secondary. The health dashboard is the default view. Search is a header box that only takes over the content while a query is active and returns to the dashboard when cleared. A ‹ Health link at the top of the results (plus the ×, Escape, and the wordmark) brings you back.

Better visualisations over the existing /api/health data:

  • an SVG connectivity ring (giant-component ratio) with a plain-language verdict;
  • a segmented "needs attention" bar with a clickable legend that jumps to each group;
  • compact structural stat tiles (links per note, connections, clusters, core depth);
  • a connection-depth (k-core) chart.

Collapsible worklist. Findings are grouped by type and collapsed by default, each with a one-line summary. Opening a group reveals a remediation hint and lists the affected notes with "Open in Obsidian" links, so a finding leads to a fix rather than being a dead list.

Design constraints honoured

Per METABOLISM.md: no single composite "health score" (a vector of named indicators instead), and note count appears only as a denominator, never as a vanity metric.

Verification

  • go build, go vet, and the full go test ./... suite pass.
  • Rendered the live server and verified light/dark, multi-vault tab switching, finding drill-down, search, the ‹ Health back-link, and narrow-width responsive layout.

🤖 Generated with Claude Code

https://claude.ai/code/session_019KxoBNM1xFYUHpYJ7CpQ9B


Generated by Claude Code

claude added 2 commits June 16, 2026 21:23
Redesign the local web UI around the feedback that the vault dropdown was
ugly, that health (not search) should lead, and that a flat list of
findings with no path to fixing them was noise.

- Replace the vault dropdown with a tab row beside the wordmark: a single
  vault shows as a label, two or more render switchable tabs. Search moves
  into a compact box in the top bar, so the tab row reads as "vaults".
- Make the health dashboard the default view; search is secondary and
  reveals results only while a query is active, returning to the board when
  cleared.
- Add real visualisations over the existing /api/health data: an SVG
  connectivity ring (giant-component ratio), a segmented "needs attention"
  bar with a clickable legend, structural stat tiles, and a connection-depth
  (k-core) chart. No composite score, and note count is a denominator only,
  per METABOLISM's no-vanity-metric and no-single-score rules.
- Collapse findings into per-type groups, closed by default, each with a
  remediation hint. Drilling down lists the notes with "Open in Obsidian"
  links so a finding leads to a fix.

Pure HTML/CSS/SVG/vanilla JS, no external assets, still loopback only. No
server changes; the existing endpoints already carry everything needed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019KxoBNM1xFYUHpYJ7CpQ9B
Searching swapped the dashboard for results, but the only ways back were
the clear "×", Escape, or clicking the wordmark, none of which reads as
"return to health". Add an explicit back-link above the search filters that
clears the query and restores the dashboard, mirroring the wordmark
behaviour with a discoverable control.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019KxoBNM1xFYUHpYJ7CpQ9B

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ebcfd9a684

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread web/index.html Outdated
Comment thread web/index.html Outdated
claude added 3 commits June 16, 2026 21:40
…r vault name loads

Two review fixes on the health dashboard:

- A finding group with more than 50 notes previously rendered "+ N more
  not shown" and discarded the rest, so those notes could not be opened
  from the dashboard. Put the overflow behind a nested "Show N more"
  disclosure instead, so every affected note stays reachable.
- The initial render kicked off /api/health in parallel with /api/stats,
  but each finding's obsidian:// link is built from the global vault name,
  which is the "vault" placeholder until /api/stats resolves. If health
  came back first, links pointed at a vault literally named "vault" and
  were never re-rendered. Sequence the health load after stats so links
  use the real vault name.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019KxoBNM1xFYUHpYJ7CpQ9B
The acceptance harness globbed for the old per-vault web service name
local.hebb.<slug>.web.plist, but the web UI is now one machine-global
service rendered as local.hebb.web.plist (see cli/install_test.go). The
stale glob never matched, so "web launchd plist rendered" failed on every
run. Match the actual file name.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019KxoBNM1xFYUHpYJ7CpQ9B
…-1rpn7v

# Conflicts:
#	scripts/acceptance.sh
@cizer
cizer merged commit 4b938f0 into main Jun 18, 2026
5 checks passed
@cizer
cizer deleted the claude/happy-lovelace-1rpn7v branch June 21, 2026 12:59
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