What You’ll Learn in This Module
This is the capstone module where every concept from the course comes together. You’ll build a complete, production-quality Welcome Slide narration from scratch — the kind that opens a Cast QBR or Executive Business Review. By the end, you’ll see exactly how setup blocks, filters, snippets, conditionals, and defensive coding combine into a polished deliverable.
What a Welcome Slide Does
The Welcome Slide is the first thing a customer sees and hears in a Cast presentation. It sets the tone, acknowledges the customer personally, and establishes credibility. A great welcome slide:
- Greets the contact by name
- Names the company correctly (proper casing, possessive)
- Acknowledges customer tenure (“Thank you for 2 years and 3 months”)
- Provides a quick health/status snapshot
- Mentions the assigned CSM
- Adapts tone based on account health
- Handles missing data gracefully
- Sounds professional when read aloud
Building the Welcome Slide — Step by Step
Step 1: Setup Block — Safe Defaults and Conversions
Every narration starts with a setup block. This is where you tame the raw CRM data:
{% comment %}
Welcome Slide — Executive Business Review
Sources: Salesforce (contact, ARR, renewal), Gainsight (health score)
Snippets: CustomerSince, IsEMEA
Updated: 2026-03-23
{% endcomment %}
{%- # === Text fields === -%}
{%- assign name = contact_first_name | default: "there" -%}
{%- assign company = contact_account_name | default: "your company" | cast_titlecase -%}
{%- assign csm = csm_name | default: "your account manager" -%}
{%- assign tier = product_tier | default: "" | strip -%}
{%- # === Numeric fields (string → number) === -%}
{%- assign score = health_score | default: 0 | plus: 0 -%}
{%- assign arr_val = arr | default: 0 | plus: 0 -%}
{%- # === Date fields === -%}
{%- assign renewal = renewal_date | default: "" -%}
{%- # === Snippet results (always strip) === -%}
{%- assign region = IsEMEA | default: "" | strip -%}
{%- assign tenure = CustomerSince | default: "" | strip -%}
What’s happening:
- Every field gets a
defaultfallback for missing data - Text fields are cleaned with
stripwhere needed - Numeric fields are converted from strings with
| plus: 0 cast_titlecasenormalizes company name casing- Snippet results are stripped to remove stray whitespace
- A header comment documents the data sources and dependencies
Step 2: The Greeting
Hi {{ name }},
Welcome to {{ company | cast_apostrophe }} Executive Business Review.
For Jason at ACME LLC → Hi Jason, Welcome to Acme LLC's Executive Business Review. For missing data → Hi there, Welcome to Your Company's Executive Business Review.
Filters at work:
default: "there"catches missing first namescast_titlecase(from setup) fixed the ALL CAPS company namecast_apostropheadds the grammatically correct possessive
Step 3: Tenure Acknowledgment
{%- if tenure != "" and tenure != "Invalid Date Value" %}
Thank you for being a customer for {{ tenure }}. We value your partnership.
{%- endif %}
The guard checks two things: that the snippet returned something, and that it wasn’t the error message. If the contract start date is missing, this section is silently skipped — no awkward “Thank you for being a customer for Invalid Date Value.”
Step 4: Health Score Commentary
{%- if score >= 80 %}
Your health score of {{ health_score | cast_highlight }} places you among
our top-performing accounts. Let's look at what's driving that success.
{%- elsif score >= 60 %}
Your health score of {{ health_score | cast_highlight }} shows strong
engagement, with some areas we'll explore for further growth.
{%- elsif score > 0 %}
Your health score of {{ health_score | cast_highlight }} tells us
there are opportunities to strengthen your outcomes.
We've prepared specific recommendations.
{%- else %}
We'll walk through your key metrics and discuss areas of focus.
{%- endif %}
Key decisions:
- The original
health_scorestring is used for display (highlighted) - The converted
scorenumber is used for comparisons - Four tiers: excellent (80+), solid (60+), needs attention (1–59), no data (0)
- The “no data” branch avoids mentioning a score at all
Step 5: CSM Introduction with Pronunciation
Your {{ "CSM" | cast_pronounce }}, {{ csm }}, has prepared this review
and is available for any questions.
Screen shows: Your CSM, Taylor Chen, has prepared this review... Narrator says: Your Customer Success Manager, Taylor Chen, has prepared this review...
Step 6: Region-Specific Content
{%- if region == "yes" %}
Your dedicated EMEA support team is available for follow-up
at your convenience{{ "Support hours: 8 AM–6 PM CET, Monday–Friday" | cast_footnote }}.
{%- endif %}
This section only appears for EMEA contacts. The support hours are footnoted — visible but not spoken aloud.
Step 7: Renewal Date
{%- if renewal != "" %}
Your contract renews on {{ renewal | date: "%B %d, %Y" }}.
{%- endif %}
Only shown if a renewal date exists. Formatted in a reader-friendly style.
The Complete Welcome Slide
Here it is, all together:
{% comment %}
Welcome Slide — Executive Business Review
Sources: Salesforce (contact, ARR, renewal), Gainsight (health score)
Snippets: CustomerSince, IsEMEA
Updated: 2026-03-23
{% endcomment %}
{%- # === Setup Block === -%}
{%- assign name = contact_first_name | default: "there" -%}
{%- assign company = contact_account_name | default: "your company" | cast_titlecase -%}
{%- assign csm = csm_name | default: "your account manager" -%}
{%- assign tier = product_tier | default: "" | strip -%}
{%- assign score = health_score | default: 0 | plus: 0 -%}
{%- assign arr_val = arr | default: 0 | plus: 0 -%}
{%- assign renewal = renewal_date | default: "" -%}
{%- assign region = IsEMEA | default: "" | strip -%}
{%- assign tenure = CustomerSince | default: "" | strip -%}
{%- # === Greeting === -%}
Hi {{ name }},
Welcome to {{ company | cast_apostrophe }} Executive Business Review.
{%- # === Tenure === -%}
{%- if tenure != "" and tenure != "Invalid Date Value" %}
Thank you for being a customer for {{ tenure }}. We value your partnership.
{%- endif %}
{%- # === Health Score === -%}
{%- if score >= 80 %}
Your health score of {{ health_score | cast_highlight }} places you among
our top-performing accounts. Let's look at what's driving that success.
{%- elsif score >= 60 %}
Your health score of {{ health_score | cast_highlight }} shows strong
engagement, with some areas we'll explore for further growth.
{%- elsif score > 0 %}
Your health score of {{ health_score | cast_highlight }} tells us
there are opportunities to strengthen your outcomes.
We've prepared specific recommendations.
{%- else %}
We'll walk through your key metrics and discuss areas of focus.
{%- endif %}
{%- # === CSM === -%}
Your {{ "CSM" | cast_pronounce }}, {{ csm }}, has prepared this review
and is available for any questions.
{%- # === Region === -%}
{%- if region == "yes" %}
Your dedicated EMEA support team is available for follow-up
at your convenience{{ "Support hours: 8 AM–6 PM CET, Monday–Friday" | cast_footnote }}.
{%- endif %}
{%- # === Renewal === -%}
{%- if renewal != "" %}
Your contract renews on {{ renewal | date: "%B %d, %Y" }}.
{%- endif %}
Sample Outputs
Customer: Jason at ACME LLC, score 92, tenure 3 years and 2 months, EMEA, renewal 2026-09-15
Hi Jason,
Welcome to Acme LLC’s Executive Business Review.
Thank you for being a customer for 3 years and 2 months. We value your partnership.
Your health score of 92 places you among our top-performing accounts. Let’s look at what’s driving that success.
Your CSM, Taylor Chen, has prepared this review and is available for any questions.
Your dedicated EMEA support team is available for follow-up at your convenience¹.
Your contract renews on September 15, 2026.
¹ Support hours: 8 AM–6 PM CET, Monday–Friday
Customer: Missing name, GLOBEX INC, score 42, no tenure data, not EMEA, no renewal date
Hi there,
Welcome to Globex Inc’s Executive Business Review.
Your health score of 42 tells us there are opportunities to strengthen your outcomes. We’ve prepared specific recommendations.
Your CSM, your account manager, has prepared this review and is available for any questions.
Notice how the second version gracefully omits tenure, EMEA content, and renewal — producing a shorter but still professional narration.
Every Technique in This Module
| Technique | Module | Where It Appears |
|---|---|---|
default | 4 | Every field in the setup block |
cast_titlecase | 8 | Company name normalization |
cast_apostrophe | 9 | Company possessive |
cast_pronounce | 10 | CSM acronym |
cast_highlight | 11 | Health score emphasis |
cast_footnote | 11 | EMEA support hours |
if/elsif/else | 12 | Health score tiers |
unless / blank check | 13 | Tenure and renewal guards |
assign (setup block) | 15 | All variable preparation |
plus: 0 conversion | 5 | Health score, ARR |
strip | 4 | Snippet results |
date formatting | 7 | Renewal date |
| Snippet consumption | 16 | CustomerSince, IsEMEA |
| Comments | 3 | Documentation throughout |
| Whitespace control | 3 | Clean output formatting |
Try It Yourself
Exercise: Extend the welcome slide with one additional section: if the customer’s ARR is above $200,000, display a message acknowledging them as a “strategic account.” Include the ARR value highlighted. If their ARR is between $50,000 and $200,000, show their tier. If below $50,000 or unknown, skip the section entirely.
Click to reveal the answer
Add this section after the health score commentary: ```liquid {%- # === Account Value === -%} {%- if arr_val > 200000 %} As a strategic account with an {{ "ARR" | cast_pronounce }} of ${{ arr_val | cast_highlight }}, you have priority access to our Executive Partnership resources. {%- elsif arr_val >= 50000 %} {%- if tier != "" %} Your {{ tier }} account represents a ${{ arr_val }} investment in our platform. {%- endif %} {%- endif %} ``` Key decisions: - No section at all for ARR under 50000 or missing — avoids awkward messaging about small accounts - `cast_pronounce` on ARR so the narrator says "Annual Recurring Revenue" - `cast_highlight` on the dollar amount for visual emphasis - Tier only mentioned if the field has a value - The 200k+ segment gets exclusive "strategic account" messagingWhat’s Next
In Module 21, you’ll learn Troubleshooting and Common Errors — a practical guide to diagnosing and fixing the most frequent Liquid problems in Cast.
📖 Official documentation:
- Overview: https://school.cast.app/liquid.html
- Custom Cast Filters: https://school.cast.app/liquid/custom-cast-filters.html
- Snippet Library: https://school.cast.app/liquid/liquid-library.html