Error 500
Something on our side failed while loading this page. Nothing you were working on has been lost, and the request has already been reported to the engineer on call.
Booking service
99.98%Last 45 days
Quote the reference above if you write to us and we can pull the exact request out of the log.
A calm server-error page with a monospace code, an oversized light heading, recovery actions, an image tile floating a live uptime strip, and a hairline table carrying the incident reference.
A calm server-error page with a monospace code, an oversized light heading, recovery actions, an image tile floating a live uptime strip and a hairline table carrying the incident reference.
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/error35"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/error35"This installs the block to components/beste/block/error35.tsx, the indicator14 uptime piece it floats on the tile (installed to components/beste/piece/indicator14.tsx), and the button21 component it uses for the actions.
The installed file exports error35Demo alongside the block: the exact props behind the preview above. Spread it to get a working error page in one line.
import { Error35, error35Demo } from "@/components/beste/block/error35";
export default function ErrorPage() {
return <Error35 {...error35Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Error35 } from "@/components/beste/block/error35";
import { Indicator14 } from "@/components/beste/piece/indicator14";
export default function ErrorPage() {
return (
<Error35
code="Error 500"
heading="That one is ours, not yours"
description="Nothing you were working on has been lost, and the request has already been reported."
buttons={[
{ label: "Try again", href: "/" },
{ label: "Back to the workspace", href: "/app" },
]}
references={[
{ label: "Reference", value: "SIR-9F4C-2201" },
{ label: "Time", value: "14 May 2026, 09:41 UK" },
]}
media={<Indicator14 title="Booking service" uptime="99.98%" range="Last 45 days" />}
image={{ src: "/backdrops/blue.jpg", alt: "Soft blue gradient backdrop" }}
footnote="Quote the reference above if you write to us."
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
code | string | – | Small status line above the heading |
heading | string | – | Error heading, rendered as the page h1 |
description | string | – | Centered supporting paragraph, capped at max-w-xl |
buttons | ActionLink[] | [] | Recovery actions, first solid and the rest outlined |
references | Reference[] | [] | Incident details in a hairline table |
media | ReactNode | – | Live asset on the tile, indicator14 in the demo |
image | { src: string; alt: string } | – | Backdrop behind the media tile |
footnote | string | – | Small line under the reference table |
className | string | – | Extra classes for the outer section |
type ActionLink = {
label: string;
href: string;
};
type Reference = {
label: string;
value: string;
};font-mono, which is deliberate: an incident id is a token to be copied character by character, and a fixed-width face makes it readable over the phone.dl, and it renders whatever strings you pass. Wiring it to a real error boundary means passing the caught request id through as references.primary, later ones are outline.max-w-3xl cap while the copy above sits at max-w-2xl, which keeps the page centered without three different widths competing.border-t with last:border-b, closing the table at the bottom.