Email Verification Code

Full-height OTP verification screen with a centered icon, segmented six-digit code input, a verify button that unlocks once the code is complete, and a live resend countdown timer. Perfect for two-factor auth, magic links, and email confirmation flows.

FREE

Auth3: Email Verification Code

Full-height OTP screen: a centered icon badge, a segmented six-digit code input, a verify button that stays disabled until the code is complete, and a live resend countdown that flips into a clickable "resend" prompt once it hits zero.

Free block

This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.

Installation

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/auth3"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/auth3"

This installs the block to components/beste/block/auth3.tsx and the button, input-otp, and field shadcn/ui primitives it's built on.

Quick start

The installed file exports auth3Demo alongside the block: the exact props behind the preview above. Spread it to get a working verification screen in one line.

tsx
import { Auth3, auth3Demo } from "@/components/beste/block/auth3";

export default function VerifyPage() {
  return <Auth3 {...auth3Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { MailCheck } from "lucide-react";
import { Auth3 } from "@/components/beste/block/auth3";

export default function VerifyPage() {
  return (
    <Auth3
      icon={<MailCheck className="size-6" />}
      heading="Check your email"
      description="Enter the 6-digit code we sent to <strong>jane@example.com</strong>"
      otpLength={6}
      resendSeconds={30}
      resendPrompt={{ text: "Didn't get the code?", linkLabel: "Resend" }}
      backLink={{ label: "Back to sign in", href: "/sign-in" }}
      labels={{ verify: "Verify email" }}
    />
  );
}

Props

PropTypeDefaultDescription
iconReact.ReactNodeIcon shown inside the circular badge above the heading
headingstringScreen title
descriptionstringSubtext below the heading; supports an inline <strong> (rendered as HTML)
otpLengthnumber6Number of OTP slots
resendPrompt{ text: string; linkLabel: string }Text and button label shown once the countdown reaches zero
resendSecondsnumber30Countdown length in seconds before resend becomes available
backLink{ label: string; href: string }Link below the card, hidden entirely when not set
labels{ verify?: string; resendCountdown?: string }{}Verify button label and countdown template ({seconds} placeholder)
classNamestringExtra classes for the outer <section>

Behavior notes

More Auth blocks

View all Auth
PRO

auth12

Email Confirmed Success

Full-height success screen with a large confirmation check, a heading and message, a primary continue button, and a support link. Perfect for the final step after email verification or account activation.

PRO

auth20

Check Your Inbox

Full-height confirmation screen shown after a magic link is sent, with a mail icon, the destination email, an open-email button, a live resend countdown, and a change-email link. Perfect for passwordless and email-link flows.

PRO

auth46

Confirm It's You

Full-height step-up authentication screen that re-asks for the password before a sensitive action, showing the signed-in account and a cancel option. Perfect for protecting billing, security, and destructive actions.

PRO

auth35

Number Match Approval

Full-height push-approval screen that shows a large number to match in your authenticator app, with a live waiting indicator and a cancel option. Perfect for number-matching two-factor authentication.

PRO

auth17

Signed Out Confirmation

Full-height signed-out screen with a centered icon, a heading and message, a sign-back-in button, and a return-home link. Perfect for logout confirmations and expired-session pages.

FREE

auth6

Magic Link Sign In

Full-height passwordless sign-in screen with a single email field, a send-magic-link button, a helper note, and social login providers below a divider. Perfect for passwordless and email-link authentication flows.