Skip to content

Comments

feat: resolve UX gap issues #28-31 (2026-02-20)#32

Merged
ryota-murakami merged 4 commits intomainfrom
feat/bulk-issues-20260220b
Feb 20, 2026
Merged

feat: resolve UX gap issues #28-31 (2026-02-20)#32
ryota-murakami merged 4 commits intomainfrom
feat/bulk-issues-20260220b

Conversation

@ryota-murakami
Copy link
Contributor

@ryota-murakami ryota-murakami commented Feb 20, 2026

Summary

Bulk resolution of UX gap issues detected by the SaaS landing page audit (66/100 score). All 4 moderate-priority gaps addressed.

Changes per Issue

Issue #31: Typography tracking-tight

  • Added tracking-tight to 4 H2 sub-headings in LandingPage
  • Added tracking-tighter to 404 H1, tracking-tight to 404 H2
  • Matches reference sites' negative letter-spacing patterns

Issue #30: Fix 404 page layout

  • Root cause: --spacing-md: 16px in @theme collided with Tailwind v4's max-w-md, resolving to 16px instead of 448px
  • Replaced max-w-mdmax-w-[28rem] in not-found.tsx and ExamplePage.tsx
  • Added w-full to inner container for proper flex expansion
  • Text no longer wraps word-by-word when sidebar is visible

Issue #29: Hero visual impact

  • Added radial gradient glow from var(--muted) for soft background depth
  • Added fine dot-grid overlay (24px grid, 40% opacity) for technical aesthetic
  • Rounded container with increased padding (py-16)
  • CSS-only, adapts to both light and dark themes

Issue #28: Footer section

  • Added minimal footer with project name, description, GitHub and React Docs links
  • Responsive layout (stacks on mobile via sm:flex-row)
  • mt-auto with flex column parent for sticky bottom placement
  • Hover states with color transition on links

Verification

  • Lint passing
  • TypeCheck passing
  • E2E tests passing (165/171, 6 pre-existing flaky failures)
  • Build successful (static export)
  • Frontend verification via Chrome screenshots (light + dark mode)

Summary by CodeRabbit

Release Notes

  • New Features

    • Added a footer component featuring external links to GitHub and React Docs resources
    • Enhanced landing page with decorative visual elements including radial glow and dotted grid overlays
  • Style

    • Improved typography consistency with enhanced letter tracking across section headings
    • Refined page layouts and container alignment for improved visual hierarchy and presentation
    • Updated error message styling for better layout consistency

Closes #31

- Add tracking-tight to H2 sub-headings on landing page (4 headings)
- Add tracking-tighter to 404 H1 and tracking-tight to 404 H2
- Hero H1 already had tracking-tight (-1.2px at 48px)
Root cause: `--spacing-md: 16px` in @theme collided with Tailwind
CSS v4's `max-w-md` utility, resolving to 16px instead of 28rem.
Replaced `max-w-md` with `max-w-[28rem]` in not-found.tsx and
ExamplePage.tsx. Added `w-full` to inner container for proper
flex expansion.
Adds subtle visual depth to the landing page hero section:
- Radial gradient glow from var(--muted) for soft background
- Fine dot-grid overlay (24px grid) for technical aesthetic
- Rounded container with increased padding
- Adapts to both light and dark themes via CSS variables
- CSS-only, no animation (no prefers-reduced-motion concern)
Adds a minimal footer to the landing page with:
- Project name and description
- Links to GitHub repo and React documentation
- Responsive layout (stacks vertically on mobile via sm:flex-row)
- border-t separator and mt-auto for sticky bottom placement
- Hover states with color transition on links
@vercel
Copy link

vercel bot commented Feb 20, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
re-render Ready Ready Preview, Comment Feb 20, 2026 11:57am

Request Review

@coderabbitai
Copy link

coderabbitai bot commented Feb 20, 2026

📝 Walkthrough

Walkthrough

The PR enhances the landing page layout with decorative visual elements (radial glow, dotted grid overlays), updates typography with tracking-tight for tighter spacing, reorganizes container structures to be flex-based, adds a Footer component with navigation links, and refines the 404 error page layout and styling for better content wrapping.

Changes

Cohort / File(s) Summary
404 Error Page Updates
src/app/not-found.tsx, src/views/ExamplePage.tsx
Reworked NotFound component JSX structure with constrained centered column layout and updated typography tracking. Updated ExamplePage error message container width from max-w-md to fixed 28rem.
Landing Page Visual & Layout Enhancements
src/views/LandingPage.tsx
Converted container from fixed-height scroll area to flexible columnar layout; enriched hero section with radial glow and dotted grid overlays; added relative positioning context for header text; applied tracking-tight to multiple section headings for typographic consistency; added new Footer component with external links (GitHub, React Docs).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

