feat(ux): IA & navigation — judgments index, per-page titles, first-run fixes#619
Conversation
…un fixes
UX-audit "information architecture & navigation" + first-run content pass:
- Judgments index: new /judgments list route (+ JudgmentListsTable / column
config) and a "Judgments" nav item. Fixes the highest-severity IA finding —
judgment lists were a core object with no index and a "← All judgment lists"
back-link that 404'd. Simple filterless list (the hook is cursor/limit only).
- Per-page titles: new useDocumentTitle hook; every list page and all 6 detail
pages (via a new DetailPageShell documentTitle prop) now set
"<name> · RelyLoop" so tabs/history/bookmarks are distinguishable instead of
every tab reading "RelyLoop".
- Query-set → cluster traversal: the cluster on the query-set detail is now a
link to the cluster (was a raw, non-clickable UUID — a dead end).
- First-run copy: the dashboard subtitle now says what RelyLoop *is* (auto-tune
relevance → ship a PR) instead of a generic "Recent activity"; the chat
example-prompt chips are capability-shaped ("Summarize one of my clusters")
instead of naming demo entities ("prod-es", "trial 47") that don't exist on
a fresh install.
Deferred to a follow-up (tracked): empty-state CTA parity (studies/query-sets/
templates), cluster-tree breadcrumb consistency, reverse "used by" links.
Tests: useDocumentTitle + JudgmentListsTable (link + empty state). The top-nav
test iterates NAV_ITEMS so Judgments is auto-covered. Full suite green (1325);
tsc + lint + prettier clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: SoundMindsAI <eric.starr@soundminds.ai>
There was a problem hiding this comment.
Code Review
This pull request introduces a new useDocumentTitle hook to dynamically set the browser document title across various pages and detail views (via DetailPageShell). It also adds a new "Judgments" page, including the JudgmentListsTable component, its column configuration, and associated tests. Additionally, navigation is updated to include Judgments, dashboard copy is improved, and chat example prompts are generalized. Feedback is provided regarding a potential hydration mismatch issue in Next.js when using toLocaleString() on a Date object in judgment-lists-table.column-config.tsx, suggesting the use of suppressHydrationWarning or client-side formatting.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| <span className="whitespace-nowrap"> | ||
| {new Date(row.original.created_at).toLocaleString()} | ||
| </span> | ||
| ), | ||
| }, |
There was a problem hiding this comment.
Using toLocaleString() on a Date object during server-side pre-rendering in Next.js can lead to hydration mismatches if the server's locale or timezone differs from the client's browser settings. To prevent this, add suppressHydrationWarning to the wrapping element, or format the date only after the component has mounted on the client.
cell: ({ row }) => (
<span className="whitespace-nowrap" suppressHydrationWarning>
{new Date(row.original.created_at).toLocaleString()}
</span>
),
Review adjudicationGemini — 1 finding, rejected with counter-evidence:
Only remaining red is the pre-existing |
Fourth UX-audit fix PR. Scope: information architecture, navigation, and first-run content.
Changes
/judgments(newJudgmentListsTable+ column config) and a "Judgments" nav item. Filterless list (theuseJudgmentListshook is cursor/limit only). Fixes the 404 + the discoverability gap.useDocumentTitlehook applied to all list pages, plus a newDetailPageShelldocumentTitleprop wired into all 6 detail pages, so tabs/history/bookmarks read " · RelyLoop".prod-es,trial 47) that don't exist on a fresh install.Deferred (tracked follow-up)
Empty-state CTA parity (studies/query-sets/templates), cluster-tree breadcrumb consistency (F5), and reverse "used by" links (F7) — all low-severity; kept out to keep this PR reviewable.
Testing
useDocumentTitle+JudgmentListsTable(link + empty state) tests. The top-nav test iteratesNAV_ITEMS, so the new item is auto-covered. Full suite green (1325);tsc+eslint+prettierclean (ran prettier acrosssrc).🤖 Generated with Claude Code