From b05215cd080144065f4bab0048c731a3dc70bc7b Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 31 Jan 2026 16:17:51 +0000 Subject: [PATCH 1/4] Refine verify page styling Co-authored-by: me --- app/components/forms.tsx | 32 +++++---- app/routes/_app+/_auth+/verify.tsx | 100 ++++++++++++++--------------- 2 files changed, 71 insertions(+), 61 deletions(-) diff --git a/app/components/forms.tsx b/app/components/forms.tsx index 61ebb850..56513d99 100644 --- a/app/components/forms.tsx +++ b/app/components/forms.tsx @@ -114,12 +114,20 @@ export function OTPField({ errors, className, type, + slotClassName, + groupClassName, + separatorClassName, + showSeparator = true, }: { labelProps: React.LabelHTMLAttributes inputProps: Partial errors?: ListOfErrors className?: string type: 'digits' | 'digits-and-characters' + slotClassName?: string + groupClassName?: string + separatorClassName?: string + showSeparator?: boolean }) { const fallbackId = useId() const id = inputProps.id ?? fallbackId @@ -138,17 +146,19 @@ export function OTPField({ aria-describedby={errorId} {...inputProps} > - - - - - - - - - - - + + + + + + {showSeparator ? ( + + ) : null} + + + + +
{errorId ? : null} diff --git a/app/routes/_app+/_auth+/verify.tsx b/app/routes/_app+/_auth+/verify.tsx index b62247e1..97102e52 100644 --- a/app/routes/_app+/_auth+/verify.tsx +++ b/app/routes/_app+/_auth+/verify.tsx @@ -11,7 +11,7 @@ import { HoneypotInputs } from 'remix-utils/honeypot/react' import { z } from 'zod' import { GeneralErrorBoundary } from '#app/components/error-boundary.tsx' import { ErrorList, OTPField } from '#app/components/forms.tsx' -import { Spacer } from '#app/components/spacer.tsx' +import { Icon } from '#app/components/ui/icon.tsx' import { StatusButton } from '#app/components/ui/status-button.tsx' import { checkHoneypot } from '#app/utils/honeypot.server.ts' import { useIsPending } from '#app/utils/misc.tsx' @@ -53,36 +53,32 @@ export default function VerifyRoute() { ) const type = parseWithZoddType.success ? parseWithZoddType.data : null - const checkPhoneNumber = ( + const headingClasses = 'text-h2 sm:text-h1' + const bodyClasses = 'text-body-md text-muted-foreground mt-4' + const buildHeading = (title: string, description: string) => ( <> -

Check your texts

-

- We've texted you a code to verify your phone number. -

+

{title}

+

{description}

) + const checkPhoneNumber = buildHeading( + 'Check Your Texts', + "We've texted you a code to verify your phone number", + ) const headings: Record = { onboarding: checkPhoneNumber, 'reset-password': checkPhoneNumber, 'change-phone-number': checkPhoneNumber, 'validate-recipient': ( - <> -

Check your texts

-

- We've texted you a code to verify the phone number you gave us. Please - inform your recipient of what you're up to and ask your recipient to - provide you with that code. -

- + buildHeading( + 'Check Your Texts', + "We've texted you a code to verify the phone number you gave us. Please inform your recipient of what you're up to and ask your recipient to provide you with that code.", + ) ), - '2fa': ( - <> -

Check your 2FA app

-

- Please enter your 2FA code to verify your identity. -

- + '2fa': buildHeading( + 'Check Your 2FA App', + 'Please enter your 2FA code to verify your identity.', ), } @@ -110,40 +106,40 @@ export default function VerifyRoute() { }) return ( -
-
-

- GratiText -

+
+
{type ? headings[type] : 'Invalid Verification Type'}
- - -
- -
+
+ -
- -
-
- Didn't get it? + + +
+ No text after 5 minutes? Resend the Code @@ -160,12 +156,16 @@ export default function VerifyRoute() { })} /> - Continue + + Continue +
From fccd97934554cc9e6fd045e8bff54ec6503127a4 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 31 Jan 2026 16:21:56 +0000 Subject: [PATCH 2/4] Fix verify resend layout Co-authored-by: me --- app/routes/_app+/_auth+/verify.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/routes/_app+/_auth+/verify.tsx b/app/routes/_app+/_auth+/verify.tsx index 97102e52..4a2fd3ab 100644 --- a/app/routes/_app+/_auth+/verify.tsx +++ b/app/routes/_app+/_auth+/verify.tsx @@ -135,8 +135,8 @@ export default function VerifyRoute() { showSeparator={false} slotClassName="h-14 w-14 rounded-full bg-white text-lg font-semibold shadow-none dark:bg-[hsl(var(--palette-navy))]" /> -
- No text after 5 minutes? +
+ No text after 5 minutes? Date: Sat, 31 Jan 2026 16:40:41 +0000 Subject: [PATCH 3/4] Center OTP input on mobile Co-authored-by: me --- app/routes/_app+/_auth+/verify.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/routes/_app+/_auth+/verify.tsx b/app/routes/_app+/_auth+/verify.tsx index 4a2fd3ab..39e9f447 100644 --- a/app/routes/_app+/_auth+/verify.tsx +++ b/app/routes/_app+/_auth+/verify.tsx @@ -128,7 +128,8 @@ export default function VerifyRoute() { ...getInputProps(fields[codeQueryParam], { type: 'text' }), autoComplete: 'one-time-code', autoFocus: true, - containerClassName: 'justify-start gap-3', + containerClassName: + 'flex-wrap justify-center gap-3 sm:flex-nowrap sm:justify-start', }} errors={fields[codeQueryParam].errors} groupClassName="gap-3" From 24eeab36f938f719a3101e25c5df41fbef916465 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 31 Jan 2026 16:43:56 +0000 Subject: [PATCH 4/4] Keep OTP row centered on mobile Co-authored-by: me --- app/routes/_app+/_auth+/verify.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/routes/_app+/_auth+/verify.tsx b/app/routes/_app+/_auth+/verify.tsx index 39e9f447..85b7668c 100644 --- a/app/routes/_app+/_auth+/verify.tsx +++ b/app/routes/_app+/_auth+/verify.tsx @@ -129,12 +129,12 @@ export default function VerifyRoute() { autoComplete: 'one-time-code', autoFocus: true, containerClassName: - 'flex-wrap justify-center gap-3 sm:flex-nowrap sm:justify-start', + 'justify-center gap-2 sm:justify-start sm:gap-3', }} errors={fields[codeQueryParam].errors} - groupClassName="gap-3" + groupClassName="gap-2 sm:gap-3" showSeparator={false} - slotClassName="h-14 w-14 rounded-full bg-white text-lg font-semibold shadow-none dark:bg-[hsl(var(--palette-navy))]" + slotClassName="h-11 w-11 rounded-full bg-white text-base font-semibold shadow-none dark:bg-[hsl(var(--palette-navy))] sm:h-14 sm:w-14 sm:text-lg" />
No text after 5 minutes?