Monochrome 404 led by the status code set as an oversized numeral, with the statement and pill call to action on one side of a hairline rule and the explanation plus display-type links on the other.
The status code set as an oversized numeral carries this page: under a hairline rule the statement and its pill call to action sit on one side, the explanation and a row of display-type links on the other.
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.
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
npx shadcn add "https://ui.beste.co/r/error29?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/error29?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/error29.tsx, plus the two design-system primitives it renders through: badge7 for the parenthetical eyebrow and button12 for the pill call to action.
The installed file exports error29Demo alongside the block: the exact props behind the preview above. Spread it to get a working error page in one line.
import { Error29, error29Demo } from "@/components/beste/block/error29";
export default function NotFound() {
return <Error29 {...error29Demo} />;
}Then replace the demo with your own props. Keep the link labels to one word each, since they render at display size:
import { Error29 } from "@/components/beste/block/error29";
export default function NotFound() {
return (
<Error29
badge={{ label: "Four Oh Four" }}
code="404"
heading="Nothing was ever kept at this address."
description="No redirect, no archive copy, no quiet replacement."
button={{ label: "Begin again", href: "/" }}
labels={{ linksTitle: "Elsewhere" }}
links={[
{ label: "Work", href: "/work" },
{ label: "Writing", href: "/writing" },
{ label: "Contact", href: "/contact" },
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Parenthetical eyebrow above the numeral |
code | string | – | Status code set as the oversized numeral |
heading | string | – | Statement under the rule, rendered as an h1 |
description | string | – | Explanatory paragraph in the right column |
button | ActionLink | – | Pill call to action under the statement |
labels | { linksTitle?: string } | {} | Eyebrow above the link row |
links | ActionLink[] | [] | Display-type links in the right column |
className | string | – | Extra classes for the outer <section> |
type ActionLink = {
label: string;
href: string;
};text-8xl, rising to text-9xl from the md breakpoint, with tightened leading and tracking so it reads as a graphic element rather than a heading. The real h1 is the statement below it.lg breakpoint.<strong> emphasis treatment.error19
Monochrome 404 built on oversized display type: a parenthetical eyebrow, a display headline with a muted emphasis clause, a pill call to action, and a ruled index of every section on the site.
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.
error15
Server error page with a square eyebrow and status code over a hairline rule, a bold accent headline, a bordered incident table of reference, timestamp and service rows, and a retry seal button beside a status page link.
error32
Monochrome 404 for a renamed article: a display headline and pill call to action above three recent entries, each a full-colour image tile with a plain date line and a bold title.
error24
Studio 404 that recovers a dead project URL: a square eyebrow and status code over a hairline rule, an accent headline and seal button, then two large project cards with category lines and hover arrow chips.
error6
The smallest possible 404: the status code and the message sit on one line separated by a vertical rule, stacking on mobile, with a single outline button underneath.