Marketing
Section
A band of a marketing page with one vertical rhythm and one content width, plus Section header for the eyebrow, title, lead and actions. Stacked sections keep even spacing without margins of their own.
npx prodular-ui add sectionHero and a section
A large centered hero with an announcement, then a muted section with a divider. The gutter, widths and spacing come from Section.
NewRelay Analyst answers questions about your receivables
Get paid on time without chasing anyone
Relay sends invoices, reminds customers before they are late and reconciles every payment with your ledger.
Collections
Reminders that sound like you
Set the tone once. Relay writes each reminder from the invoice, the customer's history and your notes.
- Paid on time
- 87%
- Days to pay
- 21
- Hours saved a month
- 34
import { ArrowRightIcon } from "lucide-react"
import { Announcement } from "@/components/ui/announcement"import { Button } from "@/components/ui/button"import { Section, SectionHeader } from "@/components/ui/section"
export default function SectionPage() { return ( <div className="w-full overflow-hidden rounded-xl border bg-background"> <Section size="lg"> <div className="flex flex-col items-center gap-6"> <Announcement badge="New" href="#"> Relay Analyst answers questions about your receivables </Announcement> <SectionHeader as="h1" size="lg" align="center" title="Get paid on time without chasing anyone" lead="Relay sends invoices, reminds customers before they are late and reconciles every payment with your ledger." actions={ <> <Button size="lg">Start free trial</Button> <Button size="lg" variant="ghost"> Book a demo <ArrowRightIcon data-icon="inline-end" /> </Button> </> } /> </div> </Section> <Section tone="muted" divider> <SectionHeader eyebrow="Collections" title="Reminders that sound like you" lead="Set the tone once. Relay writes each reminder from the invoice, the customer's history and your notes." /> <dl className="grid divide-y rounded-xl border bg-card sm:grid-cols-3 sm:divide-x sm:divide-y-0"> {[ ["Paid on time", "87%"], ["Days to pay", "21"], ["Hours saved a month", "34"], ].map(([label, value]) => ( <div key={label} className="flex flex-col gap-1 p-6"> <dt className="text-sm text-muted-foreground">{label}</dt> <dd className="text-3xl font-semibold tracking-tight tabular-nums">{value}</dd> </div> ))} </dl> </Section> </div> )}Anatomy
<Section size="lg"> <SectionHeader as="h1" size="lg" align="center" title="..." lead="..." actions={<Button>Start</Button>} /></Section><Section tone="muted"> <SectionHeader eyebrow="Collections" title="..." /> {content}</Section>Guidance
Use it when
- Every band of a landing or marketing page, so spacing and widths stay the same from top to bottom.
- size lg for the hero and the final call to action, default for the rest, sm for logo strips.
- SectionHeader at the top of each section; size lg and as h1 only in the hero.
Avoid
- Margins between sections. Section's padding is the rhythm.
- Inside the app. Use Page header and the App shell there.
Rules for AI agents
Published in llms-full.txt and the registry, so coding agents follow them when they build with this component.
- Build pages as a stack of Section elements. Do not add margin or padding classes for vertical spacing.
- Use width narrow for text-heavy sections like FAQ, wide for bento grids and product frames.
- tone muted alternates bands; add divider when two sections share the same tone.
- SectionHeader adds space under itself only when content follows, so headers alone stay tight.
- Write titles as sentences in sentence case, leads as one or two plain sentences. For a dark band, wrap the section in an element with className dark and the page's data-theme.
API
Section
| Prop | Type | Default | Description |
|---|---|---|---|
| size | "sm" | "default" | "lg" | "none" | "default" | Vertical padding that scales with the screen. |
| width | "narrow" | "default" | "wide" | "full" | "default" | Content width: 48, 72 or 80rem, or the full screen. |
| tone / divider | "default" | "muted" / boolean | Background and a hairline on top. |
SectionHeader
| Prop | Type | Default | Description |
|---|---|---|---|
| eyebrow / title / lead / actions | ReactNode | The parts of the heading. | |
| align / size / as | "start" | "center" / "default" | "lg" / "h1" | "h2" | "h3" | "start" / "default" / "h2" | Alignment, title scale and heading level. |
sectionContainer
| Prop | Type | Default | Description |
|---|---|---|---|
| ({ width }) | string | The container classes, for your own full-width parts. |