Email templates

For whoever writes the emails Cascade sends: review requests, loyalty member emails and wishlist alerts. Every one of them is a template you can edit under Settings → Email templates and preview against sample data before it goes anywhere. The templates page shows each template as a card with a preview of what it sends, rendered with your first site's branding and the same sample data the editor uses.

Templates use Mustache syntax for dynamic content, so you can insert fields and layout components into the HTML to personalize what goes out.

Template types

TypeDescription
Review SurveySent to customers requesting a product review
Loyalty WelcomeSent the first time a customer joins a loyalty program
Points EarnedSent when a customer earns points, once per order or visit
Rewards AvailableSent when a reward is issued to a customer
Reward RedeemedSent when a customer spends points on a reward, with the code they can use at checkout
Reward ExpiringSent before a reward the customer holds runs out of time
Points ExpiringSent before a customer's points run out of time
Wishlist Price DropSent when something on a customer's wishlist gets cheaper
Wishlist Back In StockSent when something on a customer's wishlist is available again
Question AnsweredSent when the first answer to a shopper's product question is published

"Question Answered" has its switch on the reviews settings page and goes out once per question, ever. Each loyalty email has its own on/off switch on the loyalty settings page, and "Points earned" starts off because it is the one that fires most often. The two wishlist alerts have their switches on the wishlist settings page and both start off. If your organization has no template of a given type, Cascade sends the packaged default; create one and it is used instead.

An organization can hold more than one template of a type. The loyalty senders use the oldest one, so editing the template you already have is safer than adding a second.

Fields

Insert fields into your template using {{field}} syntax. They are replaced with real values when the email is sent.

Customer

FieldTag
First name{{customer.firstName}}
Last name{{customer.lastName}}
Email{{customer.email}}

Site

FieldTag
Name{{site.name}}
URL{{site.url}}
Address{{site.address}}
Unsubscribe URL{{site.unsubscribeUrl}}

{{site.unsubscribeUrl}} is a per-customer link to a page where they can stop receiving marketing email, and opt back in if they change their mind. Every template's default footer already renders it, wrapped in a {{#site.unsubscribeUrl}} section so it disappears from the previews and from any mail that has no recipient to unsubscribe. Leave it in place: a customer who unsubscribes is skipped by every later marketing send.

Order

FieldTag
Number{{order.number}}
Date{{order.date}}
Status{{order.status}}
Review URL{{order.reviewUrl}}
Has other items{{order.hasOtherItems}}
Other items{{order.otherItems}}
Every item{{order.items}}

{{order.reviewUrl}} opens the review form for the order's first item and already carries a query string, so add any extra parameters with &. The star links in the default review survey template use {{order.reviewUrl}}&rating=1 to preselect a rating.

Other items

An order can contain several products, and each one gets its own review. {{order.otherItems}} is a section that repeats for every item after the first, with {{title}} and {{reviewUrl}} available inside it. {{order.hasOtherItems}} wraps anything that should only appear when the order has more than one item, such as a heading.

