figma guide

Designing back-in-stock and notify me UI in Figma: alerts, email capture, and handoff

Design out-of-stock states, notify-me modals, waitlist email capture, and restock badges in Figma with validation, consent copy, and Dev Mode specs for ecommerce.

Published
Updated
Jun 23, 2026
Read time
7 min
Level
Beginner

Quick answer

Back-in-stock UI replaces the primary ATC with a NotifyMeButton, captures email or SMS through a focused modal, and confirms with a toast—while low-stock uses inline urgency without blocking purchase. Build StockStatus variants (in_stock, low_stock, out_of_stock, preorder) bound to the buy box on PDP; reuse the same notify flow on wishlist rows and PLP cards when variants are unavailable. Never promise a date unless merchandising supplies one. Pair with forms, badges, and inline alerts. Start from the Figma guides hub.


Who this is for

  • Product designers shipping fashion, electronics, and limited drops where inventory churn is high.
  • Design system teams aligning stock messaging across PDP, cards, cart, and account notification settings.
  • Engineers integrating waitlist APIs, variant-level inventory, marketing consent, and restock email triggers.

Stock status surfaces

SurfaceGoalKey components
PDP buy boxPurchase or notifyStockStatus, NotifyMeButton
Variant pickerPer-SKU availabilityDisabled swatches + tooltip
PLP cardSet expectations earlyStockBadge, muted card overlay
Wishlist rowSave + notifyNotifyToggle per line
Cart linePrevent checkout surpriseStockErrorBanner
Notify modalCapture contactNotifyMeForm
Account settingsManage alertsNotificationPreferenceRow

Verdict: stock state lives on the variant, not the parent product—design picker + buy box as one interactive system so “Notify me” always references the selected SKU.


StockStatus variants

StatusBuy box CTASupporting copy
in_stockAdd to cartOptional “Ships in 2–3 days”
low_stockAdd to cart”Only 3 left” badge
out_of_stockNotify me when available”Currently unavailable”
preorderPre-order nowShip window: “Ships June 30”
discontinuedDisabled”No longer available” — link to related products
StockStatus
├── Variant: status=in_stock | low_stock | out_of_stock | preorder | discontinued
├── Variant: channel=web | email_restock (confirmation only)
├── Property: quantityRemaining (number, optional)
├── Property: shipDate (date, optional)
└── Layers:
    ├── StatusBadge (optional)
    ├── PrimaryCTA (ATC | NotifyMe | Preorder)
    └── HelperText

Low stock uses warning tone tokens; out-of-stock uses neutral/disabled primary button styling—not error red on the whole buy box.


NotifyMeButton and modal flow

StepUINotes
1. Tap Notify meOpens NotifyMeModalFocus trap; ESC closes
2. Signed-in userEmail pre-filled, read-only optionalOne-click “Notify me”
3. GuestEmail input + validationInline error on invalid
4. Variant summaryThumbnail + title + selected variantConfirm correct SKU
5. ConsentMarketing checkbox (optional, unchecked default)Separate from transactional
6. SuccessClose modal + toast”We’ll email you when it’s back”
7. Duplicate signupToast info”You’re already on the list”
NotifyMeModal
├── Variant: user=guest | signed_in
├── Variant: channel=email | sms (if supported)
├── Property: productId + variantId
└── Layers:
    ├── ProductSummary
    ├── ContactField (email or phone)
    ├── MarketingConsentCheckbox (optional)
    ├── PrivacyNote (link)
    ├── PrimarySubmit ("Notify me")
    └── SecondaryCancel

SMS flows need regional compliance copy—design as separate variant, not an afterthought.


NotifyMeForm field specs

FieldValidationError copy
EmailRFC format”Enter a valid email address”
Phone (SMS)E.164 or locale mask”Enter a valid mobile number”
ConsentRequired if marketing checked”Accept terms to receive offers”

Show loading on submit button; disable double-submit. On API failure, use inline alert in modal: “Something went wrong—try again.”


Variant picker + inventory

Picker stateVisualInteraction
Available swatchDefault borderSelectable
Low stock swatchDot indicatorSelectable + low stock copy
OOS swatchDiagonal strike or 40% opacityDisabled; tooltip “Out of stock”
OOS selected via URLFallback to first in-stock or show notifyDeep link handling note

