Zid Docs
AppsThemes
Payments
AppsThemes
Payments
Help Center
Slack
  1. Features
  • Getting Started
    • Introduction
    • Theme Development
    • Vitrin Changelog
    • Creating and Managing Theme Presets
    • Legacy Theme Migration
      • Store Settings Mapping
      • Moving to Vitrin Using LLMs
      • Twig to Jinja
      • Breaking Changes
  • Key Concepts
    • Architecture
    • Templates
      • Overview
      • Overridable Templates
      • Legacy Templates
      • Template Replacements
      • Templates Library
        • home.jinja
        • product.jinja
        • cart.jinja
        • category.jinja
        • products.jinja
        • categories.jinja
        • page.jinja
        • blogs.jinja
        • blog.jinja
        • faqs.jinja
        • reviews.jinja
        • questions.jinja
        • shipping_payment.jinja
        • 404_not_found.jinja
    • Settings
      • Schema files
      • Input Settings
      • Media Settings
      • Form Controls Settings
      • Products Settings
      • Additional Settings
      • Conditional Visibility
      • Migrating twig settings schema
    • Localization
      • localization (jinja v. twig)
    • Theme Editor
      • Overview
  • Building with Vitrin
    • Jinja Basics
    • Vitrin's Jinja Extensions
  • Vitrin CLI
    • Introduction
    • CLI Commands
  • Tips & Tricks
    • Performance
  • JS Integration
    • Supporting both Vitrin and Legacy themes
    • Responses & Errors
    • Cart
    • Products
    • Categories
    • Store
    • Account
    • Blogs
    • Options
    • Events
  • Features
    • SDK Popups – Integration Guidelines
    • Custom Styles Guide
    • Gift Card as a Popup
    • Addresses as a Popup
    • Login as a Popup
    • Checkout as a Popup
    • Apple Pay Quick Checkout
    • Region & Language Popup
    • Dynamic Bundle Products
    • Progressive Discounts
    • Customer Wallet & Cashback
    • Add Preorder Support to Your Theme
  • Mobile Apps
    • Scripts
  • API's
    • Authentication
      • Logout
      • Login Status
      • SMS Login
      • Verify SMS Login
      • WhatsApp Login
      • Verify WhatsApp Login
      • Email Login
      • Verify Email Login
      • Register
      • Register Guest
    • Products
      • List Products
      • Search Products
      • Calculate Product Options Price
      • Notify Product Stock Availability
      • Fetch Bundle Offers
      • Fetch Bundle Offers for a Product
      • List My Product Reviews
      • List Product Reviews
      • Create Product Review
      • Update Product Review
      • Delete Product Review
      • List Product Questions
      • Create Product Question
      • Get Product by Slug
      • Get Selection Groups
    • Categories
      • List Categories
    • Checkout
      • Get Cart
      • Remove Cart
      • Duplicate Cart
      • Add Cart Item
      • Empty Cart
      • Update Cart Item
      • Remove Cart Item
      • Upload Cart Input Field
      • Add Gift Card
      • Remove Gift Card
      • Apply Coupon
      • Remove Coupon From Cart
      • Check Coupon Validity
      • Apply Loyalty Points
      • Remove Loyalty Points
      • Preview Rewarded Points
      • List Redemption Methods for Cart
      • Customer’s Loyalty Wallet
      • Customer’s Current Points Balance
    • Account
      • Get Profile
      • Delete Account
      • Update Customer Profile
      • Get Addresses
      • Create an Address
      • Get an Address by ID
      • Update an Existing Address
      • Delete Address
      • Get Orders
      • Get Shareable Wishlist Link
      • Get Wishlist
      • Add Products to Wishlist
      • Remove Product from Wishlist
      • Get Address Form Schema
      • Check Product Purchase Status
    • Storefront
      • Store Scripts
      • Pages
      • Blogs
    • Countries
      • Get Countries
      • Get Cities By Country
  1. Features

Progressive Discounts

The Progressive Discount feature displays a tiered discount progress meter in the cart/checkout flow. It motivates customers to increase their cart value or quantity by showing how close they are to unlocking the next discount tier.

Merchant Setup#

