The JeriCommerce Loyalty Page is a public-facing page for your Shopify store that displays your earning rules, point conversion rates, and VIP tiers. The CTA button adapts to the visitor's login state: guests see "Join now", logged-in customers see "See rewards" (set up to go to the account page or open the JeriCommerce widget). This guide covers how to set up and customize the default template using the Shopify Theme Editor.
Quick Setup¶
Create a page¶
Go to Shopify Admin > Online Store > Pages and create a new page.
Add the Loyalty Page block¶
Open the theme editor for that page: Customize > Pages > select your page. Add the "Loyalty Page" block from the JeriCommerce app blocks section.
Customize settings¶
Set up titles, colors, and section visibility from the block settings panel.
Add to navigation¶
Add the page to your store navigation so customers can easily find it.
How It Works¶
Public Data Loading¶
The page fetches public data from the JeriCommerce API (no authentication needed):
- Program info — name, balance name, configuration
- Engagement flows — earning rules (purchases, social actions, referral, etc.)
- Tiers — VIP levels with points thresholds and multipliers
CTA Button Behavior¶
The CTA button uses Shopify's Liquid templating to render different content based on login state:
- Guest: "Join now" → links to login/registration page (configurable URL)
- Logged-in: "See rewards" → either navigates to the account page or opens the JeriCommerce widget rewards panel (configurable via the Logged-in CTA Action setting)
Theme Editor Settings¶
All settings are accessible directly from the Shopify Theme Editor when the Loyalty Page block is selected.
General¶
| Setting | Type | Default | Description |
|---|---|---|---|
| Enable Loyalty Page | Checkbox | Enabled | Show or hide the entire block |
Content¶
| Setting | Type | Default | Description |
|---|---|---|---|
| Hero Title | Text | "Our Loyalty Program" | Main heading displayed at the top |
| Hero Subtitle | Textarea | "Join our loyalty..." | Description below the heading |
| Guest CTA URL | URL | /account/login |
Where guests are redirected when clicking the CTA |
| Logged-in CTA Action | Select | account |
account = go to account page, widget_rewards = open rewards widget |
| Logged-in CTA Label | Text | "See rewards" | Button text shown to logged-in customers |
| Logged-in CTA URL | URL | /account |
URL when action is "Go to account page" |
Sections¶
| Setting | Type | Default | Description |
|---|---|---|---|
| Show How It Works | Checkbox | Enabled | Toggle the 3-step explanatory section |
| Show Earning Rules | Checkbox | Enabled | Toggle the ways to earn section |
| Show VIP Tiers | Checkbox | Enabled | Toggle the tiers section |
Colors¶
| Setting | Type | Default | Description |
|---|---|---|---|
| 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 |
Customizing the Default Template¶
What You Can Change¶
- Change copy — Edit any text and mix
{variables}with your own wording. - Reorder sections — Move tiers above earnings, or rearrange freely.
- Remove sections — Delete any
<section>you don't need. - Change HTML structure — Use tables, grids, lists — whatever fits your design.
- Add custom CSS — Use the Custom CSS setting or add
<style>blocks.
Customizing Earning Rows¶
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>
Customizing Tier Cards¶
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>
Points Display Format¶
The earning.points field uses a compact format depending on the earning type:
| Earning Type | Format | Example |
|---|---|---|
| Purchase (rate < 1) | Percentage return | 10% |
| Purchase (rate >= 1) | Multiplier | x2 |
| All others (social, referral, profile, etc.) | Fixed points | +100 |
For referral, only the referrer's points are shown in the badge. The friend's reward is mentioned in the description text.
CSS Variables¶
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.
Merchant-Facing Variables (set on :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 |
Internal Variables (set on .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, system stack) |
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-icon-size |
48px |
Earning row icon dimensions |
--jlp-max-width |
1200px |
Maximum content width |
Example: Dark Theme¶
.jeri-loyalty-page {
--jlp-card-bg: #1a1a1a;
--jlp-border-color: #333;
--jlp-divider: #2a2a2a;
--jlp-skeleton-bg: #222;
}
Example: Compact Spacing¶
.jeri-loyalty-page {
--jlp-space: 12px;
--jlp-border-radius: 8px;
}
Widget Integration¶
When the Logged-in CTA Action is set to widget_rewards, the 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:
- The loyalty page explains the program (public information, earning rules, tiers).
- The widget handles rewards, transactions, and account management (authenticated).
- Both work independently but complement each other via the
#jeri=URL pattern.
Internationalization¶
The loyalty page supports multiple languages based on the store's current locale:
- English (en) — default
- Spanish (es)
- French (fr)
- German (de)
- Italian (it)
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.