shadcn.io is not affiliated with official shadcn/ui
Group Buy Pricing With Email Chips Block for React
A group-buy price: add teammates' emails as chips and the per-seat price steps down at 5, 10 and 25 seats, with a bar to the next drop, a live monthly total and a stack of the team.
Installation
Overview
Let buyers watch the price fall as they invite their team with this group-buy pricing section. A header row gives the headline and a key of the four rates, $12, $10, $8 and $6 a seat at 1, 5, 10 and 25 seats, with the rate the team has reached underlined as it changes. Below it, one hairline band holds two cells divided by a rule that meets the band's lines at + marks drawn by Guides. In the first, a labelled Input and an Add Button turn emails into removable chips, each with the teammate's initials, after an owner chip that can't be removed. In the second, a stack of initials, the per-seat price rolling to its new amount with Sliding Number beside the struck list price, the monthly total, a bar that fills toward the next drop with a line saying how many more teammates it takes, and a Shine Button that names the seat count, the block's only colored element. The page's top rule is the Guides spine. Built with Input, Button, Sliding Number, Shine Button, Guides, Lucide icons and Tailwind CSS, with CSS transitions only. For whiteboards, design tools, chat and any seat-based product that rewards bringing the whole team.
FAQ
How do I change the thresholds and prices?
Edit the RATES array at the top of the file: each entry is the seat count a price starts from and the price per seat. The key in the header, the price, the total, the bar and the sentence under it are all worked out from that list, so adding a fifth rate needs no other change. START holds the teammates already on the list when the page loads, and MAX_SEATS is where the form asks for a custom quote instead.
Does the lower price apply to every seat or only the new ones?
To every seat, which is what the copy says and what the arithmetic does: the total is the seat count times the rate the team has reached. Adding the fifth seat lowers all five to $10, so five seats cost $50 against $48 for four. If you'd rather charge each bracket's seats at their own price, replace rate.price * seats with a sum over the brackets.
How do I send the emails and the seat count to checkout?
The call to action is a real link whose text follows the seat count. It's a ShineButton with render set to an a element and nativeButton={false}. Build its href from emails, or post them from the form to your server, create the workspace with that many seats and send each address an invitation.
Is the chip list accessible?
Yes. The field has a visible label, the form submits on Enter, and an invalid or duplicate address puts a message under the field that the field is described by and a screen reader announces. Each chip is a list item with a remove button named for its address ("Remove maya.lindqvist@northwind.studio"), and after a removal focus returns to the field. The line under the bar is a polite live region, so each change to the rate is announced once; the stack of initials and the bar are decorative and hidden from assistive technology.
How does it look on a phone?
The two cells stack, the invitations first, and the chips wrap onto as many lines as they need. The price, the total, the bar and the call to action follow, and the call to action lands within the first screen and a half of an iPhone. The key in the header wraps under the headline with all four rates visible, and long addresses are cut with an ellipsis inside their chip.
Why ask for emails instead of a number of seats?
A number is easy to inflate and easy to forget; a list of people is concrete. Adding a teammate is also the first step of the invitation you want them to complete, so the price drop rewards the action that makes the product stick. Keep the field optional in your real flow: let people buy with the seats they have and invite the rest later.
Related
- Pro
Volume Discount Pricing With a Descending Chart
Seats and teamsPer-seat pricing that falls across four team-size brackets, drawn as a descending bar chart beside compact rows with the saving on each bracket and a call to action per row.
- Pro
Team Size Slider With Volume Discounts
Seats and teamsA seat calculator: a slider sets the team size with its count riding the thumb, ticks at the 10, 25 and 50 seat discounts, shortcuts to them, and a panel that rolls the seat price and monthly total.
- 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
Team Tiers With Avatar Clusters
Seats and teamsThree team-size plans, each opening with a cluster of avatars sized to its host range, then its per-host price, a call to action and its features, with a segmented plan switcher on a phone.
- Pro
Milestone Discount Pricing
Discounts and offersA slider-driven rate card for usage that gets cheaper at milestones: slide to a monthly volume and the label count rides the thumb, four rate zones show the current one, and the estimate and the next milestone update.
- Pro
Referral Rewards Pricing
Discounts and offersReferral pricing as a copyable invite link over a three-step reward track: friends invited and joined (2 of 3), the free months each step pays (1 month, 3 months, a year) and what's already earned.