The JeriCommerce Loyalty Page is a public-facing page for your Shopify store that displays your earning rules, point conversion rates, and VIP tiers. When customers are logged in, they also see their personal progress — completed flows, current tier, and point balance. This guide covers how to set up and customize the default template using the Shopify Theme Editor.
The block loads its own JavaScript and CSS — no additional widget dependency is needed. However, the JeriCommerce Storefront Widget is required for the "View my rewards" CTA to work.
The loyalty page fetches data from the JeriCommerce API in two phases:
Phase 1 — Public (no authentication required)
Phase 2 — Logged-in customers (via Shopify app proxy)
During Phase 1, any variables referencing customer data (like {hero.balance}) are preserved as-is. They get replaced with real data once Phase 2 completes.
All settings are accessible directly from the Shopify Theme Editor when the Loyalty Page block is selected.
| Setting | Type | Default | Description |
|---|---|---|---|
| General | |||
| Enable Loyalty Page | Checkbox | Enabled | Show or hide the entire block |
| Content | |||
| Hero Title | Text | "Our Loyalty Program" | Main heading displayed at the top |
| Hero Subtitle | Textarea | "Join our loyalty..." | Description below the heading |
| Guest CTA Text | Text | "Join now" | Button text shown to non-logged-in visitors |
| Guest CTA URL | URL | /account/login | Where guests are redirected when clicking the CTA |
| Rewards Button Text | Text | "View my rewards" | CTA that opens the JeriCommerce widget |
| Sections | |||
| Show How It Works | Checkbox | Enabled | Toggle the 3-step explanatory section |
| How It Works Title | Text | "How it works" | Section heading for the steps |
| Show Earning Rules | Checkbox | Enabled | Toggle the ways to earn section |
| Earning Rules Title | Text | "Ways to earn" | Section heading for earnings |
| Show VIP Tiers | Checkbox | Enabled | Toggle the tiers section |
| VIP Tiers Title | Text | "VIP Tiers" | Section heading for tiers |
| Colors | |||
| Primary Color | Color | #0f0f0f | Buttons, accents, and badges |
| Primary Contrast | Color | #fcfcfc | Text on primary-colored backgrounds |
| Secondary Color | Color | #f5f5f5 | Card backgrounds |
| Text Color | Color | #0f0f0f | Headings and body text |
| Muted Color | Color | #888888 | Subtitles and descriptions |
| Custom CSS | Textarea | — | Additional CSS overrides for advanced styling |
The default Liquid template is fully customizable. You can:
{variables} with your own wording.<section> you don't need.<style> blocks.You can freely mix variables with your own copy in any text node. For example, to change the balance text in the hero:
<p class="jeri-tier-card-hero__balance">
Your {hero.balanceName} balance: <strong>{hero.balance}</strong>
</p>Override the earning row template to change how earning rules are displayed:
<template data-jeri="earning-row">
<div style="padding: 16px; border-bottom: 1px solid #eee;">
<strong>{earning.title}</strong> — earn {earning.points}
<p>{earning.description}</p>
</div>
</template>
<div data-jeri="earnings-purchases"></div>
<div data-jeri="earnings-actions"></div>Override the tier template to change the tier card layout:
<template data-jeri="tiers">
<div class="my-tier">
<h3>Tier: {tier.name}</h3>
<p>Requires {tier.requiredPoints} to unlock</p>
<span data-jeri="tier.factor" data-jeri-hide-if="1">
Multiplier: {tier.factor}x
</span>
<div data-jeri-html="tier.content"></div>
</div>
</template>
All styling is controlled via CSS custom properties organized in two layers: merchant-facing variables set from the theme editor, and internal variables that resolve them with layout tokens.
:root)These are set automatically by the Liquid template based on the theme editor color settings:
| Variable | Default | Set By |
|---|---|---|
| --jeri-loyalty-primary | #0f0f0f | Primary Color setting |
| --jeri-loyalty-primary-contrast | #fcfcfc | Primary Contrast setting |
| --jeri-loyalty-secondary | #f5f5f5 | Secondary Color setting |
| --jeri-loyalty-text | #0f0f0f | Text Color setting |
| --jeri-loyalty-muted | #888888 | Muted Color setting |
.jeri-loyalty-page)These resolve the merchant variables and add layout/structural tokens. Override them in the Custom CSS setting for fine-grained control:
| Variable | Default | Purpose |
|---|---|---|
| --jlp-primary | var(--jeri-loyalty-primary, #0f0f0f) | Primary color for buttons and accents |
| --jlp-primary-contrast | var(--jeri-loyalty-primary-contrast, #fcfcfc) | Text on primary backgrounds |
| --jlp-text | var(--jeri-loyalty-text, #0f0f0f) | Body text color |
| --jlp-muted | var(--jeri-loyalty-muted, #888888) | Secondary text color |
| --jlp-font | var(--font-body-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, ...) | Font family with system fallback stack |
| --jlp-border-radius | 16px | Border radius for cards |
| --jlp-space | 16px | Base spacing unit |
| --jlp-border-color | #e8e8e8 | Card/list border color |
| --jlp-card-bg | #fcfcfc | Card background color |
| --jlp-divider | #f0f0f0 | Row divider color |
| --jlp-skeleton-bg | #f5f5f5 | Skeleton loader background color |
| --jlp-success-bg | #5fc283 | Success state background color |
| --jlp-icon-size | 48px | Earning row icon dimensions |
| --jlp-max-width | 1200px | Maximum content width |
.jeri-loyalty-page {
--jlp-card-bg: #1a1a1a;
--jlp-border-color: #333;
--jlp-divider: #2a2a2a;
--jlp-skeleton-bg: #222;
}.jeri-loyalty-page {
--jlp-space: 12px;
--jlp-border-radius: 8px;
}
The "View my rewards" CTA uses #jeri=loyalty/rewards as its href. When the JeriCommerce Storefront Widget is active on the page, clicking this link opens the widget's rewards panel. This means:
#jeri= URL pattern.
The loyalty page supports multiple languages based on the store's current locale:
en) — defaultes)Unsupported locales fall back to English automatically. The locale is detected via the data-locale attribute on the root element, which is set using Shopify's {{ request.locale.iso_code }} Liquid filter.