Skip to content

feat: improve UI and fix responsive layout - #412

Merged
Abhash-Chakraborty merged 6 commits into
Abhash-Chakraborty:canaryfrom
viviyan-prince:canary
Aug 3, 2026
Merged

feat: improve UI and fix responsive layout#412
Abhash-Chakraborty merged 6 commits into
Abhash-Chakraborty:canaryfrom
viviyan-prince:canary

Conversation

@viviyan-prince

@viviyan-prince viviyan-prince commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Summary

Improved the Settings page UI/UX by enhancing layout consistency, responsiveness, and accessibility while preserving all existing functionality.

Fixes #358

Type of change

  • Bug fix
  • Feature
  • Documentation update
  • Refactor
  • CI / tooling

Release impact

  • No user-visible release note needed
  • Patch (backward-compatible fix)
  • Minor (backward-compatible feature)
  • Major (breaking change)
  • Critical/security fix (keep sensitive details private)

What changed

  • Improved spacing and layout consistency across the Settings page.
  • Enhanced mobile responsiveness for a better user experience.
  • Improved accessibility with better keyboard navigation and focus states.
  • Refined hover, loading, and disabled states for interactive components.
  • Maintained full support for both light and dark themes.
  • No backend, API, database, routing, or business logic changes.

How to test

  1. Run npm install
  2. Run npm run dev
  3. Open the Settings page and verify the UI improvements.
  4. Run the following checks:
    biome check
    tsc --noEmit
    npm test
    npm run build

Checklist

  • I linked the related issue
  • I ran required checks from CONTRIBUTING.md
  • I updated docs/env notes if needed
  • My PR is scoped to a single issue
  • I followed commit message conventions
  • I am not committing secrets or local artifacts
  • This PR targets canary unless it is the maintainer promotion PR

GSSoC'26 checklist

  • I requested issue assignment before starting
  • I have meaningful commits (no spam commits)
  • I am ready to explain my implementation in review comments

Summary by CodeRabbit

  • Style

    • Refined the settings page layout, spacing, responsive behavior, and control sizing.
    • Added clearer hover, active, focus, and disabled-state feedback across settings controls.
    • Improved toggle and button animations, including loading indicators and larger touch targets.
  • Accessibility

    • Added clearer live status announcements for copying and hardware detection.
    • Improved focus visibility, semantic labeling, busy-state indicators, and screen-reader behavior.
  • Bug Fixes

    • Prevented the support-summary copy action from being triggered repeatedly while processing.

@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown

PR Context Summary

Suggested issue links

  • No strong issue match found yet.

Use Fixes #123 or Closes #123 in the PR body when one of the suggestions is the intended issue.
Manual rerun: Actions > PR Context Triage > Run workflow > set pr_number and force_review=true.

@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@Abhash-Chakraborty, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 31 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

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 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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2f1d36bc-de00-41b2-bc79-287a85ca390e

📥 Commits

Reviewing files that changed from the base of the PR and between 530b0e5 and 57ef45a.

📒 Files selected for processing (5)
  • frontend/src/app/settings/page.tsx
  • frontend/src/components/about-settings.tsx
  • frontend/src/components/ai-runtime-settings.tsx
  • frontend/src/components/map-privacy-settings.tsx
  • frontend/src/components/trash-retention-settings.tsx
📝 Walkthrough

Walkthrough

The settings interface now has responsive spacing, larger touch targets, clearer interactive states, and additional accessibility attributes. The About section also provides loading feedback while copying the support summary.

Changes

Settings UI refinements

Layer / File(s) Summary
Settings page layout
frontend/src/app/settings/page.tsx
Responsive spacing, description width, navigation sizing, and retry-button states were updated.
Support summary copy feedback
frontend/src/components/about-settings.tsx
Copying now disables repeated clicks, shows a loader, exposes busy state, and announces progress.
Interactive settings controls
frontend/src/components/ai-runtime-settings.tsx, frontend/src/components/appearance-settings.tsx, frontend/src/components/hardware-accel-settings.tsx, frontend/src/components/map-privacy-settings.tsx
Runtime, appearance, hardware acceleration, and map privacy controls now include improved hover, active, focus, pending, and status behavior.
Trash retention controls
frontend/src/components/trash-retention-settings.tsx
Retention controls now have larger targets, focus feedback, disabled-state styling, semantic icon handling, and an accessible custom input label.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related PRs

