A calm not-found page with an error eyebrow, an oversized light heading and recovery actions on the left, beside a hairline list of the destinations people usually need instead.
Calm not-found page: an error eyebrow over an oversized light heading, a reassuring line and two recovery actions on the left, beside a hairline list of the destinations people usually needed instead, each with its own one-line explanation and a hover arrow.
Free block
This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.
Radix flavor
npx shadcn add "https://ui.beste.co/r/error34"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/error34"This installs the block to components/beste/block/error34.tsx plus the badge23 and button21 components it uses for the eyebrow and the actions.
The installed file exports error34Demo alongside the block: the exact props behind the preview above. Spread it to get a working 404 in one line.
import { Error34, error34Demo } from "@/components/beste/block/error34";
export default function NotFound() {
return <Error34 {...error34Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Error34 } from "@/components/beste/block/error34";
export default function NotFound() {
return (
<Error34
badge={{ label: "Error 404" }}
heading="This page moved, or never existed"
description="Nothing is broken on your side, and your workspace is untouched."
buttons={[
{ label: "Back to home", href: "/" },
{ label: "Search the docs", href: "/docs", tone: "outline" },
]}
linksLabel="Where people usually go from here"
links={[
{
title: "Product tour",
description: "See how the whole workflow sits on one surface.",
href: "/tour",
},
{
title: "Help centre",
description: "Setup guides, imports, and answers from the team.",
href: "/help",
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Error eyebrow above the heading, rendered via Badge23 |
heading | string | – | Oversized h1 explaining what happened |
description | string | – | Reassuring paragraph under the heading |
buttons | ActionLink[] | [] | Recovery actions, each with its own tone |
linksLabel | string | – | Label above the destination list |
links | HelpLink[] | [] | Hairline rows of likely destinations |
className | string | – | Extra classes for the outer <section> |
type ActionLink = {
label: string;
href: string;
tone?: "primary" | "neutral" | "outline";
};
type HelpLink = { title: string; description: string; href: string };badge.label, not in a giant 404 numeral, so the heading can carry the sentence a lost visitor actually needs and the code stays a quiet kicker.h1 at the set's hero scale. Dropping this block into a page that already has an h1 means overriding one of them for a sane outline.next/link around the whole row, with the title, its description, and the arrow all reacting from one named group, so the hit target is the full strip rather than the title alone.buttons renders through Button21 with the tone taken from the data, which is how the demo gets a solid first action and a hairline second without a variant prop on the block.not-found.tsx on the server.links empty leaves the left column alone, and the md:grid-cols-2 split simply renders with an empty right side.error14
Editorial 404 with a square eyebrow and status code over a hairline rule, an oversized accent-highlighted headline, and a ruled index of the sections visitors reach for next.
error20
Two-column 404 in a quiet monochrome language: a parenthetical eyebrow, a two-line display headline, a pill call to action and an oversized report-the-link email on the left, a tall captioned photograph on the right.
error3
Two-column 404 page with the error code, heading, explanation, buttons, and a small note on one side, and a full-bleed image that scales on hover on the other. The image side can be flipped with a prop.
error36
A not-found page that offers a way forward rather than a way back, pairing an oversized light heading with an image tile floating a live search panel and a two-column hairline list of likely destinations.