Design system foundations#33
Conversation
|
Cursor Agent can help with this pull request. Just |
|
@cursor please check the CI failures and fix them |
Summary
Testing
Manual testing not run because the request was to fix CI e2e failures, and the targeted Playwright suite is the authoritative validation. |
|
Bugbot Autofix resolved all 5 of the 5 bugs found in the latest run.
|
|
Bugbot Autofix resolved all 5 of the 5 bugs found in the latest run.
|
|
Bugbot Autofix resolved all 3 of the 3 bugs found in the latest run.
|
| { label: 'Czech Republic (+420)', value: '+420' }, | ||
| { label: 'Canada (+1)', value: '+1' }, | ||
| { label: 'Australia (+61)', value: '+61' }, | ||
| ] |
There was a problem hiding this comment.
Country codes array duplicated across three auth files
Low Severity
The countryCodes array is identically defined in three separate files: login.tsx, signup.tsx, and forgot-password.tsx. This duplication increases maintenance burden—if a country needs to be added or a label corrected, all three files must be updated. This should be extracted to a shared constants file or utility module.
Additional Locations (2)
|
@cursor, please fix the relevant and valid comments. |
|
Bugbot Autofix resolved all 3 of the 3 bugs found in the latest run.
|
|
@cursor, please address the relevant comments on this PR and check CI because type checking failed. |
|
Bugbot Autofix resolved all 3 of the 3 bugs found in the latest run.
|
|
@cursor, please address relevant comments and fix the playwright test (they've been flakey, so feel free to give up on the test if it's irrelevant to your changes). |
|
Bugbot Autofix resolved all 3 of the 3 bugs found in the latest run.
|
Co-authored-by: me <me@kentcdodds.com>
Co-authored-by: me <me@kentcdodds.com>
Co-authored-by: me <me@kentcdodds.com>
Co-authored-by: me <me@kentcdodds.com>
Co-authored-by: me <me@kentcdodds.com>
Co-authored-by: me <me@kentcdodds.com>
Co-authored-by: me <me@kentcdodds.com>
…disabled anchor buttons, non-functional resend link, and static pause toggle label
Co-authored-by: me <me@kentcdodds.com>
Co-authored-by: me <me@kentcdodds.com>
…ing remember me checkbox, hidden username field, and missing error display
Co-authored-by: me <me@kentcdodds.com>
Co-authored-by: me <me@kentcdodds.com>
Co-authored-by: me <me@kentcdodds.com>
…scription downgrade 1. Fixed phone number normalization in forgot-password to handle dashes correctly 2. Removed unused Input component import from marketing index page 3. Fixed subscription page to prevent Premium users from downgrading to Basic plan
1. Fixed missing optional chaining in inline message form that could crash after successful submission 2. Fixed ButtonLink component to properly handle size prop by destructuring and passing to buttonVariants 3. Fixed checkbox onChange to preserve conform's form state tracking while maintaining UI label update
1. Fixed TypeScript error in checkbox onChange handler by using type assertion 2. Fixed critical phone normalization bug in signup - now extracts digits like login/forgot-password 3. Fixed incorrect resend route for phone number change verification 4. Fixed non-functional pricing buttons on marketing page - now link to /login
…zation 1. Updated test formatPhoneNumber to extract digits matching signup behavior 2. All previous fixes included: TypeScript error, phone normalization, resend route, pricing buttons
The duplicate user check in superRefine now extracts digits only (using /\D/g) to match the registration normalization, preventing users from bypassing the duplicate check with formatted phone numbers like 555-123-4567.
1a39d7c to
efee4f5
Compare
| </Button> | ||
| </div> | ||
| </div> | ||
| </div> |
There was a problem hiding this comment.
Pricing section JSX has malformed div nesting
High Severity
The pricing cards in the marketing homepage have malformed JSX nesting. The Basic card's flex container <div className="flex items-center justify-between"> opened at line 168 appears to close at line 178 with incorrect indentation (5 tabs instead of 7), causing the mt-6 button section at line 179 to render outside its intended parent. The Premium card section has similar issues with an extra </div> at line 202. These mismatched tags will cause React rendering errors or unexpected DOM structure. The subscription page (subscription.tsx) has identical issues.
Additional Locations (1)
| <Icon name="check">Add to Queue</Icon> | ||
| </StatusButton> | ||
| </div> | ||
| </newMessageFetcher.Form> |
There was a problem hiding this comment.
Inline message form closing tag missing proper nesting
Medium Severity
The inline "Add to Queue" form's closing tag </newMessageFetcher.Form> at line 346 has inconsistent indentation (3 tabs) compared to its opening tag at line 321 (4 tabs). Additionally, the inner flex <div> at line 329 should have its closing </div> at line 345 aligned properly. While JSX doesn't rely on indentation for parsing, this inconsistency makes the code difficult to maintain and could mask actual nesting errors.





Summary
This PR introduces a comprehensive design system update, aligning the application's UI with the new visual guidelines from Figma. Key changes include:
Test Plan
/) and confirm the new layout, colors, and CTA styling in both light and dark modes./recipients). Verify the new table layout, schedule display, and message counts./recipients/newor/recipients/:id/edit). Verify the centered card layout, schedule controls, pause toggle, and footer actions./settings/profile). Confirm the greeting header, profile card, and settings list layout./login), signup (/signup), forgot password (/forgot-password), reset password (/reset-password), and verification (/verify) pages.Checklist
Screenshots
Homepage walkthrough in light/dark with visible toggle.
Recipients list and detail in light/dark.
Edit recipient form in light/dark with visible toggle.
Profile settings in light/dark with visible toggle.
Authenticated pages: recipients, add recipient, subscription, password.
Auth pages: login, signup, forgot password, verify.
Note
Medium Risk
Mostly UI/UX refactors, but it also changes authentication identifier handling and phone-number normalization, which could affect login/reset/signup behavior for existing users.
Overview
Design system refresh across the app. Updates core UI primitives (
Button,Input,Textarea,Label, OTP slots, and form error spacing) to a new rounded/pill visual style, and introduces a styledSelectFieldwith a chevron icon.Auth flows now collect country code + phone number and normalize identifiers. Login, signup, and forgot-password UIs add a country-code select, update validation, and adjust copy/CTA labels;
login()inauth.server.tsnow accepts anidentifier+ optionalcountryCodeand attempts multiple normalized phone-number candidates (while still allowing username lookup). Signup and forgot-password normalize phone numbers before user lookup / verification targeting.Major UI/UX rework for key pages. Marketing homepage is redesigned with new sections and CTAs; recipients experience is rebuilt (new recipients table/index, recipient detail sidebar layout, inline “Add to Queue” form, and card-based message editor controls). Recipients layout loader now includes schedule display strings and exposes Stripe-derived
subscriptionStatusfor upgrade banners. Profile/settings, subscription, change-number, password reset/change, and verify screens are restyled to match the new system (including a resend link on verify).Written by Cursor Bugbot for commit efee4f5. This will update automatically on new commits. Configure here.