crucıble

Misfire

A full-width 404 section in three variants — a knock-over-able physics "404" pile (Scree), a sonar scope behind a "Signal lost" readout (Sonar), and a split-flap board that keeps trying the route and lands on NOT FOUND (Terminus). Real h1, labelled search form, home link, suggestion chips; settled frames under reduced motion.

canvaspro

Installation

CLI

npx shadcn@latest add @crucible/misfire

Manual — install dependencies, then copy the source

npm install motion matter-js

Props

PropTypeDefaultDescription
variantMisfireVariant"pile"Visual treatment: - pile — a "404" whose digits are physics bodies you can knock over and fling. - signal — a sonar scope behind a "Signal lost" readout with a blinking status. - board — a split-flap board that keeps trying the path and lands on NOT FOUND.
pathstring"/old-page"The requested path that could not be found — shown in the copy/visual.
homeHrefstring"/"Primary "Back home" link target.
homeLabelstring"Back home"Label of the home link.
onSearch(query: string) => voidCalled with the trimmed query when the search form is submitted. When omitted the form submits natively (GET ?q= to homeHref).
searchPlaceholderstring"Search the site"Placeholder of the search field.
suggestionsMisfireSuggestion[][]Link chips offered as likely destinations.
titlestring"Page not found"Real h1 text — always present for assistive tech and SEO.
descriptionstringper-variant lineShort copy under the heading.
accentColorstring"#7dd3fc"The single accent hue (pile highlight digit, scope phosphor, status lamp).
cyclenumber4000Board variant: ms for one full try-and-fail cycle.
pausedbooleanfalseFreeze every animated piece at its settled frame.
Also accepts all props of Omit<React.ComponentPropsWithoutRef<"section">, "title" | "onSubmit"> — they pass through to the underlying element.

Honors prefers-reduced-motion with a designed static fallback, pauses offscreen and on hidden tabs, and passes className through.