Browse the docs
Blocks
Whole page sections, assembled from the components. A block is a starting point rather than an API: copy it, then rewrite the copy, the links, and the layout until it is yours.
Each type has alternatives — pick the one closest to what you're building.
12 groups · 25 blocks
Header2
Hero3
Features3
Stats2
Logo cloud1
Testimonials2
Pricing2
FAQ2
Call to action2
Auth2
App shell2
Footer2
How blocks differ from components
A component has a stable API you pass props to. A block has no props at all: the content is written directly into the markup, because you are going to replace it anyway. Nothing imports a block twice.
That also means blocks are not covered by the zero-dependency contract in the
way components are. They import the components they use, and they expect those
to exist at @/components/ui/ — adjust the paths to wherever you put them.
Assembling a page
Blocks stack in the obvious order, and none of them set a width or a background, so the page shell is yours:
export default function Page() {
return (
<div className="min-h-screen bg-surface text-fg">
<HeaderNav />
<main>
<HeroSplit />
<FeaturesGrid />
<StatsRow />
<TestimonialsQuote />
<PricingCards />
<FaqAccordion />
<CtaBanner />
</main>
<FooterColumns />
</div>
)
}For AI agents
Every block is served as plain text, the same way components are:
https://presetui.com/r/blocks/hero-split.txt