Redesign UI across marketing, auth, recipients, and settings - #97
Merged
Merged
Conversation
- Add self-hosted Inter/Lora fonts, tighter container, global focus styles - Rework app header/footer: skip link, clear login/signup CTAs, user menu - Add real Privacy, Terms, Support, and About content on a shared prose layout - Unify auth pages on an AuthPage card; fix signup link losing redirectTo - Redesign recipients list, detail, editor (schedule presets, next-send preview, pause toggle), message thread, and new-message form - Rebuild settings: profile, subscription, password, phone, and 2FA pages - Improve shared components: checkbox, dropdown, search bar, error boundary - Remove dead /components stub route Co-authored-by: Kent C. Dodds <me+github@kentcdodds.com>
- Drop global scroll-behavior: smooth; it made ScrollRestoration animate scroll-to-top after every navigation - Make dropdown menus non-modal so Radix's scroll lock no longer breaks the sticky header, and remove the close animation so a quickly re-opened menu is not dismissed by the still-mounted closing layer - Rename forgot-password heading to keep the e2e selector matching - Update user-profile component tests for the redesigned profile card Co-authored-by: Kent C. Dodds <me+github@kentcdodds.com>
- Show copy before the hero image on small screens and float the decorative badges outside the image instead of hiding them behind it - Space icon and label inside StatusButton - Default new recipients to the daily 9:00 AM preset - Make message bubbles and timestamps fit narrow screens; stack the date filters below 420px Co-authored-by: Kent C. Dodds <me+github@kentcdodds.com>
Co-authored-by: Kent C. Dodds <me+github@kentcdodds.com>
kentcdodds
marked this pull request as ready for review
September 13, 2026 07:27
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 916f423. Configure here.
… out of the consent label Co-authored-by: Kent C. Dodds <me+github@kentcdodds.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Site-wide visual and usability pass. Fixes inconsistent spacing and typography, missing empty/error states, unclear copy, broken links, accessibility gaps, and mobile layout problems across every user-facing route.
App chrome
focus-visiblestyles for links and native controlsEscapehandling/contactlink was a 404), current yearMarketing
ProsePagelayoutAuth
AuthPagecard; login's "Create an account" link now preservesredirectTo; onboarding ToS checkbox links to/tosand/privacy; verify page copy is specific to each verification typeRecipients
Settings
SettingsCard; 2FA setup is a two-step flowShared components
ErrorMessageused by all error boundaries, 404 page,StatusButtonicon spacingBugs found by the e2e suite while doing this
scroll-behavior: smooth: it made React Router'sScrollRestorationanimate scroll-to-top after every navigationoverflow: hiddenonbody, which breaks the sticky header) and no longer animate out (the still-mounted closing layer dismissed a quickly re-opened menu)Cleanup
/componentsstub route"<name>'s recipients"link, which pointed at the viewer's recipientsTest Plan
bun run typecheck,bun run lint,bun run test,bun run test:browserpassbun run test:e2e:run(Playwright, 14 tests) passes serially with system Chrome/,/about,/privacy,/tos,/support,/login,/signup,/recipients, recipient detail/edit/new,/settings/profileand subpages,/users/:username, and a 404 at desktop and mobile widths, light and darkChecklist
user-profile.test.browser.tsxupdated for the redesigned profile card; all existing e2e selectors preserved)Screenshots