Monochrome 404 that hands the visitor a search field: a display headline with a muted emphasis clause, a rounded search bar with a circular submit seal wired to a callback, and a ruled list of the most travelled routes.
A monochrome 404 that hands the visitor a search field instead of an apology: a rounded search bar with a circular submit seal sits under the headline, followed by a ruled list of the routes people actually take.
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/error30?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/error30?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/error30.tsx, plus the badge7 design-system primitive it renders the parenthetical eyebrows through.
The installed file exports error30Demo alongside the block: the exact props behind the preview above. Spread it to get a working search page in one line.
import { Error30, error30Demo } from "@/components/beste/block/error30";
export default function NotFound() {
return <Error30 {...error30Demo} />;
}Routing is the caller's job, so wire onSearch to your search page:
"use client";
import { useRouter } from "next/navigation";
import { Error30 } from "@/components/beste/block/error30";
export default function NotFound() {
const router = useRouter();
return (
<Error30
badge={{ label: "Missing" }}
heading="Tell us what you came for <strong>and we will find it</strong>."
description="The address you used does not resolve to anything."
labels={{
placeholder: "Search the site",
suggestionsTitle: "Most travelled",
note: "Search covers every project, note and page we publish.",
}}
suggestions={[
{ title: "Recent projects", description: "The last twelve months of work", href: "/work" },
{ title: "How we price", description: "Bands, retainers and what changes them", href: "/pricing" },
]}
onSearch={(query) => router.push(`/search?q=${encodeURIComponent(query)}`)}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Parenthetical eyebrow above the headline |
heading | string | – | Headline HTML, rendered as an h1; <strong> marks the muted clause |
description | string | – | Explanatory paragraph under the headline |
labels | Error30Labels | {} | Field placeholder, list eyebrow, and the note under the field |
suggestions | SuggestionItem[] | [] | Ruled rows of suggested routes |
onSearch | (query: string) => void | – | Called on submit with the trimmed query |
className | string | – | Extra classes for the outer <section> |
type Error30Labels = {
placeholder?: string;
suggestionsTitle?: string;
note?: string;
};
type SuggestionItem = {
title: string;
description?: string;
href: string;
};form. Submitting prevents the default action and passes the trimmed query to onSearch, so nothing navigates by default and the preview above stays put.onSearch handler the form still submits harmlessly, which keeps the block safe to drop in before search exists.type="search", so browsers render their native clear affordance, and the placeholder doubles as its aria-label. The circular submit control carries its own written label for screen readers.group/error30 group.heading is injected with dangerouslySetInnerHTML and accepts inline HTML; text inside <strong> drops to muted grey. Keep the value under your own control, never user input.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.
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.
error2
Search-first 404 page: a controlled search field with a submit handler, plus a bordered list of suggested pages with titles, descriptions, and hover arrows.
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.
error29
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.
error33
Monochrome page for deliberately removed content: a display headline, a ruled record of when it was published, retired and why, then a pill link to the replacement beside an archive link.