figma guide

Designing bundle deals and upsell UI in Figma: kits, frequently bought together, and handoff

Design product bundles, kit builders, frequently bought together rails, cart upsells, and bundle pricing UI in Figma with component variants and Dev Mode specs for ecommerce teams.

Published
Updated
Jun 30, 2026
Read time
6 min
Level
Beginner

Quick answer

Bundle and upsell UI spans three moments: PDP “Frequently bought together,” dedicated bundle pages, and cart/checkout add-ons. A bundle row shows 2–4 products, individual prices struck through, bundle total, and one “Add all to cart” CTA. Upsells in cart use compact cards with single-line benefit—not full PLP grids. Kit builders need slot-based selection with required vs optional items and live price recalculation. Always show savings amount (“Save $18”) beside pricing tokens. Start from the Figma guides hub and templates pillar.


Who this is for

  • Product designers increasing AOV on DTC, marketplace, and subscription-adjacent stores.
  • Design system teams standardizing bundle cards, kit slots, and cart upsell modules.
  • Engineers implementing dynamic bundle SKUs, inventory checks, and discount rule engines.

Bundle types map

TypeUser goalPrimary surface
Fixed bundleBuy preset kitPDP module or bundle landing
FBT (frequently bought together)Add complementary itemsPDP below buy box
Mix-and-match kitChoose variants in slotsDedicated builder page
Cart upsellLast-minute add-onCart drawer or checkout sidebar
Post-purchase upsellOne-click add to shipped orderConfirmation page (rare)

Verdict: design BundleRow (FBT) and KitBuilder first—they cover 80% of bundle UX; cart upsell reuses the same product mini-card.


FrequentlyBoughtTogether row

ElementSpecNotes
Section title”Frequently bought together”Or “Complete the set”
Product tiles3 max visible + overflow80–96px thumb
Plus separatorsBetween tilesNot on mobile—use vertical stack
Checkbox per itemPre-checked main SKUUncheck removes from bundle
Bundle priceSum with strike-throughHighlight savings
Add all CTAPrimary buttonDisabled if OOS item
Savings badgeChip “Save 15%”
FrequentlyBoughtTogether
├── Variant: layout=horizontal | stacked
├── Variant: itemCount=2 | 3 | 4
├── Property: savingsAmount=18.00
├── Property: savingsPercent=15
└── Layers:
    ├── SectionTitle
    ├── ProductTile (repeat)
    ├── PlusSeparator
    ├── CheckboxRow
    ├── PriceSummary
    ├── SavingsBadge
    └── AddAllButton

Place on PDP after buy box or below reviews. Mobile: vertical stack with checkboxes left-aligned.


ProductTile (bundle context)

PartSpec
ThumbnailLink to PDP
Title2 lines max
Variant selectorInline dropdown if needed
PriceCurrent + optional strike
Stock stateOOS grays tile + unchecks
CheckboxToggles inclusion in bundle total

Reuse card spacing tokens at smaller density—do not import full PLP card.


Fixed bundle landing page

BlockContent
HeroBundle name, hero image, savings headline
Included items listExpandable rows with qty
Price blockCompare-at vs bundle price
Add bundle CTASticky on mobile optional
FAQReturn policy for partial bundle

Link from category pages and PLP badges (“Bundle deal”).


KitBuilder (mix-and-match)

SlotBehavior
Required basePre-selected, locked
Optional add-onsCheckbox or slot picker
Variant pickPer-slot dropdown
Running totalUpdates on every change
Validation”Select a size for Item 2” inline
KitBuilder
├── Variant: mode=fixed | flexible
├── Property: slotCount=3
└── Layers:
    ├── SlotRow (repeat)
    │   ├── SlotLabel
    │   ├── ProductPicker
    │   ├── VariantDropdown
    │   └── SlotPrice
    ├── TotalBar
    ├── SavingsLine
    └── AddKitButton

Show progress when slots have dependencies—pair with steppers for 4+ steps.


Cart upsell module

PatternWhenUI
Single cardOne high-confidence SKUImage + title + “Add for $X”
CarouselMultiple add-onsHorizontal scroll
Threshold promptFree shipping gapProgress bar + suggested SKU
Warranty / care planHigh-ticketToggle row in summary
CartUpsell
├── Variant: type=product | shippingThreshold | protection
├── Property: dismissible=true
└── Layers:
    ├── UpsellTitle
    ├── MiniProductCard
    ├── AddButton
    └── DismissLink

Place below line items, above coupon field. Never block checkout CTA.


Pricing and discount display

RuleUI treatment
Bundle discountShow pre-bundle subtotal struck through
Percent vs fixedPrefer “Save $X” when > $5
StackingIf coupons disallowed, note inline
Per-item allocationEngineering only—optional tooltip
Tax recalcLoading state on total bar

Align with pricing UI and BNPL callouts on bundle totals.


Inventory and error states

StateUI
One item OOSUncheck + “Out of stock” on tile
Partial bundle shipSplit shipment note in cart
Bundle SKU deprecatedRedirect to components list
Max qtyInline error on add
Region restrictionHide bundle module entirely

Use inline alerts for cart-level bundle errors.


Handoff checklist

ItemDev Mode annotation
Bundle SKU IDMaster vs component SKUs
Checkbox default stateWhich items pre-selected
Price calculationAPI vs client-side preview
OOS behaviorDisable add vs partial add
Analyticsbundle_view, bundle_add, upsell_add
Coupon stacking rulesBoolean flags
Mobile layout breakpointStack vs horizontal
AccessibilityCheckbox labels include product name

Use Dev Mode checklist and interactive components for checkbox and add-button states.


Common mistakes

MistakeWhy it hurtsFix
FBT with 6+ productsChoice paralysisCap at 3–4
Hidden savingsWeak conversionAlways show “Save $X”
Separate add buttons per itemDefeats bundle intentOne “Add all” primary
Upsell above cart totalsBlocks checkoutBelow items
No variant pick in bundleWrong SKU ordersPer-tile dropdown
Strike price without contextLegal/trust issuesLabel “Was” / “Individually”
Kit builder without running totalAbandonmentSticky total bar
Same upsell on every PDPIrrelevancePersonalization slot in spec

  1. Define bundle types with merchandising—fixed, FBT, kit, cart upsell.
  2. Build ProductTile and FrequentlyBoughtTogether with checkbox and OOS states.
  3. Design KitBuilder slots with variant dropdowns and validation.
  4. Add CartUpsell module to cart/checkout templates.
  5. Create fixed bundle landing hero + included-items list.
  6. Document SKU rules, stacking, and analytics in Dev Mode.

FAQ

FBT on quick view?

Compact 2-item row only—full FBT belongs on full PDP.

Show bundle on PLP card?

Use “Bundle” badge—not full FBT row.

Subscription bundles?

Add frequency selector and “Subscribe & save” line—pair with pricing tokens.

Compare with compare products?

Different intent—bundles are complementary SKUs, compare is spec tables.

Gift bundles?

Add gift message slot at kit builder step—link gift card UI if applicable.


Next steps

Share on X

§ Keep reading

Related guides.