Home / Blocks / Application / Password Recovery
6 blocks in this section

Shadcn Forgot Password and Reset Forms

Forgot-password page layouts built on shadcn/ui, from a simple email-confirmation form to a multi-step verification-code flow.

How it works

Three steps to working code

Install a block and the files land in your repository. Nothing calls back to us.

  1. terminal

    $ npx shadcn@latest add @shadcnstore/forgot-password-page-1

    ✓ Checking registry

    ✓ Installing dependencies

    01

    Run one command

    Every preview above prints its own. The CLI writes the block and the components it needs into your project.

    Installation docs
  2. your project 3 files added

    components/

    ├─ ui/

    ├─ button.tsx

    └─ navigation-menu.tsx

    └─ forgot-password-page-1.tsx

    02

    Get real files

    React, TypeScript and Tailwind v4, with no framework imports. Next.js, Vite, Remix and Astro all work.

  3. forgot-password-page-1.tsx

    <Menu.Trigger

    - asChild

    + render={<button />}

    />

    03

    Edit it as your own

    Built on Base UI, not Radix, so keyboard and focus behaviour come from the primitive.

Blocks that hold state already carry the use client directive the Next.js App Router needs.

Guide

A reset flow is four screens, and most implementations design two of them. The request, the confirmation, the new password and the failure. These six cover all four, including the expired link, which is the screen people actually reach.

The six recovery layouts#

  • Forgot Password Page 1: the full four-step flow covering email, one-time code, new password and confirmation. Free.
  • Forgot Password Page 2: a simple reset request with an email confirmation screen.
  • Forgot Password Page 3: the multi-step reset with a verification code between the request and the new password.
  • Forgot Password Page 4: the four-step flow with labelled fields and a resend-code action.
  • Forgot Password Page 5: a two-column layout with an illustration.
  • Forgot Password Page 6: a split-screen flow across the email, code, new password and success states.

Never say whether the address exists#

Every one of these screens returns the same confirmation whether or not the email is registered. A different message turns the form into an account enumeration tool, which is a real vulnerability disguised as helpfulness.

The confirmation wording still has to feel like an answer, though, or people submit again. Saying that a link has been sent if an account exists, and naming how long it takes to arrive, does both jobs.

A link is fewer steps and works badly when somebody requests it on a desktop and opens their mail on a phone. A code, as in Forgot Password 3, keeps the whole flow in one tab, which suits products where people already receive codes for other reasons. Introducing a second channel purely for resets adds a support burden most small products do not want.

This is the one that gets skipped, and the one most people hit, because reset emails sit unread for a day. The expired state here is designed rather than a generic error, and it offers a fresh link from the same screen instead of sending somebody back to the beginning to type their address again.

The new password step#

Requirements appear before the field is filled rather than as an error afterwards, and the strength indicator updates as somebody types. A reset is the worst moment to discover a rule, because the person is already locked out and already irritated. Confirming the new password is optional here; a reveal toggle solves the same problem with less typing.

Where recovery sits in the account flow#

It is reached from the login form and returns there on success. It shares its layout language with the signup form and the verification screens, so an account flow keeps one design from first visit to recovery.

FAQ

Password Recovery questions, answered

What people ask before choosing a block from this collection.

No. Every one of these screens returns the same confirmation whether or not the address is registered, because a different message turns the form into an account enumeration tool. The confirmation wording is written to still feel like an answer.
Forgot Password 3 is the multi-step version, taking a verification code before the new password step. It suits products that already send codes for other reasons, since introducing a second channel only for resets adds a support burden.
The expired state is designed rather than left as a generic error, and it offers to send a fresh link from the same screen. That is the state most reset flows skip, and it is the one users actually hit.
Forgot Password 1, the responsive recovery page, is free. The confirmation, verification-code, animated and two-column variants are Pro under the pricing licence.

Documentation

The components behind these blocks

How to install, customise and combine the shadcn/ui components this collection is built from.

Free & Premium Templates

Launch Faster with Complete Templates

Love these blocks? Get our free dashboard and landing page templates with 30+ pre-built pages and all the components you need. Premium templates with advanced features launching soon at $69.

Free Templates Now
30+ Pages Included
Premium Coming Soon