Minimal centered 404 page with a large error code, a heading, a short explanation, two call-to-action buttons, and a divided row of popular page links underneath.
A minimal 404 page built around a single centered column: an oversized error code, the heading, a short explanation, a button row, and a divided footer of popular page links. Every string is a prop, so the same block covers 404, 403, and 500 screens.
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/error1"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/error1"This installs the block to components/beste/block/error1.tsx, plus the button shadcn/ui primitive it uses for the call-to-action row.
The installed file exports error1Demo alongside the block: the exact props behind the preview above. Spread it into Next.js's not-found.tsx to get a working error page in one line.
import { Error1, error1Demo } from "@/components/beste/block/error1";
export default function NotFound() {
return <Error1 {...error1Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { House } from "lucide-react";
import { Error1 } from "@/components/beste/block/error1";
export default function NotFound() {
return (
<Error1
code="404"
heading="This page could not be found"
description="The page you are looking for was moved, renamed, or never existed."
buttons={[
{ label: "Back to home", href: "/", icon: House },
{ label: "Contact support", href: "/support", variant: "outline" },
]}
linksLabel="Popular pages"
links={[
{ label: "Documentation", href: "/docs" },
{ label: "Pricing", href: "/pricing" },
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
code | string | – | Oversized status code shown above the heading |
heading | string | – | Main page heading, rendered as an h1 |
description | string | – | Explanatory paragraph under the heading |
buttons | ActionButton[] | [] | Call-to-action row under the description |
linksLabel | string | – | Caption above the quick link row |
links | QuickLink[] | [] | Quick links in the footer row |
className | string | – | Extra classes for the outer <section> |
type ActionButton = {
label: string;
href: string;
variant?: "default" | "outline" | "secondary" | "ghost";
icon?: LucideIcon;
};
type QuickLink = {
label: string;
href: string;
};heading plus buttons is a valid configuration.icon is a Lucide component reference), so the icon side is fixed to the left of the label and there is no separate external-link flag.group/error1 group, so nesting this block inside another hover group will not trigger it.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.
error12
Blog 404 that turns a dead post URL into reading: centered messaging above a three-up article grid with cover images, category badges, dates, and read times.
error13
404 page that doubles as a sitemap: left-aligned messaging over four columns of grouped section links, so visitors on a large site can jump straight to the area they wanted.
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.
error4
404 page that recovers the visit with a grid of destination cards, each with an icon, title, description, and hover arrow, followed by a centered row of fallback buttons.
error10
Screen-height 404 with a full-bleed background photo under a dark overlay, centered white messaging, and a solid plus outline button pair sized for marketing sites.