Add Dictionary Browse header redesign study with three directions - #2143
Conversation
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
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This pull request has been ignored for the connected project Preview Branches by Supabase. |
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. 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 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 configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (15)
Comment |
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011jr2rJuYT4sdi2yDGBTkyd
…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
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011jr2rJuYT4sdi2yDGBTkyd
…ms5kn' into claude/header-redesign-mockups-3ms5kn
…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
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011jr2rJuYT4sdi2yDGBTkyd
Uh oh!
There was an error while loading. Please reload this page.
Summary
/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.AllandAbbrbecome 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.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.mockups/README.mdand regeneratesdocs/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-localFull 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, test—Test Files 673 passed (673),Tests 7276 passed | 4 skipped (7280).buildwas refused on that first pass withBUILD_REFUSED_DEV_SERVER exit=76because the dev server used for browser proof was still running. The dev server was stopped,.nextremoved, 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.andmockups (design scratch, 404s in production, 87 routes, 102 exclusive chunks): 376.9 KiB gzip — baseline 370.2 KiB, within tolerance.npm run check:rag:fixtures→Offline RAG fixture and manifest validation passed (36 golden cases, 26 suites).npm run check:medication-interactions→data/medication-interaction-index.json is up to date (525 rows).npm run check:medication-lexicon-report→docs/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 bothprefers-color-scheme: darkandlight, 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
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).Notes
min-h-11/h-11tap targets, matching the existing design-scratch convention; production'smin-h-12contract is untouched.Generated by Claude Code