Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Bundle Deal Pricing Block for React

Two products priced alone beside a bundle of both: the bundle leads on a raised card with the sum of the parts struck through, the bundle price at display size, and a list of features that collapses on phones.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Sell two products as one deal with this bundle pricing section, shown here for a documents and e-signature pair, Quayside Docs and Quayside Sign. A compact header says the bundle is one seat for both products and what it saves. Below it, a ruled grid with + marks on its corners: on one side, the bundle on a raised card in a card, with an outline Badge for the 20% saved, the sum of the two products struck through beside the bundle price at display size, the sum worked out in a line under it, and the section's only primary Shine Button; then a list of what only the bundle includes. On the other side, Docs and Sign sit as two compact cells, each with its price, a sentence, three features and an outline button. The bundle comes first on every screen, so a visitor meets the deal before the parts. On a phone its list of eight features shows five, then a ghost Button reveals the rest. Built with Badge, Button, Frame, Shine Button, Guides and Lucide icons, with CSS transitions only. For software suites, bundled subscriptions, two-product vendors and any offer that sells a package for less than its parts.

FAQ

How do I change the products and the bundle?

Edit the constants at the top of the file. PRODUCTS lists the two products: each has a name, a description, three features, a monthly per-user price, a button label and an href. BUNDLE has the name, the price, the features and its href. The struck sum, the saving per month and per year, and the percentage in the badge are worked out from the product prices and the bundle price, so they can't disagree with the numbers shown. Add a third product by adding to PRODUCTS; the sum follows, and the "Docs $15 + Sign $20" line names the first two, so change it with them.

How do I connect the buttons to checkout?

Every call to action is a real link. Each is a ShineButton with render set to an a element and nativeButton={false}. Give the bundle its own price in your billing provider rather than a coupon over two subscriptions: one subscription gives one invoice, as the header promises, and the discount can't be split by cancelling one product.

How does the feature list collapse on a phone?

Below the md breakpoint the bundle's list shows its first five features, and a ghost button reads "All 8 features"; pressing it shows the rest and changes to "Show fewer". The button reports aria-expanded and points at the list with aria-controls. VISIBLE_ON_PHONE sets how many show. From md the whole list is always shown in two columns and the button is hidden, so a laptop visitor never sees a disclosure. The bundle's price and button sit above the list, so the call to action is on the first screen of an iPhone.

How do screen readers read the struck-through price?

The struck sum is a real s element with hidden text around it, so a screen reader hears "Normally $35, now" before "$28 per user per month" rather than two unrelated prices. The bundle button's name says what it buys ("Get both for $28 a user"), and the two product buttons say "Get Docs" and "Get Sign". Each product and the bundle is headed by an h3 under the section's h2, and feature lists are real lists. The tint and the badge aren't the only mark of the bundle: it's also first, largest and the only filled button.

How big should a bundle discount be?

Big enough to be noticed and small enough to protect the products' own prices. Here the bundle saves $7 on $35, 20%, and it earns that by including things neither product has alone: signing from inside a doc, one template library and one admin console. A bundle that is only the two products at a lower price invites customers to wait for a sale; one that adds something makes the saving feel like a bonus.

When should I show a bundle instead of a single plan?

Show a bundle when you sell two or more products that customers often buy together and each stands on its own. The products stay on the page so a customer who needs only one can still buy it, which keeps the bundle an offer rather than a requirement.

  • Pro

    A CRM sold as a base plan plus six add-ons that switch on and off in cells sharing hairlines, with the price per seat rolling big beside them and a sticky total bar on phones.

  • Pro

    An add-on marketplace for a CMS: an editor's pick in one compact band with its install button, over two shelves of add-on tiles that share their lines, each shelf a row to swipe on phones.

  • Pro

    Comparison Table Pricing

    Comparison tables

    Four 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

    Pricing With Guarantee

    Proof and guarantees

    A free trial with a refund window drawn as a timeline: today, day 12, day 14 and day 30 on one line, beside the yearly plan, its price and call to action. It turns vertical on a phone.

  • Pro

    The 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

    A product-led split: a mock of the app built from our own components with numbered callouts on it, matching a 'what you get' list, beside the one plan as a card in a card with a monthly and yearly switch.