fix(fairway): mobile composition — Action Items overflow, aspect drill-down sheet, Signals toolbar glass/cram, hero card sizing - #959
Conversation
) Dashboard Action Items titles bled past the card's rounded edge instead of ellipsizing; the "Who's contributing" aspect drill-down rendered as a cramped centered modal instead of a native bottom sheet; the Signals toolbar's sticky glass let scrolled body text bleed through and squeezed search+filter pills onto one line at phone width; the dashboard's CoachHelm hero card was sized for desktop and ate the whole first mobile viewport. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MMdviLDsAg2YYJ8adsM6fg
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
ⓘ Qodo reviews are paused because your trial has ended. Ask your workspace admin to add credits to resume reviews. Manage billing |
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
|
Warning Review limit reached
Next review available in: 7 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. 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 for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (8)
WalkthroughFairway UI updates refine mobile card sizing, toolbar presentation, drill-down overlays, and Action Item title containment without changing exported contracts or interaction logic. ChangesFairway UI refinements
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 10 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (10 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…vidence rows (#957) The aspect drill-down's clipped-to-a-sliver body was NOT a cramped-dialog problem: ModalShell's h-fit panel + a flex-1 (percentage-basis) body collapses to ~0px on iOS Safari specifically — every ModalShell consumer (task/event/ invite/penalty/travel dialogs) was unreadable on iPhone the same way. Fixed at the primitive (flex-auto min-h-0) in both ModalShell.Body and Sheet.Body, so the Sheet swap doesn't re-ship the same collapse in a sheet costume; the drill-down also opts out of the untested vaul snap-point path (peek={false}, like every production bottom sheet). Toolbar phone layout re-composed via order/basis: line 1 = search + compact actions, line 2 = ONE full-width scroll strip holding the view toggle and the filter pills — no more pills clipping mid-word under a 280px trailing cluster one row down. Signals evidence <dl> becomes label⇄value rows below sm (two ~150px columns forced ESTIMATED 3-PUTT RATE (15+ FT) to wrap one word per line); coach dashboard root gets overflow-x-clip so no wide sibling can ever stretch every full-width card past the viewport edge again. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MMdviLDsAg2YYJ8adsM6fg
…esktop sheet, player-dash clip (#957) Adversarial review of the branch (6 lanes, ~150 surfaces, 2 refuters per finding) confirmed 4 defects, all fixed: - Toolbar: the order/basis phone reflow sent keyboard focus visually backwards (DOM order != visual order below sm). Recomposed as stacked full-width lines in SOURCE order — search / filter strip / toggle+actions — no order utilities, and the view toggle is mounted once again (kills the double-mount advisory too). Desktop unchanged. - Signals: the open-signal InsightPanel carried its OWN copy of the evidence grid and silently missed the phone fix. Extracted the ONE EvidenceList (phone label/value rows, sm: column grid) and pointed both renderers at it. - Aspect drill-down: side="right" mobileSide="bottom" — a plain bottom sheet stretched edge-to-edge on desktop; now a docked right column at md+, native bottom sheet on phone. Stale ModalShell comment fixed. - Player dashboard root gets the same overflow-x-clip backstop as the coach twin. Gates: tsc clean, eslint clean, vitest fairway suite 160 files / 1,468 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MMdviLDsAg2YYJ8adsM6fg
Pre-merge once-over (adversarial, multi-agent)Ran a 6-lane verification fleet over the branch — every ModalShell/Sheet consumer (46 surfaces), every Toolbar consumer (17), the Signals surface + sub-views (13), the drill-down (13 checks), the dashboard + every
Independently spot-checked by hand: Segmented uses per-instance Gates after fixes: 🤖 Generated with Claude Code |
Fixes the five phone screenshots from the owner report (2026-07-18): unreadable "Who's contributing" drill-down, Action Items running past the screen edge, Signals toolbar bleed-through + clipped pills, evidence labels wrapping one word per line, and the full-viewport dashboard hero.
The real bug behind the screenshots
Every ModalShell dialog was collapsed on iPhone. The panel is
h-fit; its body wasflex-1(percentage flex-basis). iOS Safari resolves that percentage against the intrinsic-keyword height as 0, so the body rendered ~0px tall — title + a clipped sliver of content + footer. Desktop engines size it from content, which is why QA never saw it. The screenshots' clipped chip strip is exactly this. Fixed at the primitive (flex-auto min-h-0) in bothModalShell.BodyandSheet.Body— so the drill-down's Sheet conversion doesn't re-ship the same collapse, and every other dialog (create task, event editor, invite player, penalty, travel, focus area…) is unbroken on iOS in one edit.Per-surface
Sheet(vaul: drag handle, scrim, drag-to-dismiss),peek={false}like every production bottom sheet — the snap-point path has zero production consumers and assumes fixed-height content.order/basis: line 1 = search (grows) + compact actions; line 2 = ONE full-width horizontal scroll strip holding the view toggle and the filter pills (toggle renders in two homes,sm:hidden/hidden sm:block, so exactly one is ever displayed). No more "Sta…" clipping mid-word under a 280px trailing cluster. Stuck glass upgraded to--fw-glass-bg-strong(88%) so scrolled body copy can't read through the chrome.sm:and up byte-identical.sm(native detail-list pattern); the 2×~150px column grid forced "ESTIMATED 3-PUTT RATE (15+ FT)" into one-word lines. 3-col grid unchanged fromsm:.min-w-0/overflow-hiddenbackstops through the row chain, plusoverflow-x-clipon the dashboard page root: no wide sibling can ever stretch every full-width card past the viewport again (clip, not hidden — sticky children keep working).p-6/text-h3/text-bodyat phone width so the first viewport reads as a composed page, not one monolith card;sm:up unchanged.Gates
tsc --noEmitclean · eslint clean on all touched filesvitest run src/components/fairway— 160 files / 1,468 tests green🤖 Generated with Claude Code
https://claude.ai/code/session_01MMdviLDsAg2YYJ8adsM6fg