Suggested reviewers: abhash-chakraborty

Poem

A rabbit taps the settings pane,
With softer spacing after rain.
A spinner hops when copying starts,
Focus rings brighten interface hearts.
The controls stretch, respond, and glow—
“A tidy burrow!” says the doe.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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
Title check ✅ Passed The title clearly summarizes the primary UI and responsive layout improvements in the pull request.
Description check ✅ Passed The description covers the change, issue, scope, testing, and checklists, but it omits the required screenshots or recordings for UI changes.
Linked Issues check ✅ Passed The changes address issue #358 through responsive layout, UI consistency, accessibility, and improved interactive states without backend or workflow changes.
Out of Scope Changes check ✅ Passed All modified files contain Settings page UI, accessibility, responsiveness, or interaction-state changes that match issue #358.

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.

@macroscopeapp

macroscopeapp Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

Unable to check for correctness in 57ef45a. UI and accessibility improvements with low runtime risk, but the author does not own any of the 7 modified files (all owned by Abhash-Chakraborty). The designated code owner should review these changes.

You can customize Macroscope's approvability policy. Learn more.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@frontend/src/app/settings/page.tsx`:
- Line 153: Update the retry button that calls settingsQuery.refetch() to set
disabled and aria-busy from settingsQuery.isFetching, preserving the existing
styling while preventing repeated requests and exposing the fetch state.

In `@frontend/src/components/trash-retention-settings.tsx`:
- Around line 38-42: Update the hint around the button in the trash-retention
settings component so it is not a focusable no-op: either render the explanation
as accessible passive text without a button, or implement an actual disclosure
with activation behavior plus matching aria-expanded and aria-controls
attributes. Preserve the existing hint content and styling where applicable.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3199abea-05ad-47be-9bc3-e988e32d5f87

📥 Commits

Reviewing files that changed from the base of the PR and between ea1ca1b and 530b0e5.

📒 Files selected for processing (7)
  • frontend/src/app/settings/page.tsx
  • frontend/src/components/about-settings.tsx
  • frontend/src/components/ai-runtime-settings.tsx
  • frontend/src/components/appearance-settings.tsx
  • frontend/src/components/hardware-accel-settings.tsx
  • frontend/src/components/map-privacy-settings.tsx
  • frontend/src/components/trash-retention-settings.tsx

Comment thread frontend/src/app/settings/page.tsx
Comment thread frontend/src/components/trash-retention-settings.tsx
@Abhash-Chakraborty

Copy link
Copy Markdown
Owner

Thanks for picking this up — the a11y bits are genuinely good (focus-visible rings, aria-busy on the copy button, live region on hardware detection). Two things block a merge for me though: the toggles in ai-runtime-settings.tsx and map-privacy-settings.tsx went from h-7 to h-11 while staying w-12, so the switch is now a 44x48 blob instead of a pill, and the thumb changed from bg-white to bg-[color:var(--void)] which will vanish against the dark off-state track. If you want the larger touch target, keep the visual pill at h-7 and pad the hit area instead.

Also the map-privacy toggle switched its checked colour from --near-white to --green — that is a design change, not a responsiveness fix, so please revert it here. And the info button in trash-retention-settings.tsx is still a focusable button that does nothing on click; either make it real disclosure or drop it to plain text. Finally, please add before/after screenshots (mobile + desktop, light + dark) — hard to sign off on a UI PR without them.

@viviyan-prince

Copy link
Copy Markdown
Contributor Author

Thanks for the detailed review. I'll revert the visual toggle changes (height, thumb color, and checked color), keep the larger touch target by increasing the hit area instead of the switch itself, and either implement a proper disclosure for the info button or replace it with non-interactive text. I'll also attach before/after screenshots for mobile and desktop in both light and dark themes in the updated PR.

@viviyan-prince

Copy link
Copy Markdown
Contributor Author

Thanks for the review! I've addressed the requested changes:

Restored the toggle visuals to h-7 w-12 while keeping a larger touch target via padding.
Restored the toggle thumb to bg-white.
Reverted the checked state color in map-privacy-settings.tsx back to --near-white.
Replaced the non-functional info button in trash-retention-settings.tsx with an accessible implementation.

I'd appreciate another review when you have a chance.

