lakehouse/mcp-server/UX_FIX_PLAN.md
Claw 7365a4c23e ui: staffing co-pilot UX fixes — new-tab reference nav + discoverable collapsibles
Reconciles month-old working-tree UX work (served per-request, live on the demo since
2026-05-30) into git. Implements UX_FIX_PLAN.md's 5 user complaints: reference pages
(Profiler/Architecture/Spec/Onboard/Alerts/Workspaces) open in new tabs; contract-card
collapsible shows a persistent chevron + expand/collapse label in both states; proof.html
gains a substrate-signals chapter. Not authored this session — captured as-is (working
state verified: pages serve 200).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 22:55:33 -05:00

95 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Staffing Co-Pilot UX Fix Plan (devop.live/lakehouse)
**Target file:** `/home/profit/lakehouse/mcp-server/search.html` (239KB, ~4100 lines) — THIS is the
main dashboard served at `/` (route at `index.ts:1258`; name "search.html" is historical).
Sibling pages: `console.html` (Walkthrough), `proof.html` (Architecture), `spec.html`, `onboard.html`,
`profiler.html`, `contractor.html`, `workspaces.html`, `alerts.html`.
**Serving:** Bun `mcp-server/index.ts` on `:3700`, nginx `/lakehouse/``127.0.0.1:3700`.
Restart after edits: HTML is read per-request (`Bun.file`), so **no restart needed for .html edits**
just reload the browser. (Restart only if editing index.ts: it's pid 1254, `bun run mcp-server/index.ts`.)
**Constraints:** neo-brutalist, compact, distinct colors, NO fake timers. Surgical edits only.
Dashboard fires real SQL + /intelligence/* — don't break data wiring. Repo is FROZEN Rust legacy;
J explicitly authorized work on this surface.
**Base path quirk:** nav uses `var P = location.pathname.indexOf('/lakehouse')>=0?'/lakehouse':''`.
Relative hrefs (`href="console"`) resolve fine under `/lakehouse/`.
## User's 5 complaints → fixes (line numbers in search.html)
### 1+2. New tabs for reference pages (HIGH)
- **Top nav lines 594-599**: add `target="_blank" rel="noopener"` to Profiler, Architecture(proof),
Spec, Onboard, Alerts, Workspaces. LEAVE 592-593 (Dashboard `href="."`, Walkthrough `href="console"`) same-tab.
- **Footer line 781**: `<a href="proof">Architecture</a>` → add `target="_blank" rel="noopener"`. Keep Console same-tab.
- **Dynamic footer lines 1024-1026**: proof link needs `target=_blank rel=noopener` + `.ft` class styling (currently unstyled).
### 3. Collapsible "preview" not discoverable (HIGH)
Primary = **contract card expandable panel** (markup ~2620-2820, CSS grid-template-rows ~160-220).
Chevron rotates 180° but hint text "click for full curve…" only shows collapsed; vanishes on expand.
Fix: chevron always visible+larger(16px); persistent "Expand details"/"Collapse" label in BOTH states;
cursor:pointer on card header; hover border-left/bg shift; optional localStorage per-card.
Secondary collapsibles: ⓪ legacy-bridge narrative (~820-900) → default COLLAPSED for returning users
(localStorage 'seen_intro'); ② Staffer's Console preview (~1400-1500) → make collapsible, "Open full console →".
### 4. Clickable elements don't look clickable (HIGH)
Add global CSS: `[onclick]{cursor:pointer}` + reusable `.clickable` class with :hover (bg lift #161b22#1c2333
+ border accent), :active (translateY(1px)), :focus-visible (outline).
Apply to: insight cards (~1180-1280), alert rows (~1700-1780), worker result rows (~990-1030 — add hover '' chevron
for drilldown discoverability per feedback_test_drilldowns), collapsible section headers (~820-830, ~1400-1410),
action chips/buttons (~740-760, standardize .btn/.chip).
### 5. Layout clutter / flat hierarchy (HIGH)
8 sections at equal weight: ⓪ Not-a-CRM narrative, ① Live Market, Forecast, ② Staffer Console,
Market Intelligence, ③ Worker Search, ④ System Activity, ⑤ Substrate Signals.
3-tier fix: PRIMARY always-visible (Live Market, Worker Search, Staffer Console);
SECONDARY collapsible-open (Forecast, Market Intelligence); TERTIARY collapse-by-default or relocate
(⓪ narrative → collapsible banner; ⑤ Substrate Signals → move to proof.html/Architecture; ④ System Activity demote).
Also: Live Market vs Market Intelligence may overlap — differentiate headers or merge w/ sub-tabs.
Long card walls → add "show top 5 / show all" truncation.
### Cross-page nav consistency (MEDIUM)
Each of 8 pages has hardcoded nav with differing link sets/order/labels and unreliable .active.
Canonical set + order, each page sets .active on its own entry, brand/logo → `href="."`.
Long-term: extract nav to shared JS snippet served by index.ts to stop drift.
## ✅ SHIPPED 2026-05-30 (live-verified via curl against :3700; HTML served per-request → no restart)
- **#1+#2 New tabs** — search.html: 6 nav reference links (Profiler/Architecture/Spec/Onboard/Alerts/Workspaces)
+ footer Architecture + dynamic-footer Architecture now `target="_blank" rel="noopener"` with ↗ glyph.
Dashboard + Walkthrough stay same-tab (primary flow). VERIFIED: 7 static new-tab links served; nav listing clean.
- **#4 Clickability** — global affordance CSS inserted after `.ft a:hover{...}` (NOT `.ft a{margin}` — that anchor
was a hallucination): `[onclick]{cursor:pointer}`, `[role=button]`, `.iworker` cursor+hover-lift+active,
`details>summary` cursor+hover, global `:focus-visible`. VERIFIED served (affordance_css=1, iworker_cursor=1, summary_hover=1).
- **#3 partial** — every `<details>` collapsible now has visible hover affordance (cursor+bg). Contract-card toggle NOT yet (below).
- **Nav consistency** — added Profiler link to onboard/workspaces/alerts (verified profiler=1 each);
fixed contractor.html back-link `href="/"``href="."` (real bug: `/` = LLM-Team UI on :5000, ejected users out of lakehouse; verified root-bug=0, dot-fixed=1);
fixed profiler.html empty `href=""`→relative `.`/`console` (was JS-only/fragile; verified empty-href=0).
> CORRECTION LOG: first edit pass (earlier this session) FAILED silently — old_strings were guessed
> (`.ft a{margin:0 4px}`, a fake footer string, `ui-copilot/dashboard.html` path). Re-done with grep/Read-verified
> exact strings. The real dashboard file is `search.html` (route index.ts:1258), NOT `dashboard.html` (orphan) or `ui/`.
## (status note) — rounds 2 & 3 are recorded in the SHIPPED sections below; this block is superseded.
- #3 contract-card collapse → DONE round 2 (persistent `.card-top-toggle`).
- #5 declutter (⑤ relocate, ④ demote, ③ disclosure, Market Intelligence clarify, dead CSS) → DONE round 3.
- Still open: nav shared-component refactor (deferred, needs restart) + optional contract truncation (skipped on purpose). See "DELIBERATELY NOT DONE".
## Recommended execution order
1. New-tab attrs (lines 594-599, 781, 1024-1026) — trivial, high impact.
2. Global `.clickable` CSS helper + apply to onclick elements.
3. Collapsible affordance (chevron+label persistent, cursor, hover) on contract cards + section headers.
4. Default-collapse ⓪ narrative for returning users (localStorage).
5. Hierarchy/declutter (tiering, relocate ⑤ to proof, truncation).
6. Nav consistency pass across sibling files.
## VERIFY before claiming done (J's rules: test drilldowns, no greenwashing)
- `curl -s localhost:3700/ | grep target=_blank` confirms new-tab attrs present.
- Load https://devop.live/lakehouse/ in browser: click a contract card (expand+collapse visible),
hover a worker row (cursor+chevron), click reference nav (opens new tab), reload (intro stays collapsed).
- Don't restart the service for HTML-only edits.
## Audit provenance
5-dimension parallel Explore audit, run wf_c897f421-db1, full JSON at
`/tmp/claude-0/-home-profit/c6ca0218-678c-4a30-833c-1063e40e7f69/tasks/wm9x4y52d.output`.
NOTE: line numbers are audit estimates — `grep` to confirm exact lines before each Edit.