figma guide

Designing subscription and recurring purchase UI in Figma: frequency, pricing, and handoff

Design subscribe-and-save toggles, delivery frequency selectors, subscription cart lines, and manage-subscription screens in Figma with variants and Dev Mode specs.

Published
Updated
Jul 01, 2026
Read time
7 min
Level
Beginner

Quick answer

Subscription UI needs a clear one-time vs subscribe choice, visible savings, delivery frequency control, and honest renewal copy before checkout. On the PDP, use a toggle or segmented control (“One-time” / “Subscribe & save”) with percent or dollar savings beside pricing. Show frequency dropdown or pills (every 2 / 4 / 8 weeks) and next delivery date preview. Cart and checkout must label recurring line items, show per-shipment vs per-month price, and link to cancellation policy. Account pages need skip, pause, swap, and cancel flows. Start from the Figma guides hub and templates pillar.


Who this is for

  • Product designers on DTC consumables, beauty, pet food, supplements, and SaaS-adjacent physical goods.
  • Design system teams adding subscription modules to PDP, cart, and account settings.
  • Engineers integrating billing platforms (Recharge, Stripe Billing, etc.) and proration rules.

Subscription surfaces map

SurfacePrimary jobKey component
PDP buy boxChoose subscribe vs one-timePurchaseTypeToggle
Frequency pickerSet delivery intervalFrequencySelector
CartShow recurring badge + next shipSubscriptionLineItem
CheckoutDisclose renewal + paymentSubscriptionSummary
AccountManage active subscriptionsSubscriptionManager
Email (spec only)Upcoming charge reminderCopy deck frame

Verdict: ship PurchaseTypeToggle + FrequencySelector on PDP first, then cart line treatment—account management can follow in v2 if launch is PDP-only.


PurchaseTypeToggle (PDP)

ElementSpecNotes
Control typeSegmented control or radio cardsSegmented for 2 options; cards if 3+ tiers
One-time rowStandard priceDefault for first-time visitors (A/B test)
Subscribe rowPrice + savings badge”Save 15%” chip
Legal microcopy”Cancel anytime” one lineLink to policy
Selected stateExpands frequency block belowCollapse when one-time selected
PurchaseTypeToggle
├── Variant: layout=segmented | stackedCards
├── Property: savingsPercent=15
├── Property: subscribePrice=12.74
├── Property: oneTimePrice=14.99
└── Layers:
    ├── OneTimeOption
    ├── SubscribeOption
    │   ├── PriceRow
    │   ├── SavingsBadge
    │   └── FrequencySelector (nested)
    └── PolicyLink

Place above add-to-cart, below variant selectors. Mobile: stacked cards beat tiny segmented labels.


FrequencySelector

PatternBest forUI
Pill row3–4 fixed intervalsEvery 2 / 4 / 6 / 8 weeks
DropdownCustom cadence or 5+ options”Deliver every ___“
Calendar previewHigh-trust categories”Next order: Jul 15”
Quantity + frequencyMulti-unit subs”2 boxes every 4 weeks”
FrequencySelector
├── Variant: control=pills | dropdown
├── Property: selectedInterval=4weeks
└── Layers:
    ├── Label ("Deliver every")
    ├── OptionRow
    ├── NextDeliveryPreview
    └── FirstOrderNote ("First shipment ships today")

Show next delivery date dynamically in the spec—use placeholder {{nextShipDate}} in Dev Mode. Pair with date picker patterns if users can pick anchor day.


Pricing display rules

RuleUI treatment
Subscribe pricePrimary when subscribe selected
Compare-atStrike one-time price on subscribe row
Per unit clarity”/ month” only if actually monthly—prefer ”/ delivery”
First order discountSeparate line “First order 20% off”
Tiered subscribe10% @ 4wk, 15% @ 8wk—show in pill labels
Tax/shipping”Estimated at checkout” unless known

Align with BNPL copy rules—do not stack confusing payment messages under subscription block.


Cart and checkout

SubscriptionLineItem

PartSpec
Recurring badge”Subscription” pill on thumb
Frequency line”Every 4 weeks”
Next shipmentOptional in cart drawer
Edit linkOpens mini modal to change frequency
One-time overrideRare—“Convert to one-time” in overflow menu