Go to Marketing → Discounts → Create, then select Progressive Discount.
CleanShot 2026-04-16 at 13.59.27@2x.png
CleanShot 2026-04-16 at 13.58.11@2x.png
From there, the merchant configures:
Offer details — name, start/end dates, offer scope (cart total or cart quantity), and discount type (percentage or fixed amount)
Tiers — 2 to 3 tiers, each with a minimum threshold and discount value. Thresholds and discount values must increase with each tier. A max discount cap is available when percentage is selected.
Usage limits (optional) — total redemptions and per-customer limits
Internal note (optional)
SettingDetails
Discount BasisCart total (SAR) or Cart quantity (item count)
Benefit TypesPercentage off or Fixed amount off
Tier LimitsMin 2, max 3 tiers per offer
Active OffersOnly one progressive discount can be active at a time
Product ScopeApplies to the entire cart — no product-level inclusion/exclusion

Stacking behavior:#

✅ Stacks automatically with automatic free shipping and wallet balance redemption
✅ Can stack with bundle offers and loyalty redemption — requires enabling a flag in the checkout page settings
❌ Does not stack with discount codes or other automatic discounts — the higher-value discount wins

Theme Developer Integration#

cart.gif
To render the Progressive Discount component in your theme, add the following Jinja include to your cart page template:
{% include 'vitrin:cart/progressive_discount.jinja' %}
The component renders automatically when the feature is enabled and an active progressive discount rule exists.

Component States#

⌛️ Loading State#

Displays a skeleton loader while fetching cart data.

🔁 In Progress State#

Shows:
A message indicating how much more the customer needs to reach the next tier
A progress bar reflecting current progress percentage
Tier markers in pending/reached states
Primary color scheme

✅ All Tiers Completed State#

Shows:
A success message confirming all tiers are unlocked
A full (100%) progress bar
All tier markers with check icons
Green/success color scheme

Customization#

You can override the default styles using the Zid SDK Custom Styles system via the window.zidCustomStyles object. The component key is progressive_discount.

Example#


Full CSS Class Reference#

Class Reference Table#

Class NameElementDescription
.zid-kit-progressive-discount`RootMain wrapper container
.zid-kit-progressive-discount-card`AppCardCard with primary border
.zid-kit-progressive-discount-content`StackColumnContent with dynamic background
.zid-kit-progressive-discount-message`StackColumn/AppTypographyMessage container
.zid-kit-progressive-discount-message-completed`AppTypographyCompleted state message
.zid-kit-progressive-discount-message-quantity`AppTypographyQuantity-based message
.zid-kit-progressive-discount-message-total`AppTypographyTotal-based message
.zid-kit-progressive-discount-message-highlight`AppTypographyHighlighted text in messages
.zid-kit-progressive-discount-progress-wrapper`BoxProgress bar container
.zid-kit-progressive-discount-progress-bar`LinearProgressProgress bar element
.zid-kit-progressive-discount-tier`StackColumnTier marker container
.zid-kit-progressive-discount-tier-reached`StackColumnReached tier modifier
.zid-kit-progressive-discount-tier-pending`StackColumnPending tier modifier
.zid-kit-progressive-discount-tier-avatar`AvatarTier circle
.zid-kit-progressive-discount-tier-check`IconCheckLineCheck icon (reached)
.zid-kit-progressive-discount-tier-benefit`AppTypographyBenefit text (pending)
.zid-kit-progressive-discount-tier-label`AppTypographyLabel below tier
.zid-kit-progressive-discount-skeleton`StackColumnSkeleton container
.zid-kit-progressive-discount-skeleton-message`StackRowSkeleton message row
.zid-kit-progressive-discount-skeleton-text`SkeletonSkeleton text
.zid-kit-progressive-discount-skeleton-progress`SkeletonSkeleton progress bar

For complete Custom Styles documentation, see the Custom Styles Guide for Theme Developers.

Best Practices#

1.
Automatic cart updates — The component listens to cart:refetch events and re-renders when the cart changes.
2.
Loading states — A skeleton loader displays while cart data is being fetched, preventing layout shift.
3.
RTL support — The progress bar handles RTL layouts automatically via CSS transforms.
4.
Dynamic tier positioning — Tier markers are positioned proportionally based on tier count (2 or 3).
5.
Responsive design — The component is designed to work across all screen sizes.
Modified at 2026-04-16 11:19:50
Previous
Dynamic Bundle Products
Next
Customer Wallet & Cashback
Built with