Boxless pricing where each tier is a ruled column: the name, an oversized figure with its period, a fit line, an inclusion list under a second rule and a pill CTA, with subgrid keeping every internal rule aligned across the three columns.
Boxless pricing for service work. Each tier is a ruled column rather than a card: the name, an oversized figure with its period, a fit line, then an inclusion list under a second rule with the CTA at the foot. Subgrid keeps every internal rule on the same line across all three tiers.
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/pricing69?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/pricing69?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/pricing69.tsx plus the badge7 eyebrow and button12 pill button it uses.
The installed file exports pricing69Demo alongside the block: the exact props behind the preview above. Spread it to get a working pricing section in one line.
import { Pricing69, pricing69Demo } from "@/components/beste/block/pricing69";
export default function Page() {
return <Pricing69 {...pricing69Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Pricing69 } from "@/components/beste/block/pricing69";
export default function Page() {
return (
<Pricing69
badge={{ label: "Ways to work" }}
heading="Three shapes of engagement, priced in daylight."
description="Every number below is what you would actually be invoiced."
tiers={[
{
name: "Full commission",
price: "€46k",
period: "per project",
fit: "A brand and its first year of pages, built as one system.",
includes: ["Named studio lead", "Guidelines written for your team"],
buttonLabel: "Start a commission",
href: "/contact",
featured: true,
},
]}
labels={{ includesTitle: "Included", note: "Rates hold for six months." }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow label rendered as a Badge7 |
heading | string | – | Section heading in the left column |
description | string | – | Supporting paragraph, right-aligned from md up |
tiers | PricingTier[] | [] | One ruled column per tier; set featured on the recommended one |
labels | Pricing69Labels | {} | Fixed strings that are not content: the inclusion heading and closing note |
className | string | – | Extra classes for the outer <section> |
type PricingTier = {
name: string;
price: string;
period: string;
fit: string;
includes: string[];
buttonLabel: string;
href: string;
featured?: boolean;
};
type Pricing69Labels = {
includesTitle?: string;
note?: string;
};featured switches that tier's CTA from tone="outline" to solid. It is the only signal for the recommended plan: no ribbon, no badge, no coloured card.price is a string, so a tier can read €46k, From €7.5k or Talk to us without the block doing any currency formatting.md:grid-rows-[repeat(6,auto)] and each tier spans all six with md:row-span-6 md:grid-rows-subgrid, so the price, the fit line, the inclusion rule and the CTA each sit on one shared line even when one fit line wraps to two.md:gap-y-0: a row gap on the container would be inserted between all six shared tracks, not between tiers. Vertical rhythm inside a tier comes from the elements' own margins.md the tier falls back to flex flex-col in normal flow, since there is only one column and nothing to align against.border-t rule and the inclusion list opens on a second one, which is what keeps three tiers reading as one table rather than three competing cards.pricing65
Three monochrome engagement tiers with editorial big-number pricing and an inverted featured plan.
pricing42
Single plan pricing with features organized into separated category groups. Perfect for products with many features to categorize.
pricing24
Startup-focused pricing tiers based on funding stage from bootstrapped to Series B+. Perfect for B2B tools offering startup programs.