A centered passwordless card that advances in place from a work email step with an SSO fallback to a monospace one-time-code entry with resend and go-back controls.
A centered passwordless card that advances in place from a work email step with an SSO fallback to a monospace one-time-code entry with resend and go-back controls.
Upgrade to Pro
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/auth51?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/auth51?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/auth51.tsx, the shadcn/ui input component it depends on, and the button21 component it uses for the actions.
The installed file exports auth51Demo alongside the block: the exact props behind the preview above. Spread it to get a working sign-in page in one line.
import { Auth51, auth51Demo } from "@/components/beste/block/auth51";
export default function SignInPage() {
return <Auth51 {...auth51Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Auth51 } from "@/components/beste/block/auth51";
export default function SignInPage() {
return (
<Auth51
wordmark="sirius"
emailStep={{
heading: "Sign in without a password",
description: "We send a six-digit code that works once and expires in ten minutes.",
label: "Work email",
placeholder: "you@practice.com",
submitLabel: "Send me a code",
dividerLabel: "or",
ssoButton: { label: "Use your practice identity provider", href: "/auth/sso" },
}}
codeStep={{
heading: "Check your email",
description: "It is valid for ten minutes and can only be used once.",
length: 6,
resendLabel: "Send it again",
submitLabel: "Sign in",
backLabel: "Use a different email",
}}
footer={{ label: "No workspace yet?", link: { label: "Create one", href: "/signup" } }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
wordmark | string | – | Lowercase wordmark at the top of the card |
emailStep | EmailStep | – | Copy for the first step, including the SSO fallback |
codeStep | CodeStep | – | Copy for the second step and how many digits to render |
footer | FooterLink | – | Sign-up prompt under the card's hairline |
className | string | – | Extra classes for the outer section |
type EmailStep = {
heading: string;
description: string;
label: string;
placeholder: string;
submitLabel: string;
dividerLabel: string;
ssoButton: { label: string; href: string };
};
type CodeStep = {
heading: string;
description: string;
length: number;
resendLabel: string;
submitLabel: string;
backLabel: string;
};
type FooterLink = {
label: string;
link: { label: string; href: string };
};true with no validation and no network call, so the demo advances on any click. Wiring a real send means replacing that handler.false, so the card returns to the email step in place. Nothing is preserved between steps, since neither field is controlled.codeStep.length drives how many single-character inputs are rendered. Each gets maxLength={1} and an aria-label reading "Digit 1", "Digit 2" and so on, and only the first carries the generated id.font-mono, which is the one place the set uses a monospace face on purpose: fixed-width digits stop the boxes from jittering as characters are typed.button so it is focusable and styled correctly, and the resend call is yours to add.Wiring the form up
Both steps render their fields and leave submission to you. For validation, error states and submit handling, the patterns in React Hook Form, TanStack Form, and Formisch cover this shape of multi-step form.
auth1
Full-height centered sign-in screen with social login providers, email and password fields, a show/hide password toggle, remember-me checkbox, and forgot-password link. Perfect for SaaS apps, dashboards, and member portals.
auth13
Full-height centered registration card with social providers, name, email, and password fields (with show/hide), a terms checkbox, and a sign-in link. Perfect for SaaS sign-up pages that don't need a split layout.
auth21
Full-height passwordless sign-in screen with a fingerprint icon, a continue-with-passkey button, and a password fallback below a divider. Perfect for WebAuthn and biometric authentication flows.
auth14
Full-height single sign-on screen with a work-email field, a continue-with-SSO button, and Google and Microsoft providers below a divider. Perfect for B2B and enterprise apps that authenticate via identity providers.