Skip to content

Add Dictionary Browse header redesign study with three directions - #2143

Merged
BigSimmo merged 21 commits into
mainfrom
claude/header-redesign-mockups-3ms5kn
Aug 18, 2026
Merged

Add Dictionary Browse header redesign study with three directions#2143
BigSimmo merged 21 commits into
mainfrom
claude/header-redesign-mockups-3ms5kn

Conversation

@BigSimmo

Copy link
Copy Markdown
Owner

Summary

  • Adds a runnable design study at /mockups/dictionary-browse-header (src/components/dictionary-browse-header-mockups.tsx) that renders the Dictionary → Browse header as it ships today beside three rebuilt directions, each at 1440 px and in a scrollable 390 px phone frame.
  • The brief was to remove the description line under Browse terms and the orphaned A–Z / Z–A sort pill that floats alone on its own row, then rebuild the layout for the phone. All three directions do both, and all three move sort into the Filters sheet, which is where the other search modes already keep it. Today's header stacks five bands before the first result on a 390 px phone, so the first row lands below the fold.
  • 01 Compact title bar — title and count share a line; the view switch and the letter rail fuse into one sticky control band. Lowest migration risk, keeps both browse views explicit. Two bands on phone.
  • 02 Fused letter rail (recommended) — the A–Z / Abbreviations segment disappears entirely; All and Abbr become pinned lead chips on the letter rail itself, so one row does both jobs. Largest vertical saving; the trade-off is that Abbreviations reads as a peer of a letter rather than a separate view. Two bands on phone.
  • 03 Index rail + jump sheet — no horizontal scroller at all; the title carries the active scope and opens a jump sheet, with a Contacts-style index rail on the right edge of the list and sticky letter headings. Results start after one band and it scales past 96 terms; the trade-off is that the edge rail is a fine-motor target, so the 48 px jump sheet has to stay the accessible path.
  • Suppresses shared mockup chrome for this route in src/app/mockups/mockups-layout-client.tsx, because every frame draws its own top bar, mode nav and composer — shared chrome would read as a second real header over the study.
  • Documents the study in mockups/README.md and regenerates docs/site-map.md.

