crucıble

Agency

A one-page site for a creative / development studio: a sticky Lodestar pill header, an oversized editorial hero with a word-by-word blur reveal and a pulsing availability chip, a staggered selected-work grid of tilting Facet tiles with seeded procedural cover art and hover reveals, numbered services that expand to deliverables, Casebook client results, a pinned Drawbench process, the Guild team, a routed Parley contact form and a Tailstock wordmark footer — every string a prop, any section droppable, one vermilion accent flowing through every block.

motionpro

Installation

CLI

npx shadcn@latest add @crucible/agency

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
brandstring"Marrow"Studio name: nav wordmark, footer wordmark, copyright.
accentColorstring"#ff6b4a"Signature accent hex shared by every section, so the page reads as one brand.
headerAgencyHeaderConfig | falseSticky pill header (composes lodestar). false hides it.
heroAgencyHeroConfig | falseEditorial hero. false hides it.
workAgencyWorkConfig | falseSelected-work grid (tiles compose facet). false hides it.
servicesAgencyServicesConfig | falseNumbered, expandable services list. false hides it.
resultsBlockConfig<CasebookProps>Client results (composes casebook). false hides it.
processBlockConfig<DrawbenchProps>Process (composes drawbench). false hides it.
teamBlockConfig<GuildProps>Team / studio (composes guild). false hides it.
contactBlockConfig<ParleyProps>Closing contact section (composes parley). false hides it.
footerBlockConfig<TailstockProps>Footer (composes tailstock). false hides it.
scrollerReact.RefObject<HTMLElement | null>the windowScroll container the page lives in (e.g. a boxed preview). The header sticks inside it, the process section pins inside it and nav links scroll it.
refReact.Ref<AgencyTemplateHandle>Imperative handle (replay(), scrollToSection()). React 19 ref-as-prop.
classNamestringExtra classes for the root.
Also accepts all props of Omit<React.ComponentPropsWithoutRef<"div">, "children" | "results"> — they pass through to the underlying element.

Honors prefers-reduced-motion with a designed static fallback, and passes className through.