🐰 The footer hops into the night,
Hero glows with grid delight,
Tracking-tight adorns each head,
404's no longer dread! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately references the main changes (UX gaps #28-31) and matches the PR's bulk fix scope.
Linked Issues check ✅ Passed All four linked issues (#28-31) are addressed: footer added [#28], hero visuals with gradient/grid [#29], 404 layout fixed via width adjustment [#30], tracking-tight applied to headings [#31].
Out of Scope Changes check ✅ Passed All changes directly address the four linked issues; no unrelated modifications detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/bulk-issues-20260220b

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.

❤️ Share

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

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
src/views/LandingPage.tsx (1)

22-35: Consider adding aria-hidden="true" to purely decorative overlay divs.

Both the radial glow and dot-grid divs are positioned absolutely with no text or semantic content; aria-hidden="true" tells assistive technologies to skip them entirely and avoids any potential AT traversal noise.

♻️ Proposed fix
  <div
+   aria-hidden="true"
    className="pointer-events-none absolute inset-0"
    style={{
      background: 'radial-gradient(ellipse 80% 60% at 50% 30%, var(--muted), transparent)',
    }}
  />
  {/* Fine dot grid overlay */}
  <div
+   aria-hidden="true"
    className="pointer-events-none absolute inset-0 opacity-[0.4]"
    style={{
      backgroundImage: 'radial-gradient(circle, var(--border) 1px, transparent 1px)',
      backgroundSize: '24px 24px',
    }}
  />
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/views/LandingPage.tsx` around lines 22 - 35, The two purely decorative
overlay divs in LandingPage.tsx (the radial glow div with className
"pointer-events-none absolute inset-0" and the dot-grid overlay div with
className "pointer-events-none absolute inset-0 opacity-[0.4]") should be marked
aria-hidden="true" so screen readers ignore them; update those two div elements
(the radial-gradient background div and the radial-gradient circle
backgroundImage div) to include aria-hidden="true" attributes.
src/app/not-found.tsx (1)

22-35: Inconsistent Tailwind token syntax across the same PR.

not-found.tsx uses shorthand Tailwind tokens (bg-primary, border-border, hover:bg-secondary, text-primary-foreground), while LandingPage.tsx uses explicit CSS variable syntax throughout (bg-[var(--primary)], border-[var(--border)], etc.). The globals.css file properly bridges these via its @theme block, mapping --color-primary: var(--primary) and so on, so both approaches resolve correctly. However, for consistency within this PR, consider standardizing on one approach across both files.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/app/not-found.tsx` around lines 22 - 35, The two Link elements in
not-found.tsx use shorthand Tailwind tokens (e.g., bg-primary, border-border,
text-primary-foreground, hover:bg-secondary) which is inconsistent with
LandingPage.tsx's explicit CSS variable syntax (bg-[var(--primary)],
border-[var(--border)], etc.); pick one convention and make not-found.tsx match
it — update the className values on the Link components (and any related tokens
like startPath usage if it carries classes) to use the same CSS-variable style
used in LandingPage.tsx (or conversely convert LandingPage.tsx to shorthand) so
the token syntax is consistent across the PR.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/app/not-found.tsx`:
- Around line 22-35: The two Link elements in not-found.tsx use shorthand
Tailwind tokens (e.g., bg-primary, border-border, text-primary-foreground,
hover:bg-secondary) which is inconsistent with LandingPage.tsx's explicit CSS
variable syntax (bg-[var(--primary)], border-[var(--border)], etc.); pick one
convention and make not-found.tsx match it — update the className values on the
Link components (and any related tokens like startPath usage if it carries
classes) to use the same CSS-variable style used in LandingPage.tsx (or
conversely convert LandingPage.tsx to shorthand) so the token syntax is
consistent across the PR.

In `@src/views/LandingPage.tsx`:
- Around line 22-35: The two purely decorative overlay divs in LandingPage.tsx
(the radial glow div with className "pointer-events-none absolute inset-0" and
the dot-grid overlay div with className "pointer-events-none absolute inset-0
opacity-[0.4]") should be marked aria-hidden="true" so screen readers ignore
them; update those two div elements (the radial-gradient background div and the
radial-gradient circle backgroundImage div) to include aria-hidden="true"
attributes.

@ryota-murakami ryota-murakami merged commit 1ad27e8 into main Feb 20, 2026
3 checks passed
@ryota-murakami ryota-murakami deleted the feat/bulk-issues-20260220b branch February 20, 2026 12:05
ryota-murakami added a commit that referenced this pull request Feb 20, 2026
The footer added in PR #32 introduced a second "React Docs" link,
causing Playwright strict mode to fail on getByRole. Scope selectors
to the hero <header> element.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant