Skip to content

feat(dashboard): semantic panel — adopt design 2-column layout + missing fields #82

@esengine

Description

@esengine

Why

The Semantic search bar (#79) covers the design's main column. The rest of the panel still differs from design §12 (lines 2937-3115).

Gaps

Layout

  • Design splits into a 2-column grid: results main + 280px right sidebar with status/config cards. Current panel renders single-column with status above and config (excludes) at the bottom.

Missing index-status fields

Design's index-status card shows fields the current implementation either omits or renders less cleanly:

  • dim — vector dimension (e.g. 512). Not surfaced.
  • size — index file size in MB. Not surfaced.
  • stale chunks progress bar — % of index entries whose source files have changed since last build. Not tracked yet.
  • last build as "42m ago" — currently shown as ISO timestamp.

Style

  • Current .kv layout (key indent + value) doesn't match design's .rail-kv (key/value flex justify-between). Sidebar cards in design use rail-kv consistently.
  • Setup checklist (install ollama / start daemon / pull model) reads as ad-hoc paragraphs; design treats each as a card with action button + status pill.

Button affordances

  • Current Index / Rebuild / Stop buttons sit naked in a flex row. Design integrates them into the index-status card header / actions area for clearer ownership.

Plan

Stage 1 — server fields

  • Add dim, sizeBytes, lastBuiltMs to /api/semantic GET response (read from index meta on disk)
  • Defer stale chunks — needs a fast staleness probe (mtime walk vs. index meta), separate scope

Stage 2 — layout restructure

  • Wrap content in design grid: display:grid; grid-template-columns:minmax(0,1fr) 280px; gap:14px
  • Move SemanticSearchSection into the left column
  • Right column: index-status card → index-config card → setup card (when ollama not ready)

Stage 3 — formatting polish

  • Switch status fields to .rail-kv rows
  • last build via fmtRelativeTime
  • Index/Rebuild/Stop become a button row inside the index-status card

Out of scope

  • stale chunks bar (separate; needs a worker that diffs file mtimes against index meta)
  • Highlighting matched terms in result snippets (deferred — design uses <mark>, would need server-side substring or client-side highlight)

Metadata

Metadata

Assignees

No one assigned

    Labels

    dashboarddashboard / web companion (dashboard/**)enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions