> ## Documentation Index
> Fetch the complete documentation index at: https://codebeans-discount-engine-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Theme blocks

> Show your offers on product pages and across the store.

The discount function applies your discount in the cart and at checkout, but it does not put anything on your product pages. Theme blocks advertise the offer before the shopper adds to cart.

## Add the blocks

**1. Open Storefront**

Open **Storefront** in the app navigation.

**2. Add each block once**

The page is split into **App embeds: switch on once** and **Blocks: place on a page**. Click **Turn on in theme editor** for an app embed, or **Add to theme** for a block. Your theme editor opens with it selected. Blocks are not added automatically.

**3. Save your theme**

After that, each block updates by itself whenever you change the campaign.

![The Storefront page](https://mintcdn.com/codebeans-discount-engine-pro/vADWEe_DBoVbp2Z1/images/storefront-page.png?fit=max\&auto=format\&n=vADWEe_DBoVbp2Z1\&q=85\&s=1894f813b0337f2d3e16d560055ad9bd)

![The CB Volume Discount Table block added in the theme editor](https://mintcdn.com/codebeans-discount-engine-pro/vADWEe_DBoVbp2Z1/images/theme-editor-block.png?fit=max\&auto=format\&n=vADWEe_DBoVbp2Z1\&q=85\&s=3a8993b00454bec23c876ab4f601bf8e)

Once a block or embed is in your live theme, its card shows **Active on your theme** with the theme's name instead of the button.

![The CB Promotion Bar card showing Active on your theme](https://mintcdn.com/codebeans-discount-engine-pro/vADWEe_DBoVbp2Z1/images/promo-bar.png?fit=max\&auto=format\&n=vADWEe_DBoVbp2Z1\&q=85\&s=a9ff4b8c1471115d15408f711320605b)

## Available blocks

| Block | Type | Shows |
| - | - | - |
| **CB Volume Discount Table** | Block | Quantity tiers on the product page; clicking a tier sets the quantity |
| **CB Discount Badge** | Block | A compact pill such as "20% off", using your campaign's own message when set |
| **CB Buy X Get Y Offer** | Block | The buy and get quantities for BXGY and BOGO campaigns |
| **CB Spend Goal Progress** | Block | How much more the shopper needs to spend to unlock a cart-total offer, with a progress bar |
| **CB Cart Savings** | Block | What the shopper has saved, read from real cart totals so it always matches checkout |
| **CB Product Page Price** | Block | A crossed-out price for automatic discounts on the product page |
| **CB Promotion Bar** | App embed | A site-wide bar for store-wide campaigns, on every page once turned on |
| **CB Strikethrough Prices** | App embed | Crossed-out prices for automatic discounts. See [Discount prices](https://codebeans-discount-engine-pro.mintlify.site/storefront/discount-prices.md) |
| **CB Cart Rules** | App embed | Runs [Discount Manager](https://codebeans-discount-engine-pro.mintlify.site/more-functions/discount-manager.md) cart rules; also tick **Enable cart rules** |

![The CB Volume Discount Table on a product page](https://mintcdn.com/codebeans-discount-engine-pro/vADWEe_DBoVbp2Z1/images/pdp-blocks.png?fit=max\&auto=format\&n=vADWEe_DBoVbp2Z1\&q=85\&s=e31129c0386e2674dbff608d208406e9)

## What appears where

* Only campaigns that target **specific products** appear on product pages. Campaigns that target a whole collection or every product are not shown there yet.
* Campaigns that depend on customer conditions, or that need a discount code, use wording that makes the requirement clear rather than promising a discount the shopper may not get.
* Expired and scheduled campaigns are not displayed.

## Backfill older campaigns

Saving a campaign writes its offer to the products it targets, so you normally have nothing else to do. The exception is campaigns saved before the app could show offers on the storefront: their offers stay invisible until they are written to your products.

Click **Backfill older campaigns** on the Storefront page to write them. It is safe to run at any time, and worth a run if a campaign you just saved is not showing up. If it stops partway, **Resume backfill** picks up where it left off without redoing finished campaigns.

![The Backfill older campaigns card](https://mintcdn.com/codebeans-discount-engine-pro/vADWEe_DBoVbp2Z1/images/backfill.png?fit=max\&auto=format\&n=vADWEe_DBoVbp2Z1\&q=85\&s=04d493b3d542ebcfd19efd0444d8816a)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.