No production route, component, or behaviour changes: the study is design scratch under src/app/mockups/**, which 404s in production.

Verification

  • npm run verify:pr-local

Full run completed check:runtime, check:installed-lock-parity, format:changed, sitemap:check, docs:check-index, docs:check-inventory, docs:check-scripts, docs:check-links, check:branch-review-ledger, check:outstanding-issues, check:ledger-write-discipline, lint, typecheck, testTest Files 673 passed (673), Tests 7276 passed | 4 skipped (7280).

build was refused on that first pass with BUILD_REFUSED_DEV_SERVER exit=76 because the dev server used for browser proof was still running. The dev server was stopped, .next removed, and the remaining gates re-run to completion:

  • npm run build✓ Compiled successfully in 55s, Client bundle secret surface check passed.
  • npm run check:bundle-budget (against a fresh .next) → production (what users download, 110 routes): 1533.5 KiB gzip — baseline 1482.5 KiB, within tolerance. and mockups (design scratch, 404s in production, 87 routes, 102 exclusive chunks): 376.9 KiB gzip — baseline 370.2 KiB, within tolerance.
  • npm run check:rag:fixturesOffline RAG fixture and manifest validation passed (36 golden cases, 26 suites).
  • npm run check:medication-interactionsdata/medication-interaction-index.json is up to date (525 rows).
  • npm run check:medication-lexicon-reportdocs/medication-interaction-lexicon-review.md is up to date (37 catalogue terms).

UI verification not run as npm run verify:ui: the change adds a design-scratch mockup route and touches no production journey, so the Chromium journey gate covers no changed failure path. Browser proof was taken directly instead — the route was rendered in Chromium at 1440 px in both prefers-color-scheme: dark and light, and each direction plus the direction 03 jump-sheet open state was screenshotted and reviewed. Two defects were found and fixed that way: the jump sheet was stretching over the scroll container's content height instead of overlaying the device frame, and the Filters count badge was rendering mid-label because the negative-offset utilities it relied on were not emitted.

Risk and rollout

  • Risk: none to production. src/app/mockups/** returns 404 in production and is excluded from the wiring and reachability gates; the only shared file touched is the mockups layout client, and the edit is additive (one route added to the existing chrome-suppression lists).
  • Rollback: revert the commit; nothing else depends on the new route.
  • Provider or production effects: None.

Notes

  • "Remove the A–Z" was ambiguous between the orphaned A–Z / Z–A sort pill and the A–Z / Abbreviations view switch, so the study resolves both readings rather than guessing: every direction drops the sort pill, and direction 02 additionally removes the view switch by folding it into the letter rail.
  • The mockups use min-h-11 / h-11 tap targets, matching the existing design-scratch convention; production's min-h-12 contract is untouched.

Generated by Claude Code

The Browse terms header stacks five bands before the first result on a
390 px phone: kicker, title, description, view switch, an A-Z / Z-A sort
pill alone on its own row, then the letter rail.
This adds a runnable design study at /mockups/dictionary-browse-header
rendering the current header beside three rebuilt directions. All three
drop the description line and the orphaned sort pill, moving sort into
the Filters sheet where the other modes already keep it.
- 01 Compact title bar: title and count share a line; view switch and
letter rail fuse into one sticky control band. Two bands on phone.
- 02 Fused letter rail (recommended): the A-Z / Abbreviations segment
disappears; All and Abbr become pinned lead chips on the rail itself,
so one row does both jobs. Two bands on phone.
- 03 Index rail + jump sheet: no horizontal scroller; the title carries
the active scope and opens a jump sheet, with a Contacts-style index
rail on the right edge of the list. One band on phone.
Each direction is shown at 1440 px and in a scrollable 390 px phone
frame that draws its own top bar, mode nav and composer, so shared
mockup chrome is suppressed for this route.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011jr2rJuYT4sdi2yDGBTkyd
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@supabase

supabaseBot commented Aug 18, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project sjrfecxgysukkwxsowpy because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@coderabbitai

coderabbitaiBot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your current included review allowance is based on your included PR review attempts over the past 7 days.

Next review available in:49 minutes

Limit details: You’ve used the included review currently available. Your 102 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b3aa2015-7e52-4cee-9c79-6bfa1c5598fd

📥 Commits

Reviewing files that changed from the base of the PR and between 4a68e5d and 6bd0934.

📒 Files selected for processing (15)
  • docs/branch-review-records/2149be40c9723dfdcf39c3831bee991df0e35a86a2f2426a566763d4c7df1916.record.md
  • docs/branch-review-records/599419ed3f41f0407ee7e9c44816a1c23691e853437cb963c33d0dcd860f4099.record.md
  • docs/branch-review-records/5f15d81f006cc85637c12e37a6c1fc41c800de4a1f9f93e6f6d66745a57a5636.record.md
  • docs/design-system/COMPONENTS.md
  • docs/design-system/adoption-manifest.json
  • docs/site-map.md
  • mockups/README.md
  • src/app/mockups/dictionary-browse-header-compact/page.tsx
  • src/app/mockups/dictionary-browse-header/page.tsx
  • src/app/mockups/mockups-layout-client.tsx
  • src/components/dictionary-browse-header-compact-mockups.tsx
  • src/components/dictionary-browse-header-mockups.tsx
  • src/components/dictionary/dictionary-catalogue-pages.tsx
  • src/lib/dictionary.ts
  • tests/dictionary-data.test.ts

Comment @coderabbitai help to get the list of available commands.

claudeand others added 5 commits August 18, 2026 16:58
…Filters
Follow-up to the title-bar direction. Three more versions at
/mockups/dictionary-browse-header-compact, all sharing two moves:
- The 27-chip horizontal letter rail becomes a dropdown on phones,
opening a 48 px letter grid as a bottom sheet (anchored popover on
desktop).
- Abbreviations stops being a header segment and becomes a Show option
inside the Filters sheet, beside sort.
Demoting a view switch into a sheet hides state, so every version
surfaces an active Abbreviations chip beside the letter control; without
it the header would claim 96 terms while listing 24 abbreviations.
- 01 Title bar + letter dropdown: full-size title, then one sticky
toolbar. Desktop keeps the chip rail, which still fits. Two rows.
- 02 Single fused row (recommended): title, dropdown, count and Filters
on one sticky line, both breakpoints. At 390 px an active filter chip
costs the row its title and count rather than overflowing.
- 03 Slim toolbar, title retired: the phone mode nav already reads
Browse, so the visible heading goes (kept for screen readers) and only
a slim toolbar remains. Desktop keeps its title.
Also fixes a latent bug shared with the round-one study: the mockup
stylesheet only emits Tailwind classes some source actually uses, and no
production file uses a bare grid-cols-6 (only xl:grid-cols-6), so both
letter pickers silently collapsed to a single column. Both now pin
gridTemplateColumns inline instead of depending on class generation.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011jr2rJuYT4sdi2yDGBTkyd
…ms5kn' into claude/header-redesign-mockups-3ms5kn
@BigSimmo
BigSimmo enabled auto-merge (squash) August 18, 2026 17:59
claudeand others added 12 commits August 18, 2026 18:10
…n-mockups-3ms5kn
# Conflicts:
#	docs/site-map.md
Version 01 is the chosen direction, so this settles its two rough edges
and marks it as selected in the study.
- The letter dropdown was labelled "All letters" / "Letter A", which
named the current value but never the control. It now reads
"Alphabetical All" — a quiet label and a loud value, the way a select
reads — and the sheet it opens is titled "Alphabetical index".
- Filters keeps its full "Filters & sort" label on phone instead of
collapsing to an icon. The row still fits at 390 px.
- An active filter chip moves to its own row beneath the toolbar rather
than competing with those two controls for width.
Versions 02 and 03 stay as the compact alternatives 01 was chosen over.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011jr2rJuYT4sdi2yDGBTkyd
…ms5kn' into claude/header-redesign-mockups-3ms5kn
Ships the mockup study's chosen direction on /dictionary/browse.
Header
- Drops the description line and the orphaned A-Z / Z-A sort pill.
- The A-Z / Abbreviations segment becomes a SegmentedControl carrying a
live count per view, so the toggle answers "how many of each" without
a separate readout. Both counts come from the same predicate as the
list, per docs/filter-contract.md.
- Phone takes the alphabet as a native select labelled "Alphabetical"
rather than a 27-chip horizontal rail; desktop keeps the chip rail at a
width that can afford it.
- The filter trigger is the shared ResultFilterTrigger, labelled Filter.
- Sort moves into that sheet as a one-of-N group. It is deliberately not
counted in the trigger badge: sort reorders rather than narrows, so
counting it would claim results were withheld.
Other fixes found while building
- Letters with no entries under the current view and facets are now inert
in both the select and the rail, and a real empty state handles the
deep-linked case that survives.
- The result list picks up the rounded, bordered treatment its sibling
search page already uses.
- The desktop rail wraps rather than scrolls: 27 chips overrun the 76rem
container by about a chip, so the old rail clipped Z.
- Equal segments need an explicit desktop width; shrink-to-fit derived it
from truncating spans and settled too narrow for "Abbreviations".
dictionaryBrowseLetter is exported so the index and the list derive a
hit's letter from one expression, with a test pinning that a letter the
helper reports returns results and one it does not returns none.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011jr2rJuYT4sdi2yDGBTkyd
…ms5kn' into claude/header-redesign-mockups-3ms5kn
# Conflicts:
#	src/components/dictionary/dictionary-catalogue-pages.tsx
…ms5kn' into claude/header-redesign-mockups-3ms5kn
@BigSimmo
BigSimmo disabled auto-merge August 18, 2026 20:01
@BigSimmo
BigSimmo merged commit 333399f into mainAug 18, 2026
26 checks passed
@BigSimmo
BigSimmo deleted the claude/header-redesign-mockups-3ms5kn branch August 18, 2026 20:07
Sign up for freeto 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

@BigSimmo@claude