An always-open FAQ that states four buying worries as quoted headings in a hairline matrix of cards, each answering in full and closing on a line of proof under a rule.
An always-open FAQ that states four buying worries as quoted headings in a hairline matrix of cards, each answering in full and closing on a line of proof under a rule.
Upgrade to Pro
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/faq83?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/faq83?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/faq83.tsx plus the badge23 and button21 components it uses for the eyebrow and the closing action.
The installed file exports faq83Demo alongside the block: the exact props behind the preview above. Spread it to get a working section in one line.
import { Faq83, faq83Demo } from "@/components/beste/block/faq83";
export default function FaqPage() {
return <Faq83 {...faq83Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Faq83 } from "@/components/beste/block/faq83";
export default function FaqPage() {
return (
<Faq83
badge={{ label: "The real questions" }}
heading="The four things everyone is actually worried about"
description="Nobody opens a demo call asking about feature parity."
items={[
{
index: "01",
worry: "We cannot afford a week of chaos while we switch",
answer: "One clinic goes live first while everything else carries on unchanged.",
proof: "Eleven practices, none of them closed for a day",
},
{
index: "02",
worry: "We will be locked in once our records are inside",
answer: "Thirty days' notice, no penalty, and a full export another system can import.",
proof: "Clause 6.3 and 6.5 of the agreement, in writing",
},
]}
closingLabel="Still carrying a worry that is not on this list?"
button={{ label: "Put it to an engineer", href: "/contact" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow above the hairline rule, rendered through Badge23 |
heading | string | – | Section heading in the left column of the header |
description | string | – | Supporting paragraph, right-aligned from md up |
items | Objection[] | [] | Worries, laid out two-up from md |
closingLabel | string | – | Prompt beside the closing action |
button | { label: string; href: string } | – | Closing action, right-aligned from md up |
className | string | – | Extra classes for the outer section |
type ActionLink = {
label: string;
href: string;
};
type Objection = {
index: string;
worry: string;
answer: string;
proof: string;
};worry as plain text or you will get doubled quotes.proof is required on every card, not optional. The block is built so that no objection is answered without something checkable underneath it.gap-px over a bg-border container with bg-card cells makes the background show through as one-pixel seams, and the container's overflow-hidden clips the corners so it reads as one panel.flex flex-col with the answer marked flex-1, so the proof lines up along the bottom across every card regardless of answer length.border-t, so the rule belongs to the proof rather than sitting as a divider in the card.md:grid-cols-2, which is why four items is the count it is tuned for. An odd count leaves the last card spanning one column with a gap beside it.index is copy, not a computed counter, so numbering survives reordering untouched.faq15
Clickable question cards that open answers in a modal dialog. Perfect for card-based layouts that need expanded views.
faq68
Two-column FAQ section with a badge, heading, and description on the left, and a stacked list of numbered question cards on the right. Each card opens to reveal a plain answer block below it with no separator line.
faq32
Cards with quote icons in corners, arranged in a grid. Elegant design for emphasizing key points with typography.