{{#order.hasOtherItems}}
<p>Review another item from your order</p>
{{#order.otherItems}}
<p><a href="{{reviewUrl}}">{{title}}</a></p>
{{/order.otherItems}} {{/order.hasOtherItems}}

Every item

{{order.items}} is the same list with the first item included, for a template that gives every product in the order equal billing rather than leading with one. The same {{title}}, {{imageUrl}} and {{reviewUrl}} are available inside it. This is what the guided reviews setup writes when you pick "List every product equally".

{{#order.items}}
<p><a href="{{reviewUrl}}">{{title}}</a></p>
{{/order.items}}

Product

FieldTag
Name{{product.name}}
Image URL{{product.imageUrl}}

The product fields describe the order's first item, the one {{order.reviewUrl}} links to.

Loyalty

FieldTag
Program name{{loyalty.programName}}
Points balance{{loyalty.points}}
Points earned{{loyalty.pointsEarned}}
Name for points{{loyalty.pointsName}}
Dashboard URL{{loyalty.dashboardUrl}}
Redeem URL{{loyalty.redeemUrl}}
Reward name{{loyalty.reward.name}}
Reward code{{loyalty.reward.code}}
Reward cost{{loyalty.reward.cost}}
Reward expiry{{loyalty.reward.expiresAt}}
Amount expiring{{loyalty.expiring.amount}}
Days until expiry{{loyalty.expiring.days}}
Expiry date{{loyalty.expiring.date}}

Every points amount arrives already written out in your program's own words, so {{loyalty.points}} renders as "1,200 stars" for a program that calls its points stars. Do not add a unit after it. {{loyalty.pointsName}} is the plural name on its own, for sentences like "Spend your {{loyalty.pointsName}}".

{{loyalty.reward.name}} is the name of the rule the reward came from, so it reads the way the member saw it. {{loyalty.reward.cost}} is what they actually spent, which is empty for a reward they did not pay for.

The expiry fields are only filled in on the two expiring emails: amount is what goes (points only), days counts whole days from now, and date is the day itself in your organization's time zone.

Fields a given email has nothing to say about are empty, so wrap anything optional in a section to keep it out of the email:

{{#loyalty.reward.expiresAt}}
<p>Use it by {{loyalty.reward.expiresAt}}.</p>
{{/loyalty.reward.expiresAt}}

{{loyalty.dashboardUrl}} and {{loyalty.redeemUrl}} both open your own loyalty page, the one you set for the site on the loyalty settings page. Leave that empty and they open the site itself, where your launcher embed sits. Both links carry #cascade-rewards, which is what tells the embed to open itself rather than leaving the shopper looking at your homepage.

A shopper who is signed in to your store sees their own balance, tier and rewards, the same as they would on any other page carrying the widget. A shopper who is not sees what the program offers, plus whatever sign-in your store already shows. Put the member's numbers in the email itself so the message stands on its own either way.

Wishlist

FieldTag
How many items{{wishlist.itemCount}}
First item name{{wishlist.item.name}}
First item price{{wishlist.item.price}}
First item link{{wishlist.item.url}}
Every item{{#wishlist.items}}

One wishlist alert covers everything that changed in the same pass, so the items are a list rather than a single value. Loop over them and use the per-item fields inside:

{{#wishlist.items}}
<p>
  {{name}}{{#variantName}} ({{variantName}}){{/variantName}}
  {{#previousPrice}}<s>{{previousPrice}}</s>{{/previousPrice}} {{price}}
  {{#dropPercent}}({{dropPercent}}% off){{/dropPercent}}
</p>
{{/wishlist.items}}
Per-item fieldTagWhat it holds
Name{{name}}The product's name.
Variant{{variantName}}The variant the customer saved, empty if they saved the product.
Image{{imageUrl}}The variant's image, falling back to the product's.
Link{{url}}The product's page on your storefront, empty if you store none.
Price{{price}}What it costs now, written out in its own currency.
Old price{{previousPrice}}What it cost before, on a price drop only.
Fall{{dropPercent}}How far it fell, in whole percent, on a price drop only.

{{wishlist.item}} is the first item in the list, which is what an email about one thing should headline. {{wishlist.itemCount}} tells you how many there are, so you can write for both cases:

{{#wishlist.item}}
<h1>The price dropped on {{wishlist.item.name}}</h1>
{{/wishlist.item}}

Prices are read when the email is sent rather than when the change was detected, so an alert never quotes a price that has already moved again. A product saved without a variant is priced from its cheapest one, the same way the shared wishlist page prices it.

Question

FieldTag
What was asked{{question.body}}
The answer{{question.answer}}
Who answered{{question.answerAuthor}}
Product name{{question.productName}}
Product link{{question.productUrl}}

{{question.answer}} is the answer your store wrote, whichever one it is: if a shopper answered first and you answered later, yours is still the one quoted. {{question.productUrl}} already carries the #cascade-questions anchor, so the link lands on the Q&A rather than the top of the page, and it is empty for a product you store no URL for.

Components

Components are layout blocks you can use to structure your email content. They use Mustache section syntax with parameters in parentheses.

Row

Wraps content in a full-width table row.

{{#Row}}
<!-- content here -->
{{/Row}}

Column

Creates a column within a row. Use the width parameter to control relative sizing.

{{#Row}} {{#Column}}(width="1")
<!-- left column -->
{{/Column}} {{#Column}}(width="1")
<!-- right column -->
{{/Column}} {{/Row}}

Button

Renders a styled call-to-action button.

ParameterDescription
hrefLink URL
backgroundColorButton background color
textColorButton text color
borderRadiusCorner radius in pixels
{{#Button}}(href="https://example.com" backgroundColor="{{site.colors.primary}}" textColor="#FFFFFF"
borderRadius="6")Shop now{{/Button}}

Badge

Renders an inline badge label.

ParameterDescription
bgcolorBadge background color
{{#Badge}}(bgcolor="#1BB05D")New{{/Badge}}

Callout

Renders a highlighted section with a background color and padding.

ParameterDescription
bgcolorBackground color
paddingCSS padding value
{{#Callout}}(bgcolor="#F8F8FA" padding="24px 0")
<!-- callout content -->
{{/Callout}}

Preview

The template editor includes a live preview panel. Use the settings popover to customize the sample data used for rendering:

  • Sample customer: set the name and email shown in customer fields.
  • Sample order: enter an order number to pull real order data into the preview.
  • Content: only shown for templates that leave {{preheader}} or {{{body}}} as placeholders. Templates normally hold their own copy, so edit the wording in the template body itself.

Emails Cascade sends you

Separate from all of this are the emails Cascade sends about your account rather than on your store's behalf: the sign-in link, email verification and email changes, member invitations, the billing and allowance notices, and the review alerts and daily digest. They are built from the same components as the templates above, so they look like the rest of Cascade, but they are not templates: they carry Cascade's branding instead of your site's, and there is nothing to edit under Settings.

They are also transactional, which is why none of them carries an unsubscribe link. Each one says at the foot why it reached you, and where the setting that governs it lives. Review alerts and the daily digest are the ones you can turn off, on the review settings page.