shadcn.io is not affiliated with official shadcn/ui
Audience Tabs Pricing Block for React
Three large audience tiles in the header row (freelancer, studio, agency) that open their own plans: cells that share hairlines on desktop, one plan at a time behind a segment group on a phone.
Installation
Overview
Show the right plans to the right audience with this tabbed pricing section, shown here for Framewell, a design review tool. The audiences lead: three tiles (Freelancer, Studio and Agency, each with an icon and a line on who it's for) sit in the header row beside the headline as Tabs on shared hairlines, the chosen tile tinted and capped by a line. Each tile opens its own three plans in a ruled band between the page's rails, with + marks on its corners: cells that share hairlines, each with its name, a one-line description, a per-editor price (or Free, or Custom), a Shine Button call to action and a feature list that builds on the plan before it. The most chosen plan in each audience is tinted, carries an outline badge and the only filled button. On a phone the tiles shrink to icons and names, and the three plans become one: a Segment Group switches between them, opening on the most chosen. Built with Tabs, Segment Group, Badge, Guides, Shine Button and Lucide icons, with CSS transitions only. For multi-product SaaS, tools that sell to freelancers and companies alike, and any pricing that depends on who is buying.
FAQ
How do I change the audiences and their plans?
Edit the AUDIENCES array at the top of the file. Each audience has an id, the tile's label and who line, a Lucide icon and its plans. A plan has its name, description, price per editor a month, featureHeading and features, the call to action's cta and href, and popular for the tinted plan. A price of 0 shows "Free" and null shows "Custom". Keep three plans per audience so the cells fill the row, and three audiences so the tiles fill the header.
How do I connect the plan buttons to checkout or sales?
Each call to action is a real link to its plan's href: send self-serve plans to checkout with the audience and plan in the address (/checkout?audience=studio&plan=studio) and the custom one to your contact form.
It's a ShineButton with render set to an a element and nativeButton={false}.
Every button names its plan for screen readers, as in "Start 14-day trial, Studio plan".
Are the audience tiles accessible?
Yes. They're real tabs: a tab list named "Audience" whose tabs each control a panel, so a screen reader announces the tab, its position and the panel it opens. Tab reaches the selected audience, the arrow keys move between audiences, and Tab moves on into the open panel. The chosen tile is marked by its tint and the line across its top, not by colour alone. In each panel the plans are h3 headings under the section's h2, prices are read with their unit ("$29 per editor per month"), and the most chosen plan's badge is text.
How do the plans fit a phone?
Below the md breakpoint the three plan cells become one. A segment group named after the audience ("Studio plans") sits above the panel: a radio group, so the arrow keys move and choose, and the chosen plan's cell is the only one visible, all three stacked in the same space so switching never moves the page, with its call to action a short scroll from the header. It opens on the most chosen plan, and each audience remembers the plan its visitor picked while they look at the others. The tiles keep their icon and name and drop the line under it, so the three fit a 320px screen.
How do I open another audience first, or link to one?
defaultValue="freelancer" on Tabs to another audience's id.To open a tab from a link, such as /pricing?audience=agency, read the parameter and make the tabs controlled: pass the selected audience and update it when the visitor picks another, so the address and the tab stay in step. Only the open panel is rendered.When should I use audience tabs instead of one row of tiers?
Use audience tabs when your customers are distinct groups whose plans differ in price model, limits and features, such as a freelancer paying for one seat and an agency paying per editor with client portals: each group sees only the plans meant for it, and picking the tile is the first step of choosing. If everyone follows the same upgrade path, one row of tiers or a comparison table is simpler and lets visitors see every plan at once.
Related
- Pro
Per-Seat Pricing by Seat Type
Seats and teamsSeat-type pricing with a stepper for each type: Full, Collaborator and Viewer seats at different prices, a stacked bar of the seat mix, a live monthly total and, on a phone, a sticky total bar.
- Pro
Three Columns Pricing
Plan cardsThe canonical three-column pricing section for a team knowledge base: Personal, Team and Company cells under a monthly and yearly switch, each outlined by hairlines that overshoot its corners, the recommended plan raised, one plan at a time on phones.
- Pro
Plan Recommender Pricing
Plan findersA needs checklist for picking a plan: tick what you need and the cheapest plan that covers every need lights up with its price, while each need says which plan it starts at.
- Pro
Comparison Table Pricing
Comparison tablesFour plans compared feature by feature in one table whose hairlines meet the page rails, with a billing switch, a tinted popular column and, on a phone, a plan switch that keeps the feature column beside one plan.
- Pro
Accordion Plans Pricing
Plan rowsThree plan rows for an email API, each its own band with its price and call to action in view, opening in place to list its features, with a monthly and annual switch in the header row.
- Pro
Billing Toggle Pricing
Billing switchesThree plan cards under a monthly and yearly switch that wears its saving in the header row, with prices that roll to their new amount and each plan a card in a card.