perf(marketing): Lighthouse pass on the home page — fonts, One Tap, hero CLS, a11y - #2536
Conversation
Nothing on the site sets an italic serif; the italic file was 147 KB of the ~280 KB of display-font bytes mobile visitors waited on before LCP. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JLFzFg8rqENHEar5TRuC7w
The 98 KB GSI script was ~75% unused on marketing pages and competed with the hero for bandwidth. Wait for requestIdleCallback (4s ceiling), or a short post-load timeout where it is unsupported. No preconnect: One Tap already skips mobile, so a hint there would open an unused connection. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JLFzFg8rqENHEar5TRuC7w
…orphan list items The task-list mock's checkbox column had an empty <th>, and the document mock rendered an <li> outside any list. Header gets visually hidden text; the list gets a <ul> that keeps the same disc marker and indent. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JLFzFg8rqENHEar5TRuC7w
…mobile CLS Below 820px ScaledAppWindow lays the hero window out at 760px and scales it down, but only after hydration. Server HTML shipped the unscaled 547px-tall window, so on a throttled phone the hero shrank ~270px about 3s in and pulled the quote band into view (mobile CLS 0.20, the only shift on the page). Reserve the scaled box with aspect-ratio 760/547 so the first paint is already the final height; the effect now only adds the transform. Probed at 360/412/600/760px: one outer height throughout, CLS 0. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JLFzFg8rqENHEar5TRuC7w
…lift their opacity to 0.9 - Nav and footer logos sit beside visible "PageSpace" text, so alt="" stops the name being announced twice. - Inactive page-type slides are previews: aria-hidden so readers get one slide, and opacity raised from 0.5 to 0.9, the lowest value at which muted 12px text inside a dimmed slide still meets 4.5:1 (axe blends the slide's opacity into the text colour; every remaining contrast failure was one of these). Lighthouse a11y on dev: 92 -> 100. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JLFzFg8rqENHEar5TRuC7w
|
Warning Review limit reachedNext included review available in 48 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (1)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (7)
💤 Files with no reviewable changes (1)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe marketing app defers Google One Tap loading, updates image and carousel accessibility semantics, improves mock content labels, adjusts landing-page styles and responsive layout, and removes explicit Newsreader style variants. ChangesMarketing application updates
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to This updates marketing-page loading, accessibility semantics, and responsive presentation without an identified current-head regression. The change is ready to merge. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 5 files. (1 skipped: 1 unsupported.) ✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 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 |
`"requestIdleCallback" in window` narrows window to never in the else branch under lib.dom, failing typecheck and the Next build in CI. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JLFzFg8rqENHEar5TRuC7w
Summary
Lighthouse baseline on pagespace.ai (2026-09-05): mobile perf 72 / LCP 4.4s / CLS 0.20 / a11y 92, desktop perf 97 / best practices 96. Five targeted fixes, each verified in a real browser, no design changes except one flagged below.
ScaledAppWindowshrinking the hero 547px → 274px on hydration and pulling the quote band into view.aspect-ratio: 760 / 547below 820px makes the server HTML the final height. Probed at 360/412/600/760px: single height throughout, CLS 0.<li>wrapped in a<ul>(same marker and indent).alt=""next to visible link text; inactive carousel slidesaria-hiddenand opacity 0.5 → 0.9, the lowest value at which muted 12px text inside a dimmed slide meets 4.5:1 (axe blends slide opacity into text colour; every remaining contrast failure was one of these). Lighthouse a11y on dev: 92 → 100.Judgment call to review: the 0.9 slide opacity makes inactive-slide dimming subtler than the 0.5 design. Revert that one line and accept the contrast finding if the emphasis matters more.
Not done here: re-measuring production (tracked as the last task on the epic; runs after deploy).
Epic on the dev board:
Marketing Home Lighthouse Epic(pageppd3rtz7h0ndq9oto5ni1f1l).Test plan
🤖 Generated with Claude Code
https://claude.ai/code/session_01JLFzFg8rqENHEar5TRuC7w
Summary by CodeRabbit
Accessibility
Performance
Visual Improvements