Sign-In Screen
A full auth page that deliberately contains almost nothing but the form — no nav, no marketing, nothing competing with the one job.
Password reset, plus the magic link beside it — the moment after a password has failed is when somebody is most willing to stop using one.
app/forgot-password-page.tsxnpx hoverlab add forgot-password-page
Or over MCP, from your editor's agent — no account needed.
Free to read, copy and install, for personal and non-commercial projects. Shipping it in client work or a paid product needs Pro ($79 once). The source lands in your repo and stops being ours — no attribution, nothing to upgrade.
One address, one link, no password to forget or reuse. The link works once and expires in fifteen minutes, which is stated here rather than discovered when it fails.
The real page, rendered in your current theme — every section below is a live block, not a screenshot.
Only want one section? Open it and copy that block instead — browse Authentication.
Want the whole project rather than this one screen? A template ships every route, the theme tokens and the layout.
/**
* Password recovery, with the option that avoids the password entirely.
*
* Someone reaching this page has already failed to sign in once. The
* conventional answer is a reset form and nothing else, which sends them
* to their inbox to click a link, choose a new password, and store it —
* three steps to get back to where they were.
*
* The magic-link form is beside it because it solves the same problem in
* one step, and this is the exact moment somebody is most willing to stop
* using passwords. Offering it on the main sign-in screen competes with
* the primary action; offering it here, after the password has already
* failed, competes with nothing.
*
* Reset stays first. It is what the reader came for, and a page that
* answers a different question than the one asked — however sensibly — is
* a page people bounce from.
*/
import * as React from 'react'
import { AuthForgotPassword } from '@/components/auth-forgot-password'
import { AuthMagicLinkForm } from '@/components/auth-magic-link-form'
export default function ForgotPasswordPage() {
return (
<main className="min-h-screen bg-background text-foreground">
<AuthForgotPassword />
{/*
The separator carries a word rather than being a bare rule. "Or"
is what tells a reader the second form is an alternative and not a
second required step, which a plain line leaves ambiguous.
*/}
<div className="mx-auto flex w-full max-w-md items-center gap-4 px-6">
<span className="h-px flex-1 bg-border" />
<span className="text-xs font-medium uppercase tracking-wider text-muted-foreground">
Or skip the password
</span>
<span className="h-px flex-1 bg-border" />
</div>
<AuthMagicLinkForm />
</main>
)
}
components/ — each block page has its own copy button.app/forgot-password-page.tsx. The imports already point at @/components/…, so they resolve with no edits.The component, its props, the design tokens it expects and the command that installs it — as one prompt. Paste it into Claude, Cursor, v0 or ChatGPT and what they build around it will match the rest of the catalog instead of inventing its own system.
A full auth page that deliberately contains almost nothing but the form — no nav, no marketing, nothing competing with the one job.
The signup form with the proof under it rather than above it — the person who arrived here has already decided, and scrolling past testimonials is friction applied to the wrong reader.
The second factor with its fallback on the same screen, because a 2FA prompt with no recovery route is a lockout screen wearing a security screen.
A domain field for the employee who signs in daily, and the capability detail below the fold for the IT reviewer who reads it once.
The end of the forgot-password flow, shipped with the state it reaches more than any other screen: a focused error summary linking to each field, beside a strength meter that is a real <meter>.