Staaarter

Face ID Sign In

Full-height biometric sign-in screen built around an animated face-scan viewfinder. Clicking "Scan Face ID" walks through an idle, scanning, and recognized state, complete with a pulsing ring animation and status text, before enabling the Continue button, with a fallback link back to password sign-in.

By Staaarter Team
Auth
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/face-id-sign-in.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/auth/auth10.tsx instead.

Usage

The file also exports auth10Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Auth10, auth10Demo } from "@/components/blocks/auth/auth10";

export default function Page() {
  return <Auth10 {...auth10Demo} />;
}

Props

PropTypeDefaultDescription
headingReactNode"Face ID Sign In"Screen heading.
descriptionstring"Look at the camera to sign in securely."Supporting text under the heading.
passwordHrefstring"#"Link target for the "Use password instead" fallback link.
classNamestringnoneExtra classes for the outer section element.

Behavior notes

  • The scan flow is a real client-side state machine (idle -> scanning -> recognized) driven by useState, clicking "Scan Face ID" starts a setTimeout that flips to "recognized" after a fixed 1.5s, there is no real camera access or biometric check.
  • The pending timeout is stored in a ref and cleared in a useEffect cleanup function on unmount, so no state update fires after the component is gone.
  • The "Continue" button is disabled until scanState is "recognized", it has no onClick handler since continuing would require a real backend session.
  • The corner-bracket viewfinder frame and pulsing ring during "scanning" are pure CSS (animate-ping/animate-pulse), no canvas or video is used.