viviyan-prince and others added 3 commits August 3, 2026 19:25
The PR set out to fix responsive layout, and the toggle and a11y work is
right, but the page still scrolled sideways at phone widths - about 150px
of overflow at 390px, clipping text on every card.

Cause is the two-column grid. Columns are only declared at lg:, so at
mobile the single implicit track is auto-sized, and an auto track sizes to
max-content rather than to the container. One non-wrapping value in the
About card was enough to stretch that track to ~650px inside a 358px
container and push the whole document into horizontal scroll. Declaring the
base track as minmax(0,1fr) constrains it; documentElement.scrollWidth at a
390px viewport goes from 543 to 390.

The About rows contributed the max-content in the first place: the truncate
utility implies white-space: nowrap, and it was applied at every breakpoint
even though the row stacks below sm:. Now the value wraps on phones, where
it has a full line to itself, and only truncates from sm: up where it shares
a line with the label.

This overflow predates the PR - canary has it too - but fixing responsive
layout is what the PR is for, so it belongs here.

Verified at 390px and 1280px: biome clean, 300 unit tests, production build,
14 Playwright e2e. Also probed the new toggles - 48x28 visual with a 64x44
hit area from the ::before expansion, and no overlap with any neighbouring
interactive element - and the trash-retention disclosure, which correctly
flips aria-expanded and reveals its panel.
@Abhash-Chakraborty Abhash-Chakraborty added frontend Frontend UI, state, and Next.js work ui/ux User interface, interaction, and visual polish accessibility Keyboard, screen reader, contrast, and inclusive UX gssoc26 Related to GirlScript Summer of Code 2026. gssoc Related to GirlScript Summer of Code. gssoc:approved Valid GSSoC contribution approved for scoring. quality:clean Clean and maintainable PR. GSSoC contributor multiplier: 1.2x. type:design UI/UX or design-related PR. GSSoC type bonus: +10 points. priority: medium Useful issue with moderate urgency level:intermediate GSSoC difficulty level: intermediate. Base contributor points: 35. ready-to-merge Fully approved, tested, and cleared for immediate merging. labels Aug 3, 2026

@Abhash-Chakraborty Abhash-Chakraborty left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Thanks for turning this around properly — the toggles are back to a proper pill with a white thumb, the touch target comes from a ::before expansion instead of distorting the switch, the map colour is reverted, and the info button is a real disclosure now.

I verified rather than eyeballed: both toggles measure 48x28 visually with a 64x44 hit area and no overlap with any neighbouring interactive element, and the disclosure flips aria-expanded and reveals its panel.

One thing was still outstanding, so I pushed a fix: the page still scrolled sideways at phone widths (~150px of overflow at 390px, clipping text on every card). The two-column grid only declares columns at lg:, so on mobile the implicit track is auto — which sizes to max-content, not to the container. One non-wrapping value in the About card stretched it to ~650px inside a 358px container. Declaring the base track as minmax(0,1fr) fixes it; scrollWidth at 390px goes 543 → 390. Also made the About value wrap on phones instead of truncating, since truncate implies nowrap and was what produced the max-content in the first place.

That overflow predates your PR — canary has it too — but fixing responsive layout is what this PR is for, so it belongs here. Approving.

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

@macroscope-app review

Please review this PR against its linked issue, local-first privacy rules, and the current Find repo instructions.
Linked issue(s): #358.
Trigger source: label-gated review (ready-to-merge).

@Abhash-Chakraborty
Abhash-Chakraborty merged commit 40fcb16 into Abhash-Chakraborty:canary Aug 3, 2026
37 of 43 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

accessibility Keyboard, screen reader, contrast, and inclusive UX frontend Frontend UI, state, and Next.js work gssoc:approved Valid GSSoC contribution approved for scoring. gssoc Related to GirlScript Summer of Code. gssoc26 Related to GirlScript Summer of Code 2026. level:intermediate GSSoC difficulty level: intermediate. Base contributor points: 35. priority: medium Useful issue with moderate urgency quality:clean Clean and maintainable PR. GSSoC contributor multiplier: 1.2x. ready-to-merge Fully approved, tested, and cleared for immediate merging. type:design UI/UX or design-related PR. GSSoC type bonus: +10 points. ui/ux User interface, interaction, and visual polish

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: UI/UX Enhancements for Improved User Experience

2 participants