Skip to content
Twentyfirst UIPro

Plan Card

Commerce · PlanCard

View as Markdown

Pricing tier for plan pages and upgrade dialogs. Wrap several in .tf-plans for an even grid.

Props: name, text, price (number, 0 = "Free", null = "Let’s talk"), was (struck price, e.g. monthly vs yearly), per, features (strings; prefix "-" for not included), featured (dark card + flag), flag, current (disables the button), disabled (disables the button, e.g. while a checkout starts or when the plan is not available), cta, onPick.

  • One featured plan, the one most customers should pick. It inverts to the frame color.
  • List the same features in the same order on every card, so rows can be compared; mark missing ones instead of leaving them out.
  • Pair with a Segmented Monthly / Yearly switch that states the saving.
StarterFor small teams getting organised
€9per seat / month, billed yearly€12
  • 3 projects
  • 1 agent · Haiku only
  • Shop with up to 50 products
  • Approvals and audit log
  • SSO
BusinessSecurity, control and an SLA
Let’s talk
  • Everything in Team
  • SSO and SCIM
  • EU data residency
  • 99.9% uptime SLA

Props

PlanCard

PropTypeNotes
namestringRequired
text?string
pricenumber | null | ReactNodeA number is formatted as money (0 = "Free", null = "Let's talk"); any other node is shown as it is, e.g. a placeholder ("—") or a price the app formatted itself.
pricePrefix?ReactNodeBefore the price, e.g. "from".
priceNote?ReactNodeUnder the price: net or gross, billed yearly, VAT note …
was?number
per?string
features?string[]
featured?boolean
flag?string
current?boolean
cta?string
disabled?booleanDisable the button, e.g. while a checkout starts or when the plan cannot be picked.
onPick?() => void
href?stringThe action as a link (checkout or sign-up page), with `linkAs` for a router's link.
linkAs?ElementType
className?stringExtra class on the root element.
style?CSSPropertiesInline style on the root element.