When user selects OOS variant, swap primary CTA to Notify me automatically—do not leave a disabled Add to cart with no alternative.


PLP and card treatment

InventoryCard treatmentCTA
In stockNormalQuick view / navigate
Low stock”Only X left” chipNormal
OOSOptional gray overlay”Notify me” text link or bell icon
Mixed variants”Available in select sizes”Navigate to PDP

Use ProductCard property stockSummary=available | low | oos | mixed—do not hide OOS products unless merchandising rules require it; notify captures demand.


Wishlist and saved items

Reuse notify modal from wishlist rows:

Row statePrimary actionSecondary
In stockMove to cartRemove
OOSNotify meRemove
Notified”Notification on” + bell filledCancel alert

Cancel alert opens confirm modal—avoid silent unsubscribe with no feedback.


Restock confirmation and email touchpoints

Design transactional states separately from marketing emails:

TouchpointContentUI in Figma
Signup confirmation”You’re on the list”Toast + optional email mock frame
Restock emailProduct image, variant, ATC deep linkStatic email artboard (optional)
Item still OOS at clickPDP with updated message”Sold out again—join waitlist”
UnsubscribeOne-click footerAccount prefs mirror

Deep link from restock email should land on PDP with variant pre-selected and in-stock ATC if inventory confirmed.


Cart and checkout edge cases

ScenarioUISpec
Item went OOS in cartInline alert on lineRemove or save to wishlist
Partial quantityStepper caps at available”Only 2 available”
Checkout blockBanner at topCannot proceed until resolved
Notify from cartSame modalPre-fill variant from line

Cart errors are blocking—use error tone. PDP notify is inviting—use neutral primary for Notify me button.


Accessibility

RequirementImplementation
Disabled swatchesaria-disabled + tooltip text
Status changesAnnounce when variant changes stock message
ModalFocus first field; return focus to Notify button
Toastrole="status" polite
ColorLow stock not color-only—include “Only 3 left” text
Time limitsPreorder dates in <time> element note for dev

Run contrast checks on strikethrough swatches—they still need 3:1 against background.


Handoff checklist

ItemDev Mode annotation
Variant-level SKUNotify API payload schema
Guest vs auth endpointsDifferent success copy paths
Marketing consent flagCRM vs transactional only
Duplicate signup handlingIdempotent API behavior
Restock triggerEmail + optional push
Deep link URL?variant= param
Analyticsnotify_signup, restock_email_click
Low stock thresholdConfig per category
Auto-remove notify on purchaseClear waitlist entry

Use Dev Mode checklist and semantic color tokens for stock badges.


Common mistakes

MistakeWhy it hurtsFix
Product-level OOS onlyWrong variant notifiedBind status to selected SKU
Disabled ATC with no notifyLost demandSwap to Notify me CTA
Promising restock dateLegal/support risk”Notify me” without date unless confirmed
Marketing opt-in pre-checkedCompliance issuesUnchecked optional checkbox
Same red as errors for low stockAlarm fatigueWarning token, not error
No duplicate signup stateUser confusion”Already subscribed” toast
Hiding OOS SKUs everywhereSEO + demand lossShow with notify on PLP

  1. Define StockStatus variants and bind to buy box component set.
  2. Build NotifyMeModal with guest and signed-in variants.
  3. Update variant picker disabled + tooltip patterns for OOS swatches.
  4. Extend ProductCard with stock summary and notify link.
  5. Add wishlist row notified state and cancel flow.
  6. Design cart OOS banner and quantity cap behavior.
  7. Prototype OOS variant → notify → success toast.
  8. Spec email deep link landing state on PDP.

FAQ

Notify me vs waitlist vs pre-order?

Notify me = alert when stock returns; no charge. Waitlist = ordered queue, sometimes with deposit. Pre-order = purchase before ship date. Use distinct CTAs and StockStatus values—do not label pre-order as notify.

Bell icon vs text button?

Text button on PDP buy box for clarity; bell icon on dense cards and wishlist rows. Keep one modal component for both entry points.

Push notifications?

If mobile app exists, add channel toggle in modal (email default on web). Design push permission primer separately—do not bundle browser push into ecommerce modal without context.

Multi-variant notify one email?

One signup per variant ID—confirm variant in modal summary. If user wants whole product, note engineering rule: notify when any variant restocks vs specific variant only.


Next steps

Share on X

§ Keep reading

Related guides.