Checkout SubscriptionSummary

DisclosurePlacement
Renewal amountOrder summary sticky
Billing rhythm”Charged every 4 weeks”
Cancel policyCheckbox acknowledgment if legally required
Payment methodSame as payment UI—card on file
First vs recurring totalSplit lines if first order discounted

Use progress steppers only when subscription is part of multi-step onboarding—not for standard checkout.


Bundle and upsell interactions

ScenarioUI
Subscribe to bundleFrequency on bundle total—see bundle UI
Cart upsell to subscribeToggle on line item: “Subscribe & save 10%“
Mixed cartOne-time SKU + subscription SKU—clear badges per line
Coupon stackingInline note if codes exclude subscribe

Recommendations rail can show “Subscribe to complete your routine” with pre-selected frequency.


Account: SubscriptionManager

ActionUI pattern
View active subsList cards with product, frequency, next date
Skip shipmentModal confirm + new date preview
PauseDuration picker (1 / 2 / 3 months)
Swap productProduct picker preserving frequency
Change frequencyReuse FrequencySelector
Update paymentLink to payment methods
CancelMulti-step with reason survey + retention offer
SubscriptionCard
├── Variant: status=active | paused | paymentFailed
└── Layers:
    ├── ProductThumb
    ├── TitleFrequency
    ├── NextOrderRow
    ├── ActionRow (Skip | Pause | Edit | Cancel)
    └── PaymentFailedBanner (conditional)

Payment failed: use inline alert + primary “Update payment”—do not silently pause.


Error and edge states

StateUI
SKU not subscribableHide toggle; one-time only
Variant change breaks subReset frequency; explain inline
Out of stock on next cycleNotify + skip option
Price increase noticeEmail + account banner before renewal
Region not supportedDisable subscribe with tooltip
Max subscriptionsRare B2B cap—account message

Link OOS subscribe SKUs to notify me on one-time path only.


Handoff checklist

ItemDev Mode annotation
Default purchase typeone-time vs subscribe (experiment flag)
Savings calculationPercent off one-time vs fixed subscribe price
Frequency valuesEnum list + default
Proration rulesN/A for simple DTC—note if mid-cycle swap
Cancel flow stepsRetention offer Y/N
Billing provider fieldssubscriptionId, nextBillingDate
Analyticssubscribe_select, frequency_change, cancel_complete
Legal stringsLink URLs for terms

Use Dev Mode checklist and form patterns for cancel survey fields.


Common mistakes

MistakeWhy it hurtsFix
Hidden renewal priceRegulatory/trust riskShow recurring charge in checkout
Subscribe pre-selected without savings shownFeels like dark patternLead with savings amount
”Per month” on non-monthly cadenceBilling confusionMatch copy to actual interval
No cancel path in accountChargebacksProminent cancel, not buried FAQ
Subscription badge missing in cartSurprise at checkoutPill on every recurring line
Frequency buried in checkoutWrong expectationsPick frequency on PDP
Same UI for trial vs paid subWrong disclosuresSeparate TrialBanner component
Ignoring mixed cartFulfillment errorsBadge + split shipment notes

  1. Confirm subscription rules with merchandising and legal—intervals, savings, cancel policy.
  2. Build PurchaseTypeToggle and FrequencySelector on PDP buy box.
  3. Design cart SubscriptionLineItem with badge and edit entry point.
  4. Add checkout SubscriptionSummary disclosures and renewal lines.
  5. Spec SubscriptionManager account cards with skip/pause/cancel flows.
  6. Document enums, pricing API, and analytics in Dev Mode.

FAQ

Default to subscribe or one-time?

One-time default is safer for trust unless brand is subscription-first; A/B test with clear savings.

Loyalty points on subscribe orders?

Show points per delivery in order confirmation—not double-count monthly if charged per shipment.

Gift subscriptions?

Separate flow: recipient email, start date, gift message—use gift card patterns for prepaid duration.

Combine with coupons?

State “Not valid on subscription” inline when codes exclude recurring lines.

PDP-only v1 without account management?

Minimum: confirmation email spec + link placeholder “Manage subscription” to support portal.


Next steps

Share on X

§ Keep reading

Related guides.