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" (configurable to navigate 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.
The block loads its own JavaScript and CSS — no additional widget dependency is needed. However, the JeriCommerce Storefront Widget is required for the "Open rewards widget" CTA action to work.
The page fetches public data from the JeriCommerce API (no authentication needed):
The CTA button uses Shopify's Liquid templating to render different content based on login state:
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 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 | |||
| 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 | |||
| 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 |
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>
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.
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.
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 |
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 |
.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;
}
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 supports multiple languages based on the store's current locale:
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.