Split Sign In With Quote

sirius

Welcome back

Sign in to pick the day up exactly where your team left it.

Forgot?
or
Continue with SSO

New to Sirius? Create a workspace

A healthcare professional smiling in a bright clinic

The front desk stopped asking me where things were. That is the whole review.

Elena Rourke, Practice manager, Brightwell Group

About this block

Split Sign In With QuotePRO

A hairline sign-in panel with a lowercase wordmark, email and password fields, an inline forgot link, a remember toggle, and an SSO fallback, set beside a full-height photo carrying a gradient customer quote.

Auth49: Split Sign In With Quote

Sign-in panel split down the middle: a lowercase wordmark over email and password fields with an inline forgot link, a remember toggle, and an SSO fallback on one side, and a full-height photo carrying a customer quote over a gradient scrim on the other.

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.

Upgrade Now

Installation

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

bash
npx shadcn add "https://ui.beste.co/r/auth49?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/auth49?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/auth49.tsx plus the button21 component it uses for the submit and SSO actions.

Quick start

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

tsx
import { Auth49, auth49Demo } from "@/components/beste/block/auth49";

export default function SignInPage() {
  return <Auth49 {...auth49Demo} />;
}

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

tsx
import { Auth49 } from "@/components/beste/block/auth49";

export default function SignInPage() {
  return (
    <Auth49
      wordmark="sirius"
      heading="Welcome back"
      description="Sign in to pick the day up where your team left it."
      form={{
        email: { label: "Work email", placeholder: "you@practice.com" },
        password: { label: "Password", placeholder: "Your password" },
        forgot: { label: "Forgot?", href: "/reset" },
        rememberLabel: "Keep me signed in on this device",
        submitLabel: "Sign in",
        dividerLabel: "or",
        ssoButton: { label: "Continue with SSO", href: "/sso" },
      }}
      footer={{ label: "New here?", link: { label: "Create a workspace", href: "/signup" } }}
      image={{ src: "/images/clinic.jpg", alt: "A clinician in a bright clinic" }}
      quote={{
        text: "The front desk stopped asking me where things were.",
        name: "Elena Rourke",
        role: "Practice manager",
      }}
    />
  );
}

Props

PropTypeDefaultDescription
wordmarkstringLowercase brand mark at the top of the form column
headingstringScreen title, rendered as the h1
descriptionstringLine under the heading
formAuthFormEvery field, label, and action in the form column
footer{ label: string; link: ActionLink }Sign-up prompt under the form
image{ src: string; alt: string }Photo column beside the form
quoteQuoteTestimonial over the photo, needs image to render
classNamestringExtra classes for the outer <section>
ts
type ActionLink = { label: string; href: string };

type Field = { label: string; placeholder: string };

type AuthForm = {
  email: Field;
  password: Field;
  forgot: ActionLink;
  rememberLabel: string;
  submitLabel: string;
  dividerLabel: string;
  ssoButton: ActionLink;
};

type Quote = { text: string; name: string; role: string };

Behavior notes

  • There is no <form> element, no onSubmit, and no state on the inputs: the fields are uncontrolled markup and the submit button is a plain Button21. Authentication is entirely the integrator's to add.
  • Field ids come from React's useId, and each label is tied to its input through htmlFor, so two instances of the block on one page never collide and clicking a label still focuses the field.
  • The remember checkbox is a native input tinted with accent-primary rather than a component, which keeps the block free of a checkbox dependency.
  • The quote only renders inside the photo column, so passing quote without image shows nothing. The gradient scrim is tied to the quote too, so an image without a quote renders clean.
  • The photo is ordered first on mobile (order-first) as a short band above the form and returns to its DOM position as a full-height column at lg, which keeps the form first in the source for keyboard and screen reader order.
  • The photo column is a fixed dark surface, so its copy uses the fixed text-background tokens rather than the adaptive ones the rest of the block uses.
  • The divider is two flex rules with the label between them, not a bordered pseudo-element, so it stays centred whatever the label says.

Wiring the form up

This block ships the form markup only; state, validation, and submit are yours to add. Our guide wires field markup like this to React Hook Form, TanStack Form, and Formisch on one field system.

More Auth blocks

View all Auth
PRO

auth50

Split Sign Up With Proof

A hairline sign-up panel carrying a lowercase wordmark, name, work email, and password fields with an SSO fallback and terms note, beside a soft column of checked benefits over an image tile that floats a live customer quote card.

PRO

auth9

Split-Screen Sign In

Two-column sign-in screen pairing a full sign-in form (social providers, email, password with show/hide, remember me) with a brand panel that lists product highlights. Includes a left/right panel position toggle.

PRO

auth54

Quiet Sign In

A full-height sign-in split: wordmark, a serif greeting that settles in word by word, email and password fields with a full-width sliding-marker pill and a switch-to-booking line on the left, and a photograph that zooms out on load, then drifts slower than the page, with a serif reassurance over its foot on the right.

PRO

auth32

Editorial Split Sign In

Two-column editorial sign-in pairing an oversized typographic brand panel with a clean email and password form. Stacks the panel above the form on mobile. Perfect for brands that want a minimal, editorial first impression.

FREE

auth2

Split-Screen Sign Up

Two-column registration screen pairing a sign-up form (social providers, name, email, password with show/hide, terms checkbox) with a full-bleed image showcase and customer testimonial. Includes a left/right image position toggle.

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.