Migration, support and every module are in the number below. There is no implementation fee, no per-site charge, and no line item that appears in your second year.
One clinic, one rota, no card at any point.
Billed monthly, cancel any time
The whole product for a working practice.
Billed monthly, cancel any time
For groups answering to a board and an auditor.
Billed monthly, cancel any time
Registered charities and single-handed practices pay nothing. Ask, and we will not make you prove it twice.
The awkward ones are answered here rather than in a call, because the answer does not change depending on who is asking.
Still working out which tier fits?
Talk to the teamAnyone who signs in. Members, families and referrers do not, so a practice of nine people with four thousand members pays for nine.
Practice
Most chosenThe free tier is a real product, not a countdown. Run a single site on it for as long as you want and move up the week it stops being enough.
No card required · Cancel from settings
A light editorial pricing page: pill navbar, three per-seat tiers on a monthly and yearly toggle, a sticky split FAQ answering the billing questions, a closing panel floating a live plan card, and a newsletter footer.
Composed from 5 blocks. Installing this page installs all of them, plus the pieces and primitives they use.
Built in the Sirius collection.
A light editorial pricing page: a pill navbar, three per-seat tiers on a monthly and yearly toggle, a sticky split FAQ answering the billing questions, a closing panel floating a live plan card, and a newsletter footer. Five blocks, one install, and the shortest page in the set.
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.
npx shadcn add "https://ui.beste.co/page/r/pricing1?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the page to components/beste/page/pricing1.tsx and everything behind it: the five blocks it composes (navbar73, pricing71, faq79, cta76, footer120), the money22, button21 and badge23 components they use, and the shadcn/ui tabs and button primitives. Nine files, no follow-up installs.
The installed file exports pricing1Demo alongside the page: the exact props behind the preview above. Spread it to get a working page in one line.
import { Pricing1, pricing1Demo } from "@/components/beste/page/pricing1";
export default function Page() {
return <Pricing1 {...pricing1Demo} />;
}Each section is a separate prop, so the usual next step is to keep the demo and replace one section at a time. On this page that is nearly always pricing.
import { Pricing1, pricing1Demo } from "@/components/beste/page/pricing1";
export default function Page() {
return (
<Pricing1
{...pricing1Demo}
pricing={{
label: "Pricing",
heading: "Per seat, and the yearly price is two months off.",
plans: [
{ name: "Starter", monthly: "$12", yearly: "$120", description: "Up to five seats." },
{ name: "Studio", monthly: "$19", yearly: "$190", description: "Everything, no seat cap." },
{ name: "Group", monthly: "Talk to us", yearly: "Talk to us", description: "Invoicing and SSO." },
],
}}
/>
);
}Every prop is the full prop object of the block that renders that section, so anything the block accepts is accepted here.
| Prop | Type | Default | Description |
|---|---|---|---|
navbar | ComponentProps<typeof Navbar73> | – | Pill navbar |
pricing | ComponentProps<typeof Pricing71> | – | Three tiers on a monthly and yearly toggle |
faq | ComponentProps<typeof Faq79> | – | Sticky split FAQ for billing questions |
cta | ComponentProps<typeof Cta76> | – | Closing panel floating a plan card |
footer | ComponentProps<typeof Footer120> | – | Newsletter footer |
className | string | – | Extra classes for the page's outer wrapper |
| Section | Block | Notes |
|---|---|---|
| Navbar | navbar73 | Not sticky; the page is short enough to see whole |
| Pricing | pricing71 | The toggle is tabs inside the block, hence the dependency |
| Questions | faq79 | Given bg-muted/40; the heading column sticks while answers scroll |
| Closing | cta76 | Rendered on the inverted band, floating a live plan card |
| Footer | footer120 | Newsletter capture |
faq removes that section entirely rather than rendering an empty one.pricing71, not something the page lifts. Both prices are passed per plan and the block decides which to show.className="bg-muted/40" on the FAQ after spreading faq, so a className passed inside that prop is overridden.dark class, which swaps the theme tokens for that subtree, so the plan card floating inside it inverts with the band rather than staying light.navbar73
A navbar with a dark announcement strip above a hairline-bordered row carrying a lowercase wordmark, uppercase links, a sign-in link, an accent call to action, and a mobile menu.
pricing71
A three-tier pricing grid whose monthly and yearly toggle swaps both the light figure and the billing note on every card, with the recommended tier outlined in the accent.
faq79
A two-column FAQ with a sticky eyebrow, light heading, and support call to action on the left, and an interactive accordion of questions on the right.