# Billing & Pricing Source: https://docs.digifist.com/galantis/connect/billing-pricing How Galantis Connect pricing works: public plans, usage-based add-ons, marketplace commissions, and custom offers for closed ERP integrations. All app subscription charges for Shopify stores appear on your Shopify invoice. Plan changes and spending-limit approvals are confirmed by the store owner in Shopify. ## Overview Galantis Connect uses a simple approach: * **Public plans** for self-serve merchants (great for feeds + marketplaces). * **Add-ons and usage-based charges** when you enable more channels/modules or exceed plan allowances. * **Custom plans (private offers)** for sales-assisted deals and closed/complex integrations (e.g. ERP systems). * Optional **one-time integration setup fees** for non-existing integrations. This structure helps merchants start small and scale automatically as their usage grows. ## Public plans These are the default plans available for self-serve onboarding. **\$39 / month** * Best for: feeds-first onboarding * Marketplace commissions at the highest tier (see below) * Add-ons available (feeds, marketplace channels, shipping module) **\$79 / month** * Best for: multi-channel growth * Better marketplace commission rate than Start * Higher included allowances than Start **\$129 / month** * Best for: high-volume operations * Lowest marketplace commission rate * Highest included allowances Your exact included allowances (orders/SKUs/feeds/shipping volume) are always shown in the **Billing Center** inside the app, and we'll proactively prompt upgrades when it becomes cheaper than paying overages. ## Add-ons and usage-based billing Most expansions are billed as **usage-based add-ons**, so merchants can "pay as they grow" without needing a long price page. ### Additional feed destinations * **€29 per additional feed destination / month** * Charged when you exceed the number of included feeds in your plan **Example:** * Plan includes 2 feeds, you run 4 feeds → **2 × €29** billed as a monthly add-on. ## Marketplaces: channel fees + commission Marketplaces are monetized in two layers: 1. **Marketplace channel add-on** (enabling a marketplace channel) 2. **Commission** based on the value/orders synced (tiered by plan) ### Commission rates (by plan) | Plan | Commission rate | | ----- | --------------- | | Start | **0.60%** | | Grow | **0.30%** | | Scale | **0.15%** | Marketplace commission is charged **on top of** any marketplace/channel costs and any other add-ons you use. ## Shipping module The Shipping module is billed as a module add-on and includes: * **3 carriers included** * A plan-based volume allowance (caps increase on higher plans) * Overages apply only when you exceed the included monthly volume Shipping usage is measured by the number of orders/shipments processed through the Shipping module in the billing period. Yes. Higher plans include higher allowances and typically lower effective costs at scale. Your Billing Center shows current allowance and estimated next invoice. ## ERP and closed integrations ERP integrations are **niche and often custom**, so we treat them differently than feeds/marketplaces: * They can be enabled as **integration modules/connections** * They may require a **custom plan** or a **private offer** * They may include a **one-time integration setup fee** for non-existing integrations ### One-time integration setup fee If an integration does not exist yet, we may charge: * **€1,500 one-time integration setup fee** This typically applies when custom mapping, development, and validation are required. The one-time integration setup fee is for building a new integration or connector scope. It is separate from monthly subscriptions and add-ons. ## Custom plans (private offers) Custom plans give us the flexibility to handle: * closed ERP integrations * enterprise requirements (SLA, advanced routing, multi-store setups) * bundles of modules (e.g. shipping included) * negotiated pricing * limited-time promos ### How custom plans work Merchants will see: * public plans (Start/Grow/Scale) * **plus** any private offer they've been granted Private offers appear in the Billing Center as an additional plan option, clearly labeled as a custom offer. A custom plan can change any of the following: * base monthly price * included allowances (feeds, SKUs, orders, shipping volume) * which modules are included * add-on rates (where applicable) * marketplace commission rate (where contractually agreed) * duration-based discounts (e.g. 20% for 3 months) **Example A — ERP deal (custom offer)** * Base price: €599/month * Includes: 2 integration connections * Shipping module included (no monthly shipping base add-on) **Example B — Promo** * Grow plan with 25% discount for 3 billing cycles Custom plans are designed to remain compatible with the same add-on/usage model (channels, modules, overages), so customers can still scale without renegotiating every time. ## Discounts, credits, and adjustments We support discounts in two main ways: * **Subscription discounts** (percentage or fixed discounts on the base plan) * **Usage discounts** (discounts applied to specific add-ons or usage charges) If something needs to be corrected (e.g. billing adjustment), we may apply a credit or a one-off adjustment depending on the situation. Discount availability may depend on your plan type and the scope (public plan vs private offer). Contact support for custom discount structures. ## How billing works (end-to-end) Start with a public plan (Start/Grow/Scale) or accept a private offer if provided. Add feeds, marketplace channels, shipping, or integrations as needed. If a new module could exceed your billing spend limit for the cycle, Shopify will request approval. You are billed monthly for your base plan, plus any usage-based add-ons, commissions, and overages. ## FAQ Most merchants want an easy entry point. We keep public plans minimal and let customers scale through add-ons and usage-based billing as they grow. Yes. Many merchants start with feeds only and add marketplaces later. The Billing Center shows your current plan, enabled add-ons, and an estimate based on current usage. Yes. For closed ERP systems, enterprise requirements, or agency-led deals we can provide a private offer/custom plan. No. Marketplace commissions are charged on top of marketplace/channel costs and any third-party fees. # Managing Connections Source: https://docs.digifist.com/galantis/connect/connections Create data flows between integrations with field mapping. A **Connection** links two integrations and defines the data flow between them. Galantis Connect marketplaces connection ## Creating a Connection 1. Navigate to the **Connections** section. 2. Click **Add Connection**. 3. Follow the setup wizard. 4. Select: * Source integration (data origin) * Target integration (data destination) 5. Map: * Source integration fields → Project Fields * Project Fields → Target integration fields # Galantis Connect Source: https://docs.digifist.com/galantis/connect/index A powerful platform for synchronizing data between your business systems. ## Getting Started Welcome to **Galantis Connect**, a powerful platform for synchronizing data between your various business systems. This document will guide you through the core concepts and features of the platform, helping you set up and manage your data flows effectively. Galantis Connect platform overview ## Core Concepts At its core, Galantis Connect is built around a few key concepts: ### Projects A **Project** is a workspace that contains all your integrations, connections, and rules. It's the top-level container for a specific data synchronization setup. ### Integrations An **Integration** is a connection to an external service, such as a Shopify store or an ERP system. You'll need to create an integration for each system you want to connect to Galantis Connect. ### Project Fields (Field Mapping) **Project Fields** are custom fields you define within a project. They act as a central, canonical data model for your project. Example: `product_sku` You then map fields from your various integrations to these central Project Fields. This is the heart of the field-mapping process. ### Connections A **Connection** defines the flow of data between two integrations. It specifies: * A source integration * A target integration * The direction of the data flow ### Rules The **Rule Engine** allows you to create powerful conditional logic to manipulate your data as it passes through Galantis Connect. Rules can be used to: * Clean data * Transform data * Validate data This ensures the data is in the correct format before it reaches its destination. Galantis Connect feature overview ## Next steps Learn how to add and configure external service connections Define your canonical data model with custom fields Create data flows between your integrations Build conditional logic to transform your data # Managing Integrations Source: https://docs.digifist.com/galantis/connect/integrations Connect external services to your Galantis Connect project. An integration represents a connection to an external service. Before you can sync any data, you need to add and configure your integrations. Galantis Connect integrations ## Adding an Integration 1. Navigate to the **Integrations** section in the Project Panel. 2. Click **Add Integration**. 3. Select the integration type (e.g., Shopify). 4. Fill in the required credentials and settings. 5. Save the integration. ## Verifying an Integration After adding an integration, you need to verify it. This usually involves authorizing Galantis Connect to access your data on the external platform. Once completed, the integration status will appear as **Verified**. # Field Mapping (Project Fields) Source: https://docs.digifist.com/galantis/connect/project-fields Define your canonical data model with custom field mapping. Field mapping in Galantis Connect is handled by **Project Fields**. These are the central, standardized fields for your project. Galantis Connect field mapping ## Creating Project Fields 1. Navigate to the **Project Fields** section. 2. Click **Add Field**. 3. Enter a field name (e.g., `product_name`, `customer_email`). * Use lowercase * No spaces (use underscores) 4. Select the **Entity Type**: * Product * Customer * Order 5. Add a description explaining the field's purpose. 6. Save the field. Once defined, Project Fields can be mapped during **Connection** setup. # The Rule Engine Source: https://docs.digifist.com/galantis/connect/rule-engine Build conditional logic to transform and validate data. The **Rule Engine** is one of the most powerful features of Galantis Connect. It allows you to build complex logic to transform your data. ## Creating a Rule 1. Navigate to the **Master Rules** section. 2. Click **Add Rule**. 3. Enter a rule name and description. 4. Select the **Entity Type**: * Product * Order * Customer ## Conditions Conditions define **when** a rule should be applied. A condition consists of: * Project Field * Operator (equals, contains, greater than, etc.) * Value Multiple conditions can be combined using: * AND * OR ## Actions Actions define **what happens** when conditions are met. An action consists of: * Action Type (Set Field Value, Copy From Field, Replace Text, etc.) Depending on the action, you may need: * A Project Field * A Value * Additional parameters ## Example Rule ```text theme={null} IF country equals "USA" THEN set shipping_cost to "10" ``` # Analytics Source: https://docs.digifist.com/galantis/discount/analytics/index How Galantis Discount Flow measures campaign performance — every metric defined, how orders are attributed, how refunds are handled, and how to export your data. Galantis Discount Flow tracks every campaign from storefront view to paid order, so you can see exactly what each discount costs and what it brings back. All numbers come from real Shopify order data — order created, order paid, refund created, and order cancelled webhooks — so what you see reflects actual orders, not estimates. ## Dashboard vs the Analytics page The app gives you two views of the same underlying data: * **Dashboard (Home)** — a quick daily health check: metric cards for **Active Campaigns**, **Total Usage** (applications, with a 7-day trend), **Total Revenue** (with the refunded amount shown alongside), and **Conversion Rate** (with total discounts given). Below the cards you get a **Revenue Trend** chart (Revenue + Refunds), a **Campaign Distribution** donut grouped by status, a **Needs Attention** list, **Top Performers** (your top 3 campaigns by revenue), **Recent Campaigns**, and a plan usage card. If your shop is on the Free plan and has hit its monthly cap, a usage-paused banner appears here. * **Analytics page** — the deep-dive view with a longer time range, more charts, a per-campaign performance table, and CSV export. The Analytics page in Galantis Discount Flow showing metric cards, charts, and the campaign performance table ## Analytics page controls Three controls at the top of the Analytics page shape everything below them: | Control | What it does | | -------------------- | ---------------------------------------------------------------------------------------------- | | **Period** | Switches the reporting window between **Last 7 days**, **Last 30 days**, and **Last 90 days**. | | **Include archived** | When checked, archived campaigns are included in metrics, charts, and the performance table. | | **Export CSV** | Downloads the current view as a CSV file for your own reporting or spreadsheets. | The **Conversion Rate** card compares the selected period against the previous period of the same length, so switching **Period** also changes the comparison baseline. ## Every metric, defined Galantis Discount Flow records a small set of events per campaign and derives everything else from them: | Metric | Definition | | -------------------- | ------------------------------------------------------------------------------------ | | Impressions | Times the campaign was evaluated and shown on the storefront. | | Applications (Usage) | Times the discount was applied in checkout. | | Conversions | Paid orders attributed to the campaign. | | Revenue | Total value of attributed paid orders. Refunds and cancellations reduce this figure. | | Refunded | Refunded and cancelled amounts, shown separately so you can see gross vs net. | | Discount | Total discount amount given by the campaign. | | Conversion rate | Conversions ÷ applications. | | Discount ROI | Revenue ÷ discount given — how much revenue each unit of discount generated. | Free-shipping-only campaigns don't report revenue columns, since the discount applies to delivery rather than product prices. All money metrics are reported in your **store currency**, converted by Shopify. This includes orders placed in other checkout currencies and campaigns that use [per-currency amounts](/galantis/discount/rule-builder/currency-markets) — there is no per-currency breakdown. ## Charts The Analytics page includes five visualizations for the selected period: * **Revenue Trend** — revenue and refunds over time, plotted together. * **Usage Trend** — discount applications over time. * **Conversion Funnel** — impressions → applications → conversions, showing where customers drop off. * **Campaign Distribution** — campaigns grouped by status. * **Top Performers** — your highest-revenue campaigns. ## Campaign Performance table The table at the bottom breaks results down per campaign with columns for **Campaign**, **Usage**, **Conv. Rate**, **Revenue**, **Discount**, **Refunded**, and **ROI**. Use it together with **Include archived** to compare retired campaigns against active ones. ## How attribution and refunds work Orders are attributed back to the campaign automatically — you don't have to tag anything: Every published campaign embeds an invisible marker in its Shopify discount. For code-based campaigns, the discount code itself identifies the campaign. When an order is created and paid, Shopify notifies Galantis Discount Flow, which matches the marker (or code) to the campaign and records a conversion, the revenue, and the discount amount given. When a refund is created or an order is cancelled, the attributed revenue is reduced and the refunded amount is shown separately — on the **Total Revenue** card, in the **Revenue Trend** chart, and in the **Refunded** column of the performance table. Because refunds reduce revenue after the fact, numbers for a recent period can decrease slightly over time as returns come in. This is expected — it means your ROI figures stay honest. ## Exporting data Click **Export CSV** on the Analytics page to download the data for the currently selected **Period** (and archived campaigns, if **Include archived** is checked). The export mirrors what you see on screen, so set your filters first. ## Related guides * [How discounts apply at checkout](/galantis/discount/storefront/how-discounts-apply) — where applications and conversions actually happen * [Plans & limits](/galantis/discount/billing/plans-limits) — how Free-plan usage caps relate to the numbers you see here * [Troubleshooting](/galantis/discount/support/troubleshooting) — what to check when numbers look off # Plans & limits Source: https://docs.digifist.com/galantis/discount/billing/plans-limits Free vs Pro in Galantis Discount Flow — campaign and usage limits, what happens when a Free shop hits its monthly cap, and how to change plans through Shopify. Galantis Discount Flow has two plans: **Free** and **Pro**. Every feature is available on both plans except one — [per-currency amounts](/galantis/discount/rule-builder/currency-markets) require Pro. Beyond that, the difference is capacity: how many campaigns can be active at once, and how much monthly discount usage your store can run. Billing is handled entirely by Shopify. ## Plan comparison | | Free | Pro | | ----------------------------- | :---: | :----------------------------: | | Active campaigns | 3 max | Unlimited | | Discounted orders / month | 25 | Unmetered | | Discount applications / month | 1,000 | Unmetered | | Per-currency amounts | — | Included | | All other features | All | All | | Billing | — | Monthly or annual, via Shopify | Per-currency amounts are the only feature gated to Pro. Otherwise, Free and Pro shops use the same campaign builder, discount types, analytics, and storefront embed — Pro removes the caps. On the Free plan, the **Set a different amount per currency** checkbox in the Rule Builder is disabled with a **Pro** badge and an **Upgrade** button, and saving or activating a campaign with per-currency amounts is rejected: "Per-currency amounts require the Pro plan. Remove them or upgrade to Pro to save this campaign." ## Free plan limits The Free plan has one structural limit and two monthly usage caps: * **3 active campaigns** — you can create as many campaigns as you like, but at most 3 can be active at the same time. Trying to activate a fourth shows: "FREE plan allows a maximum of 3 active campaigns. Upgrade to activate more." * **25 discounted orders per month** — orders where a Galantis Discount Flow discount was applied. * **1,000 discount applications per month** — times a discount was applied in checkout. ### The monthly period Usage caps reset on a monthly period **anchored to your install date**, not the calendar month. If you installed on the 14th, each usage period runs from the 14th to the 13th of the following month. ### What happens when you hit a cap When either cap is reached, all of the store's discounts are paused — campaigns stop applying at checkout for the rest of the period. A usage-paused banner is shown on the dashboard so you know why discounts stopped. At the start of the next monthly period, discounts reactivate on their own — no action needed. Upgrading to Pro lifts the pause **immediately** instead. While usage is paused, customers see no Galantis Discount Flow discounts at checkout. If your campaigns drive meaningful revenue, treat the usage-paused banner as a prompt to upgrade rather than wait out the period. The Plan card in Galantis Discount Flow Settings showing the current plan and Change plan button ## Pro plan Pro removes all caps: unlimited active campaigns and unmetered usage. Pro is available as a monthly or an **annual** subscription. ## Changing your plan In Galantis Discount Flow, go to **Settings**. The **Plan** card shows your current plan badge and notes that billing is handled securely by Shopify. You're taken to a Shopify-hosted page where the subscription is managed. Confirm the change there — no payment details are ever entered in Galantis Discount Flow. ### Upgrade behavior Upgrading to Pro takes effect right away. If your store was usage-paused on Free, the pause is lifted **immediately** and discounts start applying again. ### Downgrade behavior Downgrading from Pro to Free re-applies the 3-active-campaign limit. If more than 3 campaigns are active at the time, campaigns beyond the limit are **auto-paused** — the oldest 3 are kept active. You can choose which 3 stay active by pausing and activating campaigns yourself afterwards. Downgrading also automatically **pauses any active campaigns that use per-currency amounts**, since those require Pro. Each pause is recorded in the **Activity Log**. To reactivate such a campaign on Free, open it in the Rule Builder, untick **Set a different amount per currency** (this clears the per-currency rows), set a single amount, and activate it again. See [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets). ## Related guides * [Settings](/galantis/discount/settings) — the Plan card and the Activity Log, where plan changes and usage events are recorded * [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets) — the one Pro-gated feature, in full * [Troubleshooting](/galantis/discount/support/troubleshooting) — the usage-paused banner and activation limit errors explained # Combinations Source: https://docs.digifist.com/galantis/discount/campaigns/combinations How campaigns in Galantis Discount Flow stack with other discounts — the three combination classes and the best-discount rule on shared cart lines. By default, a Shopify cart applies one discount at a time. The **Combinations** card in Galantis Discount Flow lets a campaign opt in to stacking with other discounts, using the same combination system Shopify applies to its native discounts. Getting combinations right matters twice over: too restrictive and a customer's free-shipping code silently cancels your sale price; too permissive and discounts pile up beyond what you budgeted. ## The Combinations card The card appears in step 3 of the creation wizard and on the campaign detail page. Under the heading **"This discount can be combined with:"** are three checkboxes: * **Order discounts** — discounts applied to the whole order total * **Product discounts** — discounts applied to specific products or cart lines * **Shipping discounts** — free or reduced shipping Each checkbox corresponds to one of Shopify's discount classes. Ticking a class means your campaign is willing to apply alongside discounts of that class — leaving all three unticked means the campaign never stacks with anything. The Combinations card with the three discount class checkboxes Combination is mutual. Your campaign stacks with another discount only when both sides allow the other's class — your settings alone can't force stacking with a discount that doesn't permit it. ## The best-discount rule on shared lines There is one rule that combination settings cannot override: on the same cart line, **only the best product discount applies** among competing product discounts. Two product discounts can coexist in one cart — each applying to different lines — but where they both target the same line, the customer gets the better of the two, not both. ## Scenarios A 20% storewide campaign runs alongside a free-shipping campaign for carts over 150. Tick **Shipping discounts** on the percentage campaign and **Product discounts** on the free-shipping campaign. A qualifying cart then gets both: 20% off the products and free delivery. If either side leaves the other's class unticked, only one of the two applies. A 30% end-of-season campaign covers your whole catalog, and a Buy 1 Get 1 Free campaign covers one collection — both allowing **Product discounts**. On lines only the seasonal sale targets, 30% applies. On lines where both compete, the best-discount rule picks whichever benefits the customer more on that line — they never stack on the same line. A deep 50% clearance campaign shouldn't combine with anything. Leave all three checkboxes unticked. The clearance discount then applies on its own, and no order, product, or shipping discount joins it in the same cart. A fixed 25-off order campaign (an order discount) allows **Product discounts**, and a 10% product campaign allows **Order discounts**. Both apply to a qualifying cart: the product discount reduces line prices, and the order discount reduces the total. Different classes never compete under the best-discount rule — that rule only arbitrates between product discounts on the same line. Review combinations before every major sale. Stacked discounts multiply quickly — a 30% campaign combining with a 20% order discount gives away far more margin than either does alone. ## Quick reference | Setting | Effect | | ----------------------------- | ------------------------------------------------------------------------------- | | **Order discounts** ticked | Can apply together with order-level discounts | | **Product discounts** ticked | Can apply together with product-level discounts (best one wins per shared line) | | **Shipping discounts** ticked | Can apply together with shipping discounts | | Nothing ticked | The campaign never stacks with any other discount | ## Related guides * [Creating campaigns](/galantis/discount/campaigns/creating-campaigns) — where the Combinations card appears in the wizard * [Managing campaigns](/galantis/discount/campaigns/managing-campaigns) — changing combinations on a live campaign * [Campaigns overview](/galantis/discount/campaigns/index) — how campaigns map to Shopify discounts # Creating Campaigns Source: https://docs.digifist.com/galantis/discount/campaigns/creating-campaigns The 3-step campaign wizard in Galantis Discount Flow — choose a template, build the discount logic, then schedule and publish. New campaigns are created through a 3-step wizard: **Choose Template**, **Details**, and **Publish**. The wizard takes you from a blank canvas (or a ready-made template) to a live Shopify discount in a few minutes, and validation at each step ensures you can't publish a flow that doesn't work. To start, open **Campaigns** and click **Create Campaign**. ## The wizard, step by step The first step shows the template gallery — six ready-made campaign types covering the most common discount patterns. Selecting one prefills the campaign name and the entire discount flow, and everything stays editable in the next step. Prefer a blank canvas? Click **Start from scratch** below the gallery to begin with an empty flow. See [Templates](/galantis/discount/campaigns/templates) for what each template contains. This step combines the campaign's identity with its logic: * **Campaign Name** — required. The field shows the placeholder "e.g. Summer Sale 20%". Names must be unique across your campaigns. * **Rule Builder** — the visual canvas where you build the discount flow: the conditions a cart must meet and the discount action that applies when it does. If you started from a template, a badge shows which template is in use, with a **Change template** option to go back and pick another. You cannot advance past this step until the flow has a working action. Validation errors appear when you click **Next**, so a blank starter canvas won't show errors before you've built anything. The final step holds two cards: * **Active dates** — the start date and time (defaults to now, in your store's timezone) and an optional **Set end date** checkbox. See [Scheduling](/galantis/discount/campaigns/scheduling). * **Combinations** — checkboxes controlling which other discount classes this campaign can stack with. See [Combinations](/galantis/discount/campaigns/combinations). The footer offers two ways to finish: * **Save as draft** — stores the campaign without publishing. No discount is created in Shopify. * **Create Campaign** — publishes the campaign to Shopify as a live (or scheduled) discount. Step 2 of the campaign wizard with the Rule Builder canvas ## Draft or publish? | | Save as draft | Create Campaign | | ------------------------------------ | ------------- | ------------------------------------------------------ | | Status after saving | **Draft** | **Active** (or **Scheduled** with a future start date) | | Discount created in Shopify | No | Yes | | Counts toward active-campaign limits | No | Yes | | Flow must be valid | Yes | Yes | Draft early, publish late. A draft lets you build and refine a flow over several sessions without touching your live store — then publish from the campaign detail page when the promotion is ready. ## Publish-time limit checks Publishing runs two checks that drafting does not: **Free plan limit** — on the Free plan, at most **3 campaigns** can be active at once. Publishing a fourth is blocked until you pause or archive another campaign, or upgrade your plan. **Shopify's automatic discount limit** — Shopify allows at most 25 active automatic discounts per store, across all apps and native discounts. If publishing would exceed it, you'll see the message "A store can have at most 25 active automatic discounts." Campaigns with a **Discount code** condition publish as code-based discounts and do not count toward this limit. If a limit blocks publishing, the campaign is not lost — save it as a draft and publish once there's room. ## Automatic or code-based? The wizard decides this from your flow, not from a separate setting. A flow with a **Discount code** condition publishes as a code-based discount that customers redeem at checkout; any other flow publishes as an automatic discount that applies on its own. ## Related guides * [Templates](/galantis/discount/campaigns/templates) — what each of the six templates prefills * [Scheduling](/galantis/discount/campaigns/scheduling) — start dates, end dates, and timezone behavior * [Combinations](/galantis/discount/campaigns/combinations) — stacking rules to set before you publish * [Managing campaigns](/galantis/discount/campaigns/managing-campaigns) — editing and controlling campaigns after creation # Campaigns Source: https://docs.digifist.com/galantis/discount/campaigns/index Discount flows built in the visual Rule Builder and published to Shopify as real discounts — with a full lifecycle from draft to archive. A campaign is a discount flow you build in the visual Rule Builder of Galantis Discount Flow and publish to Shopify as a real, working discount. Every percentage deal, free-shipping threshold, BOGO offer, and loyalty reward runs through a campaign — one place to design the logic, schedule the window, and track the results. Once published, a campaign is not a simulation. It is applied at checkout by a discount Function and appears on Shopify's own Discounts page alongside any discounts you created natively. ## How campaigns become Shopify discounts When you publish a campaign, Galantis Discount Flow creates a matching discount in Shopify: * **Automatic discounts** — the default. The discount applies on its own whenever a cart meets the flow's conditions; customers never enter a code. * **Code-based discounts** — created when your flow contains a **Discount code** condition. Customers must enter the code at checkout for the flow to apply. Published campaigns are visible on Shopify's native **Discounts** page. Clicking one there opens the campaign in Galantis Discount Flow, so the app stays the single place where the discount is edited. The Campaigns list in Galantis Discount Flow ## The campaign lifecycle Every campaign carries a status that describes where it is in its lifecycle. The Campaigns list groups campaigns into tabs by these same statuses. | Status | Meaning | How a campaign gets there | | ------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | **Active** | The discount is live and applying at checkout | Published with a start date of now or earlier, or activated from the list or detail page | | **Scheduled** | Published, but the start date is in the future | Published with a future start date in the **Active dates** card | | **Draft** | Saved but never published — no discount exists in Shopify yet | Created with **Save as draft** in the wizard | | **Paused** | Temporarily stopped; the discount no longer applies | Paused manually, or paused automatically when a Free plan usage cap is reached | | **Ended** | The campaign's end date has passed | The optional end date in **Active dates** is reached | | **Archived** | Removed from Shopify, kept in the app with its analytics | Archived from the detail page or via a bulk action | Archiving removes the live discount from Shopify but preserves all analytics. Restoring an archived campaign brings it back as **Paused**, so you can review it before reactivating. ## Where to go next The 3-step wizard — templates, the Rule Builder, and publishing. The Campaigns list, bulk actions, and the campaign detail page. Start and end dates, timezones, and the Scheduled and Ended statuses. How campaigns stack with order, product, and shipping discounts. Six ready-made starting points, from Percentage Discount to Loyal Customer Reward. ## Limits to know about Two limits apply when publishing campaigns: * On the **Free plan**, a maximum of **3 campaigns** can be active at once. The Free plan also has monthly usage caps — when reached, all discounts pause until the next monthly period or an upgrade. * Shopify allows at most **25 active automatic discounts** per store, across all apps and native discounts. Code-based campaigns do not count toward this limit. Both limits are checked at publish time — see [Creating campaigns](/galantis/discount/campaigns/creating-campaigns) for the exact behavior. ## Related guides * [Creating campaigns](/galantis/discount/campaigns/creating-campaigns) — the full 3-step wizard walkthrough * [Managing campaigns](/galantis/discount/campaigns/managing-campaigns) — statuses in practice: pause, archive, restore * [Templates](/galantis/discount/campaigns/templates) — the fastest way to a first campaign # Managing Campaigns Source: https://docs.digifist.com/galantis/discount/campaigns/managing-campaigns The Campaigns list and detail page in Galantis Discount Flow — status tabs, performance columns, bulk actions, pause and archive semantics, and sync recovery. The Campaigns page is the control room of Galantis Discount Flow: every campaign, its status, its schedule, and its performance in one sortable table. From here you can activate, pause, or archive campaigns in bulk, or open any campaign to edit its details. Day-to-day management happens in two places — the list for overview and bulk work, and the campaign detail page for everything specific to one campaign. ## The Campaigns list The Campaigns list with status tabs, summary bar, and performance columns ### Summary bar Above the table, four tiles summarize your whole campaign portfolio: * **Total campaigns** — with a breakdown of drafts and ended campaigns * **Active** — with scheduled and paused counts alongside * **Total usage** — the total number of discounts applied * **Total revenue** — with the refunded amount alongside ### Tabs and search Campaigns are grouped into status tabs, each showing its count: **All**, **Active**, **Scheduled**, **Draft**, **Paused**, **Ended**, and **Archived**. Use the search field to filter by campaign name within the current tab. ### Columns | Column | What it shows | | ---------------- | --------------------------------------------------- | | **Name** | The campaign name; click a row to open the campaign | | **Status** | The lifecycle status badge | | **Schedule** | The active-dates window, in your store's timezone | | **Impressions** | How often the campaign was seen | | **Applications** | How often the discount was applied | | **Conversions** | Orders that used the discount | | **Revenue** | Revenue from converting orders | | **Discount** | The total amount discounted | | **Refunded** | Refunded revenue | | **Refunds** | The refund rate on converting orders | Metric columns are sortable. Campaigns that only give free shipping show "—" in the revenue-related columns, since there is no discounted product revenue to attribute. ### Bulk actions Select one or more campaigns to reveal bulk actions, each confirmed in a modal before anything changes: * **Activate** — the selected campaigns' discounts go live for eligible customers * **Pause** — their discounts stop applying until re-activated * **Archive** — their live discounts are removed from Shopify; analytics are kept On the **Archived** tab, the bulk action is **Restore** instead. Restored campaigns return as **Paused**, and any campaign whose name has since been taken is automatically renamed to avoid a duplicate. On the Free plan, when the monthly usage cap is reached (25 discounted orders or 1,000 applications), all discounts are paused until the next monthly period or an upgrade — and a banner appears on both the Dashboard and the Campaigns list. ## The campaign detail page Clicking a campaign opens its detail page, titled with the campaign name and its status badge. The header offers: * A **Pause** or **Activate** button, depending on whether the campaign is currently published * A **More actions** menu containing **Archive** For an archived campaign, the header instead shows a single **Restore** action, and an informational card notes when the campaign was archived and that its analytics are preserved. Below the header, the page stacks: * **Performance** — the campaign's **Usage** and **Revenue** at a glance * **Campaign Details** — the **Campaign Name** field * **Active dates** — the schedule (see [Scheduling](/galantis/discount/campaigns/scheduling)) * **Rule Builder** — the full discount flow, editable in place * **Combinations** — stacking settings (see [Combinations](/galantis/discount/campaigns/combinations)) ### Editing with the save bar Any change to the name, dates, flow, or combinations activates a save bar with **Save** and **Cancel**. The page tracks unsaved changes, so you can't navigate away and silently lose an edit — save to apply everything at once, or cancel to revert to the last saved state. A campaign detail page with the save bar active ### Archive and restore semantics Archiving is the safe way to retire a campaign: * The live discount is **removed from Shopify**, so it immediately stops applying * All analytics are **preserved** — the campaign stays visible on the Archived tab * **Restore** brings it back as **Paused**, ready to review and re-activate; if the name was reused in the meantime, the restored campaign is automatically renamed Pause when a promotion might come back soon; archive when it's over. Both stop the discount, but archiving also removes it from Shopify's Discounts page and moves it out of your working tabs. ### Sync errors and Resync If the last sync of a campaign to Shopify failed, a sync error banner appears at the top of the detail page explaining the failure. Click **Resync** to queue a fresh sync attempt. While a sync is running, the banner shows the in-progress state instead. ## Related guides * [Creating campaigns](/galantis/discount/campaigns/creating-campaigns) — the 3-step wizard * [Scheduling](/galantis/discount/campaigns/scheduling) — how Scheduled and Ended statuses work * [Campaigns overview](/galantis/discount/campaigns/index) — the full status lifecycle reference # Scheduling Source: https://docs.digifist.com/galantis/discount/campaigns/scheduling The Active dates card in Galantis Discount Flow — start and end times in your store's timezone, and how the Scheduled and Ended statuses work. Every campaign in Galantis Discount Flow has an **Active dates** card that controls when its discount runs. Set a start in the future and the campaign publishes as **Scheduled**, going live on its own at the right moment; add an end date and it winds down automatically as **Ended** — no midnight logins required. The card appears in step 3 of the creation wizard and on every campaign detail page, so schedules can be adjusted at any time. The Active dates card with start date, start time, and the Set end date checkbox ## The Active dates card * **Start date** and **Start time** — when the discount begins applying. Defaults to now, so a freshly published campaign is live immediately unless you change it. * **Set end date** — an optional checkbox. Tick it to reveal **End date** and **End time** fields; leave it unticked and the campaign runs indefinitely until you pause, end, or archive it. Two validation rules apply to the end: * The end must be **after the start** * The end cannot be **in the past** If either rule is broken, an inline error appears on the end fields and the campaign can't be saved until it's fixed. ## Everything runs on store time All dates and times are entered in your **store's timezone** — the one configured in your Shopify settings, not your laptop's clock or UTC. As a reminder, the store's UTC offset is shown right next to the time inputs (for example, **Start time (UTC+02:00)**). If you manage a store from another timezone, trust the offset shown next to the field. A "9:00 PM launch" means 9:00 PM where your store lives. ## How schedules map to statuses | Schedule | Status | What happens | | -------------------------------- | ------------- | ------------------------------------------------------------------- | | Start now (default), no end date | **Active** | Live immediately, runs until you stop it | | Start in the future | **Scheduled** | Published to Shopify but dormant; flips to Active at the start time | | End date reached | **Ended** | The discount stops applying; the campaign moves to the Ended tab | A **Scheduled** campaign is a real published discount — it counts toward active-campaign limits and appears on Shopify's Discounts page — it simply hasn't started applying yet. An **Ended** campaign keeps all its analytics and can be relaunched by updating its dates and activating it again. ## Scheduling patterns Set both a start and an end a few hours apart — for example, Friday 18:00 to Friday 23:59 store time. Publish in advance as **Scheduled**; the sale starts and stops on its own, with no one on call to flip switches. For a multi-week promotion like an end-of-season sale, set the start to the season's first day and tick **Set end date** for its last. Pair with the [End of Season template](/galantis/discount/campaigns/templates) for a ready-made flow. Leave **Set end date** unticked for offers that should always be on, such as a permanent free-shipping threshold. The campaign runs until you pause or archive it. Build and publish a campaign days ahead with a future start date. It sits safely in **Scheduled** — visible, reviewable, and editable — until launch time. Schedule big promotions as far ahead as you like. Scheduled campaigns can still be edited freely — name, flow, dates, and combinations — right up until they go live. ## Related guides * [Creating campaigns](/galantis/discount/campaigns/creating-campaigns) — where Active dates fits in the wizard * [Managing campaigns](/galantis/discount/campaigns/managing-campaigns) — pausing and archiving as manual alternatives to end dates * [Campaigns overview](/galantis/discount/campaigns/index) — the full status lifecycle # Templates Source: https://docs.digifist.com/galantis/discount/campaigns/templates The six ready-made campaign templates in Galantis Discount Flow — what each one prefills and how to customize it after selecting. Templates are ready-made campaigns covering the six most common discount patterns in e-commerce. Selecting one in the first step of the wizard prefills the campaign name and the entire Rule Builder flow, so a working promotion is one click away — and every part of it remains editable. Templates are starting points, not constraints. Swap the amounts, tighten the conditions, extend the flow — the result is an ordinary campaign like any built from scratch. ## The template gallery The gallery is step 1 of the creation wizard (**Campaigns** → **Create Campaign**). Each template shows its name, a short description, and a category badge; below the grid, **Start from scratch** begins with an empty canvas instead. The template gallery in step 1 of the campaign wizard ## The six templates **Popular** — "Apply a specific percentage discount to the entire cart." Prefills a flat 10% off the whole cart. **Popular** — "Free shipping on orders above the minimum amount." Prefills free shipping when the cart total reaches 150. **Popular** — "Deduct a fixed amount from the cart." Prefills 25 off when the cart total reaches 100. **Growth** — "Buy one get one free on selected products." Prefills a BOGO flow for products you select. **Seasonal** — "Big end-of-season discount campaign." Prefills a 30% discount for clearing out a season's stock. **Retention** — "Special discount for customers who exceed a certain order count." Prefills 50 off for customers with more than 5 orders. All template amounts are in your store's own currency — the "25 off" in Fixed Amount Discount means 25 of whatever your store sells in. ## At a glance | Template | Category | Prefilled flow | | --------------------- | --------- | ------------------------------------------------ | | Percentage Discount | Popular | Flat 10% off the entire cart | | Free Shipping | Popular | Free shipping when the cart total is 150 or more | | Fixed Amount Discount | Popular | 25 off when the cart total is 100 or more | | Buy 1 Get 1 Free | Growth | Buy one, get one free on selected products | | End of Season | Seasonal | 30% off for a seasonal clearance | | Loyal Customer Reward | Retention | 50 off after more than 5 orders | ## Customizing after selecting Selecting a template jumps you to step 2 of the wizard with everything prefilled: The **Campaign Name** field is prefilled with the template's name. Replace it with something specific — "Summer Sale 20%" tells you more in the Campaigns list than "Percentage Discount". Change the discount value, raise or lower thresholds, pick different products, or add further conditions — such as a **Discount code** condition to make the campaign code-based. The template's flow is fully editable, and a badge above the canvas shows which template you started from, with a **Change template** option to pick another. Continue to step 3 to set [Active dates](/galantis/discount/campaigns/scheduling) and [Combinations](/galantis/discount/campaigns/combinations), then **Create Campaign** to publish or **Save as draft** to keep working later. Templates pair naturally with schedules: start End of Season with a seasonal end date, or run Loyal Customer Reward with no end date as an evergreen retention offer. ## Related guides * [Creating campaigns](/galantis/discount/campaigns/creating-campaigns) — the full 3-step wizard walkthrough * [Scheduling](/galantis/discount/campaigns/scheduling) — putting a time window around a templated campaign * [Combinations](/galantis/discount/campaigns/combinations) — how a templated campaign stacks with your other discounts # Create your first campaign Source: https://docs.digifist.com/galantis/discount/getting-started/first-campaign A full walkthrough of the 3-step campaign wizard using the Percentage Discount template — from template pick to a live discount at checkout. Every campaign in Galantis Discount Flow is created in the same 3-step wizard: pick a starting point, shape the logic in the Rule Builder, then schedule and publish. This guide walks the whole wizard end to end using the **Percentage Discount** template — the simplest of the 6 starter templates and the fastest way to see a real discount at checkout. The wizard's footer keeps you oriented throughout: **Next** moves you forward, **Back** returns to the previous step, and the final step offers **Save as draft** or **Create Campaign**. ## Before you start Open **Campaigns** in the app navigation and click the button to create a new campaign. You'll land on step 1 of the wizard. On the **Free plan** you can have up to **3 active campaigns** at a time. Drafts don't count against this limit, so you can prepare as many campaigns as you like and activate them as slots free up — or upgrade to Pro for unlimited campaigns via **Settings → Change plan**. ## The 3-step wizard Step 1 shows the template gallery with 6 starter templates — **Percentage Discount**, **Free Shipping**, **Buy 1 Get 1 Free**, **Fixed Amount Discount**, **End of Season**, and **Loyal Customer Reward** — plus a **Start from scratch** tile for a blank canvas. Select **Percentage Discount**. The wizard pre-fills the campaign name and loads a ready-made flow into the Rule Builder, then moves you to step 2. You can change your mind later with **Change template**. Step 2 is where the campaign takes shape: * **Campaign Name** — pre-filled from the template; rename it to something you'll recognize in lists and analytics, like "Summer 10% off". * **Rule Builder** — the visual canvas. The Percentage Discount template gives you a minimal flow ending in a **Percentage off** action. Open the action node to set the **Discount title** (what customers see) and the **Percentage**. Want the discount to be conditional? Add condition nodes such as **Cart total** or **Customer tag**, combine them with **AND**/**OR**/**NOT** gates, and wire them into the flow. For your first campaign, the template's defaults are enough — click **Next**. Step 2 of the campaign wizard with the Percentage Discount flow in the Rule Builder Step 3 handles scheduling and stacking: * **Active dates** — pick a **Start date**, and optionally toggle **Set end date** for a fixed end. Times use your store timezone. A campaign with no end date runs until you deactivate it. * **Combinations** — choose which Shopify discount classes this campaign can combine with: order, product, and shipping discounts. This mirrors Shopify's native combination rules. Finish with one of the two footer buttons: * **Create Campaign** — publishes the flow to Shopify as a real discount. It becomes active according to its start date. * **Save as draft** — stores the campaign without publishing, so you can come back and finish it later. Drafts don't count toward the Free plan's active-campaign limit. ## Where your campaign appears After publishing, the campaign shows up in two places: | Location | What you'll see | | -------------------------------------------- | ------------------------------------------------------------------------------------------------- | | **Campaigns** list in Galantis Discount Flow | The campaign with its status, where you can edit, deactivate, or review it. | | **Shopify's native Discounts page** | The published discount as a real Shopify discount — proof that nothing lives only inside the app. | Because your Percentage Discount flow contains no **Discount code** condition, it publishes as an **automatic discount** — customers get it at checkout with no code to type. Add a **Discount code** condition and the campaign becomes a code-based discount instead. Shopify allows a maximum of **25 active automatic discounts per store**. Code-based campaigns don't count toward this Shopify limit, so heavy users often mix both types. ## Related guides * [Storefront setup](/galantis/discount/getting-started/storefront-setup) * [Rule Builder overview](/galantis/discount/rule-builder/index) * [Campaign templates](/galantis/discount/campaigns/templates) * [Analytics](/galantis/discount/analytics/index) # Getting Started Source: https://docs.digifist.com/galantis/discount/getting-started/index Go from a fresh Shopify store to a live discount campaign — install the app, pick a plan, build your first campaign, and enable the theme app embed. Galantis Discount Flow lives inside your Shopify admin, so getting started is short: install from the Shopify App Store, select a plan, and build your first campaign in the 3-step wizard. Most merchants go from install to a published campaign in a single sitting. There is one storefront step that's easy to miss: enabling the **Galantis Discount Flow** theme app embed. Price discounts are applied at checkout either way, but free-gift auto-add and storefront signals only work with the embed switched on. Plan selection is part of the install flow — even the **\$0 Free plan** must be actively selected on Shopify's plan-selection page before you land on the Dashboard. Every feature is available on every plan; plans differ only by limits. ## The journey Install Galantis Discount Flow from the Shopify App Store and approve the permissions Shopify shows. The app syncs your shop's currency, locale, and timezone automatically. See [Installation](/galantis/discount/getting-started/installation). If you've never selected a plan, Shopify redirects you to its hosted plan-selection page. Choose **Free** (up to 3 active campaigns with monthly usage caps) or **Pro** (unlimited campaigns, unmetered usage), then land on the Dashboard. Use the 3-step wizard: pick a template or **Start from scratch**, name the campaign and shape it in the Rule Builder, then set active dates and combinations. Finish with **Save as draft** or **Create Campaign**. See [Your first campaign](/galantis/discount/getting-started/first-campaign). In the Shopify theme editor, switch on the **Galantis Discount Flow** app embed so free gifts are auto-added on the storefront and customers see discount signals. See [Storefront setup](/galantis/discount/getting-started/storefront-setup). The Galantis Discount Flow dashboard after installation ## The guides in this section The install flow, what each permission is for, the plan-selection redirect, and what happens right after install. A full walkthrough of the 3-step wizard using the Percentage Discount template, from template pick to published discount. Enable the theme app embed and understand each embed setting — and when the embed is required versus optional. ## Where everything lives After setup, you'll work from four areas in the app's navigation: | Area | What it's for | | ------------- | ------------------------------------------------------------------------------------------------------- | | **Home** | The dashboard — your starting point after install, with an overview of campaign performance. | | **Campaigns** | Create, edit, and manage campaigns; published campaigns also appear on Shopify's native Discounts page. | | **Analytics** | Revenue, usage, conversion rate, ROI, refund tracking, and CSV export. | | **Settings** | Plan management (**Change plan**) and app configuration. | ## Related guides * [Installation](/galantis/discount/getting-started/installation) * [Your first campaign](/galantis/discount/getting-started/first-campaign) * [Storefront setup](/galantis/discount/getting-started/storefront-setup) * [Campaigns overview](/galantis/discount/campaigns/index) # Installation Source: https://docs.digifist.com/galantis/discount/getting-started/installation Install Galantis Discount Flow from the Shopify App Store, review the requested permissions, select a plan, and land on the Dashboard. Galantis Discount Flow installs like any public Shopify app: open the listing, review permissions, approve, and you're redirected into the app inside your Shopify admin. The one extra step is plan selection — every merchant picks a plan (including the \$0 Free plan) before reaching the Dashboard. The whole flow usually takes a couple of minutes. There is no separate account to create; the app runs entirely inside Shopify, and billing is handled by Shopify. ## The install flow Find Galantis Discount Flow in the Shopify App Store and click install. Sign in to the Shopify account that owns the store you want to install on. Shopify shows the access the app requests: read discounts, read locales, read orders, read products, and write discounts. Each scope powers a specific part of the app — see [What each permission is for](#what-each-permission-is-for) below. If you've never selected a plan for this store, Shopify redirects you to its hosted plan-selection page. You must pick a plan to continue — **even the \$0 Free plan must be actively selected**. Free gives you up to 3 active campaigns with monthly usage caps; Pro is unlimited. You can switch later under **Settings → Change plan**. Once a plan is selected, you land on the Galantis Discount Flow Dashboard inside your Shopify admin, ready to create your first campaign. Shopify permission review screen during Galantis Discount Flow installation ## What each permission is for **Read and write discounts** — The core of the app. When you publish a campaign, Galantis Discount Flow creates a real automatic or code-based discount in Shopify; reading discounts keeps the app in sync with what's live on Shopify's native Discounts page. **Read orders** — Powers Analytics (revenue, usage, conversion rate, ROI, refund tracking) and order-history conditions in the Rule Builder such as **Order count** and **First order**. **Read products** — Lets you pick products and collections in Rule Builder conditions and actions, such as **Specific products**, **Free gift**, and **Bundle discount**. **Read locales** — Used together with your shop settings to sync currency, locale, and timezone, so amounts and schedules display correctly for your store. All five scopes are required for the app to work end to end. Shopify presents them together during install; there is no partial-install path. ## What happens right after install As soon as the install completes, Galantis Discount Flow syncs your **shop currency, locale, and timezone**. This means: * Discount amounts in the Rule Builder are shown in your store currency. * Campaign **Active dates** are scheduled in your store timezone — a campaign that starts "at midnight" starts at midnight for your store, not UTC. * Your Free-plan usage period (if applicable) is anchored to your install date and resets monthly from that anchor. No further configuration is needed before creating a campaign. The one remaining setup task is the storefront: enabling the theme app embed, covered in [Storefront setup](/galantis/discount/getting-started/storefront-setup). ## Uninstalling and the 48-hour grace window To uninstall, go to **Settings → Apps and sales channels** in your Shopify admin, find Galantis Discount Flow, and click **Uninstall**. Shopify revokes the granted permissions automatically. Uninstalling starts a **48-hour grace window**. If you reinstall within 48 hours, your campaigns are restored automatically. After 48 hours, your data is deleted and cannot be recovered — you would start from a clean install. *** Walk through the 3-step wizard with the Percentage Discount template — the natural next step after installing. Enable the theme app embed so free-gift auto-add and storefront signals work on your store. # Storefront setup Source: https://docs.digifist.com/galantis/discount/getting-started/storefront-setup Enable the Galantis Discount Flow theme app embed so free gifts are auto-added to the cart and customers see discount signals on your storefront. Galantis Discount Flow does its pricing work at checkout through a Shopify discount Function — that part needs no theme changes at all. The storefront side is different: auto-adding free-gift items to the cart and showing customer-facing signals is handled by a theme app embed, and Shopify requires you to switch app embeds on yourself. Enabling it takes under a minute in the theme editor, and there is no theme code to touch. Without the embed enabled, **Free gift auto-add and storefront signals do not work** — a Free gift campaign can't place the gift in the cart, and customers get no on-page cues. Price discounts (percentage, fixed amount, shipping, and so on) are still applied at checkout by the discount Function regardless. ## Enable the theme app embed In your Shopify admin, go to **Online Store → Themes** and click **Customize** on your live theme. In the theme editor's left sidebar, select **App embeds**. Find the **Galantis Discount Flow** embed in the list and toggle it on. Adjust its settings if needed — each one is explained below. Click **Save** in the theme editor. The embed is now live on your storefront. The Galantis Discount Flow app embed toggled on in the Shopify theme editor ## Embed settings explained **Default: on.** The master switch for all storefront behavior. Turn it off to pause everything the embed does — free-gift auto-add and storefront signals — without uninstalling the app. Checkout pricing is unaffected either way. **Default: off.** Intended for troubleshooting during setup. Leave it off in normal operation; switch it on only when you're investigating storefront behavior with support. **Default: on.** When a customer's cart qualifies for a **Free gift** campaign, the embed automatically adds the gift item to the cart. Turn this off if you don't want gifts added automatically — but note that Free gift campaigns rely on this behavior to deliver the gift. **Default: on.** Displays a storefront notification the moment a free gift lands in the cart, so customers understand why a new item appeared. Turn it off for a silent auto-add. **Default: "Your free gift has been added to your cart 🎁".** The message shown by the notification above. Edit it to match your brand voice or language. ## When the embed is required — and when it isn't | Scenario | Embed required? | | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | | Percentage off, Fixed amount off, Free shipping, Buy X get Y, Tiered discount, Bundle discount, Volume pricing | No — applied at checkout by the discount Function | | **Free gift** campaigns (auto-adding the gift to the cart) | **Yes** | | Storefront signals and free-gift notifications | **Yes** | Even if you only run price discounts today, enable the embed anyway. It costs nothing, and your first Free gift campaign will work on day one instead of failing quietly because the embed was never switched on. ## Related guides * [Your first campaign](/galantis/discount/getting-started/first-campaign) * [How discounts apply at checkout](/galantis/discount/storefront/how-discounts-apply) * [Rule Builder actions](/galantis/discount/rule-builder/actions) # Introduction Source: https://docs.digifist.com/galantis/discount/index Build, publish, and measure Shopify discount campaigns with a visual Rule Builder — 8 discount types, 11 conditions, scheduling, analytics, and storefront free-gift automation. ## What is Galantis Discount Flow? Galantis Discount Flow is an embedded Shopify admin app for creating, managing, and measuring discount campaigns. Instead of wrestling with Shopify's fixed discount forms, you build each campaign in a visual node-graph **Rule Builder** — connect conditions, logic gates, and actions on a canvas — and the app publishes it to Shopify as a real automatic or code-based discount. Under the hood, a Shopify discount Function applies your rules at checkout, so discounts work everywhere Shopify checkout works. A lightweight theme app embed handles storefront behavior, such as auto-adding free gifts to the cart and showing customer-facing signals. Every campaign you publish also appears on Shopify's native Discounts page, so nothing lives in a silo. ## What you can do with Galantis Discount Flow Create discount campaigns in a 3-step wizard, save drafts, schedule active dates, and manage everything from a single Campaigns list. Compose discount logic visually: 11 conditions, AND/OR/NOT logic gates, and actions connected on a node-graph canvas. Percentage off, Fixed amount off, Free shipping, Buy X get Y, Tiered discount, Free gift, Bundle discount, and Volume pricing. Track revenue, usage, conversion rate, and ROI per campaign, with refund tracking and CSV export for deeper analysis. A Shopify discount Function applies pricing at checkout; the theme app embed powers free-gift auto-add and storefront signals. Start from 6 ready-made templates — from a simple Percentage Discount to a Loyal Customer Reward — and customize from there. ## Who it's built for Galantis Discount Flow is built for Shopify merchants whose promotions have outgrown the native discount forms. **Merchants running layered promotions** who need conditions like cart total, customer tags, order history, or day of week combined with AND/OR/NOT logic. **Stores that use gifting and bundling** — free gifts auto-added to the cart, bundle pricing, and volume tiers that native discounts don't cover in one place. **Teams that measure everything**, who want revenue, conversion, and ROI per campaign instead of a bare usage count. **Merchants of any size** — every feature is available on every plan, including the Free plan, so you can start small and upgrade only when your volume demands it. ## How it works You build a campaign in the admin's visual Rule Builder: conditions (such as **Cart total** or **Customer tag**) flow through logic gates into an action (such as **Percentage off** or **Free gift**). When you click **Create Campaign**, Galantis Discount Flow publishes the flow to Shopify as a real discount — automatic by default, or code-based if your flow includes a **Discount code** condition. At checkout, a Shopify discount Function evaluates your rules against the live cart and applies the pricing. The app is Shopify Markets-aware: if your store sells in multiple currencies, money fields can hold a [different amount per currency](/galantis/discount/rule-builder/currency-markets), applied in the customer's checkout currency. On the storefront, the theme app embed takes care of behavior that happens before checkout: automatically adding free-gift items to the cart and showing UI signals to the customer. The dashboard and Analytics then close the loop with revenue, usage, conversion rate, ROI, and refund tracking, while the Activity Log keeps a record of what changed and when. The Galantis Discount Flow Rule Builder canvas with condition, logic, and action nodes ## Ready to get started? Install the app from the Shopify App Store, pick a plan, create your first campaign, and enable the theme app embed. # Actions & discount types Source: https://docs.digifist.com/galantis/discount/rule-builder/actions The eight action blocks in Galantis Discount Flow — percentage, fixed amount, free shipping, Buy X get Y, tiered, free gift, bundle, and volume discounts. Actions are the payoff of a flow: whichever action blocks the cart reaches are the discounts that apply at checkout. Galantis Discount Flow offers eight action types, covering everything from a simple percentage off to quantity-based volume pricing. A flow needs at least one valid, reachable action before it can be saved or published. Every action shares one field: **Discount title**. This is the text your customer sees next to the discount at checkout, so write it for shoppers ("Summer sale — 15% off"), not for your internal records. ## The Apply to setting Four actions — **Percentage off**, **Fixed amount off**, **Tiered discount**, and **Volume pricing** — include an **Apply to** choice that controls what the discount targets: * **Entire order** — the discount reduces the order subtotal. * **Only matched products** — the discount only reduces the cart lines matched by the flow's conditions, such as the items picked in a **Specific products** or **Specific collections** condition. Choose **Only matched products** whenever the offer is about particular items ("20% off the Sale collection") so full-price products in the same cart stay full price. A Percentage off action selected on the canvas with its Discount title, Percentage, Max discount amount, and Apply to fields visible ## Available actions ### Percentage off Applies a percentage discount. | Field | Details | | ----------------------- | --------------------------------------------- | | **Discount title** | Shown at checkout | | **Percentage** | 0–100% | | **Max discount amount** | Optional cap, in your store's currency | | **Apply to** | **Entire order** or **Only matched products** | When the percentage would exceed the **Max discount amount**, the discount converts to that fixed cap — "10% off, up to 50" never takes more than 50 off, no matter how large the cart. The **Max discount amount** supports a different cap per currency via **Set a different amount per currency** (Pro) — checkout currencies without an amount are uncapped. See [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets). *** ### Fixed amount off Applies a fixed amount discount. | Field | Details | | ------------------ | --------------------------------------------- | | **Discount title** | Shown at checkout | | **Amount** | In your store's currency | | **Apply to** | **Entire order** or **Only matched products** | The **Amount** supports per-currency values via **Set a different amount per currency** (Pro) — checkout currencies without an amount get no discount from this action. See [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets). *** ### Tiered discount Unlocks a percentage discount once the cart reaches a spend threshold. | Field | Details | | ------------------- | --------------------------------------------- | | **Discount title** | Shown at checkout | | **Spend threshold** | In your store's currency | | **Discount** | 0–100% | | **Apply to** | **Entire order** or **Only matched products** | The **Spend threshold** supports per-currency values via **Set a different amount per currency** (Pro) — checkout currencies without an amount never unlock the discount. See [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets). *** ### Volume pricing Grants bigger discounts at higher quantities. | Field | Details | | ------------------ | ----------------------------------------------------------------- | | **Discount title** | Shown at checkout | | **Quantity tiers** | A list of quantity-to-percent tiers (defaults: 5 → 10%, 10 → 20%) | | **Apply to** | **Entire order** or **Only matched products** | Each tier applies from its minimum quantity upward, so the highest tier the cart qualifies for wins. ### Buy X get Y Buy a quantity, get another quantity at a discount. | Field | Details | | ------------------ | ------------------------------------------------- | | **Discount title** | Shown at checkout | | **Buy quantity** | Units the customer must buy | | **Get quantity** | Units that receive the discount | | **Get discount** | 0–100% off the "get" units | | **Apply** | **Best item only** or **Each qualifying product** | Buy X get Y works on the **same product**, and the discounted units must already be in the cart — Shopify checkout cannot add items. For "buy 2, get 1 free", the customer needs all 3 units of that product in the cart; the third is then discounted. *** ### Free gift Gives a free gift product — added in the cart, discounted at checkout. | Field | Details | | ------------------ | ----------------------- | | **Discount title** | Shown at checkout | | **Gift products** | Shopify resource picker | | **Quantity** | Gift units | The gift is auto-added to the cart on the storefront by the theme embed, then discounted 100% at checkout. Shopify cannot add cart items at checkout, so the storefront handles the add. Free gift requires the theme app embed to be enabled in your theme. Without it, nothing adds the gift to the cart, so there is nothing for checkout to discount. *** ### Bundle discount Discounts a set of products when they are bought together. | Field | Details | | ------------------- | ----------------------- | | **Discount title** | Shown at checkout | | **Bundle products** | Shopify resource picker | | **Bundle discount** | 0–100% | The discount only applies when **all** selected products are in the cart together — one missing bundle item means no discount. ### Free shipping Offers free shipping on the order's delivery options. | Field | Details | | ----------------------- | ---------------------------------------------------------- | | **Discount title** | Shown at checkout | | **Max shipping amount** | Optional cap on covered shipping, in your store's currency | With a cap set, shipping is free up to that amount and the customer pays any remainder — useful for covering standard delivery without subsidizing express rates. The **Max shipping amount** supports a different cap per currency via **Set a different amount per currency** (Pro) — checkout currencies without an amount are uncapped, so shipping is fully free. See [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets). ## Action reference | Action | Key fields | Targets | | ---------------- | --------------------------------------------------------------- | ------------------------- | | Percentage off | **Percentage**, **Max discount amount**, **Apply to** | Order or matched products | | Fixed amount off | **Amount**, **Apply to** | Order or matched products | | Free shipping | **Max shipping amount** | Delivery options | | Buy X get Y | **Buy quantity**, **Get quantity**, **Get discount**, **Apply** | Same product in the cart | | Tiered discount | **Spend threshold**, **Discount**, **Apply to** | Order or matched products | | Free gift | **Gift products**, **Quantity** | Gift product (100% off) | | Bundle discount | **Bundle products**, **Bundle discount** | Bundle products together | | Volume pricing | **Quantity tiers**, **Apply to** | Order or matched products | ## Related guides * [Conditions](/galantis/discount/rule-builder/conditions) — Deciding which carts reach an action * [Logic gates](/galantis/discount/rule-builder/logic-gates) — Combining conditions before the action fires * [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets) — Setting a different amount per currency on money fields * [Testing flows](/galantis/discount/rule-builder/testing-flows) — Verifying which actions fire before you publish # Conditions Source: https://docs.digifist.com/galantis/discount/rule-builder/conditions The eleven condition blocks in Galantis Discount Flow — cart, customer, product, and time-and-place checks that decide who gets the discount. Condition blocks are the targeting layer of a Galantis Discount Flow campaign. Each condition checks one fact about the cart, the customer, or the moment of purchase, then routes the flow through its **Then** output when the check passes or its **Otherwise** output when it fails. Chaining conditions — and combining them with [logic gates](/galantis/discount/rule-builder/logic-gates) — is how a flow narrows from "everyone" down to exactly the carts that should be discounted. Eleven conditions are available, grouped below by what they look at. Conditions that compare a number share the same set of six operators. ## Operators Numeric conditions — **Cart total**, **Item quantity**, and **Order count** — pair an operator with a value: | Operator | Passes when | | --------------------------- | ---------------------------------------- | | is greater than | The value is strictly above your number | | is greater than or equal to | The value is at or above your number | | is less than | The value is strictly below your number | | is less than or equal to | The value is at or below your number | | equals | The value matches your number exactly | | does not equal | The value is anything except your number | ## Available conditions ### Cart total Checks the cart subtotal against an amount in your store's currency. **Fields:** an operator plus an **Amount** field, prefixed with your store's own currency symbol. This is the workhorse condition for spend thresholds — "carts over 100 get free shipping" starts with a Cart total block set to **is greater than** 100. The **Amount** supports per-currency values via **Set a different amount per currency** (Pro) — for checkout currencies without an amount, the condition evaluates false. See [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets). *** ### Item quantity Checks the number of items in the cart. **Fields:** an operator plus a **Quantity** field. Use it to gate offers behind a minimum basket size, or to route small carts to a different incentive than large ones. A condition block selected on the canvas with its operator and value fields open in the settings panel ### Customer tag Checks whether the logged-in customer has a specific Shopify tag. **Fields:** a **Customer tag** text field (for example, `vip`). The tag must already exist on the customer in Shopify — the Rule Builder does not create tags. Only logged-in customers carrying the tag will match. *** ### Customer segment Checks which segment the customer belongs to. **Fields:** a **Segment** select with four options — **New customers**, **Returning customers**, **VIP**, and **Wholesale**. Shopify checkout cannot read Shopify's native customer segments directly, so **VIP** and **Wholesale** are derived from the customer's tags and order count. This keeps segment matching consistent across the storefront and checkout. *** ### Order count Checks the customer's past order count. **Fields:** an operator plus an **Orders** field. Useful for loyalty-style offers — for example, a reward that unlocks once a customer has placed at least five orders. *** ### First order Passes when the customer is placing their first order. It has no fields to configure — connect its **Then** output to your first-purchase offer, or use its **Otherwise** output to target everyone except first-time buyers. *** ### Discount code Passes when the customer has entered a specific discount code. **Fields:** a **Code** text field (for example, `WELCOME10`). Adding a Discount code condition changes the nature of the whole campaign: it becomes a code-based discount. Customers must enter the code at checkout for any part of the flow to apply — it no longer applies automatically. ### Specific products Passes when the cart contains specific products. **Fields:** a **Products** field that opens Shopify's resource picker, so you select items directly from your catalog. *** ### Specific collections Passes when the cart contains items from selected collections. **Fields:** a **Collections** field that opens Shopify's resource picker. Collections are usually the better choice for broad merchandising rules ("anything from the Sale collection"), while Specific products suits narrow, hand-picked offers. ### Day of week Keeps the flow active only on selected weekdays. **Fields:** a **Days** multiselect covering Monday through Sunday. Use it for weekend-only promotions or weekday flash offers without editing the campaign twice a week. *** ### Customer country Matches the customer's shipping country. **Fields:** a **Countries** multiselect. Available countries: United States, Canada, United Kingdom, Germany, France, Netherlands, Australia, and Turkiye. Use it to restrict a promotion to specific markets — for example, free shipping only for domestic orders. A condition block selected on the canvas with its operator and value fields open in the settings panel Conditions that look at the customer — **Customer tag**, **Customer segment**, **Order count**, and **First order** — require a logged-in customer. Guest shoppers cannot match them on the storefront or at checkout, so their flow follows the **Otherwise** path. ## Condition reference | Condition | Checks | Fields | | -------------------- | ------------------------------------- | -------------------------------------- | | Cart total | Cart subtotal | Operator + **Amount** (store currency) | | Item quantity | Number of items in the cart | Operator + **Quantity** | | Customer tag | Shopify tag on the logged-in customer | **Customer tag** | | Customer segment | New / Returning / VIP / Wholesale | **Segment** | | Specific products | Cart contains selected products | **Products** (resource picker) | | Specific collections | Cart contains items from collections | **Collections** (resource picker) | | Order count | Customer's past order count | Operator + **Orders** | | First order | Customer's first-ever order | None | | Discount code | Customer entered a specific code | **Code** | | Day of week | Current weekday | **Days** (multiselect) | | Customer country | Shipping country | **Countries** (multiselect) | ## Related guides * [Logic gates](/galantis/discount/rule-builder/logic-gates) — Combining conditions with AND, OR, and NOT * [Actions & discount types](/galantis/discount/rule-builder/actions) — What happens when conditions pass * [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets) — Per-currency amounts on the Cart total condition * [Testing flows](/galantis/discount/rule-builder/testing-flows) — Simulating carts and customers against your conditions # Multi-currency & Markets Source: https://docs.digifist.com/galantis/discount/rule-builder/currency-markets Per-currency amounts in Galantis Discount Flow — how Shopify Markets currencies reach the Rule Builder, the five money fields that support them, missing-currency behavior, and the Pro requirement. If your store sells in more than one currency through Shopify Markets, a single number in a money field can mean very different things — "10 off" is a modest discount in USD and a much bigger one in JPY. Galantis Discount Flow solves this with **per-currency amounts**: five money fields in the Rule Builder can hold a different amount for each currency your store sells in, and at checkout the app uses the exact amount you entered for the customer's checkout currency. ## How Markets and currencies reach the app Galantis Discount Flow is **Markets-aware**: it reads the presentment currencies your store has enabled — the currencies defined by your Shopify Markets setup — and offers them in the Rule Builder's currency dropdowns. The list always includes at least your store currency. The currency list is read-only in Galantis Discount Flow. To add or remove currencies, configure them in Shopify Admin → **Settings → Markets** — the app picks up the changes when you navigate within it. Beyond currencies, there is no deeper Markets integration: the Rule Builder has no market condition and no market targeting. ## Two ways to enter an amount Every per-currency-capable field works in one of two modes. In neither mode does the app convert between currencies — **no currency conversion ever happens**. The default, and unchanged behavior. The number is applied literally in whatever currency the customer checks out in — a "10" fixed discount means 10 USD for a USD checkout and 10 EUR for a EUR checkout. A separate amount per currency. At checkout, the app uses the exact amount you entered for the cart's checkout currency — 100 for USD carts, 90 for EUR carts, and so on. Because single amounts are applied literally, they scale with the currency's face value, not its worth. A single "100" spend threshold is easy to reach in JPY and hard to reach in GBP. If your currencies differ meaningfully in value, use per-currency amounts. ## The five per-currency fields | Block | Field | | ----------------------------- | ------------------------------------------ | | **Cart total** (condition) | **Amount** | | **Fixed amount off** (action) | **Amount** | | **Percentage off** (action) | **Max discount amount** (the optional cap) | | **Free shipping** (action) | **Max shipping amount** (the optional cap) | | **Tiered discount** (action) | **Spend threshold** | Everything else stays currency-neutral by nature: percentages themselves, **Buy X get Y** quantities, **Volume pricing** tiers (quantity-based), the **Bundle discount** percent, and **Free gift** have no per-currency variant because they contain no money amount to vary. ## Setting per-currency amounts Each of the five fields has a checkbox beneath it labeled **Set a different amount per currency**. Tick **Set a different amount per currency**. The single input is replaced with per-currency rows, seeded with one row: your store currency at the amount you had entered. Click **Add currency** to add a row. Each row pairs a **Currency** dropdown — listing your enabled presentment currencies, with codes already used by another row disabled — with an amount field and a remove button. At least one row must remain. Type the amount that makes sense in each currency. These are independent values, not conversions — you decide what the offer is worth in every currency. A Fixed amount off action with Set a different amount per currency ticked, showing currency rows with a dropdown, amount field, and Add currency button Unticking **Set a different amount per currency** clears all rows and restores single-amount entry. Once the campaign is saved, the cleared rows cannot be recovered. ## When a checkout currency has no row In per-currency mode, only the currencies you list get an amount — and each field fails in its own direction when the checkout currency is missing. The editor shows a caption under each field spelling this out: | Field | If the checkout currency has no row | Editor caption | | ---------------------------------------- | ----------------------------------- | ----------------------------------------------------------------------- | | **Fixed amount off** — Amount | No discount applies at all | "Checkout currencies not listed here get no discount from this action." | | **Cart total** — Amount | The condition evaluates false | "This condition is false for checkout currencies not listed here." | | **Percentage off** — Max discount amount | The percentage applies uncapped | "Checkout currencies not listed here are uncapped." | | **Free shipping** — Max shipping amount | Shipping is fully free, uncapped | "Checkout currencies not listed here are uncapped." | | **Tiered discount** — Spend threshold | The tier never unlocks | "Checkout currencies not listed here never unlock this discount." | Note the split: discounts and conditions **fail closed** (no discount, condition false), while caps **fail open** (the discount runs uncapped). A missing row on a cap can cost you more than you planned — list every currency you sell in. ## Coverage warnings The Rule Builder warns you — in a banner titled **This flow may be incomplete** — when a per-currency field: * has no amount set for one of your store's enabled currencies ("…has no amount set for XXX."), * lists a currency twice, or * has an amount that isn't greater than 0. These warnings never block saving — they exist to catch coverage gaps before your customers do. ## Per-currency values in summaries Flow summaries and the Test panel display per-currency values inline, like "100 USD / 90 EUR" — up to three currencies, then "+ 2 more" for the rest. ## Pro plan requirement Per-currency amounts are a **Pro** feature — the only Pro-gated feature in Galantis Discount Flow. * On the Free plan, the **Set a different amount per currency** checkbox is disabled with a **Pro** badge and an **Upgrade** button. * Saving or activating a campaign with per-currency amounts on Free is rejected: "Per-currency amounts require the Pro plan. Remove them or upgrade to Pro to save this campaign." ### What happens on downgrade Downgrading from Pro to Free automatically **pauses** any active campaigns that use per-currency amounts, and records the pause in the **Activity Log**. To reactivate such a campaign on the Free plan, open it, untick **Set a different amount per currency** (this clears the rows), set a single amount, and activate it again. ## Testing and analytics The Test panel always simulates in your **store currency** — there is no currency selector. A per-currency setup with no row for your store currency will look like it doesn't fire in the Test panel, even though it works at a real checkout in a listed currency. See [Testing flows](/galantis/discount/rule-builder/testing-flows). At checkout, the currency that matters is the cart's **presentment currency** — the currency the customer sees and pays in. The theme embed uses the same logic on the storefront when evaluating free gifts and cart totals. In [Analytics](/galantis/discount/analytics/index), all revenue and discount figures remain reported in your store currency (converted by Shopify) — there is no per-currency breakdown. ## Related guides * [Actions & discount types](/galantis/discount/rule-builder/actions) — the four actions with per-currency fields * [Conditions](/galantis/discount/rule-builder/conditions) — the Cart total condition's per-currency Amount * [Plans & limits](/galantis/discount/billing/plans-limits) — the Pro requirement and downgrade behavior * [How discounts apply at checkout](/galantis/discount/storefront/how-discounts-apply) — checkout-currency resolution # Rule Builder overview Source: https://docs.digifist.com/galantis/discount/rule-builder/index The visual node-graph canvas where Galantis Discount Flow campaigns are assembled from trigger, condition, logic gate, and action blocks. The Rule Builder is the visual canvas at the heart of every Galantis Discount Flow campaign. Instead of filling in a rigid form, you drag blocks onto a node graph and connect them — a **Start** block feeds into conditions, conditions branch into logic gates or further conditions, and the flow ends in one or more discount actions. What you draw is exactly what runs on your store. Every flow is built from four categories of blocks: one **Start** trigger, eleven conditions, three logic gates, and eight actions. The canvas reads left to right — cart evaluation begins at **Start**, each condition routes the flow through its **Then** or **Otherwise** output, and whichever actions are reached apply their discount. The Rule Builder canvas showing a flow from Start through conditions to an action, with the block palette on the left and toolbar at the top ## Block categories Eleven checks against the cart, customer, products, time, and place — each with Then and Otherwise output paths. AND, OR, and NOT blocks for combining and inverting conditions into more precise targeting. Eight discount actions, from Percentage off to Volume pricing — the blocks that actually reduce the price. The Test panel simulates a cart and customer and highlights which path fires — without touching your live store. ## The canvas and toolbar The block palette on the left lists every available block, grouped by category: **Trigger**, **Conditions**, **Logic gates**, and **Actions**. Drag a block onto the canvas, then draw connections between output and input ports to define the flow. The toolbar above the canvas gives you: * **Undo** / **Redo** — step backward and forward through canvas edits * **Fit view** — zoom the canvas so the whole flow is visible * **Auto-layout** — automatically arrange blocks into a tidy left-to-right layout * **Templates** — start from a pre-built flow instead of an empty canvas * **Test** — open the Test panel to simulate a cart and customer * An issues indicator — a **Valid** badge when the flow is healthy, or an issue count you can click to see every problem * The current zoom level A few field types behave in a store-aware way: * Product, collection, and gift fields open Shopify's resource picker, so you select real items from your catalog rather than typing names. * Money fields show your store's own currency symbol, so a threshold of 100 means 100 in the currency your customers actually pay in. ## Validation The Rule Builder continuously validates the flow as you build. Blocks with a problem get a red outline, and every issue appears in the toolbar's issues list with a plain-language explanation — for example, a block that is not connected, an action that cannot be reached from **Start**, a condition with no **Then** connection, or a loop in the graph. A flow cannot be saved or published until it contains at least one valid, reachable action. Fix everything in the issues list until the toolbar shows the **Valid** badge before publishing. ## One flow, three places The logic you draw runs in three places, and all three produce identical results: 1. **In the builder** — the Test panel evaluates the flow live against a simulated cart and customer, so you can verify behavior before publishing. 2. **On the storefront** — the theme embed evaluates the flow as customers shop, powering storefront behavior such as auto-adding a free gift to the cart. 3. **At checkout** — a Shopify discount Function runs the same flow and actually applies the discount to the order. Because all three surfaces execute the same logic, what you see in the Test panel is what your customer gets at checkout — there is no separate configuration to keep in sync. Start from a template when you can. Templates load a complete, valid flow onto the canvas that you can then adjust, which is faster than wiring every connection by hand. ## Related guides * [Conditions](/galantis/discount/rule-builder/conditions) — All eleven condition blocks and their fields * [Logic gates](/galantis/discount/rule-builder/logic-gates) — Combining conditions with AND, OR, and NOT * [Actions & discount types](/galantis/discount/rule-builder/actions) — The eight discount actions and their settings * [Testing flows](/galantis/discount/rule-builder/testing-flows) — Dry-running a flow before you publish # Logic gates Source: https://docs.digifist.com/galantis/discount/rule-builder/logic-gates AND, OR, and NOT blocks in Galantis Discount Flow, plus Then/Otherwise branching — how to combine conditions into precise discount targeting. A single condition answers one question; real campaigns usually ask several. Galantis Discount Flow gives you two ways to combine them: chain conditions through their **Then** and **Otherwise** outputs, or route multiple conditions into a dedicated logic gate. Both approaches produce the same evaluation everywhere the flow runs — in the builder, on the storefront, and at checkout. Three logic gates are available, each with a single output that continues the flow when the gate passes. ## The three gates All connected conditions must be true for the flow to continue. Any one of the connected conditions being true is enough. Inverts the connected condition — true becomes false, false becomes true. Connect the **Then** outputs of two or more conditions into a gate's input, then connect the gate's output onward to an action or further logic. **AND** and **OR** accept multiple inputs; **NOT** inverts a single input. Two conditions feeding into an AND gate, whose output connects to a Percentage off action ## Then / Otherwise branching Every condition has two outputs: * **Then** — followed when the condition passes * **Otherwise** — followed when it fails This makes each condition a branch point on its own. Chaining conditions through **Then** is an implicit AND: the flow only reaches the end of the chain when every condition along the way passed. The **Otherwise** output lets you do something different for carts that fail a check — route them to a smaller offer, a different action, or simply nowhere (no discount). ## Worked examples Two equivalent builds: * **Chained:** **Start** → **Customer segment** (VIP) → **Then** → **Cart total** (**is greater than** 100) → **Then** → **Percentage off**. The discount only fires when both checks pass. * **With an AND gate:** connect the **Then** outputs of both conditions into an **AND** block, and connect the gate's output to the action. For two conditions, chaining is usually simpler. The gate version becomes valuable when the same combined result needs to feed several places, or when you start mixing in OR logic. To exclude first orders, use the **First order** condition's **Otherwise** output: **Start** → **First order** → **Otherwise** → your action. Customers on their first order follow **Then** (which you leave unconnected or route elsewhere), and everyone else gets the discount. Do not build this as **First order** → **NOT** → action. An action that is only reachable through a NOT gate can never apply, and the builder flags it as an issue. Use the condition's **Otherwise** output instead, or route the NOT into an AND/OR gate alongside another input. Connect the **Then** outputs of **Day of week** (Saturday and Sunday selected) and **Customer segment** (VIP) into an **OR** block, then connect the gate to a **Free shipping** action. Either being true — it is the weekend, or the customer is a VIP — unlocks the offer. This is the pattern chaining cannot express, since a **Then** chain always means "all of these". ## Chaining vs gates | Situation | Use | | ------------------------------------------------ | ------------------------------------------------------------------------------------------- | | All conditions must pass (simple AND) | Chain conditions through **Then** | | Different outcomes for pass and fail | The condition's **Then** and **Otherwise** outputs | | Any one of several conditions is enough | An **OR** gate | | Many conditions must all pass and feed one point | An **AND** gate — keeps the canvas readable | | Invert a check | Prefer the condition's **Otherwise** output; use **NOT** only as an input into AND/OR logic | If a chain of **Then** connections is getting long, run **Auto-layout** from the toolbar and consider replacing part of the chain with an **AND** gate. The evaluation is identical, but the graph becomes much easier to read — and easier to test. ## Related guides * [Conditions](/galantis/discount/rule-builder/conditions) — The eleven checks that feed your gates * [Actions & discount types](/galantis/discount/rule-builder/actions) — Where the combined logic ultimately leads * [Testing flows](/galantis/discount/rule-builder/testing-flows) — Watching the active path light up through your gates # Testing flows Source: https://docs.digifist.com/galantis/discount/rule-builder/testing-flows The Test panel in Galantis Discount Flow — simulating carts and customers, reading the highlighted path, and a pre-publish checklist. The Test panel is a dry-run environment built into the Rule Builder. It feeds a simulated cart and customer into your flow and shows exactly which blocks activate and which discounts would apply — using the same evaluation logic that runs on the storefront and at checkout. Because all three surfaces execute the flow identically, a result in the Test panel is the result your customer will get. Open it with the **Test** button in the canvas toolbar. The **Test this flow** panel appears alongside the canvas, and every change you make to the simulated inputs re-evaluates the flow instantly. The Test this flow panel with simulated cart and customer inputs, and the active path highlighted on the canvas ## What you can simulate The panel covers every input a condition can check: | Input | What it feeds | | -------------------------------------- | ----------------------------------------------------------------------- | | **Cart total** | The **Cart total** condition, spend thresholds in **Tiered discount** | | **Item quantity** | The **Item quantity** condition, **Volume pricing** tiers | | **Customer tags** | The **Customer tag** condition (comma-separated, e.g. `vip, wholesale`) | | **Segment** | The **Customer segment** condition | | **Past order count** | The **Order count** condition | | **First order** | The **First order** condition | | **Discount code** | The **Discount code** condition | | **Country** | The **Customer country** condition | | **Date** | The **Day of week** condition | | **Cart contains selected products** | The **Specific products** condition | | **Cart contains selected collections** | The **Specific collections** condition | The Test panel always simulates in your **store currency** — there is no currency selector. If a flow uses [per-currency amounts](/galantis/discount/rule-builder/currency-markets) and has no amount for your store currency, it will look like it doesn't fire here, even though it works at a real checkout in one of its listed currencies. ## Reading the results As you adjust inputs, two things update at once: * **On the canvas** — the active path through the graph lights up, so you can see which conditions passed, which **Then** or **Otherwise** branches were taken, and which blocks the simulated cart never reached. * **In the Result section** — every action that fires is listed with an **Applies** badge and a description of the discount. If nothing fires, the panel says so: "No discount applies for this cart and customer." Watching the highlighted path is the fastest way to debug a flow. If a discount is not applying, follow the lit edges to the first condition that routed the flow to **Otherwise** — that is the check the simulated cart failed. Testing is completely safe. The Test panel evaluates the flow in the builder only — it never publishes anything, never creates a discount, and never affects your live store or real customers. ## Pre-publish test checklist Run through these simulations before publishing any campaign: Set the inputs to a cart and customer that should clearly qualify. Confirm the intended action fires with an **Applies** badge and that the description matches the discount you meant to build. Flip one input below the threshold — drop the **Cart total**, clear the **Customer tags**, or untick **Cart contains selected products**. Confirm the panel reports that no discount applies. Test values right at your thresholds — a cart total exactly equal to the amount, the precise quantity of a volume tier. This catches "is greater than" where you meant "is greater than or equal to". If your flow branches, simulate inputs that send the cart down each **Otherwise** path and confirm each branch does what you expect — including doing nothing where nothing is intended. Conditions like **Customer tag**, **Customer segment**, **Order count**, and **First order** require a logged-in customer. Simulate both a qualifying customer and an empty guest-like profile so you know what anonymous shoppers get. Check the toolbar shows the **Valid** badge rather than an issue count. A flow with errors cannot be saved or published until every issue is resolved. If a flow uses a **Discount code** condition, type the exact code into the panel's **Discount code** field during testing — with the field empty, the condition fails and the whole campaign correctly reports no discount, which is easy to mistake for a broken flow. ## Related guides * [Rule Builder overview](/galantis/discount/rule-builder/index) — The canvas, toolbar, and validation * [Conditions](/galantis/discount/rule-builder/conditions) — What each simulated input is checked against * [Actions & discount types](/galantis/discount/rule-builder/actions) — The discounts that appear in the Result section * [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets) — Why per-currency flows can look inactive in the Test panel # Settings Source: https://docs.digifist.com/galantis/discount/settings The Galantis Discount Flow Settings page — manage your plan through Shopify and audit everything that happened in your account with the Activity Log. The Settings page in Galantis Discount Flow has two parts: a **Plan** card for managing your subscription, and an **Activity Log** that records every meaningful change made in the app. Together they answer "what plan am I on?" and "who changed what, and when?". ## Plan card The Plan card at the top of Settings shows: * Your current plan badge (**Free** or **Pro**) * A note that billing is handled securely by Shopify * A **Change plan** button Clicking **Change plan** takes you to a Shopify-hosted page where the subscription is managed — payment details never pass through Galantis Discount Flow. For plan differences, caps, and upgrade/downgrade behavior, see [Plans & limits](/galantis/discount/billing/plans-limits). The Galantis Discount Flow Settings page with the Plan card and Activity Log ## Activity Log The Activity Log is a paginated, searchable audit trail of your account — useful when a campaign changed unexpectedly, when you're checking who paused something, or when you need to see when a usage limit was hit. ### Layout * **Tabs** — **All**, **Campaigns**, and **Settings** filter entries by category. * **Search** — filter entries by keyword. * **Pagination** — 20 entries per page. Each entry has four columns: | Column | Contents | | ------------ | ---------------------------------------------------- | | Action | The type of event (for example, campaign activated). | | Description | What specifically happened. | | Performed by | Who (or what) triggered the event. | | Date | When it happened. | ### What gets logged | Category | Logged events | | --------- | --------------------------------------------------------------------------------- | | Campaigns | Created, updated, activated, paused, archived, restored — including bulk actions. | | Plan | Plan changes (upgrades and downgrades). | | Usage | Usage limit reached, usage limit reset. | | Privacy | Privacy requests. | If discounts stopped applying and you're not sure why, check the Activity Log for a **usage limit reached** entry — it pins down exactly when the store's Free-plan cap was hit. See [Plans & limits](/galantis/discount/billing/plans-limits) for how the pause works. Bulk campaign actions are logged too, so a mass pause or archive shows up as auditable entries rather than silently changing many campaigns. ## Related guides * [Plans & limits](/galantis/discount/billing/plans-limits) — what the Plan card controls, and what happens on upgrade or downgrade * [Troubleshooting](/galantis/discount/support/troubleshooting) — using the Activity Log to diagnose paused or missing discounts # How discounts apply at checkout Source: https://docs.digifist.com/galantis/discount/storefront/how-discounts-apply What happens between publishing a campaign and a customer seeing the discount — automatic vs code-based campaigns, condition evaluation, stacking rules, and Shopify integration. Every published campaign in Galantis Discount Flow is a real Shopify discount. At checkout, the discount Function evaluates your campaign's conditions against the live cart and applies the result — so the discount a customer sees is always computed from what's actually in their cart at that moment. ## Automatic vs code-based campaigns A campaign becomes one of two kinds of Shopify discount, depending on how the flow is built: The default. The discount applies at checkout on its own whenever the cart meets the campaign's conditions — the customer doesn't enter anything. Created when the flow contains a **Discount code** condition. The customer enters the code at checkout, and the campaign's remaining conditions are then evaluated as usual. Automatic discounts are applied by Shopify **at checkout**, so it's expected that a customer doesn't see the discount in the cart drawer or cart page. It appears once they reach checkout. ## Condition evaluation at checkout When a customer reaches checkout, the discount Function checks the campaign's conditions against the live cart — items, quantities, totals, and (where used) customer attributes. Conditions are re-evaluated as the cart changes, so a discount that applied a moment ago disappears if the cart stops qualifying. Customer-based conditions — customer tags, segments, order count, and first order — require the customer to be **logged in** at checkout. A guest checkout can't match these conditions, so campaigns that use them won't apply for anonymous customers. ## The checkout currency Money amounts are evaluated in the cart's **presentment currency** — the currency the customer sees and pays in. If a field uses [per-currency amounts](/galantis/discount/rule-builder/currency-markets), the app applies the exact amount you entered for that checkout currency; a single amount is applied literally in whatever currency the customer checks out in. No currency conversion ever happens. The theme embed uses the same logic on the storefront for free-gift and cart-total evaluation. ## What each discount type does at checkout | Discount type | Behavior at checkout | | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Order percentage / fixed | Reduces the order total by a percentage or fixed amount. | | Product percentage / fixed | Reduces the price of matching cart lines. | | Capped percentage | A percentage discount limited by a **Max discount amount** — the discount never exceeds the cap. | | Free shipping | A delivery discount on shipping, optionally capped at a maximum amount. | | BOGO (same product) | Discounts the "get" units of a product the customer is buying. The "get" units must already be in the cart — checkout cannot add items. | | Bundle | A product discount applied when the bundle's products are in the cart together. | | Free gift | The gift product's price is discounted at checkout. The [theme app embed](/galantis/discount/storefront/theme-embed) is what adds the gift product to the cart on the storefront. | A Galantis Discount Flow discount applied at Shopify checkout ## Combination and stacking rules Whether campaigns stack with each other and with other Shopify discounts follows each campaign's **Combinations** settings, using Shopify's standard discount classes — order, product, and shipping. A campaign only combines with discounts in the classes you've allowed. When multiple product discounts compete on the **same cart line**, the best one for the customer wins — they don't stack on a single line. If a discount seems to be "missing" when several campaigns are active, check the **Combinations** settings on each campaign first, then check whether a stronger product discount won on that cart line. ## Integration with Shopify's Discounts page Published campaigns appear on Shopify's native **Discounts** page in your admin, alongside any discounts you've created directly in Shopify. Clicking a Galantis campaign there opens it in Galantis Discount Flow for editing — so your team can start from either place. Shopify enforces a platform limit: a store can have at most **25 active automatic discounts**, across all apps and native discounts combined. Code-based campaigns don't count toward this limit. See [Troubleshooting](/galantis/discount/support/troubleshooting) if you hit it. ## Related guides * [Theme app embed](/galantis/discount/storefront/theme-embed) — the storefront half: free gifts and notifications * [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets) — per-currency amounts and missing-currency behavior * [Analytics](/galantis/discount/analytics/index) — how applications and conversions at checkout become your metrics # Theme app embed Source: https://docs.digifist.com/galantis/discount/storefront/theme-embed Enable the Galantis Discount Flow app embed in your theme to auto-add free gifts to the cart, show gift notifications, and debug storefront evaluation. The **Galantis Discount Flow** theme app embed is a small script that runs on your storefront. It evaluates your active campaigns against the live cart, automatically adds free gift products when a flow qualifies, removes them when the cart no longer qualifies, and can show customers a notification when a gift lands in their cart. The embed does **not** apply price discounts. Percentage, fixed-amount, BOGO, bundle, and shipping discounts are applied at checkout by the discount Function whether or not the embed is enabled. The embed only powers storefront behavior — most importantly, free gifts. See [How discounts apply at checkout](/galantis/discount/storefront/how-discounts-apply). ## What the embed does — and doesn't | The embed does | The embed does not | | --------------------------------------------------------------- | ------------------------------------------ | | Evaluate active campaigns on the storefront | Apply percentage or fixed-amount discounts | | Auto-add free gift products to the cart when the flow qualifies | Apply BOGO, bundle, or shipping discounts | | Remove gifts when the cart stops qualifying | Change prices in the cart | | Show a notification when a gift is added | Affect checkout in any way | | Log evaluation details when Debug mode is on | | ## Enabling the embed In your Shopify admin, go to **Online Store → Themes** and click **Customize** on your live theme. In the theme editor sidebar, select **App embeds**. Find **Galantis Discount Flow** in the list and toggle it on. **Enable Galantis Discount Flow** is on by default once the embed itself is activated. Click **Save**. The embed starts evaluating campaigns on your storefront immediately. Galantis Discount Flow app embed settings in the Shopify theme editor ## Embed settings Default: **on**. The master switch for the embed. When off, no storefront evaluation happens — free gifts are not auto-added and no notifications are shown. Checkout discounts still apply normally. Default: **off**. When on, the embed logs its campaign evaluation to the browser console — which campaigns were checked, whether the cart qualified, and what actions were taken. Useful when a free gift isn't behaving as expected. Turn it off again once you're done troubleshooting. Default: **on**. When the cart qualifies for a free-gift flow, the gift product is added to the cart automatically. When the cart changes and no longer qualifies, the gift is removed again. Turn this off if you prefer gifts not to be added on the storefront. Default: **on**. Displays a brief on-page notification the moment a gift is added, so customers understand why a new item appeared in their cart. Default: "Your free gift has been added to your cart 🎁". Customize the message customers see when a gift is added — for example, to translate it or match your brand voice. ## How free-gift behavior works When **Auto-add free gifts** is on, the embed watches the cart and reacts in both directions: * **Cart qualifies** — the gift product is added automatically, and the notification appears (if enabled). * **Cart stops qualifying** — for example, the customer removes the qualifying item — the gift is removed automatically, so customers can't keep gifts they no longer earned. If a free gift isn't appearing, the two most common causes are the theme embed being disabled and **Auto-add free gifts** being turned off. Check both before digging deeper — see [Troubleshooting](/galantis/discount/support/troubleshooting). ## Debugging with Debug mode Turn on **Debug mode**, open your storefront, and open your browser's developer console. The embed prints its evaluation of each active campaign against the current cart, which usually makes it obvious why a flow did or didn't qualify. Remember to turn Debug mode off afterwards so shoppers' consoles stay clean. ## Related guides * [How discounts apply at checkout](/galantis/discount/storefront/how-discounts-apply) — the checkout side of the picture * [Troubleshooting](/galantis/discount/support/troubleshooting) — free gift not appearing, and other common issues # Troubleshooting Source: https://docs.digifist.com/galantis/discount/support/troubleshooting Common Galantis Discount Flow issues and how to fix them — discounts not applying, free gifts not appearing, activation limits, sync errors, and reinstall behavior. Most issues with Galantis Discount Flow come down to a small set of causes: a plan or platform limit was reached, the theme embed isn't enabled, a condition requires a logged-in customer, or a push to Shopify failed. This page lists each common symptom with its cause and fix. For anything involving free gifts or storefront behavior, turn on **Debug mode** in the [theme app embed](/galantis/discount/storefront/theme-embed) settings first — it logs the storefront evaluation to the browser console and usually reveals the cause immediately. ## Common issues **Symptom:** A campaign's detail page shows a sync error banner, and the discount isn't behaving as expected at checkout. **Cause:** Pushing the campaign to Shopify failed, so the Shopify discount is out of date (or missing). **Fix:** Click the **Resync** button on the banner to push the campaign to Shopify again. If the error persists, check the other limits on this page — a resync can fail because a platform or plan limit blocks it. **Symptom:** Activating a campaign fails with this message. **Cause:** This is a Shopify platform limit, counted across **all** apps and native Shopify discounts — not a Galantis Discount Flow limit. **Fix:** Deactivate automatic discounts you no longer need (in Galantis Discount Flow or on Shopify's native **Discounts** page), then activate the campaign again. Code-based campaigns don't count toward this limit, so converting a flow to use a **Discount code** condition is another way to stay under it. **Symptom:** You can't activate a fourth campaign on the Free plan. **Cause:** The Free plan allows at most 3 active campaigns at a time. **Fix:** Pause one of your active campaigns, or upgrade to Pro via **Settings → Change plan** for unlimited active campaigns. See [Plans & limits](/galantis/discount/billing/plans-limits). **Symptom:** Saving or activating a campaign fails with this message. **Cause:** The campaign uses [per-currency amounts](/galantis/discount/rule-builder/currency-markets) — the only Pro-gated feature — and your store is on the Free plan. **Fix:** Either upgrade to Pro via **Settings → Change plan**, or untick **Set a different amount per currency** on each field that uses it (this clears the per-currency rows) and enter a single amount instead. **Symptom:** After moving from Pro to Free, some campaigns that were active are now paused. **Cause:** Downgrading re-applies Free-plan rules in two ways: the 3-active-campaign limit auto-pauses campaigns beyond the oldest 3, and any active campaign using per-currency amounts is auto-paused because per-currency amounts require Pro. Both events are recorded in the **Activity Log** in [Settings](/galantis/discount/settings). **Fix:** For the campaign-limit pause, choose which 3 campaigns stay active by pausing and activating campaigns yourself. For a per-currency pause, open the campaign, untick **Set a different amount per currency** (this clears the rows), set a single amount, and reactivate — or upgrade back to Pro. See [Plans & limits](/galantis/discount/billing/plans-limits). **Symptom:** Discounts that worked yesterday no longer apply at checkout, and the dashboard shows a usage-paused banner. **Cause:** Your store is on the Free plan and hit a monthly usage cap — 25 discounted orders or 1,000 discount applications. Hitting either cap pauses all of the store's discounts for the rest of the period. **Fix:** Wait for the next monthly period (anchored to your install date), when discounts reactivate automatically — or upgrade to Pro, which lifts the pause immediately. The **Activity Log** in [Settings](/galantis/discount/settings) shows exactly when the limit was reached. **Symptom:** The cart qualifies for a free-gift flow, but the gift product never appears. **Cause:** The **Galantis Discount Flow** theme app embed is disabled, or its **Auto-add free gifts** setting is turned off. Gifts are added on the storefront by the embed — checkout cannot add items. **Fix:** In the theme editor, open **App embeds**, enable **Galantis Discount Flow**, and confirm **Auto-add free gifts** is on. If it still doesn't appear, enable **Debug mode** and check the browser console to see how the campaign evaluated. See [Theme app embed](/galantis/discount/storefront/theme-embed). **Symptom:** A campaign using customer tags, segments, order count, or first-order conditions doesn't apply, even for customers who should qualify. **Cause:** Customer-based conditions require the customer to be **logged in**. Guest checkouts have no customer identity to evaluate against. **Fix:** Test while logged in to a customer account that meets the conditions. If your store relies heavily on guest checkout, consider conditions based on the cart instead of the customer. **Symptom:** A campaign works for most customers, but customers checking out in one particular currency never get the discount. **Cause:** The campaign uses [per-currency amounts](/galantis/discount/rule-builder/currency-markets), and that checkout currency has no row. A **Fixed amount off** with no amount for the currency gives no discount from that action, a **Cart total** condition with no amount evaluates false, and a **Tiered discount** threshold with no amount never unlocks. The app never converts amounts between currencies. **Fix:** Open the campaign and add a row with an amount for the missing currency on each per-currency field. The Rule Builder's **This flow may be incomplete** warning banner lists which of your enabled currencies have no amount set. Note that the Test panel always simulates in your store currency, so use it to check store-currency coverage and rely on the warnings for the rest. **Symptom:** A **Max discount amount** or **Max shipping amount** cap works in some currencies but seems ignored in others — the percentage applies in full, or shipping is entirely free. **Cause:** The cap uses per-currency amounts, and the checkout currency has no row. Unlike discounts and conditions, caps **fail open**: checkout currencies not listed are uncapped. **Fix:** Add a cap row for every currency your store sells in. The **This flow may be incomplete** warning flags enabled currencies with no amount set — it doesn't block saving, so it's easy to miss. See [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets). **Symptom:** Customers report the discount is "missing" on the cart page, yet it appears once they reach checkout. **Cause:** This is expected behavior for automatic discounts — Shopify applies them at checkout, not in the cart. **Fix:** Nothing to fix. If cart-page visibility matters to you, communicate the offer with your theme's promotional content instead. **Symptom:** You uninstalled Galantis Discount Flow and want to know what happens to your data. **Cause / behavior:** If you reinstall within **48 hours**, your campaigns are restored automatically. After 48 hours, data is permanently deleted in line with Shopify's privacy rules. **Fix:** Reinstall within 48 hours to recover everything. After that window, campaigns must be rebuilt from scratch. ## Still stuck? If none of the above matches your issue, gather what you can before reaching out: the campaign name, what you expected vs what happened, whether the store is on Free or Pro, and (for storefront issues) the **Debug mode** console output from the theme embed. ## Related guides * [Theme app embed](/galantis/discount/storefront/theme-embed) — embed settings and Debug mode * [How discounts apply at checkout](/galantis/discount/storefront/how-discounts-apply) — evaluation, stacking, and the automatic-vs-code distinction * [Multi-currency & Markets](/galantis/discount/rule-builder/currency-markets) — per-currency amounts, missing-currency behavior, and the Pro requirement * [Plans & limits](/galantis/discount/billing/plans-limits) — caps, the pause mechanic, and changing plans # Welcome to Galantis Source: https://docs.digifist.com/galantis/index Get the documentation you need to succeed with Galantis services. ## Themes Galantis Connect is a powerful integration tool that allows you to seamlessly connect your Shopify store with Galantis services. It enables you to manage your products, orders, and customer data efficiently while leveraging Galantis’s advanced features to enhance your store’s performance. Galantis Discount Flow is a Shopify discount app that lets you build powerful discount campaigns with a visual Rule Builder. Combine conditions, logic gates, and eight discount types — from percentage and BOGO offers to free gifts and volume pricing — and measure real revenue impact with built-in analytics. Galantis Whatsapp is an innovative marketing integration that allows you to connect your Shopify store with WhatsApp. It enables you to engage with your customers directly through WhatsApp, providing a seamless communication channel for promotions, order updates, and customer support. # Consent & Opt-outs Source: https://docs.digifist.com/galantis/whatsapp/audience/consent-optouts How marketing consent is tracked per customer in Galantis, how opt-outs are processed, and what re-subscription requires. Marketing consent is tracked individually for every customer in Galantis through the `marketing_state` field. This field controls whether a customer can receive campaign messages, automation messages, and Back-in-Stock notifications. It is updated automatically through Shopify webhooks and platform events — and it is enforced automatically before any message is dispatched. This page covers consent from the audience management perspective — how it is set, how it changes, and how to manage it across your contact base. For the broader compliance context and WhatsApp policy requirements, see [Compliance — Opt-in & Consent](/whatsapp/compliance/opt-in-consent). ## What this covers * All consent states and their meaning * How consent state changes over time * Opt-out processing and the STOP flow * Re-subscription requirements * Reviewing and filtering contacts by consent state ## Consent states Every customer in Galantis has one of the following `marketing_state` values: | State | Meaning | Can receive messages | | ---------------- | ---------------------------------------- | -------------------- | | `SUBSCRIBED` | Explicitly opted in | Yes | | `PENDING` | Consent collected, awaiting confirmation | No | | `NOT_SUBSCRIBED` | Has not opted in | No | | `UNSUBSCRIBED` | Previously opted in, now opted out | No | | `UNKNOWN` | No consent information available | No | | `INVALID` | Bad or unverifiable data | No | | `REDACTED` | GDPR/compliance data deletion applied | No | Only `SUBSCRIBED` customers are eligible for campaign sends and automation message actions. All other states result in the customer being excluded from or skipped in any outbound send. ## How consent state is set Consent state originates from Shopify and is kept current via the `customers/marketing_consent_updated` webhook. When a customer's consent changes in Shopify — through a checkout opt-in, a form submission, or an admin update — the change propagates to Galantis automatically. The following events set or change a customer's `marketing_state`: | Event | Resulting state | Mechanism | | ------------------------------------------------------ | ----------------------------- | ---------------------------------------------- | | Customer checks the opt-in box at Shopify checkout | `SUBSCRIBED` | `customers/marketing_consent_updated` webhook | | Customer submits their number via Back-in-Stock widget | `SUBSCRIBED` | Galantis records consent at submission | | Customer initiates contact via storefront chat widget | `SUBSCRIBED` | Customer-initiated contact establishes consent | | Manual import with consent confirmation | `SUBSCRIBED` | Set at import time | | Customer replies **STOP** to any WhatsApp message | `UNSUBSCRIBED` | Galantis processes inbound STOP reply | | Customer never opted in | `NOT_SUBSCRIBED` or `UNKNOWN` | Synced from Shopify consent data | | GDPR deletion request received | `REDACTED` | `customers/redact` webhook | ## Opt-out processing When a customer replies **STOP** to any WhatsApp message — whether from a campaign, an automation, or an Inbox agent — Galantis processes the reply and moves the customer's `marketing_state` to `UNSUBSCRIBED` immediately. From that moment: * The customer is excluded from all future campaign audience calculations * The customer is skipped in all automation message actions — the skip is recorded as `SKIPPED` in the activity log * The customer does not receive Back-in-Stock notifications, even if they have an `ACTIVE` subscription record * The customer remains in any lists or segments they belong to — opt-out affects messaging eligibility, not list or segment membership Opt-out is processed at the platform level, not just per channel. A customer who replies STOP to a campaign message is opted out of all Galantis messaging — automations, Inbox-initiated messages, and Back-in-Stock notifications — not only the specific campaign they replied to. ## Re-subscription An `UNSUBSCRIBED` customer cannot be re-added to messaging through any admin action within Galantis. Re-subscription requires explicit new opt-in from the customer through an approved collection method: * Re-submitting their number via the Back-in-Stock widget * Checking the opt-in box at the Shopify checkout on a subsequent order * Any other explicit opt-in mechanism that generates a `customers/marketing_consent_updated` webhook with a subscribed state When a re-subscription event occurs, Shopify sends the consent update webhook and Galantis moves the customer's `marketing_state` back to `SUBSCRIBED`. From that point, they are eligible to receive messages again. Do not attempt to manually override `UNSUBSCRIBED` status in Galantis. Doing so would bypass WhatsApp's consent requirements and could result in policy violations and quality degradation on your phone number. The re-subscription path must originate from the customer. ## REDACTED state `REDACTED` is distinct from `UNSUBSCRIBED`. It is applied when a GDPR or compliance data deletion request is received via Shopify's `customers/redact` webhook. Unlike `UNSUBSCRIBED`, `REDACTED` is not reversible through re-subscription — it signals that the customer's data has been subject to a deletion request and must not be used for any messaging purpose. See [Compliance — GDPR & Data Privacy](/whatsapp/compliance/gdpr-data-privacy) for full details on how deletion requests are processed. ## Reviewing contacts by consent state To review your contact base by consent state: 1. Go to **Audience → Contacts** 2. Filter by `marketing_state` to view all customers in a specific state 3. For individual customers, open the contact profile — the current `marketing_state` is visible at the top of the profile alongside other key fields Filtering by `UNSUBSCRIBED` gives you visibility into how many customers have opted out and when. Filtering by `NOT_SUBSCRIBED` or `UNKNOWN` shows customers who are in your Shopify store but have not opted into WhatsApp marketing — these are contacts you cannot message through Galantis until they provide explicit consent. ## Using consent state in segments The `Consent status` segment rule lets you build segments that only contain `SUBSCRIBED` customers: ``` Consent status = Yes ``` Adding this rule to any segment used as a campaign audience ensures the segment never contains non-eligible customers — which prevents the consent filter from silently reducing your actual send count below your estimated reach at send time. See [Segments](./segments) for how to configure this rule alongside other targeting conditions. ## Best practices * **Never manually import customers as `SUBSCRIBED` without verifiable proof of opt-in.** An import that marks customers as consented without a valid opt-in record is a WhatsApp policy violation. * **Add `Consent status = Yes` to campaign-facing segments.** This surfaces only messageable customers in reach estimates and prevents confusion when estimated reach differs significantly from actual sends. * **Monitor opt-out rates after campaigns.** A high volume of STOP replies following a campaign is a signal that the message was not well-targeted or was perceived as unwanted. Review audience quality and message relevance before the next send. * **Do not re-import `UNSUBSCRIBED` customers as consented.** Re-importing and marking an opted-out customer as subscribed without a genuine new opt-in is a compliance violation that puts your phone number quality at risk. ## Related guides * [Compliance — Opt-in & Consent](/whatsapp/compliance/opt-in-consent) — WhatsApp policy requirements and collection methods * [Compliance — GDPR & Data Privacy](/whatsapp/compliance/gdpr-data-privacy) — REDACTED state and deletion request handling * [Segments](./segments) — Using `Consent status` as a segment rule condition * [Contacts](./contacts) — Where `marketing_state` appears on the contact profile # Contacts Source: https://docs.digifist.com/galantis/whatsapp/audience/contacts Customer profiles in Galantis — synced from Shopify, enriched with WhatsApp engagement history, and used across campaigns, automations, and the Inbox. Contacts are the individual customer records in Galantis. Every contact is sourced from Shopify and kept current via webhook sync — when a customer's data changes in Shopify, the change propagates to Galantis within seconds. On top of the Shopify data, Galantis enriches each contact with WhatsApp-specific information: message history, conversation threads, automation activity, and consent status. A contact's profile is the single source of truth for everything Galantis knows about that customer — it is what campaign targeting, automation conditions, segment rules, and Inbox context all draw from. ## What this covers * All customer profile fields and their sources * Related data available per contact * How sync works and what triggers it * The `exclude_from_galantis` flag * Finding and reviewing a contact's profile ## Customer profile fields | Field | Source | Purpose | | --------------------- | ------- | ---------------------------------------------------------------- | | `shopify_customer_id` | Shopify | Links the Galantis contact record to the Shopify customer record | | `first_name` | Shopify | Display name — used in template variable mapping | | `last_name` | Shopify | Display name — used in template variable mapping | | `email` | Shopify | Contact info — available as a template variable | These fields are synced from Shopify on customer creation and updated whenever the customer record changes in Shopify via the `customers/update` webhook. | Field | Source | Purpose | | -------------------- | ------- | ----------------------------------------------------- | | `phone` | Shopify | The WhatsApp number used for message delivery | | `phone_country_code` | Shopify | ISO country code for the phone number | | `phone_calling_code` | Shopify | International dialing prefix (e.g., `+52` for Mexico) | All three phone fields must be present and valid for a message to be deliverable. A missing `phone_calling_code` is the most common cause of `CUSTOMER_IS_MISSING_CALLING_CODE` delivery failures. When this error appears in campaign analytics or automation activity logs, it indicates the customer's phone number in Shopify is missing the country calling code — this must be corrected in Shopify for the record to sync correctly into Galantis. Phone number data is synced from Shopify as entered by the customer. Galantis does not normalize or validate phone number format beyond what Shopify provides. If customers in your store frequently enter numbers without country codes, review your Shopify checkout phone field configuration. | Field | Source | Purpose | | ----------------- | ------------------ | ---------------------------------------------------------------------------------- | | `tags` | Shopify | Lifecycle stages and custom tags — used in segment rules and automation conditions | | `marketing_state` | Shopify / Galantis | Consent status — determines eligibility for campaigns and automations | | `country` | Shopify | Geo targeting — used in segment rules and country-based automation conditions | | `locale` | Shopify | Language/locale — useful for language-based segment targeting | `marketing_state` is the most consequential field on a contact's profile. It is updated by Shopify consent webhooks and by Galantis when a customer replies STOP. See [Consent & Opt-outs](./consent-optouts) for the full state reference. `tags` are synced via the `customer_tags/added` and `customer_tags/removed` webhooks — tag changes in Shopify propagate to Galantis in near real time and immediately affect segment membership for any segment with tag-based rules. | Field | Source | Purpose | | ----------------------- | -------- | ---------------------------------------------------- | | `synced_at` | Galantis | Timestamp of the last successful sync from Shopify | | `exclude_from_galantis` | Galantis | Excludes the customer from AI automation suggestions | `synced_at` is useful for diagnosing whether a recent Shopify change has propagated to Galantis. If a customer's profile in Galantis appears outdated, check `synced_at` against the time of the Shopify change. `exclude_from_galantis` is a Galantis-side flag that excludes the customer from AI-powered automation suggestions in the Galantis AI flow builder. It does not affect manual automation enrollment or campaign sends. ## Related data per contact Beyond the profile fields, each contact's record surfaces related data from across the platform: **Order history** (`orders`) — All Shopify orders associated with the customer, synced via the `orders/create` and `orders/updated` webhooks. Used in segment rules (total spent, order count, days since last order) and available as context in the Inbox conversation view. **Back-in-Stock subscriptions** (`subscriptions`) — Any active or historical Back-in-Stock widget subscriptions the customer has submitted. Visible per contact to confirm subscription status for a specific variant. **Message history** (`messages`) — All WhatsApp messages sent to and received from this customer across campaigns, automations, and Inbox conversations. Visible on the contact profile for full communication context. **Conversation threads** (`conversations`) — All Inbox conversation threads for the customer, with their status (OPEN, PENDING, RESOLVED) and assigned agent. **List and segment membership** — Which Customer Lists the contact belongs to and which Segments they currently match. Useful for confirming whether a customer should have been included or excluded from a recent campaign. ## How sync works Galantis maintains customer data through two mechanisms: **Initial import** — When the app is first installed, Galantis runs a full import of your existing Shopify customer base. This populates the contact database with all customers at the time of installation. **Ongoing webhook sync** — After the initial import, Galantis receives Shopify webhooks for every customer event: | Webhook | What it updates | | ------------------------------------- | ------------------------------------------- | | `customers/create` | Creates a new contact record | | `customers/update` | Updates profile fields, phone, tags, locale | | `customers/delete` | Removes the contact record | | `customers/marketing_consent_updated` | Updates `marketing_state` | | `customer_tags/added` | Adds tags to the contact record | | `customer_tags/removed` | Removes tags from the contact record | ## Finding a contact's profile Navigate to **Audience → Contacts** and search by name, email, or phone number. The contact profile page shows all fields, related data, and a summary of recent message and automation activity. The contact profile is also surfaced contextually in the Inbox — when an agent opens a conversation, the customer's Shopify data, order history, and consent status are visible in the sidebar without leaving the thread. ## Best practices * **Resolve `CUSTOMER_IS_MISSING_CALLING_CODE` errors at the source.** Fix the phone number format in Shopify — Galantis will sync the corrected data via webhook. Attempting to fix it in Galantis directly is not the right approach since the Shopify record will overwrite the change on the next sync. * **Use `synced_at` to diagnose stale data.** If a customer's segment membership or consent status seems incorrect, check `synced_at` to determine when the last sync occurred and whether a recent Shopify change has had time to propagate. * **Review tag sync timing for automation conditions.** Tag-based automation conditions (`CUSTOMER_TAG`) evaluate the customer's tags at the moment the condition node is reached — not at trigger time. A customer who gains or loses a tag while in a delayed flow will be evaluated against their tag state at condition evaluation, not at enrollment. ## Related guides * [Segments](./segments) — Using contact fields as segment rule conditions * [Consent & Opt-outs](./consent-optouts) — How `marketing_state` is set and enforced * [Inbox — Assignment & Routing](/whatsapp/inbox/assignment-routing) — How contact context appears in Inbox conversations * [Support — Message Delivery](/whatsapp/support/troubleshooting/message-delivery) — Resolving phone number format errors # Audience Source: https://docs.digifist.com/galantis/whatsapp/audience/index Customer contacts, static lists, and dynamic segments — the targeting foundation for every campaign and automation in Galantis. The Audience module is where your customer data lives in Galantis. Every contact synced from Shopify, every list you build manually, and every segment defined by rules is managed here. Campaigns draw their recipients from this data. Automations evaluate conditions against it. Consent state is tracked within it. Understanding how contacts, lists, and segments relate to each other — and how they behave differently — is the prerequisite for building campaigns and automations that reach the right customers with the right message. ## How audience data works in Galantis Galantis syncs customer data from Shopify continuously via webhooks. When a customer is created, updated, or deleted in Shopify, the change is reflected in Galantis within seconds. This means your contact profiles, order history, tags, and consent status are always current — you are not working with a stale snapshot. On top of the synced contact data, Galantis maintains two types of audience groupings: **Lists** are static. You add customers to a list manually or via import and they stay there until removed. Lists are simple and predictable — useful for curated, stable groups like VIP customers or newsletter subscribers. **Segments** are dynamic. They are defined by rules evaluated against contact data. As customer data changes, segment membership updates automatically. A customer crosses your spending threshold — they join the high-LTV segment. A customer goes 60 days without ordering — they enter the lapsed segment. No manual management required. ## Guides in this section Customer profile fields, Shopify sync behavior, and related data available per contact. Static customer groups — creating, managing, and using lists in campaigns and automations. Dynamic rule-based groups — all available conditions, operators, and evaluation behavior. How opt-in status is tracked per customer and how opt-outs are handled. ## How audience data feeds campaigns and automations | Feature | Uses lists | Uses segments | Uses contact fields | | ----------------- | --------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------ | | **Campaigns** | As include/exclude targets | As include/exclude targets | For variable mapping in templates | | **Automations** | As exclusion rules, trigger source (`USER_ADDED_TO_LIST`) | As exclusion rules, trigger source (`USER_ADDED_TO_SEGMENT`), condition evaluation | For condition evaluation, variable mapping | | **Back-in-Stock** | — | — | For consent validation and notification delivery | ## Related guides * [Campaigns — Audience Targeting](/whatsapp/campaigns/audience-targeting) — Using lists and segments as campaign audiences * [Automations — Exclusion Rules](/whatsapp/automations/exclusion-rules) — Excluding lists and segments from automation enrollment * [Compliance — Opt-in & Consent](/whatsapp/compliance/opt-in-consent) — How consent state is enforced across the platform # Lists Source: https://docs.digifist.com/galantis/whatsapp/audience/lists Static customer groups in Galantis — created and managed manually, used as campaign targets and automation exclusions. Customer Lists are static, manually managed groups. Unlike segments — which update automatically as customer data changes — a list's membership changes only when you explicitly add or remove customers. That predictability is what makes lists useful: when you need a fixed, curated group that does not shift between when you configure a campaign and when you send it, a list is the right tool. ## What this covers * What lists are and when to use them over segments * Creating and managing lists * Adding customers to a list * How lists are used in campaigns and automations * Common list use cases ## Lists vs segments | | Lists | Segments | | -------------- | ----------------------------------------------------- | -------------------------------------------------------- | | **Membership** | Static — changes only when you manually add or remove | Dynamic — updates automatically as customer data changes | | **Management** | Manual | Rule-based, self-maintaining | | **Best for** | Curated, stable groups | Behavioral or data-driven groups | | **Example** | VIP customers selected by hand | Customers who spent > \$500 in the last 90 days | Use a list when the group is defined by human judgment — a handpicked VIP tier, a specific import, a post-event attendee group. Use a segment when the group is defined by customer behavior or data thresholds that should update automatically. ## Creating a list In the Galantis dashboard, go to **Audience → Lists** and click **New List**. Give the list a clear, descriptive name. List names appear in the campaign audience builder and in automation exclusion rules — a name like `VIP Customers - Handpicked` is more useful than `List 1`. Add customers individually by searching for them, or import a batch via CSV upload. Customers can also be added to a list programmatically via the `USER_ADDED_TO_LIST` automation trigger context. The list is immediately available for use in campaign audience targeting and as an automation exclusion rule or trigger source. ## Adding customers to a list **Individual add** — Search for a customer by name, email, or phone number in the list management view and add them directly. Use this for one-off additions or small curated groups. **Bulk import** — Upload a CSV of customer records to add multiple customers at once. **Recency tracking** — Each list tracks when it was most recently used in a campaign. This is visible in the list detail view and is useful for auditing which lists are actively in use versus stale. ## How lists are used **In campaigns** — Lists can be added as include or exclude targets in the campaign audience builder. Include a list to send to its members; exclude a list to suppress its members from the send even if they appear in other included sources. See [Campaigns — Audience Targeting](/whatsapp/campaigns/audience-targeting). **As automation triggers** — The `USER_ADDED_TO_LIST` trigger fires an automation when a customer is added to a specific list. This makes lists a useful mechanism for manually enrolling customers into automation flows — adding a customer to a "Win-Back Candidates" list triggers the win-back flow without any further configuration. See [Automations — Triggers](/whatsapp/automations/triggers). **As automation exclusions** — Lists can be added as exclusion rules on any automation. Customers on the excluded list are not enrolled in the automation even if they match the trigger. The most common use is a "Do Not Contact" suppression list applied as an exclusion across multiple automations. See [Automations — Exclusion Rules](/whatsapp/automations/exclusion-rules). ## Common use cases **VIP customers** — A handpicked list of your highest-value customers, used as an include target for VIP-exclusive campaign sends and a condition input for automation branching. **Newsletter subscribers** — Customers who opted into a specific newsletter or content series, managed separately from general marketing consent. **Post-purchase follow-up groups** — Customers who purchased a specific product or attended a specific event, grouped manually for a targeted follow-up campaign. **Re-engagement candidates** — Customers identified for re-engagement based on manual review rather than a data-driven segment rule. **Suppression / Do Not Contact** — Customers who have requested no messaging beyond the standard opt-out flow. Adding this list as an exclusion on all automations creates a secondary suppression layer on top of consent-state filtering. ## Best practices * **Keep list names descriptive and consistent.** Lists are referenced by name throughout the campaign builder and automation configuration. A clear naming convention (`[Purpose] - [Date or Version]`) reduces confusion when managing multiple lists. * **Audit list membership regularly.** Unlike segments, lists do not self-update. A VIP list that has not been reviewed in 6 months may contain customers who are no longer active or relevant. Schedule periodic reviews. * **Use exclusion lists proactively.** Maintaining a "Do Not Contact" list and applying it as an exclusion across automations provides a safety net for customers who have communicated a preference outside the standard STOP flow. * **Prefer segments for data-driven groups.** If the criteria for list membership can be expressed as a rule (e.g., "spent more than \$200"), build a segment instead — it will stay accurate without manual maintenance. ## Related guides * [Segments](./segments) — Dynamic rule-based groups that complement static lists * [Consent & Opt-outs](./consent-optouts) — How opt-out state interacts with list membership * [Campaigns — Audience Targeting](/whatsapp/campaigns/audience-targeting) — Using lists as campaign audience sources * [Automations — Triggers](/whatsapp/automations/triggers) — USER\_ADDED\_TO\_LIST trigger configuration * [Automations — Exclusion Rules](/whatsapp/automations/exclusion-rules) — Using lists as automation suppression rules # Segments Source: https://docs.digifist.com/galantis/whatsapp/audience/segments Dynamic rule-based customer groups that update automatically as customer data changes — the targeting engine for campaigns and automations. Customer Segments are dynamic groups defined by rules evaluated against contact data. Unlike lists, which are maintained manually, segments maintain themselves — as a customer's orders, spend, engagement, or tags change in Shopify, their segment membership updates automatically. This makes segments the right tool for any audience group defined by behavior, lifecycle stage, or data thresholds. Segments are used as campaign audience targets, automation triggers, automation condition evaluations, and automation exclusion rules — they are woven into nearly every part of the Galantis platform. ## What this covers * How segment rules work * All available rule conditions and operators * AND/OR grouping for complex rule logic * How segment evaluation works * Using segments in campaigns and automations ## How segment rules work A segment is defined by one or more rule conditions. When Galantis evaluates a segment, it runs the rules against every customer in your workspace and identifies which customers match. Customers who match become members; customers who no longer match are removed. Rules use two levels of logic: * **AND logic within a group** — all conditions in a group must be true for a customer to match that group * **OR logic between groups** — a customer who matches any group is included in the segment This structure allows complex expressions like: ``` (Total spent > 500 AND Country = MX) OR (Orders count >= 3 AND Consent = Yes) ``` A customer who matches either group is a segment member — they do not need to match both. ## Rule conditions **Phone number** — Match customers by exact phone number. | Operator | Behavior | | ----------- | ------------------------------------------- | | exact match | Customer's phone equals the specified value | **Added to list** — Match customers who are members of a specific Customer List. | Operator | Behavior | | -------- | ----------------------------------------- | | in list | Customer is a member of the selected list | The `Added to list` condition creates an intersection between a dynamic segment and a static list — useful for applying additional rule-based filters on top of a manually curated list. **Last message received** — Match customers based on the date of their most recent inbound WhatsApp message. | Operators | date comparison | | --------- | --------------- | **Last engaged at** — Match customers based on when they last engaged with a WhatsApp message (opened, replied, or clicked). | Operators | before / after / between / in last X days | | --------- | ----------------------------------------- | **Messages received** — Match customers by total count of WhatsApp messages received. | Operators | `>`, `<`, `>=`, `<=`, `=`, `between` | | --------- | ------------------------------------ | **Messages read** — Match customers by total count of WhatsApp messages they opened. | Operators | `>`, `<`, `>=`, `<=`, `=`, `between` | | --------- | ------------------------------------ | **Automation completions** — Match customers by how many times they have completed an automation flow. | Operators | `>`, `<`, `>=`, `<=`, `=`, `between` | | --------- | ------------------------------------ | Engagement-based conditions are powerful for re-engagement and suppression logic — for example, excluding customers who have not opened any of the last 5 messages from a re-engagement campaign, or targeting customers whose engagement has dropped over a defined period. **Orders count** — Total number of orders placed. | Operators | `>`, `<`, `>=`, `<=`, `=`, `between` | | --------- | ------------------------------------ | **Total spent** — Cumulative order value across all orders. | Operators | `>`, `<`, `>=`, `<=`, `=`, `between` | | --------- | ------------------------------------ | **Average order value** — Average value per order. | Operators | `>`, `<`, `>=`, `<=`, `=`, `between` | | --------- | ------------------------------------ | **Days since last order** — Number of days since the customer's most recent order. | Operators | `>`, `<`, `>=`, `<=`, `=`, `between` | | --------- | ------------------------------------ | **Days since first order** — Number of days since the customer's first-ever order. | Operators | `>`, `<`, `>=`, `<=`, `=`, `between` | | --------- | ------------------------------------ | **Purchased collection** — Whether the customer has purchased from a specific Shopify collection. | Operators | in / not in | | --------- | ----------- | **Purchased brand** — Whether the customer has purchased products from a specific brand (vendor). | Operators | in / not in | | --------- | ----------- | **Purchased price range** — Whether the customer has purchased products within a specific price range. | Operators | between / not between | | --------- | --------------------- | Purchase history conditions are the foundation of lifecycle segmentation — separating first-time buyers from repeat customers, identifying high-LTV customers, building lapsed-buyer segments based on days since last order, and targeting customers by product category. **Country** — Customer's country from their Shopify profile. | Operators | is / is not / in / not in | | --------- | ------------------------- | **Language** — Customer's locale/language setting. | Operators | is / is not / in / not in | | --------- | ------------------------- | **Consent status** — Customer's current `marketing_state`. | Operators | is / is not (Yes / No / Unknown) | | --------- | -------------------------------- | **Lifecycle stage** — Customer's current lifecycle stage in Galantis. | Operators | is / is not / in / not in | | --------- | ------------------------- | Country and language conditions are essential for international stores sending localized content — defining separate segments per market and routing them to language-appropriate templates is the standard pattern for multi-region campaigns. Adding `Consent status = Yes` as a rule to any segment ensures the segment only contains `SUBSCRIBED` customers — which means the segment can be used as a campaign audience without the consent filter removing customers at send time. ## Full rule condition reference | Rule | Available operators | | ---------------------- | ----------------------------------------- | | Phone number | exact match | | Added to list | in list | | Last message received | date comparison | | Last engaged at | before / after / between / in last X days | | Orders count | `>`, `<`, `>=`, `<=`, `=`, `between` | | Total spent | `>`, `<`, `>=`, `<=`, `=`, `between` | | Days since last order | `>`, `<`, `>=`, `<=`, `=`, `between` | | Days since first order | `>`, `<`, `>=`, `<=`, `=`, `between` | | Average order value | `>`, `<`, `>=`, `<=`, `=`, `between` | | Country | is / is not / in / not in | | Language | is / is not / in / not in | | Consent status | is / is not (Yes / No / Unknown) | | Purchased collection | in / not in | | Purchased brand | in / not in | | Purchased price range | between / not between | | Messages received | `>`, `<`, `>=`, `<=`, `=`, `between` | | Messages read | `>`, `<`, `>=`, `<=`, `=`, `between` | | Automation completions | `>`, `<`, `>=`, `<=`, `=`, `between` | | Lifecycle stage | is / is not / in / not in | ## How segment evaluation works When a segment is evaluated, Galantis runs the rule query against all customer records, syncs the membership pivot table, and emits `UserAddedToSegment` events for customers who newly match the rules — customers who matched before evaluation and still match do not generate a new event. This event-driven mechanism is what powers the `USER_ADDED_TO_SEGMENT` automation trigger. When a customer's data changes — a new order pushes them over a spending threshold, a tag is added, days since last order increments — the next segment evaluation detects the membership change and fires the trigger for that customer. ## Building effective segments **A high-LTV lapsed buyer segment** ``` Total spent > [your LTV threshold] AND Days since last order > 60 AND Consent status = Yes ``` Pairs with the [VIP Win-Back automation recipe](/whatsapp/automations/recipes/vip-win-back). **A first-time buyer cross-sell segment** ``` Orders count = 1 AND Days since last order < 14 AND Consent status = Yes ``` Customers who made their first purchase in the last 2 weeks — a high-intent window for a second-purchase prompt. **A Mexico high-spend segment** ``` Country = MX AND Total spent > 500 AND Consent status = Yes ``` Market-specific high-value audience for a localized campaign. **A re-engagement suppression segment** ``` Last engaged at > 90 days ago AND Messages received > 5 ``` Customers who have received multiple messages but haven't engaged in 90 days — useful as a campaign exclusion to protect deliverability. ## Best practices * **Always include `Consent status = Yes` in segments used as campaign audiences.** This ensures the segment only contains `SUBSCRIBED` customers and prevents the consent filter from silently reducing your reach at send time. * **Use segments as automation exclusions for active sequence participants.** If a customer is enrolled in a post-purchase sequence, a segment defined as `Automation completions < 1 for [post-purchase automation]` can be used as an exclusion to prevent them from being enrolled in a separate re-engagement flow simultaneously. * **Name segments clearly and include the defining criteria.** `High LTV Lapsed - MX - >500 spent` is more useful than `Segment 3` when you are selecting an audience in the campaign builder. * **Build and verify segments before referencing them in automations.** A segment used as a trigger source or exclusion rule should have its membership count and rule logic confirmed before the automation is activated. * **Do not over-segment.** A large number of similar, slightly different segments becomes difficult to maintain. Prefer fewer, well-defined segments that cover clear lifecycle stages or targeting needs. ## Related guides * [Lists](./lists) — Static groups that complement dynamic segments * [Consent & Opt-outs](./consent-optouts) — How consent state maps to the `Consent status` segment rule * [Automations — Triggers](/whatsapp/automations/triggers) — USER\_ADDED\_TO\_SEGMENT trigger behavior * [Automations — Conditions](/whatsapp/automations/conditions) — SEGMENT\_MEMBERSHIP condition in flow branching * [Campaigns — Audience Targeting](/whatsapp/campaigns/audience-targeting) — Using segments as campaign audience sources # Actions Source: https://docs.digifist.com/galantis/whatsapp/automations/actions Action nodes and Delay nodes — the execution steps that send messages and control timing in automation flows. Actions are what a flow actually does. In Galantis automations, two node types produce execution behavior: the **Action Node**, which sends a WhatsApp template to the customer, and the **Delay Node**, which pauses execution for a defined period before the next step runs. Every meaningful automation contains at least one of each. ## What this covers * Action Node configuration and template assignment * Delay Node configuration and available time units * Variable mapping in action nodes * How action execution is tracked ## Action Node The Action Node sends an approved WhatsApp template to the customer at the point in the flow where it is placed. It is the only node type that dispatches a message. ### Configuring an Action Node Click the Action Node to open its settings panel. Select an approved template from the template picker. Only templates with `APPROVED` status are available for selection. For each variable placeholder in the selected template (`{{1}}`, `{{2}}`, etc.), assign a value from the available customer or order data fields, or enter static text. Available variable sources: * `customer.first_name`, `customer.last_name`, `customer.email`, `customer.phone` * `order.order_number`, `order.total_price`, `order.product_name` * Store name * Custom static text See [Campaigns — Personalization](/whatsapp/campaigns/personalization) for the full variable mapping reference — the same data sources apply in automations. Save the node. If the assigned template is not `APPROVED`, the node will be flagged during validation and the automation cannot be activated until the template is approved. ### Template approval requirement Action Nodes can only use templates with `APPROVED` status. An automation with any Action Node referencing an unapproved template is flagged and blocked from activation. This check runs at activation time — if a template is paused by Meta after the automation is already active, the affected Action Node will fail for customers who reach it until the template is restored to `APPROVED` status. If Meta pauses a template used in an active automation, affected messages will fail silently for customers who reach that Action Node. Monitor template status in **Templates** periodically, especially after Meta quality reviews. ### Consent validation at send time Before an Action Node dispatches a message, Galantis validates the customer's `marketing_state`. Customers with `UNSUBSCRIBED` or `REDACTED` status are skipped — the node execution is recorded as `SKIPPED` in the activity log rather than `FAILED`. This distinction is important: a skip is a correct compliance behavior, not an error. ## Delay Node The Delay Node pauses the flow for a specific duration before execution moves to the next connected node. It does not send any message — it exists solely to control timing. ### Available delay units | Unit | When to use | | --------- | ------------------------------------------------------------------------ | | `MINUTES` | Short pauses within the same session — e.g., 10–30 minutes after trigger | | `HOURS` | Same-day delays — e.g., 2–4 hours after an event | | `DAYS` | Multi-day sequences — e.g., 3 days after a purchase for a cross-sell | | `MONTHS` | Long-term re-engagement sequences — e.g., 1 month after last purchase | ### Why delays matter A flow without delays sends messages the instant a trigger fires. For most use cases this produces a poor customer experience — a welcome message arriving in the same second as Shopify's registration confirmation email, or a recovery message sent before the customer has had any time to return on their own. Delays also affect conversion logic. An abandoned checkout recovery that fires 30 minutes after abandonment catches customers while the intent is still fresh. The same flow with a 3-day delay is largely irrelevant. A useful pattern for multi-step flows is to place a delay after every action node, not just after the trigger. This creates breathing room between messages in a sequence and reduces the risk of a customer receiving two messages in rapid succession. ### Delay precision and the abandoned checkout offset For most triggers, delay timing is precise relative to the moment the trigger fires. For `ABANDONED_CHECKOUT`, factor in the 10-minute polling interval — the trigger fires up to 10 minutes after the actual abandonment event, so a 30-minute delay node results in the message arriving 30–40 minutes after the customer abandoned, not exactly 30. See [Triggers](./triggers) for the polling timing detail. ## Related guides * [Flow Builder](./flow-builder) — Placing and connecting nodes on the canvas * [Triggers](./triggers) — Trigger events that precede the first Action or Delay node * [Conditions](./conditions) — Branching nodes that sit between delays and actions * [Activity Tracking](./activity-tracking) — How Action Node execution is logged per customer # Activity Tracking Source: https://docs.digifist.com/galantis/whatsapp/automations/activity-tracking Per-customer node execution history and the full audit trail for every automation run in Galantis. Every automation execution in Galantis is recorded in the activity log. Each time a customer passes through a node — whether it completes successfully, is skipped, fails, or is still pending — a record is written with the outcome and a timestamp. This gives you a complete, per-customer audit trail for every flow without any manual tracking. ## What this covers * The activity log and what it records * Node execution statuses and what each means * How to use the activity log for troubleshooting * What skipped executions indicate ## What is recorded For every customer enrolled in an automation, Galantis records: * The automation and the specific flow version they were enrolled in * Each node they passed through, in sequence * The status of each node execution * Timestamps for each status transition * The reason for any skip or failure This data is accessible in **Automations → \[Automation Name] → Activity**. ## Node execution statuses | Status | Meaning | | ----------- | ----------------------------------------------------------------------------------------------------- | | `PENDING` | The node is queued — execution has not yet started for this customer at this node | | `SCHEDULED` | A Delay Node is active — execution is paused and will resume after the delay elapses | | `COMPLETED` | The node executed successfully — a message was sent, a condition was evaluated, or a delay elapsed | | `FAILED` | Execution failed — the action could not be completed, typically due to an API error or template issue | | `SKIPPED` | Execution was bypassed — see below for skip reasons | ### Understanding SKIPPED `SKIPPED` is not an error. It indicates that Galantis deliberately did not execute the node for a valid reason. Common skip reasons: * **Consent** — The customer's `marketing_state` changed to `UNSUBSCRIBED` or `REDACTED` between enrollment and reaching this node. Sending the message would violate WhatsApp's policy. * **Frequency cap** — The customer was already enrolled in this automation within the configured cap window. The trigger was detected but enrollment was suppressed. * **Exclusion rule** — The customer became a member of an excluded list or segment before reaching this node. * **Condition branch** — The customer took the YES branch of a Condition Node, so the NO branch nodes were skipped, and vice versa. This is normal flow behavior. Reviewing skipped executions is particularly useful for diagnosing why a specific customer did not receive an expected message — the skip record shows exactly which check caused the bypass. ## Using the activity log Go to **Automations → \[Automation Name] → Activity**. Search or filter by customer name, phone number, or email to find a specific customer's execution record. The activity log shows each node the customer passed through in order, with its status and timestamp. Trace the path from enrollment through each node to see where execution completed, stalled, or was skipped. Click a node record to see its full detail — the specific status reason, the template used (for Action Nodes), and any error message for `FAILED` statuses. ## Common troubleshooting scenarios **Customer enrolled but never received a message** Check whether any Action Nodes in their execution path show `SKIPPED`. If yes, expand the skip record to see the reason — consent change, frequency cap, or exclusion rule. If all Action Nodes show `COMPLETED`, the message was dispatched — check the message delivery status in **Audience → Contacts → \[Customer] → Messages** for the delivery outcome. **Customer shows `SCHEDULED` with no further activity** The customer is currently inside a Delay Node. `SCHEDULED` means the delay is still running — execution will continue automatically when the delay elapses. This is not a stuck state unless the timestamp is significantly older than the configured delay duration. **Action Node shows `FAILED`** Expand the failure record to see the error reason. Common causes: * Template was paused by Meta after the automation was activated — resolve the template issue and re-activate * Customer's phone number has a format error — review the contact record for a missing country calling code * Insufficient credits — check billing balance **Customer was not enrolled at all** The customer's trigger event fired but they were not enrolled. Check the activity log for a blocked enrollment record. Possible reasons: consent was not `SUBSCRIBED` at trigger time, frequency cap was active, or the customer was a member of an excluded list or segment. ## Related guides * [Flow Builder](./flow-builder) — Understanding the node structure that activity tracking maps to * [Frequency Caps](./frequency-caps) — How cap-blocked enrollments appear in the activity log * [Exclusion Rules](./exclusion-rules) — How exclusion-blocked enrollments appear in the activity log * [Opt-in & Consent](/whatsapp/compliance/opt-in-consent) — Consent states that cause SKIPPED execution # Conditions Source: https://docs.digifist.com/galantis/whatsapp/automations/conditions Condition nodes, branching logic, and AND/OR grouping for building targeted automation flows. Condition nodes evaluate data about the customer or their triggering event and split the flow into a YES path and a NO path. They are what makes automations targeted rather than generic — instead of sending the same message to every customer who triggers a flow, conditions let you branch based on order value, purchase history, segment membership, reply behavior, and more. Every condition branch must connect to at least one subsequent node. A branch that leads nowhere will fail flow validation. ## What this covers * All ten available condition types * AND/OR logic and nested grouping * How to read a condition node's output * Practical branching patterns ## Condition types **`MESSAGE_DELIVERY_STATUS`** — Evaluates whether the last message sent to the customer in this flow was delivered or read. Use this to branch based on whether previous communication reached the customer. A common pattern is to send a recovery message, wait 24 hours, then check delivery status before deciding whether to send a follow-up or exit the flow for undelivered cases. **Available evaluations:** delivered, read, failed, sent (but not yet delivered or read) **`USER_REPLY_STATUS`** — Evaluates whether the customer replied to the last message sent in this flow within a defined window. Use this to suppress a follow-up message when the customer has already engaged. For example: send an initial recovery message, wait 4 hours, check if the customer replied — if YES, exit the flow; if NO, send a reminder. This condition requires an active conversation window context — it checks for a customer-initiated inbound message after the last outbound action in the flow. **`ORDER_RECENCY`** — Evaluates how recently the customer placed an order. Use this to prevent recovery or re-engagement messages from reaching customers who have already purchased since the trigger fired. This is particularly useful in abandoned checkout flows where the customer may have completed a purchase on a different device or channel after abandoning. **Available operators:** before / after / within last X days **`CUSTOMER_TAG`** — Evaluates whether the customer currently has a specific Shopify tag on their customer record. Use this to differentiate treatment based on lifecycle stage, loyalty tier, or any other tag-based segmentation your store uses. For example: branch VIP-tagged customers to a premium offer template while routing standard customers to a general recovery template. **Available operators:** has tag / does not have tag **`PRODUCT_IN_ORDER_HAS_TAG`** — Evaluates whether the order that triggered this flow contains a product with a specific Shopify product tag. Use this to send product-category-specific follow-ups. For example: in a post-purchase cross-sell flow, check whether the triggering order contained a product tagged "Shoes" — if YES, send an accessories recommendation; if NO, route to a different recommendation template. **Available operators:** contains a product with tag / does not contain a product with tag **`SEGMENT_MEMBERSHIP`** — Evaluates whether the customer is currently a member of a specific segment. Use this to apply dynamic audience logic mid-flow. Segment membership is evaluated at the moment the customer reaches the condition node — not at the time the flow was triggered. This means a customer who joins or leaves a segment between trigger and condition evaluation will be routed correctly based on their current state. **Available operators:** is a member / is not a member **`ORDER_VALUE`** — Evaluates the total value of the order that triggered this flow. Use this to differentiate message treatment by order size. The most common pattern is an abandoned checkout flow that routes high-value abandonments to a personalized VIP recovery template and lower-value abandonments to a standard template. **Available operators:** `>`, `<`, `>=`, `<=`, `=`, `between` **`ITEM_COUNT_IN_ORDER`** — Evaluates the number of line items in the triggering order. Use this to differentiate between single-item and multi-item orders, which often warrant different messaging strategies — a customer who bought one item may respond differently to a cross-sell than a customer who already bought multiple products. **Available operators:** `>`, `<`, `>=`, `<=`, `=`, `between` **`LIST_MEMBERSHIP`** — Evaluates whether the customer is currently a member of a specific Customer List. Use this similarly to segment membership, but against static lists rather than dynamic rule-based segments. Useful for suppressing messages to customers on a VIP or do-not-contact list, or for routing list members to a dedicated message variant. **Available operators:** is a member / is not a member **`CUSTOMER_COUNTRY`** — Evaluates the customer's country from their Shopify profile. Use this to localize messaging — routing customers from different markets to templates written in the appropriate language, or applying market-specific offers. Particularly relevant for Galantis's primary markets (LATAM, MENA, India) where a single flow serving multiple countries often needs country-level branching. **Available operators:** is / is not / in list / not in list ## AND/OR logic and grouping Multiple conditions can be combined within a single Condition Node using AND and OR operators, and grouped for complex evaluation. **AND logic within a group** — all conditions in the group must be true for the group to evaluate as true: ``` Order Value > 100 AND Customer Country = MX → Both must be true ``` **OR logic between groups** — if any group evaluates as true, the overall condition evaluates as true: ``` (Order Value > 100 AND Customer Country = MX) OR (Customer Tag = "VIP") → Either group being true is sufficient ``` This structure allows conditions like: "Route to the VIP template if the order is over \$100 from Mexico, OR if the customer is tagged VIP regardless of order value." Group conditions in the condition node's settings panel by adding rule groups and selecting AND or OR as the inter-group operator. ## Condition reference | Condition | Evaluates | Key operators | | -------------------------- | ----------------------------------- | ------------------------------------ | | `MESSAGE_DELIVERY_STATUS` | Delivery state of last message | delivered / read / failed | | `USER_REPLY_STATUS` | Whether customer replied | replied / did not reply | | `ORDER_RECENCY` | Time since last order | before / after / within X days | | `CUSTOMER_TAG` | Shopify tag presence | has / does not have | | `PRODUCT_IN_ORDER_HAS_TAG` | Product tag in triggering order | contains / does not contain | | `SEGMENT_MEMBERSHIP` | Current segment membership | is / is not member | | `ORDER_VALUE` | Triggering order total | `>`, `<`, `>=`, `<=`, `=`, `between` | | `ITEM_COUNT_IN_ORDER` | Line item count in triggering order | `>`, `<`, `>=`, `<=`, `=`, `between` | | `LIST_MEMBERSHIP` | Current list membership | is / is not member | | `CUSTOMER_COUNTRY` | Customer's country | is / is not / in / not in | ## Best practices * **Always connect both YES and NO branches.** A condition with an unconnected branch fails validation and blocks activation. Even if the NO path should do nothing, connect it to an explicit exit point or omit the condition if branching is not needed. * **Use `ORDER_RECENCY` in recovery flows.** An abandoned checkout customer who purchased before the recovery message sends should not receive a recovery message. A recency check before the action node prevents this. * **Prefer segment conditions for complex audience logic.** Rather than stacking multiple conditions in a single node, consider building a segment that captures the complex logic and using a single `SEGMENT_MEMBERSHIP` condition node. This makes the flow easier to read and the segment independently useful for campaigns. * **Evaluate country conditions early in international flows.** If a flow needs to send different templates per language, place the country condition node before any action nodes so routing happens before any message is sent. ## Related guides * [Flow Builder](./flow-builder) — Placing and connecting Condition Nodes on the canvas * [Actions](./actions) — The Action Nodes that conditions route customers toward * [Triggers](./triggers) — What data is available from each trigger for condition evaluation * [Recipes](./recipes/index) — Condition usage in context across common flow patterns # Exclusion Rules Source: https://docs.digifist.com/galantis/whatsapp/automations/exclusion-rules Exclude specific Customer Lists or Segments from an automation entirely, independent of trigger and frequency cap logic. Exclusion rules let you permanently exclude members of specific Customer Lists or Customer Segments from an automation — regardless of whether they match the trigger, pass the frequency cap, or have `SUBSCRIBED` consent. A customer who is a member of an excluded list or segment will never be enrolled in that automation while the exclusion is in place. Exclusion rules are configured per automation and complement — rather than replace — consent filtering and frequency caps. ## What this covers * How exclusion rules work and when they are evaluated * Configuring list and segment exclusions * The difference between exclusion rules and frequency caps * Common exclusion patterns ## How exclusion rules work When a trigger event fires for a customer, Galantis evaluates the following checks in sequence before enrolling the customer: 1. Is the customer's `marketing_state = SUBSCRIBED`? 2. Is the customer within the frequency cap window? 3. Is the customer a member of any excluded list or segment? If the customer is a member of an excluded list or segment, they are not enrolled — regardless of the outcomes of checks 1 and 2. The exclusion is recorded in the activity log. Exclusion rules are evaluated at the moment of trigger — they reflect the customer's list and segment membership at that point in time. A customer added to an excluded list after they have already been enrolled and are mid-flow is not affected retroactively — exclusion prevents enrollment, it does not cancel in-progress executions. ## Configuring exclusion rules Navigate to **Automations → \[Automation Name] → Settings** (or the exclusion rules panel within the flow configuration). Select one or more Customer Lists to exclude. Any customer who is a member of a selected list at the time of trigger will be skipped. Select one or more Customer Segments to exclude. Segment membership is evaluated dynamically at trigger time — a customer who joins the excluded segment after the automation was activated will be excluded from that point forward. Exclusion rules take effect immediately on save. No re-activation is required. ## Exclusion rules vs frequency caps Both exclusion rules and frequency caps prevent customers from being enrolled, but they serve different purposes: | | Exclusion Rules | Frequency Caps | | -------------- | ------------------------------------------------ | -------------------------------------------- | | **Based on** | List or segment membership | Time since last enrollment | | **Scope** | Specific customers in defined groups | All customers, per time window | | **Permanence** | As long as the customer is a list/segment member | Until the cap window expires | | **Use case** | Suppress specific audiences entirely | Limit message frequency across all customers | Use exclusion rules when certain customers should never receive a specific automation. Use frequency caps to control how often any customer can be enrolled. ## Common exclusion patterns **Suppress recent purchasers from a recovery flow** Exclude a segment defined as `Days since last order < 3`. Customers who purchased very recently are unlikely to respond to a recovery message and may find it irrelevant or annoying. **Exclude active automation participants** If a customer is already enrolled in a high-touch post-purchase sequence, exclude them from a separate re-engagement automation during the same period to avoid sending too many messages simultaneously. **Suppress a suppression list** Maintain a "Do Not Contact" Customer List for customers who have requested no messaging outside the standard opt-out flow. Add this list as an exclusion on every automation. **Exclude VIP customers from standard flows** If VIP customers receive a separate, dedicated automation, exclude the VIP list from your standard flows to prevent them from receiving both the VIP and the standard messaging sequences. ## Related guides * [Frequency Caps](./frequency-caps) — Time-based enrollment limits per customer * [Audience — Lists](/whatsapp/audience/lists) — Creating and managing Customer Lists for use as exclusions * [Audience — Segments](/whatsapp/audience/segments) — Creating dynamic segments for exclusion rules * [Activity Tracking](./activity-tracking) — How exclusion-blocked enrollments are recorded # Flow Builder Source: https://docs.digifist.com/galantis/whatsapp/automations/flow-builder The visual node-based editor for building, configuring, and activating WhatsApp automation flows in Galantis. The Flow Builder is the canvas where automation flows are designed. It presents a node-based graph interface — each step in the flow is a node, nodes are connected by edges that represent execution paths, and the full flow is stored as a structured JSON object of `nodes` and `edges` arrays. Every node has a visual position on the canvas that reflects the logical sequence of the flow. Building a flow means placing nodes, connecting them in order, configuring each node's settings, and activating when the flow is ready. ## What this covers * The Flow Builder interface and canvas layout * Node types and how they connect * How flows are stored * Activating and deactivating flows * AI-assisted flow creation via Galantis AI ## Opening the Flow Builder In the Galantis dashboard, go to **Automations** and click **New Automation**, or open an existing automation to edit its flow. The Flow Builder canvas loads with an empty canvas or the existing flow. A `TriggerNode` is always present as the entry point — it cannot be removed or repositioned to a non-entry position. Drag nodes onto the canvas from the node panel or click the `+` connector on any existing node to add a new step. Connect nodes by drawing edges between them. Click any node to open its settings panel. Configure the trigger event, delay duration, condition logic, or template assignment depending on the node type. When the flow is complete, Galantis runs validation checks before activation. Resolve any flagged issues, then toggle the automation to **Active**. ## Node types Every flow is built from four node types. Each type has a specific role in the execution sequence. **TriggerNode** is the entry point of every flow. It defines the event that starts the automation and accepts exactly one trigger per flow. Every automation has exactly one `TriggerNode` — it cannot be duplicated or placed mid-flow. The trigger fires when a qualifying event occurs for a customer, enrolling them into the flow from this point. Configuration includes: * The trigger event type (see [Triggers](./triggers) for all available options) * Whether to include existing users who already match the trigger condition at activation time (`include_existing_users`) The `TriggerNode` connects to the first step in the flow — typically a `DelayNode` or `ConditionNode`. **DelayNode** pauses flow execution for a defined duration before the next node runs. It does not send any message — it simply holds the customer at that position in the flow until the delay elapses. Available delay units: `MINUTES`, `HOURS`, `DAYS`, `MONTHS`. Delays are essential for timing flows correctly. A welcome message sent 10 minutes after registration feels deliberate. The same message sent within seconds feels automated and impersonal. An abandoned checkout recovery sent 30 minutes after abandonment arrives while the session is still fresh. Add a delay after every trigger before the first action node. Sending immediately on trigger — especially for events like New Order Placed or New Customer Created — can make messages arrive simultaneously with Shopify's own transactional emails, reducing impact. **ConditionNode** evaluates a condition against the customer's data and branches the flow into a **YES** path and a **NO** path. Both paths must connect to at least one subsequent node — a condition branch that leads nowhere will fail validation. Conditions support AND/OR logic and nested grouping for complex evaluations. See [Conditions](./conditions) for the full list of available condition types and operators. Every condition branch should lead to an action or a further delay — avoid creating condition branches that only lead to more conditions without any eventual action, as these create flows that enroll customers but never send them anything. **ActionNode** executes the send of an approved WhatsApp template to the customer. This is the node that actually dispatches a message. Configuration includes: * Selecting an approved template * Mapping template variables to customer or order data fields An automation with an action node whose assigned template is not `APPROVED` will be flagged during validation and cannot be activated. See [Actions](./actions) for full Action node configuration details. ## How flows are stored Flows are stored as structured JSON with two arrays: * **`nodes`** — an array of node objects, each with a type, configuration, and canvas position * **`edges`** — an array of connection objects defining which node connects to which This structure is managed automatically by the Flow Builder canvas. You do not edit the JSON directly — changes made on the canvas are persisted to the underlying structure on save. ## Flow validation Before a flow can be activated, Galantis runs a set of validation checks: | Check | What is validated | | --------------------------- | ----------------------------------------------------------------------------- | | Template approval | All Action nodes use `APPROVED` templates | | Node connections | All nodes are connected — no orphaned nodes | | Condition branches | Both YES and NO branches of every Condition node connect to a subsequent node | | Condition completeness | All condition logic is fully configured with no empty fields | | Frequency cap configuration | Frequency cap is set and valid | Validation errors are surfaced inline on the canvas — flagged nodes are highlighted and the specific issue is described in the node's settings panel. Resolve all validation issues before attempting to activate. ## Activating and deactivating flows Toggle the automation status between **Active** and **Inactive** from the automation detail page. Deactivating a flow stops new customers from being enrolled. Customers already in the flow at the time of deactivation continue through their remaining nodes — deactivation does not cancel in-progress executions. ## Galantis AI assistance The Flow Builder includes AI-powered assistance via Galantis AI. When building or editing a flow, Galantis AI can: * Suggest appropriate triggers and action sequences based on a goal you describe * Highlight incomplete or conflicting node configurations * Surface optimization suggestions — for example, flagging a missing delay in an abandonment recovery flow See [Galantis AI](/whatsapp/galantis-ai/ai-flow-builder) for the full AI flow builder reference. ## Related guides * [Triggers](./triggers) — All trigger events and their configuration * [Conditions](./conditions) — Condition types, operators, and branching logic * [Actions](./actions) — Action and Delay node configuration * [Activity Tracking](./activity-tracking) — Monitoring flow execution per customer # Frequency Caps Source: https://docs.digifist.com/galantis/whatsapp/automations/frequency-caps Limit how often an automation can fire for a single customer to prevent over-messaging. Frequency caps control how often a specific automation can enroll and message a single customer. They are a guardrail against over-messaging — without them, a high-frequency trigger like `ORDER_PLACED` or `USER_ADDED_TO_SEGMENT` could enroll the same customer multiple times in rapid succession, sending them several messages from the same flow within hours or days. Every automation should have a frequency cap configured. It is one of the factors Galantis validates before a flow can be activated. ## What this covers * The five available frequency cap options * How caps are enforced * How caps interact with consent filtering * Choosing the right cap for each automation type ## Available frequency caps | Cap | Description | | ---------- | ------------------------------------------------------------------------------------------------------------ | | `EVER` | The automation fires at most once per customer, ever — regardless of how many times the trigger event occurs | | `24 hours` | At most once per customer per 24-hour period | | `7 days` | At most once per customer per 7-day rolling window | | `14 days` | At most once per customer per 14-day rolling window | | `30 days` | At most once per customer per 30-day rolling window | When a customer is blocked by a frequency cap, the trigger event is detected but the customer is not enrolled into the flow for that occurrence. The block is recorded in the automation's activity log. ## How caps are enforced Frequency caps are evaluated at the trigger level — at the moment a trigger event fires for a customer, Galantis checks whether the customer has been enrolled in this automation within the cap window before proceeding. If the customer is within the cap window, they are not enrolled for that trigger occurrence. The next trigger event for that customer after the cap window expires will enroll them normally. ## Caps and consent filtering Frequency caps and consent validation are independent checks that both apply before enrollment: 1. **Consent check** — Is the customer's `marketing_state` = `SUBSCRIBED`? If not, skip. 2. **Frequency cap check** — Has this customer been enrolled within the cap window? If yes, skip. A customer must pass both checks to be enrolled. Passing the consent check does not bypass the cap, and the cap window does not affect consent status. ## Choosing the right cap Use **`EVER`** for automations that represent a single lifecycle event — something that should happen once and only once per customer regardless of how many times the underlying trigger fires. **Best for:** * New Customer Welcome — a customer should receive a welcome message once, even if they place multiple orders * VIP tier promotion — a promotion sent when a customer first reaches VIP status should not repeat each time they place an order while VIP-tagged * Any flow tied to a first-occurrence milestone `EVER` caps are permanent. Once a customer has been enrolled and the cap is applied, they will never be enrolled in that automation again, even if the automation's content changes significantly. For flows you may want to re-run after a long period, use a `30 days` cap instead. Use **`7 days`** or **`14 days`** for recovery and re-engagement flows where repetition makes sense across separate purchase cycles but should not occur in rapid succession. **Best for:** * Abandoned Checkout Recovery — a customer who abandons multiple checkouts in different sessions should be recoverable each time, but not messaged twice in the same week for two abandonments on consecutive days * Post-purchase cross-sell — relevant after each purchase, but not multiple times within the same week A `7 days` cap on an abandoned checkout automation means a customer who abandons twice in the same week is only enrolled on the first abandonment. The second, occurring within 7 days, is skipped. Use **`24 hours`** for flows tied to transactional events that can legitimately recur daily but should not result in multiple messages on the same day. **Best for:** * Order Shipped notifications — a customer who places two orders fulfilled on the same day should not receive two shipping notifications within hours of each other * Back-in-Stock — a customer subscribed to multiple variants restocked on the same day should receive one notification, not one per variant For Order Placed and Order Shipped flows, consider whether a `24 hours` cap might inadvertently suppress legitimate messages for customers who genuinely place multiple orders in a day. Evaluate your order frequency data before choosing this cap. Use **`30 days`** for segment-triggered flows where the underlying segment membership changes regularly and re-enrollment over time is appropriate. **Best for:** * Win-back flows triggered when a customer enters a lapsed-buyer segment — a customer who purchases, lapses, is messaged, and then lapses again after another period deserves re-enrollment after a meaningful gap * Lifecycle nurture flows tied to dynamic segments where customers can exit and re-enter as their data changes A `30 days` cap ensures the same customer does not receive the same win-back flow repeatedly within a single month, even if segment membership fluctuates. ## Best practices * **Set a cap on every automation before activating.** An automation without a frequency cap is a configuration gap — even for triggers that seem unlikely to fire repeatedly, a cap provides a safety net. * **Review cap settings when changing trigger logic.** If you change a trigger from `ORDER_PLACED` to `USER_ADDED_TO_SEGMENT`, the appropriate cap may also change. Revisit cap configuration whenever the trigger is updated. * **Use `EVER` cautiously on long-lived automations.** A welcome flow with an `EVER` cap is correct. A promotional cross-sell with an `EVER` cap means customers are permanently excluded from that automation after one enrollment — which may not be the intent if the automation runs for years. ## Related guides * [Exclusion Rules](./exclusion-rules) — Excluding entire lists or segments from an automation, independent of caps * [Triggers](./triggers) — Trigger frequency affects which cap is most appropriate * [Activity Tracking](./activity-tracking) — How cap-blocked enrollments are recorded in the activity log # Automations Source: https://docs.digifist.com/galantis/whatsapp/automations/index Event-driven WhatsApp flows that run automatically when a defined trigger occurs — no manual intervention required. Automations are the core of Galantis's revenue engine. They listen for events in Shopify or the Galantis platform and respond automatically with targeted WhatsApp messages — recovering abandoned checkouts, welcoming new customers, confirming orders, and re-engaging lapsed buyers without any manual work. Every automation is built with a visual, node-based flow editor. Flows are structured around a single trigger, optional branching conditions, action nodes that send WhatsApp templates, and delay nodes that control timing. Once active, an automation runs continuously against every customer who matches its trigger. ## How automations work A flow executes one customer at a time, moving through nodes sequentially: 1. **Trigger** fires when a qualifying Shopify or platform event occurs for a customer 2. **Delay** pauses execution for a defined duration before the next step 3. **Condition** evaluates customer or order data and branches the flow YES or NO 4. **Action** sends an approved WhatsApp template to the customer Each node execution is recorded in the activity log with a status of `PENDING`, `SCHEDULED`, `COMPLETED`, `FAILED`, or `SKIPPED` — giving a full audit trail per customer per run. ## Guides in this section The visual node-based editor — canvas layout, node types, and flow structure. All nine available triggers and the Shopify or platform events that fire them. Action nodes, Delay nodes, and how WhatsApp templates are dispatched. All condition types, YES/NO branching logic, and AND/OR grouping. Preventing over-messaging with per-automation send limits. Excluding specific lists or segments from an automation entirely. Per-customer node execution history and the full audit trail. Pre-built flow examples for the most common automation use cases. ## Before building your first automation Two prerequisites apply to every automation: * At least one template with `APPROVED` status — automations can only send pre-approved WhatsApp templates. See [Templates](/whatsapp/templates/index). * A clear understanding of the trigger event and the customer behavior it represents — see [Triggers](./triggers) before configuring your first flow. If you are setting up automations for the first time, the [First Automation](/whatsapp/getting-started/first-automation) guide walks through a complete end-to-end setup. ## Compliance Automations validate customer consent status before dispatching any message. Customers with `UNSUBSCRIBED` or `REDACTED` marketing state are skipped automatically, and the skip is recorded in the activity log. Frequency caps apply on top of consent filtering — a customer who is opted in but has already received a message within the cap window will also be skipped. See [Opt-in & Consent](/whatsapp/compliance/opt-in-consent) and [Frequency Caps](./frequency-caps) for full details. # Abandoned Checkout Recovery Source: https://docs.digifist.com/galantis/whatsapp/automations/recipes/abandoned-checkout Recover customers who started checkout but did not complete — with order value branching for VIP and standard recovery paths. Abandoned checkout recovery is consistently the highest-ROI automation available to Shopify merchants. Customers who reached checkout showed strong purchase intent — a well-timed, relevant message brings many of them back to complete the order. This recipe uses an order value condition to split customers into two paths: high-value abandonments receive a personalized VIP recovery message, while standard abandonments receive a general recovery template. A follow-up reminder is sent to all customers 24 hours after the first message. ## Flow structure ``` Trigger: Abandoned Checkout → Delay: 30 minutes → Condition: Order Value > 100 YES → Action: Send VIP recovery template NO → Action: Send standard recovery template → Delay: 24 hours → Action: Send reminder template ``` ## Node-by-node breakdown ### Trigger — Abandoned Checkout **Trigger:** `ABANDONED_CHECKOUT` Fires when a customer starts a checkout but does not complete it. Galantis polls for abandoned checkouts every 10 minutes, so the trigger fires within 10 minutes of abandonment. **Recommended frequency cap:** `7 days` — a customer who abandons multiple times in the same week should only receive one recovery sequence. If they abandon again after 7 days, a new sequence is appropriate. **Recommended exclusion:** Add a segment exclusion for customers who purchased within the last 3 days — this prevents the flow from firing for customers who abandoned one cart but completed a different order recently. *** ### Delay — 30 minutes A 30-minute delay gives the customer time to complete the purchase on their own before any message is sent. Because the `ABANDONED_CHECKOUT` trigger fires up to 10 minutes after actual abandonment, the total time from abandonment to message delivery is approximately 30–40 minutes. Avoid reducing this delay significantly — messages arriving within minutes of abandonment can feel intrusive. 30 minutes is long enough to feel considered while the session context is still fresh. *** ### Condition — Order Value > 100 **Condition type:** `ORDER_VALUE` **Operator:** `>` **Value:** `100` Branches the flow based on the total value of the abandoned cart. Adjust the threshold to match your store's AOV — the goal is to identify the top tier of abandoners who warrant a more personalized, higher-effort recovery message. **YES path** — High-value abandonment. Route to a VIP recovery template with stronger personalization and potentially a more compelling offer. **NO path** — Standard abandonment. Route to a general recovery template. Add a second condition for `CUSTOMER_TAG = "VIP"` using OR logic alongside the order value condition to catch high-value customers regardless of the specific abandoned cart value. *** ### Action — VIP recovery template (YES path) Send a personalized recovery template addressing the customer by name and referencing the abandoned cart value or a specific product. Consider including a time-limited incentive — free shipping or a small discount — for high-value recoveries where the conversion is worth the margin cost. **Suggested variable mapping:** * `{{1}}` → `customer.first_name` * `{{2}}` → `order.total_price` *** ### Action — Standard recovery template (NO path) Send a general recovery template with a clear CTA linking back to the checkout. Less personalization is needed here — a simple, friendly reminder with a direct link performs well for standard-value abandonments. **Suggested variable mapping:** * `{{1}}` → `customer.first_name` *** ### Delay — 24 hours After both paths complete their first action, the flow converges and waits 24 hours. This is the gap between the initial recovery message and the follow-up reminder. *** ### Action — Reminder template A single reminder message sent to all customers who received the first recovery message and did not complete their purchase. Keep this message brief — it is a final nudge, not a second pitch. Consider adding a `USER_REPLY_STATUS` or `ORDER_RECENCY` condition before this final action to suppress the reminder for customers who already replied to the first message or completed a purchase in the 24-hour window. This improves the customer experience and reduces unnecessary sends. ## Templates required This recipe requires three approved templates: | Template | Purpose | | -------------------------- | --------------------------------------------- | | VIP recovery template | First message — high-value abandonments | | Standard recovery template | First message — standard abandonments | | Reminder template | Second message — all non-converting customers | ## Related recipes * [New Customer Welcome](./new-customer-welcome) — For customers at the start of their lifecycle * [Post-Purchase Cross-Sell](./post-purchase-cross-sell) — For customers who completed a purchase ## Related guides * [Triggers](../triggers) — Abandoned Checkout trigger timing and polling behavior * [Conditions](../conditions) — ORDER\_VALUE condition configuration * [Frequency Caps](../frequency-caps) — Recommended cap settings for recovery flows # Back-in-Stock Notification Source: https://docs.digifist.com/galantis/whatsapp/automations/recipes/back-in-stock-notification Automatically notify customers when a product variant they subscribed to is restocked. The back-in-stock notification flow is the delivery engine for the Back-in-Stock module. When a customer subscribes to an out-of-stock variant through the storefront widget, this automation sends them a WhatsApp message the moment that variant's inventory is replenished — no manual intervention required. This is the simplest recipe in terms of flow structure: a single trigger connected directly to a single action. Its power is in the precision of the delivery — every customer receives a notification only for the specific variant they subscribed to, at the exact moment it becomes available. ## Flow structure ``` Trigger: Back in Stock → Action: Send restock notification template with product link ``` ## Node-by-node breakdown ### Trigger — Back in Stock **Trigger:** `BACK_IN_STOCK` **Source:** Galantis — fires when a subscribed product variant's `inventory_quantity` changes from `0` to a positive value. This trigger fires only for variants that have active Back-in-Stock subscribers. If a variant is restocked but has no active subscribers, the trigger does not fire. If a variant has 50 active subscribers and is restocked, the trigger fires and the action is executed for all 50 customers. The trigger is detected via Shopify's `products/update` webhook. When Galantis receives the webhook and detects an inventory change from `0` to `> 0`, it identifies all `ACTIVE` subscriptions for that variant and begins executing this flow for each subscriber. **Recommended frequency cap:** `24 hours` — protects against edge cases where inventory fluctuates around zero multiple times in the same day, which could otherwise trigger multiple notifications to the same subscriber for the same restock event. This automation is tightly coupled to the Back-in-Stock widget and subscription system. For the trigger to fire, customers must have subscribed through the widget and their subscription must be in `ACTIVE` status. See [Back-in-Stock — Notification Logic](/whatsapp/back-in-stock/notification-logic) for the full pipeline. *** ### Action — Restock notification template The restock notification is a high-intent message — the customer explicitly asked to be notified. The template should be direct, confirm the specific product is back, and include a clear link to the product page. Effective restock notification template elements: * Confirm what is back in stock (product name and ideally the specific variant — size, color, etc.) * Create urgency where genuine — if the restock quantity is limited, say so * A direct link button to the product page using a `URL` button type ## No delay required Unlike most other recipes, this flow deliberately omits a delay node between the trigger and the action. The customer subscribed specifically to receive this notification the moment the product is available. A delay would reduce the value of the notification — if inventory is limited, customers who subscribed later in the day benefit from a faster notification. ## Consent and subscription guardrails Before sending, Galantis automatically enforces two guardrails: 1. **Subscription status** — Only customers with `ACTIVE` subscription status receive the notification. Customers with `CANCELLED`, `NOTIFIED`, or `PENDING` subscriptions are excluded. 2. **Consent status** — Customers with `UNSUBSCRIBED` or `REDACTED` `marketing_state` are skipped even if they have an `ACTIVE` subscription. After a notification is sent, the subscription status moves to `NOTIFIED`. A notified subscription does not receive a second notification if the same variant is restocked again in the future — the customer would need to re-subscribe. ## Templates required | Template | Purpose | | -------------------- | ------------------------------------------------------------- | | Restock notification | Alerts subscriber that their product variant is back in stock | ## Related guides * [Back-in-Stock — Notification Logic](/whatsapp/back-in-stock/notification-logic) — Full pipeline from inventory webhook to message dispatch * [Back-in-Stock — Subscription Lifecycle](/whatsapp/back-in-stock/subscription-lifecycle) — Subscription statuses and how they interact with this flow * [Triggers](../triggers) — BACK\_IN\_STOCK trigger source and behavior # Automation Recipes Source: https://docs.digifist.com/galantis/whatsapp/automations/recipes/index Pre-built flow examples for the most common WhatsApp automation use cases in Galantis. Recipes are fully documented automation flows built around the most common Shopify merchant use cases. Each recipe shows the complete node sequence — trigger, delays, conditions, and actions — with the reasoning behind each step explained. Use recipes as a starting point for your own flows. Every recipe can be adapted: add or remove condition branches, change delay durations, swap templates, or extend the sequence with additional steps. ## Available recipes Recover customers who started checkout but did not complete — with value-based branching for VIP and standard recovery paths. Trigger product-specific recommendations after an order based on what the customer purchased. Re-engage high-value lapsed customers when they enter a defined lapsed-buyer segment. Notify customers automatically when a product variant they subscribed to is restocked. Send a welcome message with a first-order discount shortly after a new customer registers. ## Before using a recipe Every recipe sends WhatsApp templates. Before activating any recipe-based automation: * Create and submit the required templates for Meta approval — see [Templates](/whatsapp/templates/index) * Configure the appropriate frequency cap for the automation's use case — see [Frequency Caps](../frequency-caps) * Add any relevant exclusion rules — see [Exclusion Rules](../exclusion-rules) Templates must reach `APPROVED` status before the automation can be activated. # New Customer Welcome Source: https://docs.digifist.com/galantis/whatsapp/automations/recipes/new-customer-welcome Send a welcome message with a first-order discount shortly after a new customer registers on your Shopify store. A welcome automation is the first impression your brand makes on WhatsApp. It arrives shortly after a customer creates an account or places their first order — reinforcing the relationship, setting expectations, and typically offering an incentive to drive a second purchase. It is one of the most consistently high-performing automations across Shopify stores for its simplicity and the warmth of the timing. ## Flow structure ``` Trigger: New Customer Created → Delay: 10 minutes → Action: Send welcome template with first-order discount ``` ## Node-by-node breakdown ### Trigger — New Customer Created **Trigger:** `CUSTOMER_CREATED` **Source:** Shopify — fires via the `customers/create` webhook when a new customer record is created. A new customer record is created in Shopify when a customer registers an account or completes their first checkout as a guest who is then saved as a customer. **Recommended frequency cap:** `EVER` — a customer should receive a welcome message exactly once. Using `EVER` ensures that even if the customer's data triggers the webhook multiple times (edge case), only one welcome message is sent. **Important:** This trigger fires for every new customer regardless of consent status. Galantis validates `marketing_state` before dispatching the action — only customers with `SUBSCRIBED` consent will receive the message. Consent is collected at the Shopify checkout opt-in step, which typically occurs in the same session that creates the customer record. *** ### Delay — 10 minutes A 10-minute delay is long enough to avoid the message arriving simultaneously with Shopify's own registration confirmation email or order confirmation, while being short enough that the customer is still in the context of having just interacted with your store. This is a deliberate timing choice — not a technical requirement. The welcome message landing 10 minutes after registration feels attentive. The same message arriving 3 days later loses all of its warmth and immediacy. For customers who registered through a first purchase (rather than a standalone account creation), consider whether 10 minutes is still appropriate — if the Shopify order confirmation, shipping confirmation, and welcome message all arrive within a short window, the experience may feel crowded. A 30-minute delay is a reasonable alternative if your onboarding sends are dense. *** ### Action — Welcome template with first-order discount The welcome template is the first WhatsApp message a customer receives from your brand. The goals are: reinforce that they are connected to your WhatsApp channel, deliver any promised incentive (first-order discount), and invite engagement. Effective welcome template elements: * Address the customer by name * Acknowledge the relationship ("Welcome to \[Store Name]") * Deliver the first-order discount code using a `COPY_CODE` button — customers can copy it directly from the WhatsApp message * A secondary `URL` button linking to your store or a featured collection **Suggested variable mapping:** * `{{1}}` → `customer.first_name` * `{{2}}` → static text with the discount code (e.g., `WELCOME10`) Use a `COPY_CODE` button type for the discount code rather than including it inline in the body text. The button makes the code instantly copyable on mobile, reducing friction between receiving the message and applying the discount. ## Extending this recipe **Add a follow-up step** Extend the sequence with a second message 3–5 days after the welcome — a "getting started" or "our most popular products" message that drives the customer back to the store before their interest fades. **Add a condition before the action** Insert an `ORDER_RECENCY` condition before the action to check whether the customer already placed an order in the 10-minute window since registering (possible for customers who registered via checkout). If they have already purchased, skip the discount message and send a simpler welcome instead. **Localize for different markets** If your store serves multiple language markets, add a `CUSTOMER_COUNTRY` condition after the delay to route customers to language-appropriate welcome templates. ## Templates required | Template | Purpose | | --------------------------------- | ----------------------------------------- | | Welcome with first-order discount | Initial welcome message for new customers | ## Related recipes * [Abandoned Checkout Recovery](./abandoned-checkout) — For customers who showed intent but did not complete a purchase * [Post-Purchase Cross-Sell](./post-purchase-cross-sell) — The next automation in a customer's lifecycle after first purchase ## Related guides * [Triggers](../triggers) — CUSTOMER\_CREATED trigger and consent timing considerations * [Frequency Caps](../frequency-caps) — Why EVER is the correct cap for welcome flows * [Templates — Variables & Localization](/whatsapp/templates/variables-localization) — Setting up COPY\_CODE buttons and variable mapping # Post-Purchase Cross-Sell Source: https://docs.digifist.com/galantis/whatsapp/automations/recipes/post-purchase-cross-sell Send product-specific recommendations after an order based on what the customer purchased. Post-purchase cross-sell flows turn completed orders into additional revenue by recommending relevant complementary products while the customer's purchase intent is still high. The key to relevance is branching on what was purchased — a customer who bought shoes is a natural candidate for an accessories recommendation, while a customer who bought a completely different category warrants a different message or no message at all. This recipe branches on product tag to send category-specific cross-sell recommendations. ## Flow structure ``` Trigger: New Order Placed → Condition: Product in Order Has Tag = "Shoes" YES → Delay: 3 days → Action: Send accessories recommendation template NO → (exit — no message sent for other categories) ``` ## Node-by-node breakdown ### Trigger — New Order Placed **Trigger:** `ORDER_PLACED` Fires immediately when a Shopify order is created. The triggering order's product data — including product tags — is available for condition evaluation. **Recommended frequency cap:** `7 days` — prevents customers who place multiple orders in the same week from receiving multiple cross-sell messages from the same automation. Each order is a valid trigger over time, but daily sends from the same flow are excessive. *** ### Condition — Product in Order Has Tag = "Shoes" **Condition type:** `PRODUCT_IN_ORDER_HAS_TAG` **Tag value:** `"Shoes"` Evaluates whether any product in the triggering order carries the specified Shopify product tag. If the order contains at least one product tagged "Shoes," the customer takes the YES path. The NO path exits without sending a message in this recipe — it is reserved for customers whose orders do not contain the targeted product category. Extend the flow by adding additional condition branches for other product tags if you want to send category-specific recommendations for multiple product types. To handle multiple product categories in a single flow, stack multiple condition nodes — one per category — each on the NO branch of the previous. Each YES branch leads to its own delay and action. This creates a linear evaluation where each customer is routed to the first category that matches their order. *** ### Delay — 3 days A 3-day delay gives the customer time to receive and experience the purchased product before the recommendation arrives. Cross-sell messages sent immediately after purchase can feel transactional. A 3-day gap feels like a helpful follow-up rather than an immediate upsell. Adjust the delay based on your product type — physical goods that take time to arrive may warrant a longer delay (5–7 days) timed closer to the expected delivery date. *** ### Action — Accessories recommendation template Send a template recommending accessories or complementary products relevant to what the customer purchased. Use a product-specific template if you have one, or a general accessories recommendation with a curated collection link. **Suggested variable mapping:** * `{{1}}` → `customer.first_name` * `{{2}}` → `order.product_name` (the purchased product for context) ## Extending this recipe **Add more product categories** Chain additional `PRODUCT_IN_ORDER_HAS_TAG` conditions on the NO path of the first condition to handle other categories — skincare, electronics, apparel, and so on — each routing to its own relevant recommendation template. **Add an order value filter** Before the product tag condition, add an `ORDER_VALUE > X` condition to limit cross-sell messages to orders above a certain threshold — focusing effort on higher-value customers. **Add a purchase recency check** After the delay, add an `ORDER_RECENCY` condition to check whether the customer has already placed another order since the trigger fired. If they have, skip the cross-sell — they are already engaged. ## Templates required This recipe requires one approved template per active product category branch: | Template | Purpose | | -------------------------- | ------------------------------------------------------------------------ | | Accessories recommendation | Cross-sell message for customers who purchased from the "Shoes" category | Add one template per additional category branch if extending the recipe. ## Related recipes * [Abandoned Checkout Recovery](./abandoned-checkout) — For customers who did not complete a purchase * [VIP Win-Back](./vip-win-back) — For customers who purchased historically but have lapsed ## Related guides * [Conditions](../conditions) — PRODUCT\_IN\_ORDER\_HAS\_TAG condition configuration * [Triggers](../triggers) — ORDER\_PLACED trigger behavior and data availability # VIP Win-Back Source: https://docs.digifist.com/galantis/whatsapp/automations/recipes/vip-win-back Re-engage high-value lapsed customers the moment they enter a defined lapsed-buyer segment. Win-back flows target customers who have a strong purchase history but have stopped buying. The VIP win-back recipe is specifically aimed at high-lifetime-value customers — the segment of buyers most worth the effort of a direct, personalized re-engagement message with an exclusive offer. The power of this recipe lies in the trigger: instead of running on a scheduled basis, it fires automatically the moment a customer's data causes them to enter the lapsed segment. There is no manual list building or campaign scheduling required. ## Flow structure ``` Trigger: User Added to Segment ("High LTV - Lapsed") → Delay: 1 hour → Action: Send exclusive win-back offer template ``` ## Node-by-node breakdown ### Trigger — User Added to Segment **Trigger:** `USER_ADDED_TO_SEGMENT` **Segment:** "High LTV - Lapsed" Fires when a customer newly matches the rules of the defined segment and is added to its membership. The trigger fires only on the transition into membership — customers who were already in the segment when the automation was activated are not enrolled unless `include_existing_users` is enabled. **Defining the segment** The "High LTV - Lapsed" segment is a dynamic, rule-based segment you build in **Audience → Segments**. A typical rule structure: ``` Total spent > [your high LTV threshold] AND Days since last order > [your lapse threshold, e.g., 60] ``` Adjust the thresholds to match your store's data. A fashion brand with frequent repeat purchases might define lapse as 30 days; a furniture brand with longer purchase cycles might set it at 180 days. **Recommended frequency cap:** `30 days` — a customer who lapsed, was messaged, purchased, and then lapsed again after another period deserves re-enrollment after a meaningful gap. `30 days` prevents the same customer from receiving the win-back multiple times within a single month if their data fluctuates around the lapse threshold. *** ### Delay — 1 hour A 1-hour delay between segment entry and message send is a short buffer that prevents the message from arriving in the same moment the segment evaluation runs. It also avoids the awkwardness of a customer receiving a lapse message immediately after an event that pushed them into the lapsed state (such as a price change affecting their total spend calculation). This delay can be extended if preferred — 6 or 12 hours is also reasonable. The goal is to avoid a message that feels instantaneous in response to a data change the customer is unaware of. *** ### Action — Exclusive win-back offer template The win-back template for high-LTV customers should reflect their value to your store. This is not the moment for a generic promotional message — customers who spent significantly with your brand respond better to personalized acknowledgment and an offer that feels exclusive. Effective elements for a VIP win-back template: * Address the customer by name * Acknowledge the relationship without being heavy-handed ("We've missed you" is sufficient; detailed purchase history recaps feel surveillance-like) * A genuinely exclusive offer — a discount not available in standard campaigns, early access to a new collection, or free shipping that is not broadly advertised **Suggested variable mapping:** * `{{1}}` → `customer.first_name` ## Building the segment The "High LTV - Lapsed" segment drives this entire flow. Before activating the automation, build and verify the segment in **Audience → Segments**: 1. Set a `Total spent` threshold that reflects your definition of high LTV 2. Set a `Days since last order` threshold that reflects your definition of lapsed 3. Add `Consent status = SUBSCRIBED` as a rule to exclude non-opted-in customers from the segment entirely — this prevents the trigger from firing for customers who cannot be messaged 4. Review the initial membership count — if the segment is very large, consider increasing the LTV threshold to focus on your top tier before activating with `include_existing_users` If you activate this automation with `include_existing_users` enabled and the segment already has thousands of members, a large batch of win-back messages will be sent within a short period. Review your credit balance and consider activating without `include_existing_users` first to let the flow run on new entrants only. ## Templates required | Template | Purpose | | ------------------ | --------------------------------------------------- | | VIP win-back offer | Re-engagement message for high-LTV lapsed customers | ## Related recipes * [Abandoned Checkout Recovery](./abandoned-checkout) — For customers who showed intent but did not purchase * [New Customer Welcome](./new-customer-welcome) — For customers at the beginning of their lifecycle ## Related guides * [Triggers](../triggers) — USER\_ADDED\_TO\_SEGMENT trigger and include\_existing\_users behavior * [Audience — Segments](/whatsapp/audience/segments) — Building the lapsed buyer segment * [Frequency Caps](../frequency-caps) — Recommended 30-day cap for segment-triggered flows # Triggers Source: https://docs.digifist.com/galantis/whatsapp/automations/triggers The nine automation triggers available in Galantis — the Shopify and platform events that start a flow. A trigger is the entry point of every automation. It defines the event that enrolls a customer into the flow. When that event fires for a qualifying customer, Galantis starts executing the flow from the `TriggerNode` for that customer — independently of any other customer's execution. Every automation has exactly one trigger. Choosing the right trigger is the most consequential decision in flow design — it determines which customer behavior the automation responds to and when the first message can reach the customer. ## What this covers * All nine available triggers with their source and description * The `include_existing_users` option * Trigger-specific notes and timing considerations ## Available triggers ### Order Placed **Trigger:** `ORDER_PLACED` **Source:** Shopify — fires when a new order is created via the `orders/create` webhook. Fires immediately when a customer completes a purchase. The triggering order's data (order number, total price, product names, tags) is available in condition nodes and action variable mapping for this flow. Common uses: order confirmation messages, post-purchase cross-sell sequences, review request flows. Galantis receives this trigger via Shopify's `orders/create` webhook — it fires on every new order, including orders placed through all sales channels connected to your Shopify store, not only your online storefront. *** ### Order Cancelled **Trigger:** `ORDER_CANCELLED` **Source:** Shopify — fires via the `orders/cancelled` webhook. Fires when an order is cancelled in Shopify, regardless of who initiated the cancellation. Use with a `CUSTOMER_TAG` or `ORDER_VALUE` condition to segment your response — for example, sending a win-back offer to high-value cancelled orders while sending a simpler acknowledgment to lower-value ones. *** ### Order Shipped **Trigger:** `ORDER_SHIPPED` **Source:** Shopify — fires when a fulfillment is created via the `orders/updated` webhook with shipping data. Fires when an order is marked as fulfilled and a tracking number is available. Use for shipping confirmation messages and delivery update flows. ### New Customer Created **Trigger:** `CUSTOMER_CREATED` **Source:** Shopify — fires via the `customers/create` webhook. Fires when a new customer record is created in Shopify — typically at the point of first purchase or account registration. This is the standard entry point for welcome sequences. Add a delay of 10–15 minutes after this trigger before the first action. New customers typically receive a Shopify registration or order confirmation email almost immediately — a short delay prevents your WhatsApp message from arriving in the same moment and reduces the sense of automated messaging. *** ### Customer Tagged **Trigger:** `CUSTOMER_TAGGED` **Source:** Shopify — fires via `customer_tags/added` webhook when a specific tag is added to a customer record. Fires when a defined tag is applied to a customer in Shopify, either manually or through a Shopify Flow or third-party app. Useful for lifecycle-based triggers — VIP promotion, loyalty tier upgrades, or any workflow where a Shopify tag signals a status change. Configuration requires specifying the exact tag string to listen for. Only the defined tag fires this trigger — other tags added to the same customer do not. ### Abandoned Checkout **Trigger:** `ABANDONED_CHECKOUT` **Source:** Shopify — polled every 10 minutes via the Shopify Admin API. Fires when a customer starts a checkout but does not complete it. Because Shopify does not emit a real-time webhook for abandoned checkouts, Galantis polls for them on a 10-minute interval. This means the trigger fires at most 10 minutes after abandonment occurs, not instantly. This is typically the highest-ROI automation trigger available — abandoned checkout recovery consistently drives significant recovered revenue. The 10-minute polling interval means there is an inherent delay between the moment a customer abandons and when the trigger fires. Account for this when configuring your first delay node — a 30-minute delay after the trigger results in the customer receiving the message approximately 30–40 minutes after abandonment, not exactly 30 minutes. ### User Added to List **Trigger:** `USER_ADDED_TO_LIST` **Source:** Galantis — fires when a customer is added to a specific Customer List. Fires when a customer is manually added to a defined list, imported into it, or added programmatically. Useful for triggering flows based on internal list management — for example, a flow that fires when a customer is added to a "VIP" or "Re-engagement" list. Configuration requires specifying which list to listen for. Adding a customer to a different list does not fire this trigger. *** ### User Added to Segment **Trigger:** `USER_ADDED_TO_SEGMENT` **Source:** Galantis — fires when a customer newly matches a segment's rules and is added to segment membership. Fires when segment evaluation runs and a customer moves from non-member to member status for the defined segment. This trigger does not fire for customers who were already members when the automation was activated — it fires only on the transition into membership. This is particularly powerful for lifecycle-based automation — for example, a flow that fires when a customer crosses into a "High LTV - Lapsed" segment for the first time. *** ### Back in Stock **Trigger:** `BACK_IN_STOCK` **Source:** Galantis — fires when a subscribed product variant's inventory changes from `0` to a positive quantity. Fires when Galantis detects a restock event for a variant that has active subscribers. This trigger is the engine behind the Back-in-Stock notification module. See [Back-in-Stock — Notification Logic](/whatsapp/back-in-stock/notification-logic) for how the restock detection pipeline works. ## Trigger reference | Trigger | Source | Event | | ----------------------- | -------- | ----------------------------------------------------- | | `ORDER_PLACED` | Shopify | New order created | | `ORDER_CANCELLED` | Shopify | Order cancelled | | `ORDER_SHIPPED` | Shopify | Order fulfilled/shipped | | `CUSTOMER_CREATED` | Shopify | New customer registered | | `CUSTOMER_TAGGED` | Shopify | Specific tag added to customer | | `ABANDONED_CHECKOUT` | Shopify | Checkout started, not completed (polled every 10 min) | | `USER_ADDED_TO_LIST` | Galantis | Customer added to a specific list | | `USER_ADDED_TO_SEGMENT` | Galantis | Customer newly matches a segment's rules | | `BACK_IN_STOCK` | Galantis | Subscribed variant restocked | ## Include existing users Every trigger supports an `include_existing_users` option. When enabled at the time of activation, Galantis retroactively enrolls customers who already match the trigger condition — for example, customers who abandoned a checkout before the automation was active, or customers already in a segment when the segment trigger is configured. When disabled (default), only events that occur after the automation is activated will enroll customers. Use `include_existing_users` carefully for high-volume triggers like `ORDER_PLACED` or `CUSTOMER_CREATED`. Enabling it on a large existing customer base can generate a significant immediate send volume. Review your frequency caps and credit balance before activating with this option enabled. ## Related guides * [Flow Builder](./flow-builder) — Building and connecting nodes on the canvas * [Conditions](./conditions) — Branching logic based on trigger event data * [Frequency Caps](./frequency-caps) — Controlling how often a trigger can fire per customer * [Recipes](./recipes/index) — Pre-built flows showing trigger configuration in context # Analytics Source: https://docs.digifist.com/galantis/whatsapp/back-in-stock/back-in-stock-analytics Back-in-Stock performance metrics — active subscriptions, notifications sent, click rate, conversion rate, and revenue attribution. Back-in-Stock analytics measure the commercial impact of the module — how many customers are waiting for restocked products, how many received notifications, and how many converted to a purchase. Because the pipeline is fully automated, analytics are the primary tool for evaluating whether the module is performing well and identifying opportunities to improve conversion. ## What this covers * All five available metrics and what each measures * How to interpret the metrics together * What good performance looks like * Using analytics to diagnose pipeline issues ## Metrics **Active subscriptions** is the count of subscription records currently in `ACTIVE` status — customers who have subscribed and are waiting for a restock notification. This metric tells you how much pent-up demand exists across your out-of-stock catalog at any given time. A growing active subscription count on a specific product is a signal of strong demand — it can inform restocking decisions and inventory planning beyond its role in the notification pipeline. **How to read it:** A high active subscription count on a variant that has been out of stock for a long time may indicate that restocking is overdue. Conversely, a low active subscription count on a frequently out-of-stock variant may indicate the widget is not visible or is not converting visitors to subscribers effectively — check widget placement and copy. Active subscriptions decrease when: * Notifications are sent (subscriptions move to `NOTIFIED`) * Customers cancel (subscriptions move to `CANCELLED`) * Customers opt out of WhatsApp marketing (subscriptions remain `ACTIVE` but become ineligible for notification dispatch) Review active subscription counts before planning a restock. A variant with 500 active subscribers warrants a different restocking quantity decision than one with 5 — and both warrant a WhatsApp notification campaign at launch. **Notifications sent** is the total count of WhatsApp restock notification messages successfully dispatched — across all variants, all products, and all time periods within the selected date range. This is the primary volume metric for the module. It reflects how active your inventory restocking is and how many subscriber notification opportunities the pipeline has processed. **How to read it:** Notifications sent in isolation is a volume number — it becomes meaningful when compared against active subscriptions and conversion rate. A high notifications sent count with a low conversion rate suggests the notification content or timing is not driving action. A low notifications sent count may indicate infrequent restocking, low subscription capture, or pipeline issues preventing notifications from firing. Notifications sent does not equal messages delivered. A dispatched notification may fail delivery due to phone number issues, insufficient credits, or consent state changes. Cross-reference with campaign or automation analytics for delivery confirmation. **Click rate** is the percentage of notification recipients who tapped the product link in the restock message. ``` Click rate = Clicks ÷ Notifications sent × 100 ``` Click rate measures message relevance and CTA effectiveness. A customer who subscribed to a specific variant and receives a notification that confirms that variant is back should have strong motivation to click — a low click rate on a well-configured notification is unusual and worth investigating. **Common causes of low click rate:** * The notification arrived significantly after the restock — if a variant sold out again before the subscriber received the notification, clicking the link leads to an out-of-stock page * The product link in the template is broken or redirects incorrectly * The notification message does not clearly confirm which product is back and why the customer should act now * The notification arrived outside of the customer's active hours — a 3 AM notification may be dismissed before it is read **Conversion rate** is the percentage of notified customers who completed a purchase of the restocked product. ``` Conversion rate = Purchases ÷ Notifications sent × 100 ``` Conversion rate is the definitive measure of the module's commercial effectiveness. Back-in-Stock should consistently outperform other campaign types on conversion rate because the audience is self-selected high-intent customers — they actively requested to be notified about this specific product. **Factors that improve conversion rate:** * Fast notification dispatch — customers who receive the notification while inventory is still available convert at higher rates * Urgency signals in the notification template — "Limited stock" performs better than a generic "It's back" message when inventory is genuinely constrained * A direct product link that takes the customer to the specific variant page, not just the product root page * Notification timing that reaches the customer during their active hours **Revenue generated** is the attributed revenue from purchases made by customers who received a Back-in-Stock notification within a defined attribution window. This metric translates the module's activity into a concrete business outcome — the revenue that would not have been captured without the notification pipeline. It is the primary metric for evaluating ROI and justifying the module's billing cost. **How to use it:** Revenue generated should be compared against: * The cost of notifications sent (credits consumed per notification × credit cost) * The value of active subscriptions not yet notified (potential revenue awaiting a restock event) A healthy Back-in-Stock module should produce revenue attribution that clearly exceeds its credit cost — if this ratio is poor, investigate conversion rate and click rate for the optimization opportunities those metrics surface. ## Reading the metrics together The five metrics form a funnel from subscription capture to revenue: ``` Active subscriptions → How much demand is captured and waiting ↓ Restock event fires Notifications sent → How many customers were reached ↓ Customer opens message Click rate → How compelling the notification was ↓ Customer visits product Conversion rate → How effectively the product page closed the sale ↓ Purchase completed Revenue generated → The commercial outcome of the full pipeline ``` Each step in the funnel can be optimized independently. A high notifications sent count with low click rate points to the notification content or delivery timing. A high click rate with low conversion rate points to the product page experience or post-click availability. A high conversion rate with low revenue points to low subscription volume — not enough customers are subscribing in the first place. ## Accessing analytics Navigate to **Back-in-Stock → Analytics** to view the full metrics dashboard. Metrics can be filtered by date range and by specific product or variant to isolate performance for individual items. ## Best practices * **Review active subscription counts before restocking.** Use the data to inform inventory decisions — a variant with 200 active subscribers is a stronger restocking candidate than one with 3. * **Monitor click rate after template changes.** If you update the restock notification template, watch for changes in click rate in the first batch of notifications after the change goes live. * **Investigate any sudden drop in notifications sent.** A drop that does not correspond to fewer restocks may indicate the pipeline is not firing — check for automation deactivation, template approval status, or a failed Shopify webhook connection. * **Compare conversion rate across product categories.** High-demand categories (limited edition, seasonal) typically convert at higher rates than replenishment restocks (basics, consumables). Separate analysis by product type prevents aggregate metrics from masking underperformance in specific segments. ## Related guides * [Notification Logic](./notification-logic) — Understanding what drives the notifications sent count * [Subscription Lifecycle](./subscription-lifecycle) — How subscription status affects the active subscriptions count * [Back-in-Stock Add-on Billing](/whatsapp/billing/add-ons/back-in-stock) — Credit cost per notification relative to revenue generated # Back-in-Stock Source: https://docs.digifist.com/galantis/whatsapp/back-in-stock/index Capture WhatsApp numbers from customers on out-of-stock product pages and automatically notify them the moment a variant is restocked. The Back-in-Stock module converts inventory gaps into a recoverable revenue opportunity. When a product variant is out of stock, customers can subscribe through a storefront widget using their WhatsApp number. The moment that variant is restocked in Shopify, Galantis detects the inventory change and dispatches a WhatsApp notification automatically — no manual work, no delay, no missed restock window. The module has two distinct parts that work together: the **storefront widget**, which captures subscriptions on your live store, and the **notification pipeline**, which listens for restock events and sends the message. Both must be configured for the full flow to work. ## How it works end to end ``` Customer visits out-of-stock product page → Widget appears on the variant → Customer submits their WhatsApp number → Subscription created with ACTIVE status → Variant restocked in Shopify → Shopify sends products/update webhook → Galantis detects inventory_quantity 0 → > 0 → BACK_IN_STOCK automation trigger fires → WhatsApp notification sent to all ACTIVE subscribers → Subscription status moves to NOTIFIED ``` ## What this section covers * Installing and verifying the storefront widget * Customizing widget appearance and branding * How subscriptions move through their lifecycle * The full notification pipeline from restock detection to message dispatch * Per-variant product and inventory rules * Analytics and conversion metrics ## Guides in this section Script tag injection, verification steps, and troubleshooting widget display issues. All branding and appearance settings — button, modal, colors, fonts, and form states. PENDING, ACTIVE, NOTIFIED, and CANCELLED — how subscriptions transition between states. The full pipeline from Shopify restock webhook to WhatsApp message dispatch. Per-variant subscription behavior, subscription limits, and eligibility rules. Active subscriptions, notification volume, click rate, conversion rate, and revenue attribution. ## Prerequisites Before the Back-in-Stock module can send notifications: * Your WhatsApp Business Account must be connected — see [WhatsApp Connection](/whatsapp/getting-started/whatsapp-connection) * An approved WhatsApp template must exist for the restock notification message — see [Templates](/whatsapp/templates/index) * The `write_script_tags` Shopify permission must be granted — required for widget injection Subscription capture (the widget) works independently of the notification template — customers can subscribe before the template is approved. But notifications will not send until an approved template is in place and assigned to the Back-in-Stock automation flow. ## Billing Back-in-Stock is billed as a separate add-on with two components: a **monthly tier subscription** that determines how many subscribers you can hold (Starter \$19 / 250 subs → Enterprise \$149 / 10,000 subs), and **1 Conversation credit per delivered notification** drawn from the same credit pool as campaigns. **Enterprise core plan includes the Starter BIS tier (250 subscribers) by default.** See [Back-in-Stock Add-on Billing](/galantis/whatsapp/billing/add-ons/back-in-stock) for the full pricing breakdown. # Notification Logic Source: https://docs.digifist.com/galantis/whatsapp/back-in-stock/notification-logic The full pipeline from Shopify restock webhook to WhatsApp notification dispatch for Back-in-Stock subscribers. When a product variant is restocked in Shopify, a specific chain of events fires in Galantis — from webhook receipt through restock detection, trigger evaluation, and message dispatch to every qualifying subscriber. Understanding this pipeline helps diagnose timing expectations, troubleshoot missed notifications, and configure the automation correctly. ## What this covers * The full notification pipeline step by step * What Galantis detects as a restock event * How the BACK\_IN\_STOCK automation trigger fires * Which subscribers receive notifications and which are excluded * Credit consumption * Timing expectations ## The notification pipeline ``` 1. Variant inventory updated in Shopify (inventory_quantity 0 → > 0) 2. Shopify sends products/update webhook to Galantis 3. Galantis detects inventory_quantity change 4. Change confirmed as 0 → > 0 (restock event identified) 5. BACK_IN_STOCK automation trigger fires 6. Galantis queries all ACTIVE subscriptions for this variant 7. Per subscriber: consent check (marketing_state = SUBSCRIBED?) 8. Per subscriber: frequency cap check (within cap window?) 9. Qualifying subscribers enrolled into the Back-in-Stock automation flow 10. Action Node sends the approved restock notification template 11. Subscription status moves to NOTIFIED 12. Credits consumed per notification successfully sent ``` ## Step-by-step breakdown ### Step 1–2: Shopify webhook The pipeline starts in Shopify. When a merchant updates inventory — manually in the Shopify admin, through a warehouse or fulfillment integration, or via the Shopify API — Shopify saves the change and fires a `products/update` webhook to all registered apps, including Galantis. The webhook fires for any product update, not only inventory changes. Galantis must identify whether the update contains a relevant inventory change. ### Step 3–4: Restock detection Galantis receives the webhook payload and scans the variant data for inventory changes. It specifically looks for the pattern: a variant whose `inventory_quantity` has changed from `0` to any positive value. This is the definition of a restock event in Galantis. Updates that do not match this pattern — a variant going from 5 to 10, a price change on an in-stock variant, or a title update — do not trigger the Back-in-Stock pipeline, even though they arrive via the same webhook. A variant that goes from `0` to `0` — for example, a product update where inventory remains zero — does not trigger the pipeline. The detection requires a positive inventory value, not just a change event. ### Step 5: Trigger fires Once a restock event is identified for a specific variant, the `BACK_IN_STOCK` automation trigger fires. This trigger is scoped to the variant — it fires independently for each variant that restocks, even if multiple variants of the same product restock simultaneously. ### Step 6: Subscriber query Galantis queries all subscription records for the restocked variant and filters to those with `ACTIVE` status. Subscriptions in `PENDING`, `NOTIFIED`, or `CANCELLED` status are excluded at this step. ### Step 7–8: Per-subscriber eligibility checks For each `ACTIVE` subscriber, Galantis applies two eligibility checks before enrollment: **Consent check** — The subscriber's `marketing_state` must be `SUBSCRIBED`. Subscribers with `UNSUBSCRIBED`, `REDACTED`, `PENDING`, or any other non-subscribed state are excluded. See [Consent & Opt-outs](/whatsapp/audience/consent-optouts). **Frequency cap check** — The subscriber must not be within the automation's frequency cap window. A `24 hours` cap on the Back-in-Stock automation prevents a subscriber from receiving multiple notifications within a 24-hour period — relevant if the same variant restocks and sells out multiple times in quick succession. See [Automations — Frequency Caps](/whatsapp/automations/frequency-caps). ### Step 9–10: Enrollment and dispatch Subscribers who pass both checks are enrolled in the Back-in-Stock automation flow. The Action Node sends the approved restock notification template immediately — no delay node is used in the standard Back-in-Stock recipe, because the customer explicitly requested to be notified as soon as the product is available. Template variable mapping at the Action Node should include the customer's name and the product name. See [Automations — Recipes — Back-in-Stock Notification](/whatsapp/automations/recipes/back-in-stock-notification) for the recommended template configuration. ### Step 11: Status update After the notification is dispatched, each enrolled subscriber's subscription status moves from `ACTIVE` to `NOTIFIED`. This transition happens regardless of whether the message was successfully delivered — it is a dispatch record, not a delivery confirmation. A subscriber whose message failed (due to a phone number error, a missing calling code, or insufficient credits) will have `NOTIFIED` status even though they did not receive the message. Check the automation activity log for the specific failure reason per subscriber. ### Step 12: Credit consumption Credits are consumed per notification successfully sent — not per subscriber enrolled. A notification that fails before reaching the WhatsApp API does not consume a credit. See [Back-in-Stock Add-on Billing](/whatsapp/billing/add-ons/back-in-stock). ## Timing expectations The notification pipeline is designed for near-real-time delivery. The time between a merchant updating inventory in Shopify and a subscriber receiving a WhatsApp message is typically a matter of seconds to a low number of minutes, depending on: * Shopify webhook delivery latency (typically seconds) * Galantis queue depth at the time of processing * WhatsApp API delivery to the subscriber's device There is no intentional delay in the standard pipeline — unlike abandoned checkout recovery, which uses a delay node to give the customer time to return on their own, Back-in-Stock notifications are designed to be immediate. Speed is a competitive advantage: a subscriber who receives a restock notification first is more likely to convert before the stock sells out again. ## What can prevent a notification from sending | Cause | Result | How to identify | | ---------------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------ | | Subscriber in `PENDING`, `NOTIFIED`, or `CANCELLED` status | Not enrolled | Subscription status in **Back-in-Stock → Subscriptions** | | Subscriber's `marketing_state` ≠ `SUBSCRIBED` | Skipped — consent check failed | Contact profile in **Audience → Contacts** | | Subscriber within frequency cap window | Skipped — cap active | Automation activity log | | Notification template not `APPROVED` | Flow fails for all subscribers | Template status in **Templates** | | Insufficient credits | Fails after partial dispatch | Billing balance in **Billing → Overview** | | Phone number missing calling code | `FAILED` per subscriber | Automation activity log, error: `CUSTOMER_IS_MISSING_CALLING_CODE` | ## Related guides * [Subscription Lifecycle](./subscription-lifecycle) — How subscription statuses affect notification eligibility * [Product & Inventory Rules](./product-inventory-rules) — Per-variant rules that affect which variants can trigger the pipeline * [Automations — Recipes — Back-in-Stock Notification](/whatsapp/automations/recipes/back-in-stock-notification) — The automation flow configuration * [Automations — Activity Tracking](/whatsapp/automations/activity-tracking) — Diagnosing per-subscriber notification outcomes * [Support — Message Delivery](/whatsapp/support/troubleshooting/message-delivery) — Resolving delivery failures # Product & Inventory Rules Source: https://docs.digifist.com/galantis/whatsapp/back-in-stock/product-inventory-rules Per-variant subscription behavior, eligibility rules, subscription limits, and how inventory quantity drives the Back-in-Stock module. Back-in-Stock subscriptions operate at the variant level — a customer subscribes to a specific size, color, or option combination of a product, not to the product as a whole. The module's eligibility rules are also applied at the variant level, based on the variant's `inventory_quantity` value in Shopify. Understanding how these rules work ensures the widget appears where it should and notifications fire when they should. ## What this covers * Why subscriptions are per variant, not per product * How `inventory_quantity = 0` controls widget eligibility * Per-variant subscription limits * Multi-variant and multi-product subscription behavior * Edge cases in inventory management ## Subscriptions are per variant When a customer submits their WhatsApp number through the Back-in-Stock widget, Galantis records the subscription against the specific variant they have selected — not against the parent product. The subscription record stores the variant's `selected_options` (e.g., `Size: M, Color: Blue`) to identify exactly which combination the customer is waiting for. This means: * A customer subscribed to **Size: M, Color: Blue** will only receive a notification when that exact variant is restocked * If **Size: L, Color: Blue** restocks, their subscription is not triggered — it is a different variant * A customer who wants notifications for multiple variants must subscribe separately to each one This per-variant precision is the correct behavior — a customer waiting for a specific size does not want to be notified that a different size is available, as that does not solve their problem. ## Widget eligibility: inventory\_quantity = 0 The subscription widget only appears on a product page when the currently selected variant has `inventory_quantity = 0` in Shopify. This is evaluated client-side when the customer selects a variant on the product page. | Variant inventory | Widget visible | | ------------------------ | ---------------------------- | | `inventory_quantity = 0` | Yes — widget button appears | | `inventory_quantity > 0` | No — widget button is hidden | When a customer switches between variants on a product page, the widget shows or hides dynamically based on the selected variant's inventory. A product page where some variants are in stock and others are out of stock will show the widget only for the out-of-stock selections. The widget evaluates inventory based on the data embedded in the Shopify product page at load time. A variant that sells out after the page was loaded will not trigger the widget to appear until the page is refreshed. This is a client-side limitation of the script tag injection approach. ## Subscription limits Galantis supports configurable subscription limits per product and per variant. These limits control how many active subscriptions can exist for a given product or variant at any one time. **Why limits matter:** For high-demand products, an unlimited subscription list can create notification volume that exceeds your credit balance or overwhelms a limited restock quantity. Setting a per-variant limit ensures the notification list stays proportionate to the inventory you can fulfill. Subscription limits per product and per variant are configurable in the Galantis dashboard. ## Multi-variant subscriptions A customer can hold multiple active subscriptions simultaneously — across different variants of the same product and across completely different products. Each subscription is a distinct record and is evaluated independently: * A customer waiting for **Size: S** and **Size: M** of the same product has two separate subscriptions * When **Size: S** restocks, only the **Size: S** subscription triggers — **Size: M** remains `ACTIVE` until that variant restocks * A customer subscribed to variants across three different products will receive up to three separate notifications as each variant restocks, governed by the frequency cap on the automation There is no enforced limit on how many subscriptions a single customer can hold. Frequency caps on the Back-in-Stock automation control how often a customer can receive notifications within a given time window, regardless of how many active subscriptions they hold. See [Automations — Frequency Caps](/whatsapp/automations/frequency-caps). ## Inventory quantity edge cases **Partial restocks** — If a variant is restocked with a quantity lower than the number of active subscribers, all subscribers still receive notifications. Galantis does not check whether the restocked quantity is sufficient to fulfill all subscribers — the notification pipeline fires for all `ACTIVE` subscriptions regardless of restock volume. Urgency language in the notification template ("Limited stock — get yours now") reflects the genuine scarcity without Galantis needing to manage allocation. **Rapid inventory fluctuation** — A variant that restocks and immediately sells out before all notifications are dispatched still triggers the full notification batch. Customers who click the link in their notification may find the product out of stock again. This is expected behavior — the notification is accurate at the moment of dispatch. **Inventory adjustments that do not represent a true restock** — An inventory correction that moves a variant from `0` to a positive number — for example, a merchant correcting an erroneous zero-inventory entry — will trigger the Back-in-Stock pipeline just as a genuine restock would. Galantis cannot distinguish between a correction and a genuine restock from the webhook payload alone. If inventory corrections are common in your workflow, be aware that they will fire notifications to subscribers. **Inventory tracking disabled** — If a product in Shopify has inventory tracking disabled, Shopify does not report an `inventory_quantity` for its variants. In this case, the widget will not appear (since Galantis cannot confirm `inventory_quantity = 0`) and the restock trigger cannot fire. Enable inventory tracking in Shopify for any product you want to use with Back-in-Stock. Back-in-Stock depends entirely on Shopify's inventory data being accurate and tracking being enabled. Products with inventory tracking disabled, products managed by third-party inventory systems that do not sync back to Shopify's native inventory fields, or products with manual stock management that is not reflected in Shopify will not work correctly with the Back-in-Stock module. ## Related guides * [Subscription Lifecycle](./subscription-lifecycle) — How subscription status controls notification eligibility * [Notification Logic](./notification-logic) — How the restock detection pipeline uses inventory data * [Variants & Pricing](/whatsapp/catalog/variants-pricing) — How Galantis stores variant-level inventory data from Shopify * [Automations — Frequency Caps](/whatsapp/automations/frequency-caps) — Controlling notification frequency for customers with multiple subscriptions # Subscription Lifecycle Source: https://docs.digifist.com/galantis/whatsapp/back-in-stock/subscription-lifecycle How Back-in-Stock subscriptions move through PENDING, ACTIVE, NOTIFIED, and CANCELLED states in Galantis. Every Back-in-Stock subscription in Galantis has a status that tracks where it is in its lifecycle — from the moment a customer submits their WhatsApp number through to notification delivery or cancellation. Status determines whether a subscriber receives a restock notification and prevents customers from being notified multiple times for the same restock event. ## What this covers * All four subscription statuses and their meaning * How status transitions are triggered * The role of status in notification eligibility * Viewing and managing subscriptions ## Subscription statuses | Status | Meaning | Eligible for notification | | ----------- | -------------------------------------------------------------------- | ------------------------- | | `PENDING` | Newly submitted — awaiting activation | No | | `ACTIVE` | Enrolled — will receive a notification when the variant is restocked | Yes | | `NOTIFIED` | Notification sent — subscription expires after notification | No | | `CANCELLED` | Customer unsubscribed | No | Only subscriptions in `ACTIVE` status receive restock notifications. All other statuses are excluded from the notification dispatch. ## Status transitions ### PENDING A subscription enters `PENDING` status the moment a customer submits their WhatsApp number through the storefront widget. At this point the subscription has been recorded but has not yet been activated. ### ACTIVE Once activated, the subscription enters `ACTIVE` status and the customer is enrolled to receive a notification when the subscribed variant is restocked. A customer can hold multiple `ACTIVE` subscriptions simultaneously — one per variant they have subscribed to, across different products. `ACTIVE` is the only status eligible for restock notification dispatch. When the `BACK_IN_STOCK` trigger fires for a variant, Galantis queries all `ACTIVE` subscriptions for that variant and enrolls each one in the notification flow. ### NOTIFIED After a restock notification is successfully sent, the subscription status moves to `NOTIFIED`. This is a terminal status for that subscription record — a notified subscription does not receive a second notification if the same variant is restocked again. `NOTIFIED` status provides duplicate notification protection. Without it, a variant that fluctuates between zero and positive inventory multiple times (a common pattern during high-demand restocks) could send repeated notifications to the same customer for the same restock event. If a customer wants to receive future notifications for the same variant, they must re-subscribe through the widget — which creates a new subscription record in `PENDING` status. Moving to `NOTIFIED` does not mean the customer received and read the message — it means the notification was dispatched by Galantis. If the message failed to deliver (due to a phone number issue, an expired conversation window, or insufficient credits), the subscription still moves to `NOTIFIED`. Check the automation activity log for delivery status details on the notification message itself. ### CANCELLED A subscription moves to `CANCELLED` when a customer unsubscribes. `CANCELLED` subscriptions are permanently excluded from notification dispatch. A cancelled subscription cannot be reactivated — if the customer wants to subscribe again, they must submit a new subscription through the widget. ## Consent state and subscription status Subscription status and marketing consent (`marketing_state`) are two independent checks that both apply before a notification is sent: 1. **Subscription status must be `ACTIVE`** 2. **Customer's `marketing_state` must be `SUBSCRIBED`** A customer with an `ACTIVE` subscription but `UNSUBSCRIBED` or `REDACTED` consent status will not receive a notification — the consent check excludes them even though their subscription is technically eligible. This ensures a customer who opted out of WhatsApp marketing through any channel is not messaged via the Back-in-Stock pipeline. Consent state takes precedence over subscription status. An `ACTIVE` subscription on an `UNSUBSCRIBED` customer will never trigger a notification send. If a customer subscribed through the widget but has since replied STOP to another message, their Back-in-Stock subscription becomes effectively inactive even though its status remains `ACTIVE`. ## Viewing and managing subscriptions Navigate to **Back-in-Stock → Subscriptions** to view all subscription records. The list can be filtered by status, product, variant, and date range. Per-subscription details show: * The customer's WhatsApp number and name * The specific product and variant subscribed to * The current status and status history * The timestamp of subscription creation and any status transition Individual subscription records can be cancelled by an admin from the subscription detail view — useful for removing subscriptions submitted in error or for customers who request cancellation through a support channel. ## Related guides * [Widget Installation](./widget-installation) — How subscriptions are created through the storefront widget * [Notification Logic](./notification-logic) — How `ACTIVE` subscriptions are enrolled into the notification pipeline * [Product & Inventory Rules](./product-inventory-rules) — Per-variant subscription limits and eligibility * [Consent & Opt-outs](/whatsapp/audience/consent-optouts) — How `marketing_state` interacts with subscription status # Widget Design Source: https://docs.digifist.com/galantis/whatsapp/back-in-stock/widget-design Customize the Back-in-Stock widget button, subscription modal, and form states to match your brand. The Back-in-Stock widget is fully customizable from the Galantis dashboard. Every visual element — the subscription button, the modal that opens when a customer taps it, the form colors, and the states shown after submission — is controlled through **Back-in-Stock → Settings** and applied to your storefront immediately when saved. One configuration applies across your entire storefront. ## What these settings control * Button position, type, color, font, and label text * Modal headline and font * Form background and state colors (default, success, error) * Font sizing and spacing ## How to access In the Galantis dashboard, go to **Back-in-Stock → Settings**. Configure the options described below. Changes are applied to your storefront immediately after saving — no redeployment needed. ## Settings **Button position**: Controls where the subscription button appears on the product page. * **Right** — Bottom-right corner. Default and works for most themes. * **Left** — Bottom-left corner. Use when your theme places other fixed elements at the bottom-right. * **Custom** — Precise placement using CSS offset values. Use when neither default position fits your theme layout. *** **Button type**: Determines the visual style of the button. * **Pre-designed** — Uses Galantis's built-in button design. Optimized for visibility and mobile tap targets. * **Custom** — Fully custom button design for stores with strict brand guidelines. *** **Button background color**: The fill color of the subscription button. Enter a hex value. We recommend using your primary brand color or a high-contrast accent color that stands out against your product page background. *** **Button font**: The typeface used for the button label text. Enter a font family name. The font must be loaded by your Shopify theme — the widget inherits fonts available on the page. *** **Button text**: The CTA label displayed on the button. Keep this direct and action-oriented. Common values: * `Notify me when available` * `Alert me when back` * `Get notified` *** **Button font size and spacing**: Controls the size of the button label text and the internal padding of the button. Adjusting these is useful when your theme's layout makes the default button feel disproportionate. Test button sizing on mobile. Back-in-Stock subscriptions are most commonly submitted from mobile devices — a button that looks right on desktop may have a tap target that is too small on a phone screen. The modal is the overlay that opens when a customer taps the subscription button. It contains the headline text, the WhatsApp number input field, and the submit button. *** **Headline text**: The primary message shown at the top of the subscription modal. This is the customer's first prompt after tapping the button — it should confirm what they are signing up for and set expectations. Effective headline examples: * `Get notified on WhatsApp when this is back in stock` * `We'll message you on WhatsApp the moment it's available` * `Leave your number and we'll let you know` *** **Headline font**: The typeface used for the modal headline. Enter a font family name consistent with your store's typography. *** **Form background color**: The background color of the subscription modal. Use your store's background color or a neutral that keeps the form legible. Avoid colors that reduce contrast against the input field and submit button. The modal appears on top of your product page content. A form background color that closely matches your page background can make the modal feel like it did not open — use a slightly offset shade or a subtle border to ensure the modal is visually distinct from the page behind it. The widget displays distinct visual states after the customer interacts with the form. Each state has its own background color to communicate the outcome clearly. *** **Success background color**: Shown after a customer successfully submits their WhatsApp number. The success state confirms the subscription was recorded and sets the expectation that they will receive a WhatsApp message when the product is back. Use a color that communicates a positive outcome — green or your brand's success color. Ensure sufficient contrast for the confirmation text displayed over it. *** **Error background color**: Shown when a submission fails — for example, when an invalid phone number format is entered or a network error occurs. Use a color that signals an issue without being alarming — a muted red or amber works well. ## Best practices * **Match button color to your brand's primary CTA color.** The Back-in-Stock button competes visually with Add to Cart — using a secondary color that is clearly distinct from your main CTA reduces the chance of customer confusion while still being visible. * **Keep the headline text specific.** "Get notified" is weaker than "We'll message you on WhatsApp when this is back." Customers who understand exactly what they are subscribing to convert at higher rates and are less likely to report the notification as unexpected. * **Test all three form states before launch.** Verify the success state, the error state, and the default state each display as intended on both desktop and mobile. A success state that uses your error color creates customer confusion. * **Revisit widget design after theme updates.** Shopify theme updates can shift layout elements that interact with the widget button position. Check the widget placement after any theme update that affects product page layout. * **Use `Custom` button type only when necessary.** Pre-designed buttons are optimized for mobile tap targets and accessibility contrast. Custom buttons require manual testing to ensure they meet the same standards. ## Related guides * [Widget Installation](./widget-installation) — Installing the widget and verifying it on your storefront * [Subscription Lifecycle](./subscription-lifecycle) — What happens after a customer submits the form # Widget Installation Source: https://docs.digifist.com/galantis/whatsapp/back-in-stock/widget-installation Install the Back-in-Stock subscription widget on your Shopify storefront via Galantis script tag injection. The Back-in-Stock widget is injected into your Shopify storefront automatically by Galantis using a script tag — no manual theme editing required. When a product variant has zero inventory, the widget button appears on that product page and lets customers submit their WhatsApp number to subscribe for a restock notification. ## What this covers * How script tag injection works * Installation steps * How to verify the widget is live * Troubleshooting display issues ## How installation works Galantis writes a script tag to your Shopify store using the `write_script_tags` permission granted during app installation. The script loads on product pages automatically and checks variant inventory in real time — displaying the subscription button only when a variant's `inventory_quantity` is `0`. No changes to your Shopify theme files are needed. The widget is added and updated entirely through Shopify's script tag system. The `write_script_tags` Shopify permission is required for the widget to inject. This permission is requested during the initial Galantis app installation. If the widget is not appearing, verify this permission is active under **Shopify Admin → Apps → Galantis → Permissions**. ## Installation steps In the Galantis dashboard, go to **Back-in-Stock → Settings**. Set the button position, colors, label text, and modal copy before saving. The widget script will be injected with these settings applied. See [Widget Design](./widget-design) for the full settings reference. Saving triggers Galantis to write or update the script tag in your Shopify store. No further action is required to deploy the widget to your storefront. Navigate to a product page with at least one out-of-stock variant. The subscription button should appear for the out-of-stock variant. Switch to an in-stock variant — the button should disappear. Enter your own WhatsApp number in the widget and submit. Confirm a subscription record appears in **Back-in-Stock → Subscriptions** with `ACTIVE` status. ## How the widget detects out-of-stock variants The widget script evaluates the current variant's `inventory_quantity` on the product page. When a customer switches between variants — selecting a different size or color — the widget dynamically shows or hides based on whether the selected variant is in stock. This evaluation happens client-side using the variant data embedded in the Shopify product page. It reflects the inventory state at the time the page was loaded — a variant that goes out of stock after the page was opened will not trigger the widget until the page is refreshed. ## Placement options The widget button can be positioned in three ways, configured under **Back-in-Stock → Settings → Button position**: * **Right** — Bottom-right corner of the page * **Left** — Bottom-left corner of the page * **Custom** — Precise placement via CSS offset values, useful when your theme's layout conflicts with the default positions The subscription modal that opens when a customer taps the button is centered on the page regardless of button position. ## Verifying the widget After saving settings, confirm the widget works correctly by completing each check: | Check | How to verify | | -------------------------------------- | ------------------------------------------------------------------------------------------ | | Button appears on out-of-stock variant | Visit a product page with an out-of-stock variant — button should be visible | | Button disappears on in-stock variant | Switch to an in-stock variant on the same product — button should hide | | Modal opens correctly | Tap the button — the subscription modal should open with your configured headline and form | | Submission creates a subscription | Submit your WhatsApp number — check **Back-in-Stock → Subscriptions** for the new record | ## Troubleshooting **Widget not appearing on any page** * Confirm Galantis has `write_script_tags` permission in **Shopify Admin → Apps → Galantis → Permissions** * Clear your browser cache and reload the product page on your live storefront — not in the Shopify theme editor preview * Check your browser console for JavaScript errors that may indicate a script loading conflict with your theme **Widget not appearing on a specific product** * Confirm the variant you are viewing genuinely has `inventory_quantity = 0` in Shopify — the widget only appears for zero-inventory variants * If the product uses a third-party inventory management app, confirm that app's inventory data is reflected correctly in Shopify's native inventory fields **Widget appears but submission fails** * Check the browser console for network errors on the subscription submission request * Confirm your WhatsApp Business Account is connected under **Settings → WhatsApp Connection** The Shopify theme editor preview does not execute third-party script tags. Always verify the widget on your live storefront URL. Testing in the Shopify Customizer preview will show the widget as absent even when it is correctly installed. ## Related guides * [Widget Design](./widget-design) — Customizing the widget's appearance before or after installation * [Subscription Lifecycle](./subscription-lifecycle) — What happens after a customer submits their number * [Getting Started — First Back-in-Stock](/whatsapp/getting-started/first-back-in-stock) — End-to-end setup walkthrough including a restock test # Back-in-Stock Add-on Source: https://docs.digifist.com/galantis/whatsapp/billing/add-ons/back-in-stock Back-in-Stock pricing tiers from 19 to 149 dollars per month, included subscriber limits, 2-cent-per-subscriber overage, and how Enterprise gets the Starter tier included by default. Back-in-Stock is an opt-in add-on for stores that want to notify shoppers via WhatsApp when a product is restocked. It is billed as a monthly tier with an included subscriber limit. Above the included limit, overage is charged at \$0.02 per additional subscriber. **Enterprise core plan includes the Starter tier (250 subscribers) by default** — every other plan opts in by purchasing a tier. ## Pricing Up to **250 subscribers** included. Good for small catalogs or pilot rollouts. Up to **1,000 subscribers** included. Standard tier for active Shopify stores. Up to **5,000 subscribers** included. For high-traffic catalogs and seasonal peaks. Up to **10,000 subscribers** included. For large catalogs with sustained Back-in-Stock demand. ### Tier summary | Tier | Included subscribers | Price / month | | ---------- | -------------------: | ------------: | | Starter | 250 | \$19 | | Growth | 1,000 | \$39 | | Scale | 5,000 | \$79 | | Enterprise | 10,000 | \$149 | **Enterprise core plan (\$399/mo)** includes Back-in-Stock at the **Starter tier (250 subscribers)** at no extra cost. If you exceed 250 subscribers as an Enterprise customer, you can upgrade to a higher BIS tier — only the difference is billed. ## Overage Above the included subscriber limit, overage is billed at **\$0.02 per additional subscriber per month**. This is added as a usage-based line item on top of your monthly tier subscription. We recommend monitoring subscriber count in **Billing → Usage** and upgrading to the next tier when you hit 80–90% of the included limit — it almost always works out cheaper than paying overage. ## Choosing the right tier Go to **Billing → Usage → Back-in-Stock** to see your current subscriber count. Start one tier above your current count if you expect modest growth. Skip tiers if you're seasonal or running a launch. Subscribers can pile up faster than expected after a viral product or restock event. The Usage page shows a 30-day trend. A tier upgrade is cheaper than accumulating overage above \~10% of the included limit. Upgrades take effect immediately. ## Where to track Back-in-Stock usage Go to **Billing → Usage** in the Galantis app to see: * Current subscriber count vs included limit * 30-day trend * Overage units and cost (if applicable) ## How Back-in-Stock appears on your invoice Back-in-Stock charges appear on the **Galantis (Shopify) invoice** as: * "Galantis WhatsApp — Back-in-Stock \[tier name] — \$X / month" * "Galantis WhatsApp — Back-in-Stock Overage — N subscribers × \$0.02" For Enterprise customers, the included Starter tier does not appear as a separate line item — it's part of the core plan price. Only upgrades above Starter and overages are billed separately. ## FAQ A subscriber is a unique customer who has opted in to receive Back-in-Stock notifications for one or more products via WhatsApp. The same customer subscribing to multiple products counts as 1 subscriber. Subscribers remain on your list until they opt out, are unsubscribed automatically due to inactivity, or are manually removed. See [Subscription lifecycle](/galantis/whatsapp/back-in-stock/subscription-lifecycle). Yes — each delivered Back-in-Stock notification consumes 1 Conversation credit, drawn from your plan allowance and Conversation tier. The Back-in-Stock add-on covers the subscriber list management itself; the actual delivery uses the same credit pool as campaigns and automation flows. Yes. Upgrades take effect immediately and are prorated for the remainder of the current Shopify cycle. Downgrades are typically applied at the start of the next billing cycle to keep invoicing predictable. *** How all Galantis charges appear on your Shopify invoice. Pricing and overage structure for the Inbox add-on. # Inbox Add-on Source: https://docs.digifist.com/galantis/whatsapp/billing/add-ons/inbox Inbox pricing — $19 per agent seat per month (500 threads each), tiered overage pricing, and which plans include a seat by default. The Inbox module is billed per agent seat and uses its own usage concept — **Inbox Threads** — which is separate from the platform Conversation credits used for campaign and automation flow delivery. Scale and Enterprise plans include one Inbox seat in the plan price; additional seats are billed individually. ## What's included with each plan | Plan | Inbox threads included | Included seats | Need more? | | -------------- | ----------------------- | -------------- | ------------------------------ | | Free | 50 threads / month | 0 | Upgrade to a paid plan | | Starter | 50 threads / month | 0 | Add an Additional Agent (\$19) | | Growth | 50 threads / month | 0 | Add an Additional Agent (\$19) | | **Scale** | **500 threads / month** | **1 seat** | Add an Additional Agent (\$19) | | **Enterprise** | **500 threads / month** | **1 seat** | Add an Additional Agent (\$19) | Plans without an included seat still get **50 inbox threads per month** so you can try the module out. To actively run support over WhatsApp, add an Additional Agent — that unlocks the full 500-thread allowance per seat. ## Pricing * **\$19 per agent / month** * Includes **500 Inbox Threads** per agent per month * Scale and Enterprise plans include 1 seat in the plan price * Additional seats are billed at \$19 / seat / month * Seats can be added or removed at any time during a billing cycle Overage is billed in blocks of 500 Inbox Threads per month, using tiered pricing based on total monthly thread volume across all seats: | Monthly Inbox Threads | Price per 500 threads | | --------------------- | --------------------: | | Under 5,000 | \$5 | | 5,000 – 25,000 | \$4 | | 25,000+ | \$3 | Overage is calculated monthly and added to your Shopify invoice as a usage-based line item. ## How Inbox usage is counted An **Inbox Thread** represents a support thread handled in the Inbox module. Each agent seat includes 500 threads per month. Usage beyond the included amount is billed as overage in 500-thread blocks using the tiered rates above. Inbox usage is pooled across seats — a 3-seat account has 1,500 included threads in total before overage starts. Inbox Threads are **not** the same as Conversation credits. Conversation credits track campaign and automation flow delivery. Inbox Threads track support activity in the Inbox module. They have separate balances and separate billing. ## Adding or removing seats Go to the Galantis app, then **Billing → Add-ons → Inbox**. Increase or decrease the number of Additional Agent seats. Scale and Enterprise show 1 seat as "included" — additional seats are billed on top. Adjustments take effect immediately. Pro-rated charges or credits appear on your next Shopify invoice. Go to **Inbox → Settings → Agents** to [assign the seat to a team member](/galantis/whatsapp/inbox/assignment-routing). ## Where to track Inbox usage Go to **Billing → Usage** in the Galantis app to see: * Active agent seats (included + Additional Agents) * Total included threads (seats × 500) * Current month thread usage * Overage totals (if applicable) ## How Inbox appears on your invoice Inbox charges appear on the **Galantis (Shopify) invoice** as: * "Galantis WhatsApp — Inbox Agent Seat — N × \$19 / month" * "Galantis WhatsApp — Inbox Overage — X × 500-thread blocks @ tier rate" The included seat on Scale and Enterprise plans is part of the core plan price — it does not appear as a separate line item. *** How all Galantis charges appear on your Shopify invoice. Pricing and overage structure for the Back-in-Stock add-on. # What is a Conversation? Source: https://docs.digifist.com/galantis/whatsapp/billing/conversations The precise definition of a Conversation, what counts (DELIVERED-only), what does not, and how Conversations are deducted across Free Plan, paid plans, and monthly tiers. A **Conversation** is a Galantis platform usage unit consumed when a WhatsApp template message is delivered. Understanding exactly what counts — and what does not — helps you predict usage and avoid surprises on your Shopify invoice. Conversations are not WhatsApp credits and they do not pay Meta charges. Meta bills WhatsApp messaging directly in Meta Business Manager. Galantis bills the platform Conversation separately. ## What counts as a Conversation A Conversation is consumed when **all** of the following are true: * The message is a **WhatsApp template message** (campaign or automation flow) * The message status becomes **DELIVERED** * The message is billable under WhatsApp messaging rules A Conversation is **not** consumed for: * Drafts or previews * Failed sends * Undelivered messages * Inbound replies in the Inbox (those are tracked as Inbox Threads — see [Inbox add-on](/galantis/whatsapp/billing/add-ons/inbox)) ## The credit model Galantis uses a flat rate: **1 delivered Conversation = 1 credit**, regardless of destination country or template category. Meta's per-country and per-category charges still apply on the Meta side, but they don't change how many Galantis credits a delivered message consumes. Credits come from three places — in this deduction order: Each plan includes a fixed monthly Conversation allowance (Free 20, Starter 50, Growth 250, Scale 1,000, Enterprise 2,000). These are spent first. If you added a tier (\$1 = 100 credits, 68 tiers from \$5 to \$5,000), those credits are spent after the plan allowance. If both are depleted mid-campaign, Galantis blocks new sends and prompts an instant tier upgrade. Existing in-flight sends complete on the current balance. Want to add or change a tier? See [Tiers & upgrades](/galantis/whatsapp/billing/tiers-and-upgrades) for the full list and how upgrades work. ## Counting happens on delivery Usage is recorded at the point of delivery, not when you click Send. ```mermaid theme={null} flowchart TD A[Campaign or flow attempts send] --> B{Message DELIVERED?} B -->|No| C[0 credits consumed] B -->|Yes| D[Deduct 1 credit from balance] D --> E[Plan allowance, then tier] E --> F[Usage updated] ``` ## Estimation vs. final usage Before sending a campaign, Galantis shows an estimate of required Conversations. Final usage is reconciled based on actual delivered messages. Estimates can differ from final usage for the following reasons: * Delivery rate differs from expected * Segment size changes between estimate and send * Recipient country distribution shifts (affects Meta's charges, not your Galantis credit count — but estimates may show both) ## Examples You launch a campaign with a template message. The message is delivered successfully. **Result:** 1 Conversation credit consumed per delivered recipient. A send fails or the recipient number is invalid. The message does not reach DELIVERED status. **Result:** 0 credits consumed. You preview or test a template without sending it to real recipients. **Result:** 0 credits consumed. An [abandoned-checkout automation](/galantis/whatsapp/automations/recipes/abandoned-checkout) fires and delivers a template message to a customer. **Result:** 1 Conversation credit consumed per delivered recipient. Automation deliveries draw from the same balance as campaigns. ## Conversations vs. Inbox Threads The Inbox module also uses the word "conversation" to describe support threads. To avoid confusion, this documentation uses two consistent terms: * **Conversations (or credits)** — the billing unit for delivered campaign and automation messages * **Inbox Threads** — support threads handled in the Inbox module, billed separately per agent seat How Inbox Threads are priced and counted separately from platform Conversations. ## Developer notes This section is intended for engineers and QA. Customers can skip it. Create a usage event only when: * `status == "DELIVERED"` * message is a billable template message Suggested fields: * `message_id` (idempotency key) * `waba_id` / `business_id` * `template_name` * `template_category` * `destination_country` * `delivered_at` Delivery webhooks can be retried. Deduction must be idempotent on `message_id` to avoid double-charging. 1. Plan included Conversations 2. Monthly tier Conversations If both are insufficient: * Block new campaign sends * Prompt immediate tier upgrade * Pause automation sends (policy choice) *** The 68 Conversation tiers, the \$1 = 100 credits rate, and how upgrades work. Where to track usage and what happens when you run out of Conversations. # Invoices & Line Items Source: https://docs.digifist.com/galantis/whatsapp/billing/invoices-and-line-items What shows up on Meta vs Shopify invoices, how each plan and add-on appears as a line item, and what happens during the 7-day free trial. Galantis billing involves two separate invoices that are always independent. Meta bills WhatsApp messaging charges directly in Meta Business Manager. Galantis bills your platform subscription, Conversation tier, and add-ons through **Shopify Billing** — they appear on your standard Shopify invoice. Neither invoice contains the other's charges. ## Invoice breakdown Your Shopify invoice from Galantis may include: * Core App plan subscription (Starter, Growth, Scale, or Enterprise — Free Plan has no charge) * Monthly Conversation tier (optional, at \$1 = 100 credits) * Inbox agent seats * Back-in-Stock add-on tier * Usage-based overages (Inbox threads, Back-in-Stock subscribers) Add-on details: * [Inbox add-on](/galantis/whatsapp/billing/add-ons/inbox) * [Back-in-Stock add-on](/galantis/whatsapp/billing/add-ons/back-in-stock) Meta invoices include WhatsApp messaging charges based on destination country and template category. These are billed directly in **Meta Business Manager / Business Suite billing**. Meta's official pricing model. Per-country / per-currency rates. Meta charges never appear on the Shopify invoice from Galantis. They are billed separately, on Meta's own cycle, with Meta's own payment method. ## During the 7-day free trial When you move from Free Plan to a paid plan, the first 7 days are free. During those 7 days: * No Galantis charges appear on your Shopify invoice * The plan's Conversation allowance is available immediately (use it for real sends) * Add-ons or Conversation tiers added during the trial start billing on day 8 alongside the plan Your first Shopify charge from Galantis appears on day 8, prorated for the remainder of your Shopify billing cycle if needed. You can cancel during the trial at no cost. Sending stops at cancellation; data and configuration are retained according to standard retention policy. ## Common line item examples * "Galantis WhatsApp — Scale Plan — \$179 / month" * "Galantis WhatsApp — Conversation Tier \$100 (10,000 credits) — \$100 / month" Plan charges renew monthly on your Shopify billing date. Conversation tiers reset each cycle and persist until you manually downgrade. * "Galantis WhatsApp — Inbox Agent Seat — 3 × \$19 / month" Scale and Enterprise include 1 Inbox seat in the plan price. Any seat beyond the included one is billed at \$19/seat/month. * "Galantis WhatsApp — Back-in-Stock Growth (1,000 subscribers) — \$39 / month" * "Galantis WhatsApp — Back-in-Stock Overage — 350 subscribers × \$0.02 = \$7.00" Back-in-Stock is an opt-in add-on. Overage is calculated on the highest subscriber count reached during the cycle. The Free Plan has no Galantis line items on your Shopify invoice. The plan is permanent and remains active until you upgrade or uninstall the app. Exact line-item naming depends on your Shopify billing configuration. The goal is always unambiguous separation from Meta charges and clear labeling for audits and finance teams. ## Upgrades and downgrades on the invoice Plan and tier upgrades take effect immediately. Charges are prorated for the rest of the current Shopify cycle and the new plan/tier is billed in full from the next cycle onwards. Downgrades are a manual action in **Billing**. We recommend making downgrades effective at the start of your next billing cycle to avoid proration edge cases and keep invoicing predictable. If a campaign needs more Conversations than your balance allows, you can upgrade the tier from the send flow itself. The upgrade is invoiced like any other tier change. *** Plans, included Conversations, and the full billing structure. Official Meta WhatsApp pricing resources and where to view your charges. # Meta Rate Card & WhatsApp Charges Source: https://docs.digifist.com/galantis/whatsapp/billing/meta-rate-card Official Meta WhatsApp pricing links, where to view your Meta charges, and how Meta's per-country pricing relates to Galantis Conversation credits (flat $1 = 100 credits). Meta controls WhatsApp messaging pricing. Charges vary by destination country and template category and are billed directly in Meta Business Manager — they never appear on your Shopify invoice from Galantis. This page links to the official Meta resources and explains how Meta's pricing relates to the flat Galantis credit model. ## Official Meta pricing Meta's official pricing model and conversation categories. Per-country / per-currency rates on Meta's invoice. Always cross-check your real Meta charges directly in Meta Business Manager — Meta updates pricing periodically and the rate card linked above is the authoritative source. ## Where to see Meta charges Meta WhatsApp messaging charges are visible in **Meta Business Manager / Business Suite billing** under the [WABA](/galantis/whatsapp/integrations/meta-whatsapp/connecting-waba) you have connected to Galantis. Meta charges never appear as Galantis line items. The Galantis Shopify invoice only covers the platform subscription, the Conversation tier, and add-ons — see [Invoices & line items](/galantis/whatsapp/billing/invoices-and-line-items). ## Meta charges vs. Galantis Conversations These are two separate things billed by two separate companies. They are easy to confuse, so here's the contrast: | | Meta charge | Galantis Conversation credit | | ----------------- | --------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | What it pays for | The WhatsApp message itself (delivery on Meta's infrastructure) | The Galantis platform (sending engine, scheduler, segments, analytics, automations) | | Who bills it | Meta, via Meta Business Manager | Galantis, via Shopify Billing | | How it varies | By destination country + template category | Flat: 1 delivered template = 1 credit | | When it's charged | On every billable WhatsApp messaging event under Meta's rules | When the template message reaches DELIVERED | ## How Galantis uses Meta pricing signals Galantis uses Meta's pricing signals only for **pre-send estimation** — to show you the expected Meta cost of a campaign before you press Send. The Galantis credit count itself stays flat: **1 delivered conversation = 1 credit**, regardless of country or category. That means: * Pre-send estimates can show two numbers — Galantis credits needed (flat) and estimated Meta cost (varies) * Your Galantis credit balance is unaffected by changes in Meta's rate card * A campaign to high-cost destinations spends the same number of Galantis credits as a campaign to low-cost destinations of the same size If Meta updates its rate card, your Meta invoice will reflect the new rates immediately. Your Galantis plan, tier, and credit balance are unaffected. *** How Galantis meters platform usage and what triggers a Conversation. How pre-send estimates work and where to track your balance. # Billing Overview Source: https://docs.digifist.com/galantis/whatsapp/billing/overview Plans and pricing for Galantis WhatsApp: Free Plan, four paid plans with a 7-day free trial, how Conversations work, and which add-ons you can stack on top. Galantis WhatsApp pricing has two parts that are always billed separately. **Meta bills WhatsApp messaging charges directly** in Meta Business Manager — you must keep a valid payment method there. **Galantis bills the platform** via your Shopify invoice: your plan, your Conversations tier (optional), and any add-ons. Conversations are a Galantis platform unit and never replace Meta's charges. What counts (DELIVERED-only), what does not, and why usage can vary by destination. Monthly Conversation tiers, the \$1 = 100 credits rate, and how upgrades work. Where to track usage and what happens when a campaign needs more Conversations than you have. *** ## Free Plan The Free Plan is permanent and requires no payment method. It is sized for evaluation and very small Shopify stores. **Included every month** * 20 Conversation credits * 1 automation flow * **1 campaign per month** * **Up to 100 contacts** * 50 inbox threads * Shopify sync, Meta Catalog, analytics **Not included:** [AI-assisted flow builder](/galantis/whatsapp/automations/flow-builder), included Inbox seat, Back-in-Stock add-on, dedicated onboarding partner manager. Ready for more than 1 campaign per month or more than 100 contacts? Pick a paid plan below — the first 7 days are free. *** ## Paid plans Every paid plan starts with a **7-day free trial**. No credit card or external payment method is needed — billing runs through Shopify, and the first charge appears on your Shopify invoice on day 8. Upgrading between paid plans later does not start a new trial. For stores starting with WhatsApp campaigns. * 50 Conversations / month * 1 automation flow * Unlimited campaigns + contacts * 50 inbox threads * 7-day free trial For stores running regular campaigns plus a few automations. * 250 Conversations / month * 5 automation flows * Unlimited campaigns + contacts * 50 inbox threads * 7-day free trial AI-assisted flow builder + an included Inbox seat. * 1,000 Conversations / month * 20 automation flows * AI-assisted flow builder * 1 Inbox seat (500 threads) * Unlimited campaigns + contacts * 7-day free trial Highest tier with dedicated onboarding support. * 2,000 Conversations / month * Unlimited automation flows * AI-assisted flow builder * 1 Inbox seat (500 threads) * Dedicated onboarding partner manager * Higher WhatsApp spend cap (negotiated) ### Feature comparison | | Free | Starter | Growth | Scale | Enterprise | | ------------------------- | :-------: | :-------: | :-------: | :----------: | :----------: | | Price / month | \$0 | \$39 | \$79 | \$179 | \$399 | | 7-day free trial | — | ✅ | ✅ | ✅ | ✅ | | Conversations / month | 20 | 50 | 250 | 1,000 | 2,000 | | Automation flows | 1 | 1 | 5 | 20 | Unlimited | | AI-assisted flow builder | — | — | — | ✅ | ✅ | | Campaigns | 1 / month | Unlimited | Unlimited | Unlimited | Unlimited | | Contacts | 100 max | Unlimited | Unlimited | Unlimited | Unlimited | | Inbox threads included | 50 | 50 | 50 | 500 (1 seat) | 500 (1 seat) | | Dedicated partner manager | — | — | — | — | ✅ | | Higher spend cap | — | — | — | — | Negotiated | All paid plans include Shopify sync, Meta Catalog, campaigns, analytics, and the Inbox module. Add-ons (extra Inbox seats, Back-in-Stock subscribers, larger Conversation tiers) are billed on top of the plan price. *** ## What Meta bills Meta charges for WhatsApp messaging based on **destination country** and **template category**. These charges are billed directly in **Meta Business Manager** billing. Meta's official pricing model and how conversation categories work. Per-country / per-currency rates that determine your Meta invoice. Galantis does not collect Meta WhatsApp messaging charges from you. Those charges never appear as Galantis line items on your Shopify invoice. ## What Galantis bills Galantis bills via Shopify Billing for: * **Core App plan** (Free / Starter / Growth / Scale / Enterprise) * **Conversation credits** — your plan allowance plus an optional monthly Conversation tier (\$1 = 100 credits, from \$5 to \$5,000) * **Add-ons** — additional Inbox seats, Back-in-Stock subscribers See invoice examples: [Invoices & line items](/galantis/whatsapp/billing/invoices-and-line-items) *** ## Getting started (billing-ready setup) Connect your Meta Business to Galantis. Your [WABA](/galantis/whatsapp/integrations/meta-whatsapp/connecting-waba) must be approved and usable for sending. Meta bills WhatsApp messaging charges directly. A valid Meta payment method is required for real sending. Start on the **Free Plan** (no payment needed) or pick a paid plan to begin a **7-day free trial**. Paid plans bill through Shopify on day 8 — no credit card setup needed in Galantis. Plans include a small Conversation allowance. For larger campaigns or recurring sends, add a Conversation tier (\$1 = 100 credits) to avoid send-time blocking. *** ## Conversations: the short definition A **Conversation** is a Galantis platform usage unit consumed when a WhatsApp template message is **DELIVERED** (campaigns + automation flows). * 1 Conversation = 1 delivered template message * Drafts, previews, and failed sends do not consume Conversations * Meta's per-country / per-category charges are separate and billed directly by Meta The Conversation credit rate is a flat **\$1 = 100 credits** when you add a monthly tier on top of your plan allowance. Full explanation: [What is a Conversation?](/galantis/whatsapp/billing/conversations) ## Monthly Conversation tiers Most merchants sending regular campaigns add a monthly Conversation tier on top of their plan allowance. * 68 tiers available, from \$5 (500 credits) to \$5,000 (500,000 credits) * Flat rate: \$1 = 100 credits, every tier * Billed monthly, no rollover * Upgrades persist until you manually downgrade Details and full tier list: [Tiers & upgrades](/galantis/whatsapp/billing/tiers-and-upgrades) ## Send-time estimation & instant upgrades Before you send a campaign, Galantis estimates the Conversations required based on: * estimated recipients * template category * destination mix (when available) If your remaining Conversations are insufficient, we prompt an upgrade immediately. After upgrading, you can continue sending. Final usage is reconciled on **DELIVERED** status. Details: [Usage & blocking](/galantis/whatsapp/billing/usage-and-blocking) *** ## Add-ons Extra agent seats (\$19/seat/month, 500 inbox threads each). Scale and Enterprise include 1 seat. Subscriber-based tiers from \$19 (250 subscribers) to \$149 (10,000 subscribers). ## Where to track usage You can track usage under **Billing → Usage** in the Galantis app: * Conversations remaining (this cycle) * Reset / renewal date * Breakdown by source (plan included / monthly tier) * Add-on usage (Inbox threads, Back-in-Stock subscribers) *** ## FAQ No. Meta bills WhatsApp messaging charges directly in Meta Business Manager. Your Shopify invoice from Galantis only covers your plan, Conversation tier, and add-ons. No. The 7-day free trial applies once, when you first move from Free Plan to a paid plan. Upgrading between paid plans (for example Starter → Growth) starts billing immediately and is prorated for the current cycle. No. Galantis bills through Shopify. As long as your Shopify store has a payment method on file, the 7-day trial is enabled automatically and the first charge appears on your Shopify invoice on day 8. No. Conversations reset each billing cycle. Unused Conversations do not roll over. No. Plan and tier upgrades persist until you manually downgrade in Billing. Go to **Billing → Usage** to see remaining Conversations, breakdown, and the reset date. *** The precise definition, examples, and edge cases. What appears on Meta vs Shopify invoices, with example line items. # Conversation Tiers & Upgrades Source: https://docs.digifist.com/galantis/whatsapp/billing/tiers-and-upgrades Galantis Conversation tiers — 68 monthly tiers from 5 to 5,000 dollars at a flat rate of 1 dollar per 100 credits, how upgrades work, and which tier to pick. Conversation tiers are an optional monthly add-on that increases your Conversation allowance beyond what your plan includes. The rate is flat: **\$1 = 100 credits**, every tier, no markup. Tiers do not roll over and upgrades persist until you manually downgrade. For most stores sending production campaigns, adding a monthly tier is recommended to avoid send-time blocking. The credit rate changed: tiers are now priced at **\$1 = 100 credits** (previously \$1 = 50). The 68 available tiers run in graduated increments from \$5 (500 credits) up to \$5,000 (500,000 credits). ## Where credits come from You spend credits in this order: Each plan includes a fixed monthly Conversation allowance — Free 20, Starter 50, Growth 250, Scale 1,000, Enterprise 2,000. Spent first. If you add a tier, those credits are spent after your plan allowance is depleted. If both are exhausted mid-campaign, Galantis blocks new sends and prompts an instant tier upgrade so you can continue. See [Billing overview](/galantis/whatsapp/billing/overview) for the full plan table. ## Tier list A short list of commonly chosen tiers to anchor your decision. All 68 tiers from \$5 to \$5,000 are selectable in the Billing dropdown — these are good reference points for picking the right size. | Price / month | Conversation credits / month | Roughly fits | | ------------: | ---------------------------: | ----------------------------------- | | \$5 | 500 | Pilot sends, low-volume stores | | \$10 | 1,000 | Small store, weekly campaigns | | \$20 | 2,000 | Small/medium store with automations | | \$40 | 4,000 | Medium store, regular campaigns | | \$100 | 10,000 | High-engagement store | | \$200 | 20,000 | Growth-stage store | | \$500 | 50,000 | High-volume store | | \$1,000 | 100,000 | Multi-brand or large catalog | | \$2,500 | 250,000 | Enterprise volume | | \$5,000 | 500,000 | Highest standard tier | Start with the tier that covers about 80% of your typical monthly volume. You can upgrade at send-time if a campaign needs more — and you can downgrade any month if you're routinely under-using. All 68 tiers — every step shown. Custom tiers above \$5,000 are available on request. | Price / month | Credits / month | | Price / month | Credits / month | | ------------: | --------------: | - | ------------: | --------------: | | \$5 | 500 | | \$1,075 | 107,500 | | \$10 | 1,000 | | \$1,150 | 115,000 | | \$20 | 2,000 | | \$1,200 | 120,000 | | \$40 | 4,000 | | \$1,300 | 130,000 | | \$60 | 6,000 | | \$1,400 | 140,000 | | \$80 | 8,000 | | \$1,500 | 150,000 | | \$100 | 10,000 | | \$1,600 | 160,000 | | \$125 | 12,500 | | \$1,700 | 170,000 | | \$150 | 15,000 | | \$1,800 | 180,000 | | \$175 | 17,500 | | \$1,900 | 190,000 | | \$200 | 20,000 | | \$2,000 | 200,000 | | \$250 | 25,000 | | \$2,100 | 210,000 | | \$300 | 30,000 | | \$2,200 | 220,000 | | \$350 | 35,000 | | \$2,300 | 230,000 | | \$400 | 40,000 | | \$2,400 | 240,000 | | \$450 | 45,000 | | \$2,500 | 250,000 | | \$500 | 50,000 | | \$2,600 | 260,000 | | \$550 | 55,000 | | \$2,700 | 270,000 | | \$600 | 60,000 | | \$2,800 | 280,000 | | \$650 | 65,000 | | \$2,900 | 290,000 | | \$700 | 70,000 | | \$3,000 | 300,000 | | \$750 | 75,000 | | \$3,200 | 320,000 | | \$800 | 80,000 | | \$3,500 | 350,000 | | \$850 | 85,000 | | \$3,800 | 380,000 | | \$900 | 90,000 | | \$4,000 | 400,000 | | \$950 | 95,000 | | \$4,500 | 450,000 | | \$1,000 | 100,000 | | \$5,000 | 500,000 | The full ladder includes every \$100 increment from \$1,200 through \$4,900 — only a representative selection is printed here for readability. Every step in the Galantis Billing dropdown follows the same flat \$1 = 100 credits rate. ## Upgrade and downgrade behavior Upgrades can happen at any time, including during campaign send-time. The new tier becomes your active tier immediately and remains active for all future billing cycles. The new credits become available right away so an in-progress campaign can finish. Upgrades do not auto-downgrade next month. If you want a lower tier next cycle, you must manually downgrade in **Billing → Tiers**. Downgrades are a manual action in Billing. We recommend making downgrades effective at the start of your next billing cycle to avoid proration edge cases and keep billing predictable. When a campaign requires more Conversations than your remaining balance, Galantis shows a blocking warning and lets you upgrade your tier immediately without leaving the send flow. Final usage is reconciled based on **DELIVERED** messages after the campaign completes. If you regularly send well over 500,000 Conversations per month, contact your account manager or [support](/galantis/whatsapp/support) to discuss a custom tier or Enterprise volume agreement. *** How to track Conversations and what happens when a campaign is blocked. How tiers appear on your Shopify invoice. # Usage & Campaign Blocking Source: https://docs.digifist.com/galantis/whatsapp/billing/usage-and-blocking How to track Conversations, when usage resets, how pre-send estimates work, Free Plan limits, and what happens when you don't have enough Conversations. Conversations reset each billing cycle with no rollover. You can track your remaining balance, reset date, and breakdown at any time under **Billing → Usage**. When a campaign needs more Conversations than your balance allows, sending is blocked until you upgrade your tier — or, on the Free Plan, until your next monthly reset. ## Where to track usage In **Billing → Usage**, you can view: * Conversations remaining (this cycle) * Reset / renewal date * Breakdown (plan included / monthly tier) * Add-on usage (Inbox threads, Back-in-Stock subscribers) * Plan-specific limits (Free Plan: campaigns this month, contact count) ## Monthly reset Conversations reset each billing cycle. Unused Conversations do not carry forward. No rollover keeps billing predictable and aligned with your monthly tier selection. If you regularly under-use your tier, consider downgrading at the next cycle. ## Pre-send estimation Before a campaign sends, Galantis estimates how many Conversations are needed based on: * Estimated recipients in the selected segment * Template category * Destination mix (when available) Segment size and template category drive the estimate shown before sending. Galantis shows the estimated Conversations required so you can confirm your balance is sufficient. If your balance is insufficient, upgrade your monthly tier without leaving the send flow. Final Conversations consumed are based on actual DELIVERED messages, not the pre-send estimate. ## What happens when you run out of Conversations Campaign sending is blocked when your remaining Conversation balance is insufficient. You are prompted to upgrade your monthly tier — sending continues immediately after the upgrade is confirmed. Automation flows are paused or queued when insufficient Conversations are available. This prevents partial sends and keeps usage traceable. Flows resume automatically as soon as more credits become available (new cycle, manual top-up, or tier upgrade). Free Plan accounts get 20 Conversation credits per month and **1 campaign per month**. Once either limit is reached, sending is blocked for the rest of the cycle. To send more, upgrade to a paid plan (7-day trial included) or wait for the next reset. ## Spend cap and safety limits Accounts have a default safety cap to reduce accidental runaway sends. * Warning at **80%** of balance * Warning at **90%** of balance * Sending blocked at **100%** until upgraded, topped up, or the cap is adjusted Enterprise accounts receive a higher default spend cap, negotiated per account during onboarding. Contact your account manager to adjust the cap if your sending volume regularly approaches the default. ## Free Plan limits The Free Plan applies extra caps beyond the Conversation balance: | Limit | Free Plan | Paid plans | | -------------------------- | --------- | -------------------- | | Campaigns per month | 1 | Unlimited | | Contacts (audience) | 100 max | Unlimited | | Conversations per month | 20 | 50 – 2,000 (by plan) | | Add a Conversation tier | — | ✅ | | Add-ons (Inbox seats, BIS) | — | ✅ | Reaching the campaigns or contacts cap blocks the corresponding action (creating a campaign, importing contacts) until you upgrade to a paid plan. See [Billing overview](/galantis/whatsapp/billing/overview) for the full plan table. *** How monthly Conversation tiers work and how to upgrade. The precise definition of a Conversation and what triggers usage. # Audience Targeting Source: https://docs.digifist.com/galantis/whatsapp/campaigns/audience-targeting Build campaign audiences using Customer Lists and Segments, with include/exclude rules and real-time reach estimation. Campaigns in Galantis use a flexible audience composition model — you select one or more Customer Lists and Segments, set each as include or exclude, and Galantis calculates the deduplicated audience count before you send. Only customers with `SUBSCRIBED` marketing consent are included in the final send, regardless of list or segment membership. ## What this covers * How audience selection works * Including and excluding lists and segments * Estimating reach before sending * How deduplication and consent filtering are applied ## How audience targeting works Campaigns use a flexible audience composition model for audience composition. You build your target audience by combining any number of Customer Lists and Customer Segments: * **Include** — customers in this list or segment are added to the potential audience * **Exclude** — customers in this list or segment are removed from the potential audience, even if they appear in an included list or segment Exclusions always take precedence over inclusions. A customer who appears in both an included segment and an excluded list will be excluded from the send. ## Selecting your audience In **Campaigns → New Campaign** (or an existing draft), navigate to the audience configuration step. Select one or more Customer Lists or Customer Segments and mark them as **Include**. You can mix lists and segments in the same campaign. Select any lists or segments you want to remove from the audience and mark them as **Exclude**. Common exclusions include recent purchasers, recently messaged customers, or customers already in an active automation sequence. Click **Estimate Reach** to preview the deduplicated, consent-filtered audience count before sending. ## Reach estimation The reach estimate reflects: * All customers from included lists and segments * Minus customers removed by exclusion rules * Minus duplicate customers who appear in multiple included sources * Minus customers whose `marketing_state` is not `SUBSCRIBED` The estimate is a preview only — the final audience is recalculated at send time to account for any changes in segment membership or consent status that occur between estimation and dispatch. Reach estimates can differ from final send counts when segment membership changes between estimation and send time — for example, customers who unsubscribed or whose data changed in a way that affects segment rules. ## Example targeting logic ``` INCLUDE: Segment "High LTV Mexico" INCLUDE: List "VIP Customers" EXCLUDE: Segment "Purchased in last 7 days" ``` In this example, the audience includes all customers in the High LTV Mexico segment and the VIP Customers list — but removes any who purchased within the last 7 days, regardless of which included source they came from. ## Consent filtering Regardless of targeting configuration, the final send audience is filtered to include only customers with `marketing_state = SUBSCRIBED`. Customers with any other consent state — `NOT_SUBSCRIBED`, `UNSUBSCRIBED`, `PENDING`, `UNKNOWN`, `INVALID`, or `REDACTED` — are automatically excluded from delivery. This filtering runs at send time, not at estimation time. A reach estimate may include customers who are later excluded at send if their consent state changes between the two steps. ## Credit requirements Galantis validates that your credit balance is sufficient to cover the estimated audience size before allowing a campaign to launch. If credits are insufficient, the campaign will be blocked at the pre-launch compliance check. See [Compliance Checks](./compliance-checks) for the full pre-launch validation list, and [Billing Overview](/whatsapp/billing/overview) for credit management. ## Best practices * **Always add a recent-purchaser exclusion.** Customers who just bought are less likely to need a promotional message and more likely to find it irrelevant. A segment rule of `Days since last order < 7` is a low-effort exclusion that protects engagement rates. * **Use Estimate Reach before every send.** A quick check prevents surprises — especially if you have added or removed customers from lists recently or updated segment rules. * **Layer lists and segments thoughtfully.** Include/exclude logic can become difficult to audit when many layers are combined. Document your targeting rationale, especially for recurring campaign audiences. * **Keep exclusion lists current.** A "Do Not Contact" or suppression list is only effective if it is maintained. Review and update exclusion lists regularly. ## Related guides * [Audience — Lists](/whatsapp/audience/lists) — Creating and managing static Customer Lists * [Audience — Segments](/whatsapp/audience/segments) — Dynamic rule-based segment configuration * [Compliance Checks](./compliance-checks) — Pre-launch checks including consent validation and credit balance * [Personalization](./personalization) — Using customer data in message content # Campaign Analytics Source: https://docs.digifist.com/galantis/whatsapp/campaigns/campaign-analytics Track sent, delivered, read, and failed message counts for every campaign in Galantis. Campaign analytics give you a clear picture of how each broadcast performed — from the number of messages dispatched to how many were opened by recipients. Every metric is tracked at the individual message level through the WhatsApp API and aggregated per campaign, giving you accurate delivery data without estimation. ## What this covers * The four core delivery metrics and what each measures * How campaign status reflects delivery progress * How to interpret results and identify issues ## Core metrics Each campaign tracks four delivery metrics drawn from the WhatsApp Cloud API's message status callbacks: **Sent** is the count of messages successfully dispatched from Galantis to the WhatsApp API. A message reaching `SENT` status means it left Galantis and was accepted by Meta's infrastructure. It does not confirm the message reached the customer's device. If the sent count is lower than your estimated audience size, the gap typically reflects: * Customers whose consent status changed to non-`SUBSCRIBED` between estimation and send time * Messages that failed the API submission step — review `FAILED` count for details **Delivered** is the count of messages confirmed as received by the customer's device. A delivered message has reached the recipient's WhatsApp client. The customer may not have opened it yet. A significant gap between sent and delivered counts can indicate: * Recipients with inactive WhatsApp accounts or phone numbers * Temporary device or connectivity issues on the recipient's end * Phone numbers that are no longer registered on WhatsApp A consistently low delivery rate relative to sent count across multiple campaigns is worth investigating — it may point to list quality issues. **Read** is the count of messages opened by the recipient. WhatsApp sends a read receipt when the customer opens the message, which Galantis records as a status update. Read rate (read ÷ delivered) is your primary engagement metric. It reflects how compelling your message subject and sender context is — customers decide whether to open based on the message preview visible in their WhatsApp notification. Some customers disable read receipts in their WhatsApp privacy settings. For these recipients, a message that was opened will not generate a read status update. Actual open rates are likely higher than the read count reflects. **Failed** is the count of messages that could not be delivered. The error reason is tracked per message and is visible in the campaign detail view. Common failure reasons: | Error | Cause | | ---------------------------------- | ---------------------------------------------------------- | | `CUSTOMER_IS_NOT_OPTED_IN` | Customer's consent state changed after audience estimation | | `CUSTOMER_IS_MISSING_CALLING_CODE` | Phone number is missing the country calling code | | `INSUFFICIENT_CREDITS` | Credit balance ran out during dispatch | A high failure count warrants immediate review. Widespread `CUSTOMER_IS_NOT_OPTED_IN` failures suggest a list quality issue. `CUSTOMER_IS_MISSING_CALLING_CODE` failures indicate a data quality problem in your customer records. `INSUFFICIENT_CREDITS` failures mean the campaign ran out of credits partway through dispatch. ## How metrics are tracked Delivery status updates are received from Meta via webhook. Each time a message status changes — from `sent` to `delivered`, or `delivered` to `read`, or to `failed` — Galantis updates the `Message` model record for that specific message. Galantis monitors delivery status during and after dispatch to tally counts and update the campaign-level status. When all messages have a terminal status, the campaign moves to `SENT`, `PARTIALLY_SENT`, or `FAILED`. ## Reading campaign results Navigate to **Campaigns → \[Campaign Name]** to view the full analytics breakdown. Results are available as soon as dispatch begins — metrics update in real time as status webhooks arrive from Meta. Use the per-message error view to drill into `FAILED` messages and identify the specific error reason per recipient. ## Interpreting performance | Signal | Likely meaning | | ------------------------------- | ------------------------------------------------------------------ | | High sent, low delivered | List contains inactive or invalid numbers | | High delivered, low read | Message content or timing needs improvement | | High read, low click-through | CTA button or offer relevance needs review | | High failed with consent errors | List quality issue — review audience data sources | | High failed with credit errors | Insufficient credits — review billing balance before next campaign | ## Best practices * **Review failed messages after every campaign.** Even a small failure rate contains actionable signal — error types tell you whether the issue is data quality, consent, or billing. * **Track read rate over time, not just per campaign.** A single campaign's read rate is affected by timing, audience, and content simultaneously. Trends across campaigns are more meaningful than individual results. * **Compare delivered-to-read rate across campaign types.** Promotional and informational campaigns often have different baseline read rates. Comparing like-for-like gives more useful benchmarks. * **Act on `CUSTOMER_IS_MISSING_CALLING_CODE` failures.** These indicate phone number records that will always fail until corrected. Update affected contact records in Shopify so they sync correctly into Galantis. ## Related guides * [Scheduling & Throttling](./scheduling-throttling) — How batch dispatch affects when metrics appear * [Compliance Checks](./compliance-checks) — Pre-launch validations that reduce failure rates * [Audience Targeting](./audience-targeting) — List and segment quality practices that improve deliverability * [Quality & Deliverability](/whatsapp/compliance/quality-deliverability) — How delivery performance affects your phone number rating # Campaign Types Source: https://docs.digifist.com/galantis/whatsapp/campaigns/campaign-types The three campaign types in Galantis — Promotional, Informational, and Catalog — and when to use each. Galantis supports three campaign types. The type of a campaign is determined by the template you select — specifically, the template's Meta-approved category (`MARKETING` or `UTILITY`) and its message format (standard, single product, multi-product, or whole catalog). Choosing the right type for the right use case keeps your messaging compliant and protects your phone number's quality rating. ## What this covers * The three campaign types and their intended use cases * How campaign type is determined * Why matching type to content matters for compliance ## Campaign types **Promotional campaigns** use templates in the `MARKETING` category. They are designed for messages that offer value, drive action, or announce something to the customer. **Common use cases:** * Discount offers and sale announcements * New product launches * Seasonal or event-based promotions * Re-engagement messages for lapsed customers * Flash sales with time-limited offers Promotional campaigns typically have the highest engagement potential — customers who have opted in are often receptive to well-timed, relevant offers. They also carry the highest per-message cost on **Meta's pricing model**, which varies by country. Galantis Conversation credits are flat (1 per delivered message regardless of category), so this cost difference only appears on your Meta invoice, not on the Galantis (Shopify) invoice. Promotional content must be submitted under the `MARKETING` template category. Using a `UTILITY` template to send promotional content is a Meta policy violation and a common cause of template rejection or phone number quality downgrade. **Informational campaigns** use templates in the `UTILITY` category. They are appropriate for non-promotional communications where the customer benefits from the information regardless of a purchase decision. **Common use cases:** * Store announcements (new hours, policy changes, temporary closures) * [Back-in-stock](/galantis/whatsapp/back-in-stock/index) announcements sent as a broadcast rather than an automation * Program or membership updates * Non-promotional product education content Utility templates carry lower per-message pricing on **Meta's rate card** in most markets and tend to have lower block rates because customers generally expect and welcome transactional or informational messages. Galantis Conversation credits remain flat at 1 per delivered message — the Meta saving applies to your Meta invoice only. Keep Utility templates genuinely informational. Embedding promotional CTAs, discount codes, or offer language in a Utility template will trigger rejection during Meta review or a quality flag after it is live. **Catalog campaigns** use product-specific message formats — Single Product Message (SPM), Multi-Product Message (MPM), or Whole Catalog — to showcase products directly inside WhatsApp. These formats require a synced Meta Catalog. **Common use cases:** * Featured product showcases * Collection-based promotional sends * Cross-sell or upsell messages referencing specific products * Full catalog browse prompts for high-intent audiences Catalog campaigns combine `MARKETING` category compliance with interactive product UI — customers can view product details, variants, and pricing without leaving WhatsApp. See [Message Composition](./message-composition) for the full breakdown of catalog message formats and their structural requirements. ## How campaign type is determined Campaign type is not a setting you select explicitly. It is derived automatically from the template you assign to the campaign: | Template category | Template format | Resulting campaign type | | ----------------- | ------------------------------------------------------------------ | ----------------------- | | `MARKETING` | Standard (text, image, video) | Promotional | | `UTILITY` | Standard | Informational | | `MARKETING` | `SINGLE_PRODUCT_MESSAGE`, `MULTI_PRODUCT_MESSAGE`, `WHOLE_CATALOG` | Catalog | ## Why type accuracy matters Meta enforces category compliance at the template level — both during the approval review and after a template is live through quality monitoring. Mismatched category and content is one of the most common causes of template rejection. Beyond rejection, sending promotional content through Utility templates to benefit from lower pricing is a policy violation that can result in your template being paused and your phone number receiving a quality downgrade. We recommend reviewing the [Quality & Deliverability](/whatsapp/compliance/quality-deliverability) guide before configuring your first campaign template category. ## Related guides * [Message Composition](./message-composition) — Catalog and rich message format details * [Compliance Checks](./compliance-checks) — Pre-launch validations including template category verification * [Templates — Categories](/whatsapp/templates/template-categories) — Marketing vs Utility category rules # Compliance Checks Source: https://docs.digifist.com/galantis/whatsapp/campaigns/compliance-checks The pre-launch validations Galantis runs before any campaign can be sent. Before a campaign can be launched — whether immediately or on a schedule — Galantis runs a set of pre-launch compliance checks. These validations exist to prevent policy violations, protect your phone number's quality rating, and ensure the campaign has everything it needs to deliver successfully. A campaign that fails any check cannot be sent until the issue is resolved. ## What this covers * The four pre-launch checks and what each validates * What a failed check means and how to resolve it * The relationship between compliance checks and campaign status ## Pre-launch checks **What is checked:** The template assigned to the campaign must have `APPROVED` status in Meta's template system. **Why it matters:** WhatsApp does not accept messages using templates in `DRAFT`, `PENDING_APPROVAL`, or `REJECTED` status. A campaign using an unapproved template would fail at the API level for every recipient. **How to resolve:** If your template is `PENDING_APPROVAL`, wait for Meta to complete the review — approval typically takes minutes to a few hours. If the template is `REJECTED`, review the rejection reason in **Templates → \[Template Name] → Status**, fix the issue, and resubmit. Do not launch the campaign until the template reaches `APPROVED` status. Template approval status is checked at launch time, not at the time the template is selected during campaign configuration. A template that was approved when you built the campaign may have since been paused by Meta — always confirm status before sending. **What is checked:** The final audience — after applying include/exclude rules and deduplication — must contain only customers with `marketing_state = SUBSCRIBED`. **Why it matters:** Sending to non-opted-in customers violates WhatsApp's Business Policy and can trigger quality degradation on your phone number. Galantis enforces this automatically by filtering the audience at send time, but the check confirms the audience is not entirely empty after filtering. **How to resolve:** If the check fails because no `SUBSCRIBED` customers remain after filtering, review your audience selection. The most likely causes are: your selected lists or segments contain no opted-in customers, or all opted-in customers are removed by an exclusion rule. Adjust your targeting and re-estimate reach before attempting to launch again. See [Opt-in & Consent](/whatsapp/compliance/opt-in-consent) for how consent states are assigned and managed. **What is checked:** The selected template's category must accurately reflect the message content and intended purpose. **Why it matters:** Meta monitors category compliance both during template approval and after templates are live. Using a `UTILITY` template to send `MARKETING` content is a policy violation — it misrepresents the message purpose to both Meta and the recipient. **How to resolve:** If your message content is promotional in nature (offers, discounts, product launches), ensure the template uses the `MARKETING` category. If the template's category does not match your intended use, you will need to create a new template with the correct category and obtain approval before launching. See [Campaign Types](./campaign-types) for how template category maps to campaign type, and [Templates — Categories](/whatsapp/templates/template-categories) for category definitions. **What is checked:** Your current credit balance must be sufficient to cover the estimated send volume for the campaign. **Why it matters:** Credits are consumed per message sent. If your balance runs out partway through a campaign dispatch, remaining messages will fail with an `INSUFFICIENT_CREDITS` error. The pre-launch check catches this before dispatch begins to prevent partial sends. **How to resolve:** If your balance is insufficient, top up credits or upgrade your plan before launching. The credit requirement is calculated from the estimated audience size — a larger audience requires more credits. Review your estimated reach in **Campaigns → \[Campaign] → Audience** and compare it against your current balance in **Billing → Overview**. See [Billing Overview](/whatsapp/billing/overview) for credit management, and [Billing — Conversations](/whatsapp/billing/conversations) for how per-message costs are calculated. ## Check summary | Check | Blocks launch if... | | ----------------- | ------------------------------------------------------- | | Template status | Template is not `APPROVED` | | Audience consent | No `SUBSCRIBED` customers remain after filtering | | Template category | Category does not match message content purpose | | Credit balance | Balance is insufficient for the estimated audience size | ## When checks run Pre-launch checks run at the moment you click **Send** or confirm a scheduled campaign. They are not run during campaign configuration — you can build and save a campaign in `DRAFT` status regardless of template approval state or credit balance. The checks gate the transition from `DRAFT` to `PENDING` or `SCHEDULED`. For scheduled campaigns, checks run at the time of scheduling, not at the scheduled send time. This means a campaign that passes checks at scheduling time could encounter an issue by the time it actually sends — for example, if a template is paused by Meta or credits are depleted between scheduling and dispatch. For scheduled campaigns, we recommend reviewing template status and credit balance shortly before the scheduled send time to catch any issues that arose after scheduling. ## Related guides * [Templates — Approval Lifecycle](/whatsapp/templates/approval-lifecycle) — Template status states and the review process * [Audience Targeting](./audience-targeting) — Building consent-compliant audiences * [Campaign Types](./campaign-types) — Matching template category to message purpose * [Billing Overview](/whatsapp/billing/overview) — Managing and monitoring your credit balance # Campaigns Source: https://docs.digifist.com/galantis/whatsapp/campaigns/index One-time WhatsApp broadcasts sent to segmented audiences — with flexible targeting, scheduling, and real-time delivery analytics. Campaigns are one-time WhatsApp broadcasts sent to a targeted audience. They are the primary tool for reaching customers at scale — product launches, promotional offers, seasonal announcements, and catalog-driven messages all run through campaigns. Every campaign requires a pre-approved WhatsApp template. The message is sent to all qualifying recipients in the selected audience simultaneously, with delivery tracked per message through the WhatsApp API. ## How campaigns work A campaign moves through a defined lifecycle from configuration to send: 1. **Select a template** — choose an approved template and map its variables to customer or order data 2. **Build your audience** — select lists and segments to include or exclude; preview reach before sending 3. **Schedule or send** — dispatch immediately or set a future date and time 4. **Monitor results** — track sent, delivered, read, and failed counts per campaign Only customers with `SUBSCRIBED` marketing consent are included in the final send. Audience filtering, compliance checks, and credit validation all run automatically before any message is dispatched. ## Guides in this section Promotional, informational, and catalog campaign formats. Lists, segments, include/exclude rules, and reach estimation. Rich Cards, Single and Multi-Product Messages, and Whole Catalog format. Immediate send, scheduled delivery, and WhatsApp throughput limits. Dynamic variable mapping for customer, order, and product data. Sent, delivered, read, and failed metrics per campaign. Pre-launch validations Galantis runs before any campaign can send. ## Before sending your first campaign Two prerequisites must be in place before a campaign can be launched: * At least one template with `APPROVED` status — see [Templates](/whatsapp/templates/index) for how to create and submit templates for Meta review * At least one Customer List or Segment containing `SUBSCRIBED` customers — see [Audience](/whatsapp/audience/index) If you are setting up campaigns for the first time, the [First Campaign](/whatsapp/getting-started/first-campaign) guide in Getting Started walks through the full end-to-end process. # Message Composition Source: https://docs.digifist.com/galantis/whatsapp/campaigns/message-composition Campaign message formats in Galantis — from standard rich cards to single and multi-product messages and whole catalog browsing. The message format of a campaign is determined by the template you select. Galantis supports five distinct formats — from simple promotional cards to interactive product carousels and full catalog browsing. Each format serves a different purpose and has different structural requirements, some of which depend on a synced Meta Catalog. ## What this covers * All five campaign message formats and their use cases * Structural components of each format * Which formats require a Meta Catalog * Guidance on choosing the right format ## Message formats **Single Rich Card** (`SINGLE_RICH_CARD`) is a promotional message format combining a header, body text, footer, and up to three action buttons into a single visual card. **Structure:** * `HEADER` — Text with optional variable * `BODY` — Rich text with dynamic variables * `FOOTER` — Static short text (e.g., "Reply STOP to unsubscribe") * `BUTTONS` — Up to 3 buttons: Quick Reply, URL, Phone Number, or Copy Code **Best for:** Single-focus promotional messages where one clear CTA drives the customer toward a product page, discount redemption, or direct response. **Meta Catalog required:** No Single Rich Cards work well for time-limited offers. Use a `COPY_CODE` button for discount codes and a `URL` button linking directly to the product or collection page. **Multi Rich Card** (`MULTI_RICH_CARD`) presents multiple cards in a horizontally swipeable carousel. Each card in the carousel has its own image, body text, and buttons. **Structure:** * `BODY` — Carousel-level introductory text * `CAROUSEL` — Multiple individual cards, each with image, body, and buttons **Best for:** Showcasing several products, collections, or offer options in a single message where the customer can swipe through and choose what interests them. More engaging than sending multiple separate messages. **Meta Catalog required:** No — card content is defined at the template level, not pulled from a live catalog sync. Carousel card content is fixed in the template at creation time. If product details or offers change frequently, a catalog-based format (SPM or MPM) may be easier to maintain since it pulls live product data. **Single Product Message** (`SINGLE_PRODUCT_MESSAGE`, SPM) showcases one specific product from your synced catalog, including variants, pricing, and a buy button that opens the product in WhatsApp's native commerce UI. **Structure:** * `HEADER` — Product pulled from catalog (`PRODUCT` header type) * `BODY` — Supporting text with dynamic variables * `FOOTER` — Static text * `BUTTONS` — Action buttons * `PRODUCT_SECTIONS` — Product and variant selection data from catalog **Best for:** Targeted product promotions where a specific item is the focus — such as a best-seller highlight, a back-in-stock broadcast, or a personalized recommendation based on purchase history. **Meta Catalog required:** Yes — the product displayed is pulled from your synced Meta Catalog. The catalog must be connected and the product must have `SYNCED` status before this format can be used. **Multi-Product Message** (`MULTI_PRODUCT_MESSAGE`, MPM) displays up to 30 products from your synced catalog in a scrollable list, allowing customers to browse and select from multiple items in a single message. **Structure:** * `HEADER` — Text with optional variable * `BODY` — Introductory message text * `FOOTER` — Static text * `BUTTONS` — Action buttons * `PRODUCT_SECTIONS` — Multiple product entries from catalog, organized into sections **Best for:** Collection-based campaigns, curated product selections, or "shop the look" style sends where the goal is to drive browsing rather than focus on a single item. **Meta Catalog required:** Yes — products are pulled from your synced Meta Catalog. All products included must have `SYNCED` status. **Whole Catalog** (`WHOLE_CATALOG`) sends a message with a catalog browse button that opens your entire WhatsApp catalog, allowing customers to browse all available products without the merchant pre-selecting items. **Structure:** * `BODY` — Introductory message text * `FOOTER` — Static text * `CATALOG` button — Opens the full catalog browser in WhatsApp **Best for:** High-intent audiences who are likely to browse broadly — such as a segment of frequent purchasers, customers who have visited your store multiple times, or a VIP list. Also useful for stores with large catalogs where pre-selecting products for MPM is impractical. **Meta Catalog required:** Yes — the entire catalog must be synced and connected to Meta. ## Format selection guide | Format | Catalog required | Products shown | Best use case | | ---------------- | ---------------- | --------------------- | ------------------------------------- | | Single Rich Card | No | 0 (image only) | Single-focus promotion or offer | | Multi Rich Card | No | Up to \~10 (carousel) | Multi-product showcase, fixed content | | SPM | Yes | 1 specific product | Targeted product promotion | | MPM | Yes | Up to 30 products | Collection or curated product send | | Whole Catalog | Yes | Full catalog | Browse-driven, high-intent audiences | ## Meta Catalog requirements SPM, MPM, and Whole Catalog formats all require: 1. A Meta Catalog connected to your Galantis workspace — see [Catalog — Meta Catalog](/whatsapp/catalog/meta-catalog) 2. Products with `SYNCED` status in your catalog — see [Catalog — Health](/whatsapp/catalog/catalog-health) If a product referenced in an SPM or MPM template has not been successfully synced to Meta, that template cannot be used in a campaign until the sync issue is resolved. ## Related guides * [Campaign Types](./campaign-types) — How message format determines campaign type * [Personalization](./personalization) — Populating dynamic variables in message body and header * [Catalog](/whatsapp/catalog/index) — Full catalog sync and Meta connection reference * [Templates — Formats](/whatsapp/templates/template-formats) — Template structure components in detail # Personalization Source: https://docs.digifist.com/galantis/whatsapp/campaigns/personalization Map dynamic variables in campaign templates to customer, order, and product data for personalized message delivery. Campaign messages support dynamic content through template variable mapping. Variables defined in a template at creation time — such as `{{1}}` or `{{2}}` — are mapped to real customer or order data fields when a campaign is configured. At send time, Galantis populates each variable with the recipient's actual data before dispatching the message to the WhatsApp API. Personalized messages perform better than generic broadcasts. Addressing a customer by name, referencing their last order, or surfacing a product they viewed increases relevance and reduces the likelihood of a block or report. ## What this covers * How template variables are defined and mapped * Available data sources for variable values * How to configure variable mapping in a campaign * Fallback behavior when data is missing ## How variable mapping works Template variables are positional placeholders — `{{1}}`, `{{2}}`, `{{3}}` — defined in the template body and optionally in the header. When you select a template for a campaign, Galantis presents each variable placeholder and lets you assign it a dynamic value from your customer or order data. The mapping is stored as a `template_variables_mapping` configuration on the campaign: ```json theme={null} [ { "initialValue": "{{1}}", "selectedValue": "customer.first_name" }, { "initialValue": "{{2}}", "selectedValue": "order.total_price" } ] ``` At send time, each placeholder is replaced with the corresponding value from the recipient's Shopify profile. ## Available variable values The following customer fields are available as variable values: | Field | Value | | --------------------- | ------------------------ | | `customer.first_name` | Customer's first name | | `customer.last_name` | Customer's last name | | `customer.email` | Customer's email address | | `customer.phone` | Customer's phone number | `customer.first_name` is the most commonly used variable — opening a message with the customer's name meaningfully increases engagement compared to a generic greeting. Order data variables reference the customer's most recent order unless otherwise specified. | Field | Value | | -------------------- | -------------------------------------- | | `order.order_number` | Shopify order number | | `order.total_price` | Order total | | `order.product_name` | Name of the first product in the order | Order data variables are most useful in post-purchase campaign contexts — for example, a cross-sell campaign that references the customer's recent purchase. Order data variables reference Shopify order records synced into Galantis. If a customer has no order history, these variables may be empty. Configure a static fallback value where appropriate. **Store name**: The name of your Shopify store — useful for brand reinforcement in the message body. **Custom static text**: A fixed string you type directly into the variable mapping. Use this for: * Discount codes that apply to all recipients (`SUMMER20`) * Static URLs for landing pages or collection links * Fixed product names or offer descriptions for campaigns where the content does not vary per recipient Static text is the right choice when a variable slot needs a value but no dynamic customer or order data is appropriate for that position. For catalog-based message formats (SPM and MPM), product data is pulled directly from your synced Meta Catalog rather than from template variable mapping. Product name, price, image, and variant data are populated automatically from the catalog record. Standard template body variables (`{{1}}`, `{{2}}`) can still be used alongside catalog product data — for example, a variable greeting in the body text while the product card is populated from the catalog. See [Message Composition](./message-composition) for how catalog product data works in SPM and MPM formats. ## Configuring variable mapping in a campaign In the campaign builder, choose an approved template. Galantis detects the variable placeholders defined in that template. For each placeholder (`{{1}}`, `{{2}}`, etc.), select a value from the available data fields or enter custom static text. Review the mapping before proceeding. Confirm that each variable is assigned a value that makes sense in the context of the message body. ## Best practices * **Always map `{{1}}` to `customer.first_name` when the template opens with a greeting.** This is the single highest-impact personalization variable and requires no extra configuration. * **Use static text for offer codes.** Discount codes are the same for all recipients — map them as static text rather than leaving the variable unmapped. * **Avoid mapping email or phone to visible message body variables.** Customers generally do not expect to see their own contact details reflected back to them in a promotional message. * **Review mappings when reusing templates across campaigns.** A variable mapping that worked for a post-purchase send (using `order.total_price`) will not make sense in a re-engagement campaign where many recipients have no recent order. ## Related guides * [Message Composition](./message-composition) — Template formats and their variable support * [Templates — Variables & Localization](/whatsapp/templates/variables-localization) — How variables are defined in templates * [Audience Targeting](./audience-targeting) — Combining personalization with precise audience selection # Scheduling & Throttling Source: https://docs.digifist.com/galantis/whatsapp/campaigns/scheduling-throttling Send campaigns immediately or schedule them for a future time — and understand how WhatsApp throughput limits affect delivery. Galantis gives you two delivery options for every campaign: send immediately upon launch, or schedule for a specific date and time. Once dispatched, messages are processed in batches subject to WhatsApp's per-phone-number throughput limits. Understanding how throttling works helps you set accurate delivery expectations and plan sends around time-sensitive campaigns. ## What this covers * Immediate send vs scheduled delivery * How batch dispatch works * WhatsApp throughput limits and what they mean for large audiences * Campaign status during and after dispatch ## Send options Selecting **Send now** queues the campaign for dispatch as soon as you confirm the launch. The campaign moves to `PENDING` status and message dispatch begins immediately. Use immediate send for: * Time-sensitive offers where delay would reduce relevance (flash sales, limited stock alerts) * Campaigns where audience timing is not critical * Test sends to small audiences during setup Even with immediate send, large audiences are processed in batches. The campaign will not appear as `SENT` until all messages have been dispatched — this can take time depending on audience size and throughput limits. Selecting **Schedule** sets a `scheduled_date_start` — a future date and time when the campaign will begin dispatch. The campaign moves to `SCHEDULED` status and sits in the queue until that time, at which point it is processed identically to an immediate send. Use scheduled send for: * Timezone-aware sends where you want messages to arrive during a specific window (e.g., morning local time in LATAM markets) * Coordinated launches tied to a product release or event date * Pre-prepared campaigns that should go out at a predictable time Consider your audience's timezone when scheduling. WhatsApp messages are delivered immediately — a campaign scheduled for 9:00 AM in your timezone may arrive at 3:00 AM for customers in a different region. Segment by country and schedule separate campaigns per timezone for large international audiences. ## How batch dispatch works When a campaign begins sending, Galantis processes recipients in batches rather than all at once. Each batch is dispatched sequentially through the WhatsApp Cloud API. This approach: * Prevents API rate limit violations on large audiences * Allows delivery status to be tracked per message as batches complete * Supports partial success states where some messages succeed and others fail ## WhatsApp throughput limits WhatsApp enforces per-phone-number message throughput limits that cap how many messages can be sent per unit of time. These limits are set by Meta and vary based on your phone number's quality tier and business verification status. The practical effect is that campaigns to large audiences take longer to complete than campaigns to small ones. Throughput limits are not configurable within Galantis — they are enforced at the API level by Meta. If your phone number has a reduced quality rating, throughput limits may be lower than standard. This is one of several reasons why maintaining a good quality rating directly affects campaign performance. See [Quality & Deliverability](/whatsapp/compliance/quality-deliverability) for how quality ratings are managed. ## Campaign status reference | Status | Description | | ---------------- | ------------------------------------------------------------------ | | `DRAFT` | Campaign is being configured — not queued or sent | | `PENDING` | Queued for immediate dispatch — processing has begun | | `SCHEDULED` | Queued for a future send time — waiting for `scheduled_date_start` | | `SENT` | All messages dispatched successfully | | `PARTIALLY_SENT` | Some messages succeeded, some failed — review per-message errors | | `FAILED` | All messages failed — check error details and retry | Galantis monitors dispatch progress continuously, tallying successful and failed message counts and updating the campaign status. When dispatch completes, a notification is triggered based on the outcome. ## Best practices * **Schedule large campaigns outside peak hours.** Throughput limits mean large sends take time to complete. Scheduling during off-peak periods ensures delivery completes before the start of your store's busy period. * **Check credit balance before scheduling.** Credits are validated at launch, not at scheduling time. If your balance drops below the required amount between scheduling and send time, the campaign will be blocked. See [Compliance Checks](./compliance-checks). * **Do not schedule too far in advance for time-sensitive offers.** Segment membership and consent status are recalculated at send time. A segment that looks right today may include or exclude different customers by the scheduled send date. * **Monitor `PARTIALLY_SENT` campaigns.** A partial send means some customers did not receive the message. Review the failed message details and determine whether a follow-up send to the failed recipients is appropriate. ## Related guides * [Campaign Analytics](./campaign-analytics) — Tracking delivery outcomes after dispatch * [Compliance Checks](./compliance-checks) — Pre-launch validations that run before dispatch begins * [Quality & Deliverability](/whatsapp/compliance/quality-deliverability) — How quality rating affects throughput # Catalog Health Source: https://docs.digifist.com/galantis/whatsapp/catalog/catalog-health Monitoring sync status, identifying failed products, and maintaining a healthy Meta Catalog in Galantis. Catalog health refers to the state of your product data pipeline — from Shopify through Galantis to Meta. A healthy catalog means product data in your WhatsApp messages is accurate, all product formats are functional, and no sync errors are silently causing product cards to display stale information or failing to push new products to Meta. Catalog health is not a one-time concern. It requires periodic monitoring — particularly after bulk Shopify changes, after sale events that shift prices, and whenever product image assets are updated. ## What this covers * The three per-product sync statuses and what each means * Health metrics available in the Catalog module * How to identify and resolve sync failures * When to trigger a manual re-sync * Monitoring the Meta Catalog token ## Per-product sync status Every product in Galantis has a Meta sync status that reflects whether it has been successfully pushed to Meta: | Status | Meaning | Action required | | --------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------- | | `PENDING` | Queued for Meta upload — not yet pushed | None — the product is waiting to be processed by the next catalog sync | | `SYNCED` | Successfully pushed to Meta — product data is live in the catalog | None — product is healthy | | `FAILED` | Sync error — the product was not pushed to Meta | Review error details and resolve the issue | Status is visible per product in **Catalog → \[Product Name]** and aggregated across all products in the main Catalog view. ## Catalog health metrics The Catalog module surfaces three top-level health metrics: **Sync success rate** — The percentage of total products that have `SYNCED` status. A healthy catalog should approach 100% for all non-excluded products. A declining sync success rate indicates accumulating failures that need attention. **Product errors** — The count of products with `FAILED` status, broken down by error type. This is the primary actionable metric — each `FAILED` product represents a product that cannot appear in SPM or MPM messages until resolved. **Message usage** — The number of SPM and MPM messages sent via campaigns and automations that referenced catalog products. This metric provides context for prioritization — a `FAILED` product referenced by an active high-volume automation is more urgent than a `FAILED` product in a draft template. ## Common failure causes The most common cause of `FAILED` status. Meta requires product images to be JPEG or PNG format and at least 500×500px. Images that do not meet these requirements are rejected during the Meta push. **How to resolve:** 1. Identify the affected product in **Catalog → \[Product Name] → Error Details** 2. Update the product image in Shopify to meet the format and size requirements 3. Save the product in Shopify — this triggers an automatic webhook update in Galantis 4. The next catalog sync cycle will re-attempt the Meta push with the updated image If you have many products with image failures, perform a bulk image audit in Shopify before triggering a manual re-sync. Fixing images one at a time and re-syncing individually is less efficient than resolving all image issues first and syncing once. If your Meta Catalog access token expires or is revoked in Meta Business Manager, all Meta push attempts fail simultaneously. This produces a sudden spike of `FAILED` status across many products at once rather than isolated individual failures. **How to identify:** A sudden increase in `FAILED` status across products that were previously `SYNCED`, with no corresponding changes in Shopify, strongly indicates a token issue rather than a product data problem. **How to resolve:** 1. Go to **Settings → WhatsApp Connection** and check the Meta Catalog token status 2. If the token is expired or invalid, reconnect by going through the Meta OAuth flow again 3. Once reconnected, trigger a manual Meta push or wait for the next catalog sync cycle — products that failed due to the token issue will be re-attempted automatically Meta requires certain fields to be present for a product to be accepted into a catalog — notably, a title, a price, and at least one image. Products missing these fields will fail the Meta push. **How to resolve:** 1. Open the `FAILED` product in **Catalog → \[Product Name] → Error Details** and check which field is flagged 2. Update the missing field in Shopify 3. The Shopify product update webhook fires automatically and refreshes the Galantis record 4. The next Meta sync attempt will include the now-complete product data If a product is deleted from Shopify, Galantis receives the `products/delete` webhook and removes it from the Galantis catalog. However, if an active SPM or MPM template references that product, the template will fail for any recipients until the template is updated to reference a different product. **How to identify:** Campaign analytics or automation activity logs show `FAILED` message sends with a product-not-found error type. **How to resolve:** 1. Update the affected SPM or MPM template to reference an available, `SYNCED` product 2. Resubmit for Meta approval if required 3. Reactivate any automations that were using the updated template ## Triggering a manual re-sync When sync errors have been resolved at the source — images fixed, fields updated, token refreshed — you can accelerate recovery by triggering a manual sync rather than waiting for the next automatic job run: **For Shopify-side fixes** — if you updated product data in Shopify (images, titles, prices), the `products/update` webhook fires automatically and queues the product for re-sync. No manual action required in most cases. **For Meta-side recovery after token issues** — after reconnecting the Meta Catalog token, trigger a manual full sync from **Catalog → Shopify Sync → Sync Now** to re-queue all `FAILED` products for the next Meta push cycle. See [Shopify Sync](./shopify-sync) for full manual sync instructions. ## Monitoring cadence Catalog health does not require daily review for most stores — the automatic sync handles ongoing changes reliably. We recommend checking catalog health: * **After any bulk product operation in Shopify** — price changes, image updates, bulk tag edits, or CSV imports * **Before launching a campaign that uses SPM or MPM formats** — verify that all referenced products have `SYNCED` status * **After any change to your Meta Catalog token** — verify no mass failures appeared * **Monthly** — a routine check of sync success rate and `FAILED` count ensures no silent accumulation of errors ## Best practices * **Resolve `FAILED` products before activating catalog-dependent automations.** An SPM automation with a `FAILED` product will send messages that display a broken or missing product card until the issue is resolved. * **Address image failures in Shopify, not in Galantis.** Galantis syncs images from Shopify — fixing the image at the Galantis level is not possible. Update the image in Shopify and the webhook will propagate the fix. * **Set up a recurring catalog health check before major campaign periods.** Sale events, holiday campaigns, and product launches all involve catalog changes. Verifying catalog health before a send ensures the products customers see in their messages are accurate. * **Exclude products that consistently fail** using `exclude_from_syncforce` if they cannot be fixed immediately. This removes them from the failure count and prevents them from blocking catalog push jobs while the underlying issue is resolved. See [Product Fields](./product-fields). ## Related guides * [Shopify Sync](./shopify-sync) — How to trigger a manual full re-sync * [Meta Catalog](./meta-catalog) — Managing the catalog token and connection * [Variants & Pricing](./variants-pricing) — Variant-level data that affects individual product sync status * [Support — Catalog Sync Errors](/whatsapp/support/troubleshooting/catalog-sync-errors) — Detailed troubleshooting for sync failures # Catalog Message Types Source: https://docs.digifist.com/galantis/whatsapp/catalog/catalog-message-types The five WhatsApp message formats that use catalog data in Galantis — SPM, MPM, Whole Catalog, Single Rich Card, and Multi Rich Card. WhatsApp supports several interactive message formats for showcasing products. Some formats pull live data directly from your synced Meta Catalog — prices, images, and variant options update automatically as your catalog changes. Others use fixed content defined at template creation time. Understanding which format uses which data source helps you choose the right format for each campaign or automation and manage the catalog dependencies each format introduces. ## What this covers * All five message formats and their catalog dependency * How catalog data is used within each format * When each format is appropriate * Format requirements at a glance ## Message formats **Single Product Message (SPM)** displays one specific product from your Meta Catalog. The customer sees a product card with the product image, name, price, and variant options — they can select a variant and proceed to purchase without leaving WhatsApp. **Catalog dependency:** Required — the product is pulled directly from your Meta Catalog. The product must have `SYNCED` status. **How catalog data is used:** * Product image, name, and price are pulled from the synced catalog record * Variant options (`selected_options`) are passed as `PRODUCT_SECTIONS` data, powering the variant picker the customer sees * `compare_at_price` is included when set, showing a crossed-out original price alongside the sale price * Availability reflects the current `inventory_quantity` at the time the message is sent **Best for:** Focused product promotions where one specific item is the message's purpose — a best-seller, a seasonal hero product, a back-in-stock alert for a specific item, or a personalized recommendation based on purchase history. **Template structure:** `HEADER (PRODUCT)` + `BODY` + `FOOTER` + `BUTTONS` + `PRODUCT_SECTIONS` If the product referenced in an SPM template loses `SYNCED` status — due to an image format failure, a catalog token issue, or a sync error — messages using this template will fail for all recipients until the sync issue is resolved. Monitor catalog health for SPM-referenced products before campaign launches. **Multi-Product Message (MPM)** displays up to 30 products from your Meta Catalog in a scrollable list, organized into labeled sections. Customers can browse the list and tap any product to view details and select variants. **Catalog dependency:** Required — all products in the message must have `SYNCED` status in your Meta Catalog. **How catalog data is used:** * Each product in the list pulls its image, name, price, and availability from the Meta Catalog * Products are organized into `PRODUCT_SECTIONS` — each section has a label and a list of product entries * Variant data is available when a customer taps to view a product's detail screen **Best for:** Collection-based campaigns, curated product edits, and "shop the look" or "complete the set" messages where the goal is to give the customer a browsable selection rather than focus on one item. **Template structure:** `HEADER (TEXT)` + `BODY` + `FOOTER` + `BUTTONS` + `PRODUCT_SECTIONS` Organize MPM products into meaningful sections rather than one flat list. Sections like "New Arrivals", "Top Sellers", and "Under \$50" give customers a navigation context that improves browsing behavior compared to an unlabeled product dump. **Whole Catalog** sends a message with a catalog browse button. When the customer taps it, WhatsApp opens a full catalog browser showing all products in your connected Meta Catalog. **Catalog dependency:** Required — your entire Meta Catalog must be connected and in sync. The catalog browser reflects the current state of all synced products. **How catalog data is used:** * The catalog browser is powered entirely by Meta's native catalog UI — it pulls all products with `SYNCED` status from the connected catalog * Product data displayed to the customer — images, names, prices, availability — reflects the Meta Catalog state at the time of browsing, not at the time the message was sent * Customers see your full product range and can browse freely, select variants, and proceed to purchase **Best for:** High-intent audiences who are likely to browse broadly — VIP customers, frequent purchasers, customers who visited your store multiple times without converting. Also appropriate for stores with large catalogs where pre-selecting products for MPM is impractical. **Template structure:** `BODY` + `FOOTER` + `CATALOG button` Unlike SPM and MPM where specific products are selected at template creation time, Whole Catalog always shows the current state of your Meta Catalog. A product added to your Shopify store and synced to Meta after the template was created will appear in the catalog browse automatically. **Single Rich Card** is a promotional card with an image, body text, footer, and buttons. It does not pull from the Meta Catalog — all content is defined at template creation time and fixed. **Catalog dependency:** None **How catalog data is used:** Not applicable — product images are uploaded directly to the template, not sourced from the Meta Catalog. Pricing, availability, and variant data are not included automatically; they must be written into the body text manually or via variables. **Best for:** Single-focus promotional messages where you want full control over the visual and copy — a limited-time offer, a brand announcement, a discount code delivery. The most versatile format for stores without a Meta Catalog connected. **Template structure:** `HEADER (TEXT or IMAGE)` + `BODY` + `FOOTER` + `BUTTONS` Single Rich Card is the right starting point for teams setting up their first templates. It requires no catalog infrastructure, approves reliably, and works for both Marketing and Utility category messages. **Multi Rich Card (Carousel)** presents multiple cards in a horizontally swipeable carousel. Like Single Rich Card, all content is fixed at template creation time — it does not pull from the Meta Catalog. **Catalog dependency:** None **How catalog data is used:** Not applicable — each card's image, body, and buttons are uploaded and written at template creation. Product prices, availability, and variant options are not automatically included. **Best for:** Multi-offer campaigns, content series, or product collections where the specific items and their copy are stable and curated — seasonal lookbooks, top-5 product features, or campaign-specific product selections that will not change. **Template structure:** `BODY` + `CAROUSEL (multiple cards, each with IMAGE + BODY + BUTTONS)` **Consideration:** Because carousel card content is fixed in the template, any price change or product update requires a template revision and resubmission. For frequently changing products, SPM or MPM with live catalog data is a lower-maintenance choice. ## Format comparison | Format | Catalog required | Products shown | Content source | Best for | | ---------------- | ---------------- | ------------------ | -------------------------- | ------------------------------------- | | SPM | Yes | 1 specific product | Live Meta Catalog | Targeted product promotions | | MPM | Yes | Up to 30 products | Live Meta Catalog | Collection and curated sends | | Whole Catalog | Yes | Full catalog | Live Meta Catalog | Browse-driven, high-intent audiences | | Single Rich Card | No | 0 — image only | Fixed at template creation | Single-focus promotions, any campaign | | Multi Rich Card | No | Multiple (fixed) | Fixed at template creation | Curated multi-offer carousels | ## Catalog readiness checklist for product formats Before using SPM, MPM, or Whole Catalog formats in a campaign or automation: * [ ] Meta Catalog is connected under **Settings → WhatsApp Connection** * [ ] All products to be referenced have `SYNCED` status in **Catalog** * [ ] Product images are JPEG or PNG, minimum 500×500px * [ ] Meta Catalog access token is valid — check **Settings → WhatsApp Connection** * [ ] No `FAILED` products in the intended message's product selection ## Related guides * [Meta Catalog](./meta-catalog) — Connecting and managing the Meta Catalog integration * [Catalog Health](./catalog-health) — Monitoring SYNCED, PENDING, and FAILED status * [Templates — Template Formats](/whatsapp/templates/template-formats) — Template structure for each format * [Campaigns — Message Composition](/whatsapp/campaigns/message-composition) — Using these formats in campaigns # Catalog Source: https://docs.digifist.com/galantis/whatsapp/catalog/index The commerce data layer of Galantis — syncing product and collection data from Shopify to Galantis and Meta for use in WhatsApp product messages. The Catalog module manages the flow of product data from Shopify through Galantis and into Meta. It is the infrastructure that makes WhatsApp product messages possible — Single Product Messages, Multi-Product Messages, and Whole Catalog browsing all depend on a synced, healthy catalog. Without it, none of these message formats can function. Catalog is not a feature you configure once and forget. Product data changes — prices update, variants go out of stock, new collections launch, images are replaced. The Catalog module keeps that data current automatically through Shopify webhooks and propagates changes to Meta when needed. ## What the Catalog module does At its core, the Catalog module does three things: 1. **Syncs Shopify product and collection data into Galantis** — automatically via webhooks whenever products change, or manually on demand 2. **Stores and manages that data in Galantis** — making it available for automation conditions, segment rules, and message templates 3. **Pushes product data to Meta** — keeping your WhatsApp catalog in sync with your Shopify store so product messages display accurate prices, availability, and imagery ## When you need the Catalog module The Catalog module is **required** if you plan to use any of the following: * Single Product Messages (SPM) * Multi-Product Messages (MPM) * Whole Catalog messages * Back-in-Stock automation flows that reference product data The Catalog module is **not required** for: * Standard campaign broadcasts using text, image, or video templates * Automation flows that do not use product message formats * Inbox conversations * Back-in-Stock widget subscription capture (catalog is required for the notification template only) ## Guides in this section Automatic webhook-based sync and manual full re-sync — how product data moves from Shopify into Galantis. All product and collection fields synced from Shopify, their mapping, and the exclude flag. How product variants, prices, inventory quantities, and option combinations are stored and kept current. Connecting, creating, and syncing your Meta Catalog — the three available catalog flows. SPM, MPM, Whole Catalog, Rich Card, and Carousel — message formats that use catalog data. Sync success rates, product errors, and PENDING / SYNCED / FAILED status per product. ## Setup sequence If you are configuring the Catalog module for the first time, follow this order: Go to **Catalog → Shopify Sync** and click **Sync Now** to import your full product and collection catalog into Galantis. See [Shopify Sync](./shopify-sync). Check that product data has imported correctly — titles, prices, variants, and images. Exclude any products that should not be pushed to Meta using the `exclude_from_syncforce` flag. See [Product Fields](./product-fields). Link an existing Meta Catalog or create a new one directly from Galantis. See [Meta Catalog](./meta-catalog). Trigger the initial Meta push and verify per-product sync status. Resolve any `FAILED` items before using product message formats. See [Catalog Health](./catalog-health). ## Related guides * [Getting Started — First Catalog Sync](/whatsapp/getting-started/first-catalog-sync) — End-to-end walkthrough for first-time setup * [Templates — Template Formats](/whatsapp/templates/template-formats) — How catalog data is used in SPM, MPM, and Whole Catalog templates * [Back-in-Stock](/whatsapp/back-in-stock/index) — How catalog inventory data drives restock notifications # Meta Catalog Source: https://docs.digifist.com/galantis/whatsapp/catalog/meta-catalog Connecting, creating, and syncing your Meta Catalog in Galantis — the three available catalog flows and how ongoing sync works. A Meta Catalog is the product database that powers WhatsApp's native commerce features — product cards, catalog browse, and the buy interface customers see when they tap a product in a WhatsApp message. Galantis connects to Meta Catalog to push your Shopify product data into WhatsApp, keeping the two systems in sync automatically. Connecting a Meta Catalog is required before any SPM, MPM, or Whole Catalog message format can be used. Without it, product-based templates cannot be activated. ## What this covers * The three Meta Catalog flows available in Galantis * How to connect or create a catalog * How ongoing automatic sync works * Per-product sync status tracking * Error handling and recovery ## Three catalog flows Galantis supports three paths for connecting your product data to Meta, depending on whether you already have a Meta Catalog configured. **Import an existing Meta Catalog** — connect a catalog you have already configured in Meta Commerce Manager and sync it into Galantis. Use this flow if: * You already have a Meta Catalog set up and populated in Meta Commerce Manager * You are migrating to Galantis from another tool that managed your Meta Catalog * You want Galantis to manage sync going forward but the catalog structure already exists **How it works:** In Galantis, go to **Settings → WhatsApp Connection** and connect a Meta Catalog access token. This token is obtained from Meta Business Manager and grants Galantis permission to read and write to your catalog. Galantis fetches your available Meta Catalogs and lets you select which one to connect. Galantis imports the existing catalog structure and product data into Galantis records, reconciling them with your synced Shopify products. Once imported, Galantis manages ongoing sync between Shopify product updates and the connected Meta Catalog automatically. After importing, Galantis becomes the source of truth for catalog updates — it pushes changes from Shopify to Meta. Direct edits in Meta Commerce Manager will be overwritten the next time the catalog sync runs with updated Shopify data. **Create a new Meta Catalog from Galantis** — build and push a catalog directly from your Shopify data, without needing to set anything up in Meta Commerce Manager first. Use this flow if: * You do not have an existing Meta Catalog * You are setting up WhatsApp commerce for the first time * You want the simplest possible setup path **How it works:** In Galantis, go to **Settings → WhatsApp Connection** and connect a Meta Catalog access token with catalog creation permissions. In **Catalog → Meta Sync**, select the option to create a new catalog. Galantis creates the catalog structure in Meta on your behalf and associates it with your WhatsApp Business Account. Galantis pushes all non-excluded Shopify products to the newly created Meta Catalog. Products with `PENDING` status are queued for upload. Review the per-product status in **Catalog** — products move from `PENDING` to `SYNCED` or `FAILED` as the push completes. **Automatic Meta sync** — once a catalog is connected (via either of the above flows), Galantis keeps Meta in sync automatically. This job runs periodically and handles: * Pushing product updates that arrived via Shopify webhook since the last sync * Propagating price changes, inventory updates, and image changes to Meta * Removing products from Meta that were deleted in Shopify * Queuing products with `PENDING` status for their initial push **Sync frequency:** The Meta catalog sync runs periodically for batch uploads. The automatic sync means you generally do not need to manually trigger a Meta push after your initial setup. Price changes, new product additions, and inventory updates flow through automatically. If you make bulk product changes in Shopify and need them reflected in Meta immediately, trigger a Meta push from **Catalog → Meta Sync**. ## Per-product Meta sync status Every product in Galantis has a Meta sync status that reflects its current state in the push pipeline: | Status | Description | | --------- | --------------------------------------------------------------------- | | `PENDING` | Queued for Meta upload — not yet pushed | | `SYNCED` | Successfully pushed to Meta — product is live in the catalog | | `FAILED` | Sync error — the product was not pushed to Meta; review error details | Status is visible per product in **Catalog → \[Product Name]**. The overall catalog health view in **Catalog** shows aggregate counts across all three statuses. See [Catalog Health](./catalog-health) for how to interpret and act on these statuses. ## Meta Catalog access token Connecting a Meta Catalog requires a catalog access token from Meta Business Manager. This token: * Must have permissions to read and write to the target catalog * Is stored encrypted per tenant in Galantis * Can expire or be revoked if permissions change in Meta Business Manager If catalog sync stops working or `FAILED` statuses appear unexpectedly across many products simultaneously, the first diagnostic step is to verify the Meta Catalog token is still valid under **Settings → WhatsApp Connection**. A revoked or expired token will cause all Meta push attempts to fail until the token is refreshed. If your Meta Catalog access token expires, catalog sync will fail silently for all products until the token is renewed. Product data in Meta will become stale — prices, availability, and images will not reflect Shopify changes. Monitor catalog health periodically to catch token expiry issues early. See [Catalog Health](./catalog-health). ## Related guides * [Shopify Sync](./shopify-sync) — How product data flows from Shopify into Galantis before being pushed to Meta * [Catalog Health](./catalog-health) — Monitoring SYNCED, PENDING, and FAILED status across your catalog * [Support — Catalog Sync Errors](/whatsapp/support/troubleshooting/catalog-sync-errors) — Resolving failed Meta pushes * [Templates — Template Formats](/whatsapp/templates/template-formats) — How Meta Catalog data is used in SPM, MPM, and Whole Catalog templates # Product Fields Source: https://docs.digifist.com/galantis/whatsapp/catalog/product-fields All product and collection fields synced from Shopify into Galantis — field mapping, storage, and the exclude_from_syncforce flag. When Galantis syncs a product from Shopify, it maps the Shopify product data to a structured record stored in Galantis. This record is what powers WhatsApp product messages, automation condition evaluations, Back-in-Stock eligibility checks, and segment rules based on purchased collections or brands. Understanding what is synced — and what each field is used for — helps diagnose issues, build accurate segment rules, and manage which products appear in your WhatsApp catalog. ## What this covers * All product fields synced from Shopify and their purpose in Galantis * How collection data is stored and used * The `exclude_from_syncforce` flag and when to use it * The full product JSON payload storage ## Product fields | Field | Source | Purpose in Galantis | | ------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------- | | `title` | Shopify | Product name — displayed in SPM and MPM product cards, available as a template variable via `order.product_name` | | `description` | Shopify | Full product description — stored and available for catalog display | | `vendor` | Shopify | Brand name — used in segment rules (`Purchased brand`) and catalog filtering | | `tags` | Shopify | Product tags — used in the `PRODUCT_IN_ORDER_HAS_TAG` automation condition | | `images` | Shopify | Product images — displayed in product message formats and catalog browse; must meet Meta's format requirements for Meta sync | Product tags deserve particular attention. They are the mechanism that connects Shopify's product taxonomy to Galantis automation logic — the `PRODUCT_IN_ORDER_HAS_TAG` condition in automation flows evaluates these tags. If product tags are not consistently applied in Shopify, condition-based automation branching on product category will not work reliably. Product images must be JPEG or PNG format and at least 500×500px to pass Meta's validation during catalog push. Products with images that do not meet these requirements will fail on the Meta sync step. The images are stored correctly in Galantis regardless — the format requirement applies only to the Meta push. See [Catalog Health](./catalog-health). | Field | Source | Purpose in Galantis | | ------------------ | ------- | -------------------------------------------------------------------------------------------- | | `price` | Shopify | Per-variant price — displayed in product message formats and catalog browse | | `compare_at_price` | Shopify | Original or pre-sale price — displayed alongside `price` in product cards to show a discount | | `availability` | Shopify | In-stock or out-of-stock status — determines Back-in-Stock widget eligibility per variant | Price and availability data are among the most time-sensitive fields in the catalog. Both are updated automatically whenever a change is saved in Shopify. A price change takes effect in Galantis within seconds of the Shopify save. Availability is derived from the variant-level `inventory_quantity` field — when `inventory_quantity` drops to `0`, the variant becomes eligible for Back-in-Stock subscriptions. When it returns to a positive value, the `BACK_IN_STOCK` trigger fires. See [Variants & Pricing](./variants-pricing) for the full variant-level data model. | Field | Source | Purpose in Galantis | | ------------- | ------- | ------------------------------------------------------------------------------------------------ | | `collections` | Shopify | Collection memberships — used in segment rules (`Purchased collection`) and catalog organization | | `variants` | Shopify | All variant options for the product — stored with individual pricing and inventory | | `sku` | Shopify | Stock-keeping unit per variant — stored for catalog reference and product identification | Collection memberships are synced from Shopify collection webhooks and kept current as products are added to or removed from collections in Shopify. This data feeds the `Purchased collection` segment rule — if a customer has purchased any product from a given collection, Galantis knows this from the order history joined against collection membership data. | Field | Source | Purpose in Galantis | | ------ | ------- | ------------------------------------------------------------------------ | | `data` | Shopify | Full Shopify product JSON payload stored alongside the structured fields | Galantis stores the complete Shopify product JSON payload alongside the structured fields. This serves as a source-of-truth backup — if a specific Shopify product attribute is not mapped to a dedicated Galantis field, it is still accessible from the full payload. ## The exclude\_from\_syncforce flag The `exclude_from_syncforce` flag can be set on any individual product record in Galantis. When set, the product is excluded from being pushed to Meta during catalog sync operations. **What it does:** * Prevents the product from being included in Meta Catalog pushes (both initial push and incremental sync updates) * The product remains in Galantis — it is still synced from Shopify, still appears in your Galantis catalog, and still available for segment rules and automation conditions * The product will not appear in SPM, MPM, or Whole Catalog messages sent via WhatsApp **What it does not do:** * It does not remove the product from Shopify * It does not prevent the product from being synced from Shopify into Galantis * It does not affect Back-in-Stock widget eligibility for the product's variants **When to use it:** * Products that are not ready for customer-facing WhatsApp commerce (draft products, internal SKUs, gift cards) * Products with images that fail Meta's format requirements and cannot be fixed immediately — exclude them to prevent them from blocking the broader catalog push * Products that are available on your Shopify store but should not be surfaced in WhatsApp messages for business reasons (wholesale-only items, B2B products) **How to set it:** Navigate to **Catalog → \[Product Name]** and toggle the exclude flag on the product record. The flag takes effect on the next Meta sync operation. ## Collection fields Collections are synced into Galantis as separate records with their own webhook pipeline: | Field | Source | Purpose | | ---------- | ------- | ------------------------------------------------- | | `title` | Shopify | Collection name | | `products` | Shopify | Products associated with this collection | | `handle` | Shopify | URL handle — used for collection-level deep links | Collection data is used primarily for segment rule evaluation (`Purchased collection` condition) and for organizing product selections in MPM templates into labeled sections. ## Related guides * [Shopify Sync](./shopify-sync) — How and when these fields are synced from Shopify * [Variants & Pricing](./variants-pricing) — Variant-level field detail beyond the product-level fields above * [Meta Catalog](./meta-catalog) — How synced fields are mapped when pushing to Meta * [Catalog Health](./catalog-health) — How field-level issues (e.g., image format) affect sync status * [Automations — Conditions](/whatsapp/automations/conditions) — How `tags` and `collections` are used in condition evaluation # Shopify Sync Source: https://docs.digifist.com/galantis/whatsapp/catalog/shopify-sync How Galantis syncs product and collection data from Shopify — automatic webhook-based sync and manual full re-sync. Galantis keeps your product and collection data current through two sync mechanisms: an automatic webhook-based system that fires within seconds of changes in Shopify, and a manual full sync you can trigger on demand. The automatic sync is the default and recommended method — once your initial import is complete, Galantis handles the rest without intervention. ## What this covers * How automatic webhook-based sync works * When and how to trigger a manual sync * Which Shopify events trigger which sync jobs * Sync timing and what to expect ## Automatic sync Automatic sync is event-driven. Whenever a product or collection is created, updated, or deleted in Shopify, Shopify sends a webhook to Galantis. Galantis processes the webhook through a dedicated job and updates the corresponding record in Galantis within seconds. This is the default and recommended sync method. It requires no configuration after the initial app installation — webhook registration happens automatically when Galantis is installed. ### Product sync events | Shopify event | What is updated in Galantis | | --------------- | ----------------------------------------------------------------------- | | Product created | Creates a new product record in Galantis | | Product updated | Updates title, description, price, images, tags, variants, availability | | Product deleted | Removes the product record from Galantis | ### Collection sync events | Shopify event | What is updated in Galantis | | ------------------ | ----------------------------------------------- | | Collection created | Creates a new collection record in Galantis | | Collection updated | Updates collection name, products in collection | | Collection deleted | Removes the collection record from Galantis | ### What automatic sync covers Every product field that matters for WhatsApp messaging is kept current by automatic sync: title, description, price, compare-at price, availability, images, tags, collection memberships, variants, SKUs, and vendor. See [Product Fields](./product-fields) for the full field mapping. Price changes and inventory changes — including stock going to zero and back — are processed automatically and reflected in Galantis within seconds of the Shopify save. Automatic sync reflects changes made in Shopify — it does not sync changes made directly in Meta Commerce Manager. If you edit product data in Meta outside of Galantis, those changes will be overwritten the next time the Shopify product is updated and the webhook fires. ## Manual sync Manual sync triggers a full re-import of your entire Shopify product and collection catalog. It processes every product and collection in your store in a single batch operation. **When to use manual sync:** * **Initial setup** — the first sync after installing Galantis, to populate the catalog database with all existing products * **After bulk edits in Shopify** — if you use a bulk product editor or CSV import tool in Shopify, individual product webhooks may not fire for all changed products; a manual sync ensures everything is current * **After resolving sync errors** — if a series of webhook-based syncs failed and your Galantis catalog has fallen behind, manual sync recovers the full state * **After reconnecting a Meta Catalog** — if the Meta Catalog connection was interrupted and product data needs to be re-verified **How to trigger a manual sync:** Go to **Catalog → Shopify Sync** in the Galantis dashboard. Click **Sync Now** to begin the full import. The sync processes all products and collections in your Shopify store. The sync runs as a background job. Progress and any per-product errors are visible in the sync status view as the job completes. Manual sync on a large catalog can take time to complete. Products and collections are processed sequentially, and a store with thousands of products may take several minutes. Do not trigger multiple manual syncs simultaneously — allow the current sync to complete before initiating another. ## Sync timing | Sync type | Typical latency | Triggered by | | -------------------- | -------------------------- | ----------------------------------------------------------- | | Automatic (webhook) | Seconds after Shopify save | Shopify product/collection create, update, or delete events | | Manual (full import) | Minutes for large catalogs | Merchant-triggered from Catalog → Shopify Sync | ## What is not covered by automatic sync * **Abandoned checkout product data** — checkout-level product data is polled separately for the abandoned checkout automation trigger, not via the catalog sync * **Meta Catalog push** — automatic Shopify sync updates Galantis records but does not automatically push all changes to Meta. Meta sync has its own configuration. See [Meta Catalog](./meta-catalog) * **Products excluded via `exclude_from_syncforce`** — excluded products are not pushed to Meta, but they are still synced into Galantis from Shopify. The flag only controls Meta propagation, not Galantis-side sync ## Related guides * [Product Fields](./product-fields) — All fields synced from Shopify and how they are stored * [Meta Catalog](./meta-catalog) — How synced Shopify data is pushed to Meta * [Catalog Health](./catalog-health) — Monitoring sync status and resolving errors * [Support — Catalog Sync Errors](/whatsapp/support/troubleshooting/catalog-sync-errors) — Troubleshooting failed syncs # Variants & Pricing Source: https://docs.digifist.com/galantis/whatsapp/catalog/variants-pricing How product variants, inventory quantities, prices, and option combinations are stored in Galantis and kept current from Shopify. In Galantis, every product variant is stored with its own price, inventory quantity, SKU, images, and option combination. Variant-level data is what makes Back-in-Stock subscriptions work at the size and color level, what determines whether a product appears as in-stock in WhatsApp product messages, and what feeds automation conditions that evaluate product-level inventory. ## What this covers * How variants are stored in Galantis * All variant-level fields and their purpose * How inventory quantity drives Back-in-Stock eligibility * How price updates are handled * How `selected_options` represents variant combinations ## Variant data model Each variant record in Galantis stores the following fields: | Field | Source | Purpose | | -------------------- | ------- | ------------------------------------------------------------------------------------------------------------- | | `price` | Shopify | Per-variant price — displayed in SPM and MPM product cards, updated on each product update webhook | | `compare_at_price` | Shopify | Pre-sale or original price — used to display a crossed-out price alongside the current price in product cards | | `inventory_quantity` | Shopify | Current stock level — the primary field for Back-in-Stock eligibility and availability display | | `sku` | Shopify | Stock-keeping unit — product identification per variant | | `image` | Shopify | Variant-specific image — overrides the parent product image in product cards when set | | `selected_options` | Shopify | The option combination for this variant (e.g., `Size: M, Color: Blue`) | ## How inventory quantity works in Galantis `inventory_quantity` is the most operationally significant variant field. Its value drives two distinct behaviors: ### Back-in-Stock eligibility When `inventory_quantity` reaches `0` for a specific variant, that variant becomes eligible for Back-in-Stock subscriptions. The storefront widget appears on the product page for that variant, and customers can submit their WhatsApp number to subscribe. When `inventory_quantity` changes from `0` to any positive value on a variant with active subscribers, the `BACK_IN_STOCK` automation trigger fires for each subscriber. See [Back-in-Stock — Notification Logic](/whatsapp/back-in-stock/notification-logic) for the full pipeline. ### Availability in WhatsApp product messages In SPM and MPM templates, variant availability is reflected in the product card shown to the customer. Variants with `inventory_quantity = 0` are marked as unavailable. This data is kept current via automatic Shopify webhook processing within seconds of any inventory change. Availability in WhatsApp product messages reflects the state of the Galantis catalog record at the time the message is sent, not a live Shopify query. For most stores this is effectively real-time given the seconds-level webhook latency — but in edge cases where a webhook fails or is delayed, a product card may show availability that differs from the live Shopify state. See [Catalog Health](./catalog-health) for monitoring and error recovery. ## Price updates Price changes in Shopify — including sale prices, compare-at prices, and variant-level price adjustments — are synced to Galantis within seconds of being saved in Shopify. The updated `price` and `compare_at_price` values are then propagated to Meta on the next catalog sync, ensuring product cards in WhatsApp messages display current pricing. **Price update flow:** ``` Shopify price change saved → products/update webhook fires → Price updated in Galantis → Meta Catalog updated with new price → WhatsApp product messages show current price ``` The time between a Shopify price change and that change appearing in a WhatsApp product message is typically seconds to minutes, depending on the Meta sync job interval. ## selected\_options `selected_options` stores the specific combination of option values that defines a variant. It is a structured array — for example: ```json theme={null} [ { "name": "Size", "value": "M" }, { "name": "Color", "value": "Blue" } ] ``` This data is used in WhatsApp product messages to display variant options to the customer — when a customer taps a product in an SPM or MPM card, they can select from the available variant options before adding to cart. `selected_options` is also what Galantis uses to identify which specific variant a Back-in-Stock subscriber signed up for. A customer who subscribed to "Size: M, Color: Blue" will only receive a notification when that specific combination is restocked — not when a different size or color of the same product becomes available. ## Variants in product messages When a product is displayed in an SPM template, the customer sees the product card with the option to select a variant before proceeding. Galantis passes all active variants for the product to Meta as `PRODUCT_SECTIONS` data in the template, letting WhatsApp's native commerce UI handle variant selection. For MPM templates, variant data is included for each of the up to 30 products in the message. Customers can tap any product in the list and select their preferred variant from the product detail view. ## Best practices * **Keep Shopify inventory data accurate.** Galantis relies entirely on Shopify inventory values — if Shopify shows `inventory_quantity > 0` for an out-of-stock variant due to a Shopify inventory management misconfiguration, Galantis will not trigger Back-in-Stock notifications when the product is actually restocked. * **Use variant-specific images where available.** A product with multiple color variants benefits from variant-level images in WhatsApp product cards — customers seeing the correct color image have higher conversion intent than those seeing a generic product shot. * **Monitor price sync after sale events.** After a Shopify sale ends and prices revert, verify that the Meta Catalog has received the updated pricing. Check **Catalog → \[Product]** for `SYNCED` status with a recent timestamp. ## Related guides * [Product Fields](./product-fields) — Product-level fields that accompany variant data * [Meta Catalog](./meta-catalog) — How variant data is pushed to Meta for product messages * [Back-in-Stock — Notification Logic](/whatsapp/back-in-stock/notification-logic) — How `inventory_quantity` drives restock notifications * [Back-in-Stock — Product & Inventory Rules](/whatsapp/back-in-stock/product-inventory-rules) — Per-variant subscription behavior # Conversation Window Source: https://docs.digifist.com/galantis/whatsapp/compliance/conversation-window The 24-hour customer service window — when free-form messages are allowed, when a template is required, and how free entry-point conversations open it without cost. WhatsApp's 24-hour customer service window decides whether you can send a free-form message or whether an approved template is required. The rule is simple: a customer messages you, the window opens for 24 hours, and within that window you can reply with anything (text, images, documents, voice). Outside the window, only approved templates can be sent. Understanding this rule directly affects how you configure automations, respond in the Inbox, and time your campaigns. The 24-hour window is separate from the **conversation categories** (Marketing, Utility, Authentication, Service) that Meta uses for billing on its own side. In Galantis, every delivered template consumes 1 Conversation credit at a flat rate, regardless of category — see [Billing — conversations](/galantis/whatsapp/billing/conversations). ## How the window works The window opens (or resets) every time the customer sends you an inbound message. | Event | Effect on the window | | ---------------------------------------------------------- | -------------------------------------------- | | Customer sends an inbound message | Window opens or resets to a fresh 24 hours | | 24 hours pass with no new inbound message | Window closes | | Agent or automation sends a message **within** the window | Permitted — free-form (no template required) | | Agent or automation sends a message **outside** the window | Approved template required | A customer who messages you daily effectively keeps the window open continuously. A customer who hasn't messaged in over a day requires a template to re-open the conversation. ## What's allowed inside the window Within an active 24-hour window, agents and automation replies can send **session messages** — free-form text, images, documents, audio, or video — without any template approval. This is the most flexible messaging mode and is the entire point of the customer service window. Session messages are how human-supported customer service feels natural on WhatsApp. ## What's required outside the window Once the window has closed, the only messages that can be sent are **pre-approved WhatsApp templates**. This applies to: * **All campaign broadcasts** — campaigns are always proactive outbound, never inside a window * **All automation-triggered messages** — automations fire on Shopify events (new order, abandoned checkout) or platform events, not customer inbound messages * **Inbox agent replies** when no active window exists for that customer The Inbox UI shows the window state on every conversation. If the window is closed, the reply box switches from free-form to a template picker — you can't accidentally send a session message when a template is needed. ## Free entry-point conversations Two scenarios open a **free** 24-hour service window with Meta — meaning Meta doesn't charge for the conversation on its side (Galantis credit deduction still applies for any template sent outside that window). A customer clicks a Click-to-WhatsApp ad on Facebook or Instagram and is taken into a WhatsApp conversation with your number. The resulting 24-hour window is a free entry-point conversation on Meta's billing. A customer initiates a conversation by clicking the Galantis chat widget on your storefront. The resulting 24-hour window is treated as customer-initiated and qualifies as a free entry-point conversation. Why this matters in practice: * **Inbound is cheap**: Investing in click-to-WhatsApp ads and the storefront widget converts ad clicks into chats with no Meta conversation cost for the first 24 hours. * **Reply in time**: Respond inside the 24-hour window with session messages — no template approval bottleneck, no Meta charge for opening the conversation. * **Capture consent**: A customer messaging you first isn't automatic marketing consent. If you want to send them campaigns later, capture explicit opt-in during or after the conversation. See [Opt-in & consent](/galantis/whatsapp/compliance/opt-in-consent). ## How Galantis tracks the window Galantis tracks the window state per customer-conversation pair. The Inbox UI surfaces it directly; under the hood, every outbound send checks the timestamp of the customer's most recent inbound message: ```mermaid theme={null} flowchart TD A[Outbound send requested] --> B{Customer messaged us in last 24h?} B -->|Yes| C[Window open — session message allowed] B -->|No| D[Window closed — template required] D --> E{Sender is a campaign or automation?} E -->|Yes| F[Send approved template] E -->|No, Inbox agent| G[Force template picker in UI] ``` The same logic governs billing: a delivered template counts as 1 Conversation credit regardless of whether it opens a new window or extends an existing one. See [Billing — conversations](/galantis/whatsapp/billing/conversations). ## Impact on Inbox agents When an agent opens a conversation: * **Window active** → reply box accepts free-form messages, images, voice notes, documents * **Window closed** → reply box switches to a template picker; the agent selects an approved template to re-open the conversation The Inbox interface reflects the current state per conversation. Agents don't manually check timestamps; the interface guides correct behavior. See [Inbox — conversation lifecycle](/galantis/whatsapp/inbox/conversation-lifecycle). ## Impact on automations **Automation flows always send templates**, regardless of whether a window is open. This is by design — automations fire on Shopify or platform events (new order, abandoned checkout, restock), not in response to a customer message, so they're always treated as proactive outbound. If you want to incorporate a customer reply into an automation's logic, use a `USER_REPLY_STATUS` condition node to branch the flow based on whether the customer responded to a previous message — see [Automations — conditions](/galantis/whatsapp/automations/conditions). ## Edge cases Their reply opens a new 24-hour window. You can now respond with session messages in the Inbox until the window closes again. Each inbound resets the 24-hour clock. Effectively the window stays open as long as the customer keeps engaging. The window is based on real (UTC) time, not the customer's local time. A reply 23 hours after their message is still inside the window; a reply 25 hours after is outside. Allowed but typically unnecessary — session messages are free-form and flexible. Some agents use templates inside the window for consistency on transactional acknowledgements (order status, refund confirmation). *** The mechanics of each message type and when to use which. Consent rules that apply alongside the conversation window. How conversation statuses interact with the window in the agent Inbox. How delivered templates consume credits regardless of conversation category. # GDPR & Data Privacy Source: https://docs.digifist.com/galantis/whatsapp/compliance/gdpr-data-privacy How Galantis handles data deletion requests, the controller / processor relationship for WhatsApp data, cross-border transfers, and how other privacy regimes (LGPD, CCPA, UK GDPR) map onto the same framework. Galantis processes personal data synced from Shopify — names, phone numbers, emails, purchase history, consent records — to power your WhatsApp marketing. That makes you a **data controller** for your customers' data, Galantis a **data processor** acting on your instructions, and Meta a separate controller for the WhatsApp messages and metadata that pass through its infrastructure. This page explains what that means in practice and how Galantis handles deletion, access, and cross-border data flows under GDPR and related regulations. This page is informational, not legal advice. Your store may have additional obligations depending on jurisdiction and business model. When in doubt, consult a qualified data-protection lawyer. ## The controller / processor relationship Three parties handle customer data in a Galantis-on-Shopify setup. Their roles matter because regulators (and customers exercising their rights) need to know who's responsible for what. | Party | Role | Responsibility | | ---------------------- | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | **You (the merchant)** | Data controller for your customers | Decide why and how customer data is processed: what campaigns to send, what consent to capture, what segments to build | | **Galantis** | Data processor on your behalf | Process customer data only on your instructions: sync from Shopify, send through Meta's API, store consent and message history | | **Meta** | Independent controller for WhatsApp data | Operate the WhatsApp Business Platform; retains message metadata per its own [Privacy Policy](https://www.whatsapp.com/legal/privacy-policy) | | **Shopify** | Data processor on your behalf (for store data) | Provides the order, customer, and consent webhooks Galantis consumes | Galantis's role as a processor is governed by a **Data Processing Agreement (DPA)** that comes into force when you install the app. The DPA covers what data we process, on what legal basis, with what security measures, and how sub-processors are managed. Contact your Galantis account manager or [support](/galantis/whatsapp/support) if you need a counter-signed copy of the DPA for your records or for your own customer-facing privacy notice. ## Data deletion requests Shopify is the intermediary for GDPR compliance requests. When a deletion request is submitted — either by a customer or by you on behalf of your store — Shopify fires a webhook to every installed app, including Galantis. Galantis handles two webhook topics: | Webhook | Trigger | What Galantis does | | ------------------ | ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | `customers/redact` | A specific customer requests deletion of their personal data | The customer's `marketing_state` is set to `REDACTED`; personal identifiers are scrubbed; message history is anonymised | | `shop/redact` | A merchant uninstalls Galantis and requests full shop data removal (typically 48 hours after uninstall) | All customer records, message history, and configuration for that workspace are erased | ### The REDACTED state When a `customers/redact` webhook arrives, Galantis moves the affected customer's `marketing_state` to `REDACTED`. From that moment: * They're removed from all campaign audience calculations * They're skipped in all automation message actions * They don't receive Back-in-Stock notifications, even if they had an active subscription * They cannot be re-added to lists or segments for messaging **`REDACTED` is permanent within Galantis.** Unlike `UNSUBSCRIBED`, which can be reversed by a new explicit opt-in, `REDACTED` cannot be reversed through normal platform actions. Re-engaging a redacted customer requires a fresh data-collection event with full compliance — typically treated as a new customer record. ### Verifying a deletion A customer's `marketing_state` is visible in **Audience → Contacts → \[Customer Name]**. A `REDACTED` status confirms the deletion request was processed by Galantis. If you need a formal confirmation for the customer or for an audit log, support can issue a deletion receipt with the date, source webhook, and the data scrubbed. ## Other data subject rights GDPR (and similar regimes) grants customers several rights beyond deletion. Here's how each is handled in a Galantis-on-Shopify setup: Customers can request a copy of the personal data you hold about them. In Galantis, this includes their contact profile, consent history, message history, and any segment membership. Export this from **Audience → Contacts → \[Customer Name] → Export**. Combine with the equivalent export from Shopify for a complete view. Customers can request correction of inaccurate data. Edit the customer profile directly in **Audience → Contacts → \[Customer Name]**. Note: phone numbers used for WhatsApp routing are validated against Meta — invalid numbers won't accept messages even if you save them. Covered by the `customers/redact` flow above. Customers can also request deletion directly through Shopify's customer account or via your store's privacy page. A machine-readable export of a customer's data is available via the **Export** action on the customer profile. The export is JSON-formatted and includes all fields covered under the right to access. A customer can request you stop processing their data without deleting it. In practice, set their `marketing_state` to `UNSUBSCRIBED` to halt all marketing sends while keeping the record for legitimate purposes like order history. Customers can object to direct marketing. The customer's STOP reply on WhatsApp, or an opt-out via Shopify's marketing preferences, sets `marketing_state` to `UNSUBSCRIBED` and stops marketing sends immediately. ## Cross-border data transfers WhatsApp Business Platform infrastructure is operated by Meta primarily from the United States. Sending a WhatsApp message to a customer in the EU means EU personal data crosses to US infrastructure. For GDPR compliance, this transfer relies on: * **Standard Contractual Clauses (SCCs)** — the European Commission's approved framework for EU → US data transfers, embedded in Meta's terms and in the Galantis DPA * **Supplementary measures** — encryption in transit (TLS) and at rest, access controls, and audit logging * **Transparency** — informing your customers in your privacy notice that WhatsApp messages may transit via Meta's US infrastructure If you sell to EU customers, your store's privacy policy should mention that opting into WhatsApp marketing involves processing by Meta in the US, with reference to Meta's [Privacy Policy](https://www.whatsapp.com/legal/privacy-policy). ## Data retention Galantis retains your store's data as long as the app is installed, plus a short grace period after uninstall to handle accidental re-installs. After the `shop/redact` webhook fires (typically 48 hours post-uninstall), all data is erased per our DPA. Meta has its own retention for WhatsApp messages and metadata, governed by its [Privacy Policy](https://www.whatsapp.com/legal/privacy-policy). Galantis cannot delete data Meta retains independently — but Meta also honors data deletion requests submitted through its own channels. ## Other privacy regimes GDPR is the most comprehensive framework, but customers in other regions are protected by similar regulations. The Galantis flow described above satisfies the deletion-and-access core of each: Lei Geral de Proteção de Dados — closely modeled on GDPR. Same data-subject rights, similar consent rules. The `customers/redact` flow handles deletion requests from Brazilian customers identically. Post-Brexit, the UK retained GDPR with minor adjustments. Functionally identical handling: same DPA, same SCCs framework for transfers, same flow for deletion. California's framework centers on the right to know, delete, and opt out of sale or sharing of personal information. Customer deletion via the standard `customers/redact` flow covers the right to delete. Galantis does not sell or share customer data with third parties for cross-context behavioral advertising. Australia's Privacy Act, Singapore's PDPA, Turkey's KVKK, South Africa's POPIA, and others follow similar principles. The GDPR-aligned approach — explicit consent, audit trail, easy withdrawal, prompt deletion — satisfies the substantive requirements of most regimes. ## What you should document on your side Even with Galantis handling enforcement automatically, your store still needs visible documentation of how WhatsApp data is handled: * **Privacy notice update**: mention WhatsApp as a marketing channel, that Meta processes the messages on its infrastructure (US-hosted), and link to Meta's privacy policy * **Opt-in language at point of capture**: specific enough to be valid under GDPR ("Receive WhatsApp messages about orders and offers from \[Store]" — not "Receive marketing") * **DPA on file**: keep a counter-signed copy of the Galantis DPA accessible * **Records of consent**: Galantis stores these automatically — see [Opt-in & consent](/galantis/whatsapp/compliance/opt-in-consent#proof-of-consent--keep-your-audit-trail) * **Data subject request log**: keep a log of access / deletion / portability requests and your response time (typically within 30 days under GDPR) *** Full reference for consent states and how they're enforced across the platform. Managing consent at the audience level — bulk export, audit, and compliance reporting. Meta's policy for what they retain and how they handle data subject rights on their side. Shopify's documentation on the data deletion webhooks Galantis consumes. # Compliance Source: https://docs.digifist.com/galantis/whatsapp/compliance/index WhatsApp messaging policies, consent rules, conversation-window mechanics, phone-number quality, and data privacy — the cross-cutting rules every Galantis feature respects. WhatsApp's Business Platform is a permission-based channel. Every campaign, automation, inbox reply, and Back-in-Stock notification from Galantis runs through the same compliance pipeline before a message reaches a customer: explicit opt-in, the right conversation window for the message type, an approved template if needed, and clean phone-number quality. Get these five right and the platform stays open. Get them wrong and Meta restricts your account. Compliance is not optional and it is not a Galantis policy choice — it's Meta's enforcement, baked into the WhatsApp Business Platform itself. Templates can be paused, throughput can be cut, and phone numbers can be suspended. The guides below explain how Galantis automates each rule so you don't have to police it yourself. ## The five pillars Marketing requires explicit opt-in. Galantis tracks consent state per customer and refuses sends to anyone who hasn't subscribed. The 24-hour customer service window decides whether free-form messages are allowed or a template is required. What each message type is, when each is required, and how to avoid send failures from picking the wrong one. Phone number quality rating, messaging tiers (1.000 → unlimited per day), and how to keep your number in the green. Data deletion via Shopify webhooks, controller/processor relationship, cross-border transfers, and regional regulations (GDPR, LGPD, CCPA). ## What every merchant should know on day one Meta's [Business Messaging Policy](https://business.whatsapp.com/policy) is unambiguous: "You may only contact people on WhatsApp if (a) they have given you their mobile phone number; and (b) you have received opt-in permission." Galantis enforces this — see [Opt-in & consent](/galantis/whatsapp/compliance/opt-in-consent) for how it's captured and tracked. The customer service window opens when a customer messages you. Inside, you can reply freely. Outside, every outbound message must be a Meta-approved template. See [Conversation window](/galantis/whatsapp/compliance/conversation-window). Submitting a marketing message as a Utility template — to bypass marketing restrictions or to save on Meta's per-message cost — is a Meta policy violation. Templates get rejected, and repeat violations downgrade your phone number's quality. See [Templates vs session messages](/galantis/whatsapp/compliance/templates-vs-session). Block rate, report rate, and customer feedback drive a Green / Yellow / Red rating. Yellow throttles you; Red can suspend your number. See [Quality & deliverability](/galantis/whatsapp/compliance/quality-deliverability). Shopify forwards GDPR `customers/redact` and `shop/redact` webhooks to Galantis. Affected records are moved to a `REDACTED` state and removed from all future sends. See [GDPR & data privacy](/galantis/whatsapp/compliance/gdpr-data-privacy). ## Read this section before going live A campaign that targets non-opted-in customers will not send. An automation that fires outside the conversation window must use a pre-approved template. A customer who replies STOP is excluded from every future send. Reading these five guides before configuring your first campaign saves real troubleshooting time later — and it's how merchants avoid the slow drip of quality-rating damage that takes months to recover from. ## Meta's official policies The canonical rulebook for what you can and can't do on the WhatsApp Business Platform. What products and services are prohibited from being promoted or sold via WhatsApp. # Opt-in & Consent Source: https://docs.digifist.com/galantis/whatsapp/compliance/opt-in-consent How Galantis captures, tracks, and enforces customer marketing consent — the foundation Meta requires before any marketing message can be sent. WhatsApp's Business Platform is a permission-based channel. Meta's [Business Messaging Policy](https://business.whatsapp.com/policy) requires explicit opt-in before any marketing message reaches a customer: *"You may only contact people on WhatsApp if (a) they have given you their mobile phone number; and (b) you have received opt-in permission."* Galantis enforces this at the platform level. Every campaign, automation, and Back-in-Stock notification validates consent before a send is queued — customers without `SUBSCRIBED` status are excluded automatically. You can't accidentally message a non-opted-in customer through Galantis. Sending marketing messages to non-opted-in customers is a Meta policy violation. It drives high block rates, damages your phone number's quality rating, and can result in throttling or suspension. Manual imports of unconsented "customer lists" are the most common cause of this — see [Manual import](#manual-import) for the rules. ## Consent states Galantis tracks consent per customer using the `marketing_state` field. Every customer has exactly one state at any time: | State | Meaning | Can receive marketing? | | ---------------- | ----------------------------------------------------------------- | --------------------------- | | `SUBSCRIBED` | Customer has explicitly opted in | ✅ Yes | | `PENDING` | Consent captured, awaiting confirmation (e.g. double opt-in flow) | ❌ No | | `NOT_SUBSCRIBED` | No opt-in on record | ❌ No | | `UNSUBSCRIBED` | Previously opted in, now opted out | ❌ No | | `UNKNOWN` | No consent information available | ❌ No | | `INVALID` | Bad or unverifiable data | ❌ No | | `REDACTED` | GDPR / data deletion applied | ❌ No (permanently excluded) | Only `SUBSCRIBED` customers are eligible for marketing-category sends. Campaigns and automations filter the audience automatically — there's no manual override. **Utility, authentication, and service messages** to existing customers don't require marketing opt-in but still need the customer to have provided their phone number for a legitimate business reason (e.g. checkout, shipping confirmation). See [Templates vs session messages](/galantis/whatsapp/compliance/templates-vs-session) for which message categories require what consent. ## How consent is collected Galantis supports four collection methods. Each results in a `SUBSCRIBED` or `PENDING` state being recorded with a timestamp and source — the **proof of consent** you'll want if Meta or a regulator ever asks. An opt-in checkbox at checkout. When the customer checks the box and the order completes, Shopify fires the `customers/marketing_consent_updated` webhook and Galantis records the consent with `source: shopify_checkout`, the timestamp, and the order ID. Most stores rely on this as their primary capture method. The checkbox text and position are configured in your Shopify checkout settings. Use plain, specific opt-in language ("I want to receive WhatsApp messages about my orders and offers from \[Store]") rather than a generic "marketing updates." Specific language drives lower block rates after the first send. When a customer submits their WhatsApp number through the Back-in-Stock subscription widget, the act of submission constitutes explicit consent for restock notifications and (optionally, if your widget config asks) general marketing. Galantis records `source: back_in_stock_widget`, the timestamp, and the product they subscribed to. Back-in-Stock captures consent from high-intent customers — they're actively asking to be contacted. When a customer starts a conversation from your storefront chat widget, the inbound message itself establishes a service-window context. This is not the same as marketing opt-in — a customer who messages you about a shipping question hasn't agreed to receive promotional messages. The 24-hour service window lets you reply, but marketing messages still require separate explicit opt-in. Galantis records `source: storefront_widget` and the conversation reference. Customers can be imported manually into Galantis with explicit consent confirmation at the time of import — for example, consent that was collected through an in-store sign-up form, a printed flyer with QR code, or a third-party form. Manual import as `SUBSCRIBED` requires verifiable proof of opt-in. Importing customers without a valid opt-in record (purchased lists, scraped numbers, "they bought from us so they must want marketing") is a Meta policy violation and almost always results in phone-number quality damage within days. Required fields on import: source description, opt-in date, and a brief reference to the consent record (form ID, location, etc.). These are stored alongside the customer for audit purposes. ## Collecting WhatsApp consent at checkout WhatsApp marketing requires customers to opt in. Until Shopify's native WhatsApp consent is available, you can collect consent by repurposing the checkout **SMS marketing opt-in** checkbox and relabeling it to clearly mention WhatsApp. In Shopify admin, go to **Settings → Checkout → Marketing opt-in** and find the **SMS** option. You can edit the label under **Online Store → Themes → Theme content → Checkout marketing → Accept SMS checkbox label**. Set the SMS marketing opt-in to **Checkout only** so the checkbox appears. Change the label so it clearly refers to WhatsApp, not SMS. Keep it short, and translate it into your store's language. Example: *Send me order updates and offers on WhatsApp* The label must clearly say WhatsApp so customers know what they are opting in to. Mentioning offers keeps the consent valid for marketing. Shopify still records this as SMS marketing consent in its data model; that is expected with this interim setup. This is a temporary approach. Shopify is adding native WhatsApp consent through its API. Once it is available, switch to that instead of repurposing the SMS checkbox. Galantis WhatsApp on the Shopify App Store ## Proof of consent — keep your audit trail If Meta investigates a quality issue, or a regulator asks under GDPR / LGPD / CCPA, you'll need to show how each customer consented. Galantis retains: * **Consent source** (Shopify checkout, BIS widget, chat widget, manual import) * **Timestamp** of opt-in * **Reference identifier** (Shopify order ID, BIS subscription ID, chat thread ID, manual-import reference) * **Opt-in language shown** to the customer at the time (where applicable, captured automatically for Shopify checkout) Access this per-customer in **Audience → Contacts → \[Customer Name] → Consent history**. It's exportable from the same screen for legal or audit responses. ## Where consent is enforced Consent validation runs automatically in three places: The campaign send job filters the final audience to `SUBSCRIBED` only. Customers in any other state are excluded from the send, even if they appear in a selected list or segment. Before an automation's message action dispatches, Galantis validates the customer's state. `UNSUBSCRIBED` and `REDACTED` customers are skipped and the skip is recorded in the automation's activity log. Restock notifications are sent only to subscribers whose state is `SUBSCRIBED` (or who subscribed specifically via the BIS widget, even without broader marketing opt-in). ## Opt-outs When a customer replies **STOP** (or a localized equivalent like "PARE", "ARRÊT", "STOPPEN") to any WhatsApp message, Meta and Galantis both immediately mark them as opted-out. Their `marketing_state` becomes `UNSUBSCRIBED`. From that moment: * They're excluded from all campaign sends * They're skipped in every automation message action * They don't receive Back-in-Stock notifications, even on active subscriptions **Re-subscription requires a new explicit opt-in event from the customer** — re-submitting through the BIS widget, completing checkout with the opt-in box again, or a clearly logged in-store sign-up. Galantis does not allow a manual override from `UNSUBSCRIBED` back to `SUBSCRIBED` — this is intentional, to prevent accidental re-engagement of opted-out customers. ## Regional regulatory overlays Meta's opt-in rule is a global baseline. On top of that, regional regulations add specific requirements: Marketing consent must be **freely given, specific, informed, and unambiguous**. Pre-ticked checkboxes are not valid. Consent must be granular (the customer should know they're opting in to WhatsApp specifically, not "marketing in general"). Customers have a right to withdraw consent at any time as easily as they gave it — Galantis's STOP handling satisfies this, but your own opt-in flow must not bury withdrawal options. Lei Geral de Proteção de Dados follows GDPR closely. Explicit purpose, granular consent, easy withdrawal. Records of consent and purpose must be maintained. California's framework focuses on the right to know, delete, and opt out of sale or sharing of personal information. While not strictly a consent regime for marketing in the way GDPR is, California residents can request deletion via Galantis's standard GDPR flow — see [GDPR & data privacy](/galantis/whatsapp/compliance/gdpr-data-privacy). Similar rules apply in many other jurisdictions: PDPA (Singapore, Thailand), POPIA (South Africa), PIPL (China — note WhatsApp itself is restricted there), KVKK (Turkey). When in doubt, the GDPR-aligned approach (explicit, specific, withdrawable opt-in with audit trail) covers most other regimes. ## Best practices * **Use specific language** at the opt-in point — "Receive WhatsApp messages about orders and offers" beats "Receive marketing communications" * **Capture separate opt-ins per category** where possible (transactional updates vs promotional offers). Meta's policy explicitly recommends this for lower block rates. * **Stay close to the opt-in event**: contacts who opt in and receive their first message within 24-48 hours engage at much higher rates than contacts who opt in then hear nothing for weeks * **Honor STOP everywhere**: never re-engage `UNSUBSCRIBED` customers through other channels or by re-importing them * **Keep the consent log** — export it before any major audit or Meta investigation *** How the `REDACTED` state is applied and what other data rights customers have. How sending to non-opted-in contacts damages your phone number rating. Managing consent at the audience level — bulk export, audit, and consent history. The canonical rulebook. # Quality & Deliverability Source: https://docs.digifist.com/galantis/whatsapp/compliance/quality-deliverability WhatsApp's quality rating (High / Medium / Low / Flagged), the four messaging tiers (1.000 → unlimited per 24 hours), how to move up, and how to recover a damaged phone number. Meta continuously rates every WhatsApp Business phone number based on how customers respond to your messages. A high quality rating unlocks higher daily messaging tiers — eventually unlimited — while a low quality rating throttles or suspends your number. Quality is not a one-time setup; it's the direct, ongoing result of how relevant, well-timed, and consent-respecting your messaging is. This page covers how Meta calculates quality, what the four messaging tiers mean for your throughput, and the concrete practices that keep your number in the green. ## Phone number quality rating Meta assigns each phone number a quality rating, visible in **Meta Business Manager → WhatsApp Manager → Phone numbers**: | Quality | Meaning | Impact | | ------------------------ | ------------------------------------------------------- | ------------------------------------------------------------------------------- | | **High** (Green) | Customers respond positively, low block rate | Full throughput at your current tier; eligible for tier upgrades | | **Medium** (Yellow) | Mixed signals; some blocks or low engagement | Warning state — no immediate throttling but continued degradation will escalate | | **Low** (Red) | High block rate, customer reports, or policy violations | Daily throughput limit reduced; templates may be paused; tier downgrade likely | | **Flagged / Restricted** | Severe or repeated violations | Messaging paused on this number; templates suspended; manual review required | Meta doesn't publish the exact formula, but the [Messaging Policy](https://business.whatsapp.com/policy) confirms the inputs: * **Block rate** — how often recipients block your number * **Report rate** — how often messages are reported as spam * **Engagement signals** — read rates, response rates, conversation rate * **Template rejection patterns** — frequent rejections during review signal policy mismatch ## Messaging tiers Meta caps how many **unique customers** you can initiate conversations with in a rolling 24-hour window, based on your tier. Your tier scales up automatically as you send high-quality conversations to qualifying numbers. | Tier | Unique-customer cap per 24h | Typical use | | ---------- | --------------------------- | ----------------------------------------------- | | **Tier 1** | 1.000 | New WABA, just verified | | **Tier 2** | 10.000 | After consistent high-quality sending at Tier 1 | | **Tier 3** | 100.000 | Established sender with sustained high quality | | **Tier 4** | Unlimited | Largest, highest-trust senders | The tier cap is on **unique customers contacted in 24 hours**, not total messages. Multiple messages to the same customer don't count separately toward the cap. Replying inside an active conversation window also doesn't count. ### How to move up a tier Meta's escalation rules require both volume and quality at the same time: Your phone number must hold Green / High quality throughout the qualification window. A drop to Yellow during the window resets the qualification clock. To qualify for the next tier, you need to send to a specific volume of unique customers within the past week — roughly the lower bound of the next tier (e.g. to move to Tier 2, sustain near Tier 1's 1.000-customer cap with high quality). Tier increases are evaluated automatically by Meta. The upgrade typically appears within 24–48 hours of meeting the criteria. The new cap takes effect immediately. You can verify your business in Meta Business Manager to unlock additional trust signals that help tier progression. See [Meta's verification process](https://www.facebook.com/business/help/2058515294227817) for details. ### How to move down a tier A quality drop to Low (Red) typically results in: * Immediate throughput reduction on your current tier (e.g. Tier 3 may be capped at Tier 2 levels) * Tier downgrade if quality stays Low for \~7 days * Template suspensions on the templates that drove the quality issues Recovery is possible but slow — Meta requires sustained high-quality sending after the offending behavior stops. Plan to send only your best-performing, most-targeted templates during recovery; one bad campaign can extend the recovery period by days. ## How to protect your quality rating These practices have the largest measurable impact on quality, in order of effect: Sending to non-opted-in contacts is the fastest path to high block rates. Galantis enforces this for [Marketing-category sends](/galantis/whatsapp/compliance/opt-in-consent), but imported lists need careful review — never import a list as `SUBSCRIBED` without verifiable proof of opt-in. A Utility template that delivers marketing content gets flagged by Meta's reviewers and, if approved by accident, by customers as spam. Use Marketing for promotional content even if Meta's per-message cost is higher — the quality hit from mis-categorization is more expensive long-term. Messages that address the customer by name and reference their specific order or product are perceived as relevant; generic blasts read as spam. Galantis supports `{{1}}` `{{2}}` variables in every template — use them. Configure per-automation [frequency caps](/galantis/whatsapp/automations/frequency-caps) so a single customer isn't hit by multiple automations and campaigns in the same week. Over-messaging is one of the top three drivers of blocks. When a customer replies STOP, their state moves to `UNSUBSCRIBED` and they're excluded from every future send. Never attempt to re-engage opted-out customers through new lists, manual imports, or alternative templates — Meta tracks this as a deliberate violation. Template buttons that link to a different page than the body implies, headers that promise content the body doesn't deliver, or misleading variables all generate complaints. Truthful templates correlate strongly with green quality ratings. A brand-new WABA suddenly sending to 1.000 customers on day one is more likely to generate blocks than a gradual ramp from 100 to 500 to 1.000 over a week. Tier-up signals come from sustained quality, not maximum volume. ## Common violations to avoid These are the most frequent causes of quality degradation and template rejection: * **Marketing to non-opted-in customers** — `NOT_SUBSCRIBED`, `UNKNOWN`, or `UNSUBSCRIBED` states * **Mis-categorized templates** — Utility templates with promotional CTAs or offer language * **Over-messaging** — multiple campaigns or automation sequences hitting the same customers within a short period without frequency caps * **Misleading buttons or variables** — a button URL that goes somewhere different from what the template text implies * **Imported lists without proof of consent** — purchased lists, scraped numbers, or "they bought from us once so they must want marketing" * **Re-engaging opted-out customers** — re-importing UNSUBSCRIBED customers under new lists is treated as a deliberate workaround ## Monitoring quality from Galantis Galantis surfaces the message-level signals that move quality before Meta's rating catches up to them: Per-campaign and per-automation delivered / read / failed rates. Sudden drops in read rate are an early warning of quality degradation. Daily new opt-outs by campaign and automation. A spike correlates strongly with the next quality downgrade. Templates pending, approved, or rejected — including rejection reasons that point at category mismatches. Meta's authoritative rating, viewed in WhatsApp Manager. Galantis links out — this lives in Meta, not in your Shopify dashboard. ## Recovering from a damaged number If your number drops to Yellow or Red: 1. **Stop the offending sends immediately.** Pause campaigns and automations that triggered the drop — don't try to "send something better to recover." 2. **Audit what happened.** Review the last 7–14 days of sends, opt-outs, and template approvals. Identify the campaign or automation that drove block / report spikes. 3. **Tighten consent.** Re-verify that everyone you're sending to is genuinely opted in. Remove any imported lists you can't prove consent for. 4. **Resume with your best performers.** Send only your highest-engagement templates to your most engaged audience segments. Build up volume gradually. 5. **Monitor daily.** Track quality in Meta Business Manager and read / opt-out rates in Galantis. Recovery is measurable in days to weeks, not hours. If a number is fully flagged or restricted, recovery may require a Meta appeal — see Meta's [policy enforcement documentation](https://business.whatsapp.com/policy) and contact Galantis support for guidance. *** How Galantis enforces consent — the single biggest input to quality. Template-specific quality signals and optimization. Configuring per-automation and per-customer send limits. Authoritative phone number quality view in Meta Business Manager. # Templates vs Session Messages Source: https://docs.digifist.com/galantis/whatsapp/compliance/templates-vs-session When a pre-approved template is required and when a free-form session message can be used — and how the four conversation categories (Marketing, Utility, Authentication, Service) affect both. WhatsApp defines two types of outbound messages: **template messages** (pre-approved structured messages) and **session messages** (free-form messages inside an active 24-hour conversation window). Which type is required depends entirely on whether the window is open. Get this wrong and the message fails to send — there's no graceful fallback. This page covers the mechanics of each message type, when each is mandatory, and how the four conversation categories (Marketing, Utility, Authentication, Service) shape what content you can put in a template. ## Quick reference | | Template message | Session message | | -------------------------------- | ----------------------------------------------- | ----------------------------------------------- | | **Requires Meta approval** | ✅ Yes | ❌ No — free-form | | **When it can be sent** | Any time, inside or outside the window | Only inside an active 24-hour window | | **Content** | Fixed structure with optional dynamic variables | Free-form text, images, documents, audio, video | | **Use in campaigns** | Required | Not allowed | | **Use in automations** | Required | Not allowed | | **Use in Inbox (window open)** | Optional — session messages preferred | Preferred | | **Use in Inbox (window closed)** | Required | Not allowed | ## Template messages Template messages are pre-approved by Meta before they can be sent. They have a fixed structure — header (text, image, video, document, or location), body (with optional dynamic variables), footer, and buttons (quick replies, URLs, or phone numbers) — with variables that are populated at send time from customer or order data. Templates are required for: * **All campaign broadcasts** — campaigns are always proactive outbound * **All automation-triggered messages** — automations fire on Shopify or platform events, not customer messages * **Any proactive outbound message** when no active conversation window exists * **Inbox agent replies** when the 24-hour window has closed Templates are created and submitted via **Templates → New template** in the Galantis app. Approval typically takes minutes to a few hours; some categories (Authentication) get reviewed faster than others. A template in `DRAFT`, `PENDING`, or `REJECTED` status cannot be sent. **Match the template category to the actual content.** Submitting a marketing message as a Utility template — to bypass marketing restrictions or to save on Meta's per-message cost — is a Meta policy violation. Templates get rejected during review, and repeat violations downgrade your phone number's quality. See [Template categories](/galantis/whatsapp/templates/template-categories) for the rules of each category. ## The four conversation categories Every template you submit must be categorized as one of Meta's four [conversation categories](https://whatsappbusiness.com/products/conversation-categories/marketing/): Promotional and transactional-with-promotional content. Discounts, product launches, abandoned-cart recoveries, re-engagement. **Requires explicit marketing opt-in.** Highest Meta per-message cost. Transactional, informational, service messages about a customer's existing relationship with your store. Order confirmations, shipping updates, return status. **No marketing opt-in required** (but the customer must have provided their number). One-time passcodes (OTP) and verification messages. Login codes, account verification, password reset. Strict format requirements; lowest Meta per-message cost. Free-form replies inside the 24-hour customer service window. Doesn't require an approved template — this is the session-message mode. In Galantis, **every delivered template consumes exactly 1 Conversation credit**, regardless of category — see [Billing — conversations](/galantis/whatsapp/billing/conversations). Meta's per-conversation cost on its own invoice varies by category and destination country; that's a separate Meta charge, not a Galantis credit. See [Meta rate card](/galantis/whatsapp/billing/meta-rate-card). ## Session messages Session messages are free-form and require no approval. They can only be sent inside an active 24-hour [conversation window](/galantis/whatsapp/compliance/conversation-window) — meaning the customer must have sent an inbound message within the last 24 hours. Session messages are available to: * **Inbox agents** replying to an active inbound conversation * (Automations and campaigns never use session messages — they always send templates regardless of window state) Inside an open window, session messages support: * Free-form text up to 4,096 characters * Images, videos, documents, audio messages, voice notes * Contact cards and locations * Interactive components (quick replies, list messages) This is what makes WhatsApp feel like genuine customer support — agents reply naturally without picking from a fixed list of pre-approved phrases. ## Practical implications **For campaign builders** — every campaign requires a template. There is no session-message equivalent for broadcast sends. Plan template creation and approval time into your campaign schedule: 1–2 days lead time is safe for Marketing templates, 1–2 hours typically for Utility, and minutes for Authentication. **For automation builders** — every Action node sends a template. When building flows, ensure the template assigned to each Action node has `APPROVED` status before activating the automation. Automations referencing unapproved templates are flagged in the validator and can't be activated until resolved. **For Inbox agents** — the Inbox interface adapts to the window state. With an active window, agents type freely. Once the window closes, the reply box switches to a template picker so agents pick an approved template to re-open the conversation. No manual time-tracking is needed. ## Why category accuracy matters Submitting the wrong category isn't just a paperwork issue — it cascades into real problems: * **Higher rejection rate at submission**: Meta's reviewers actively check that content matches the declared category. A promotional message submitted as Utility is the most common rejection reason. * **Quality damage if approved by accident**: If a mis-categorized template slips through and customers report it as unwanted marketing, your phone number's quality rating takes a hit. See [Quality & deliverability](/galantis/whatsapp/compliance/quality-deliverability). * **Policy strikes**: Repeated mis-categorization is treated as a deliberate workaround and can lead to messaging restrictions or account-level enforcement. The shortest path through these problems: be honest about what each template is. If it includes a discount, CTA, or offer — Marketing. If it's a status update with no promotion — Utility. If it's a one-time code — Authentication. See [Template categories](/galantis/whatsapp/templates/template-categories) for full guidance. *** How the 24-hour window opens, resets, and closes. Detailed rules for what content fits in Marketing, Utility, and Authentication. Marketing requires opt-in; Utility doesn't — the consent rules in detail. How to build, submit, and manage templates in Galantis. # Developer Reference Source: https://docs.digifist.com/galantis/whatsapp/developer-reference/index Technical reference for Galantis integrations — WhatsApp Cloud API endpoints and Shopify and Meta webhook payload reference. The Developer Reference covers the external API and webhook interfaces that Galantis integrates with. It is intended for engineers and technical teams who need to understand which Meta Cloud API endpoints Galantis uses, and the full payload structure for every Shopify and Meta webhook the platform registers and receives. ## What this section covers All Meta Cloud API endpoints Galantis calls — message sending, template management, media upload, and catalog. Complete payload reference for all registered Shopify and Meta webhooks. ## Related sections For merchant-facing integration behavior — how data flows between Shopify, Galantis, and Meta, how webhooks drive automation triggers, and how to manage the Shopify and Meta connections — see the [Integrations](/whatsapp/integrations/index) section. # Webhooks Reference Source: https://docs.digifist.com/galantis/whatsapp/developer-reference/webhooks-reference Complete payload reference for all Shopify and Meta webhooks registered and received by Galantis. This page is the authoritative payload reference for every webhook Galantis registers with Shopify and every webhook event it receives from Meta. It covers the topic, the expected payload structure, and what the webhook drives in Galantis. For the processing behavior and downstream effects of each webhook, see [Integrations — Shopify Webhooks](/whatsapp/integrations/shopify/webhooks) and [Integrations — Meta Webhooks](/whatsapp/integrations/meta-whatsapp/meta-webhooks). This page focuses on payload structure for developer reference. ## Security **Shopify webhooks** — All incoming Shopify webhooks are validated via HMAC signature verification using the `X-Shopify-Hmac-Sha256` header before processing. Requests with invalid or missing signatures are rejected with a `401` response and never reach the handler. **Meta webhooks** — All incoming Meta webhooks are validated via signature verification using the `X-Hub-Signature-256` header before processing. Invalid signatures are rejected. Both verifications use the app secret for their respective platform. Webhook payloads are never processed without a valid signature. *** ## Shopify webhooks ### Customer webhooks **`customers/create`** ```json theme={null} { "id": 123456789, "email": "customer@example.com", "first_name": "Jane", "last_name": "Smith", "phone": "+521234567890", "tags": "vip, newsletter", "accepts_marketing": true, "email_marketing_consent": { "state": "subscribed", "opt_in_level": "single_opt_in" }, "sms_marketing_consent": { "state": "subscribed", "opt_in_level": "single_opt_in" }, "locale": "es", "created_at": "2025-01-15T10:00:00-05:00", "updated_at": "2025-01-15T10:00:00-05:00" } ``` *** **`customers/update`** Same structure as `customers/create`. All fields are included in the payload — Galantis diffs the incoming data against the stored record to identify changes. *** **`customers/delete`** ```json theme={null} { "id": 123456789 } ``` Only the customer ID is included. Galantis uses the ID to locate and remove the corresponding contact record. *** **`customers/marketing_consent_updated`** ```json theme={null} { "id": 123456789, "email_marketing_consent": { "state": "subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": "2025-01-15T10:05:00-05:00" }, "sms_marketing_consent": { "state": "subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": "2025-01-15T10:05:00-05:00" }, "phone": "+521234567890", "updated_at": "2025-01-15T10:05:00-05:00" } ``` Galantis maps the SMS/phone marketing consent state to the corresponding internal consent status on the contact record. *** **`customer_tags/added`** ```json theme={null} { "customer_id": 123456789, "tags_added": ["vip", "loyalty-gold"] } ``` *** **`customer_tags/removed`** ```json theme={null} { "customer_id": 123456789, "tags_removed": ["loyalty-silver"] } ``` *** ### Order webhooks **`orders/create`** ```json theme={null} { "id": 987654321, "order_number": 1042, "customer": { "id": 123456789, "phone": "+521234567890" }, "total_price": "149.00", "currency": "MXN", "line_items": [ { "id": 111111, "title": "Running Shoes", "quantity": 1, "price": "149.00", "product_id": 555555, "variant_id": 666666, "vendor": "NikeMX", "properties": [] } ], "tags": "", "fulfillment_status": null, "financial_status": "paid", "created_at": "2025-01-15T11:00:00-05:00" } ``` *** **`orders/cancelled`** Same structure as `orders/create` with `cancelled_at` and `cancel_reason` fields added: ```json theme={null} { "id": 987654321, "order_number": 1042, "customer": { "id": 123456789 }, "total_price": "149.00", "cancelled_at": "2025-01-16T09:00:00-05:00", "cancel_reason": "customer" } ``` *** **`orders/updated`** (used for shipping) ```json theme={null} { "id": 987654321, "order_number": 1042, "customer": { "id": 123456789 }, "fulfillment_status": "fulfilled", "fulfillments": [ { "id": 222222, "status": "success", "tracking_company": "DHL", "tracking_number": "1234567890", "tracking_url": "https://track.dhl.com/...", "created_at": "2025-01-16T14:00:00-05:00" } ] } ``` Galantis interprets `orders/updated` payloads to drive the relevant automation triggers (for example, `ORDER_SHIPPED` when fulfillment data indicates a successful shipment). See [Automations — triggers](/galantis/whatsapp/automations/triggers) for the available triggers. *** ### Product and collection webhooks **`products/create`** ```json theme={null} { "id": 555555, "title": "Running Shoes", "body_html": "

Full product description...

", "vendor": "NikeMX", "tags": "shoes, running, sport", "images": [ { "id": 777777, "src": "https://cdn.shopify.com/...", "width": 1000, "height": 1000 } ], "variants": [ { "id": 666666, "title": "Size 42 / Blue", "price": "149.00", "compare_at_price": "180.00", "sku": "RUN-42-BLU", "inventory_quantity": 15, "option1": "42", "option2": "Blue", "image_id": 777777 } ], "options": [ { "name": "Size", "values": ["40", "41", "42", "43"] }, { "name": "Color", "values": ["Blue", "Black", "White"] } ], "status": "active", "created_at": "2025-01-15T09:00:00-05:00" } ``` *** **`products/update`** Same structure as `products/create`. Galantis processes the full payload — updated fields overwrite stored values, and `inventory_quantity` changes are checked for the 0→>0 Back-in-Stock restock pattern. *** **`products/delete`** ```json theme={null} { "id": 555555 } ``` *** **`collections/create`**, **`collections/update`** ```json theme={null} { "id": 888888, "title": "Running Gear", "handle": "running-gear", "products_count": 24, "updated_at": "2025-01-15T12:00:00-05:00" } ``` *** **`collections/delete`** ```json theme={null} { "id": 888888 } ``` *** ### Billing and app lifecycle webhooks **`app_subscriptions/update`** ```json theme={null} { "app_subscription": { "admin_graphql_api_id": "gid://shopify/AppSubscription/123", "name": "Galantis Pro Plan", "status": "ACTIVE", "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-15T00:00:00Z", "currency": "USD" } } ``` *** **`app/uninstalled`** Handler: Tenant deactivation ```json theme={null} { "id": 12345678, "myshopify_domain": "your-store.myshopify.com" } ``` *** ### GDPR webhooks **`customers/redact`** ```json theme={null} { "shop_id": 12345678, "shop_domain": "your-store.myshopify.com", "customer": { "id": 123456789, "email": "customer@example.com", "phone": "+521234567890" }, "orders_to_redact": [987654321, 987654322] } ``` *** **`shop/redact`** ```json theme={null} { "shop_id": 12345678, "shop_domain": "your-store.myshopify.com" } ``` *** ## Meta webhooks **`messages` (inbound)** ```json theme={null} { "object": "whatsapp_business_account", "entry": [{ "id": "{waba_id}", "changes": [{ "value": { "messaging_product": "whatsapp", "metadata": { "display_phone_number": "521234567890", "phone_number_id": "{phone_number_id}" }, "contacts": [{ "profile": { "name": "Jane Smith" }, "wa_id": "521234567890" }], "messages": [{ "from": "521234567890", "id": "wamid.{message_id}", "timestamp": "1705320000", "type": "text", "text": { "body": "Hello, I have a question about my order" } }] }, "field": "messages" }] }] } ``` For `QUICK_REPLY` button responses, the `messages[0].type` is `"interactive"` and the payload includes: ```json theme={null} "interactive": { "type": "button_reply", "button_reply": { "id": "{button_id}", "title": "{button_label}" } } ``` *** **`message_status` (status update)** ```json theme={null} { "object": "whatsapp_business_account", "entry": [{ "id": "{waba_id}", "changes": [{ "value": { "messaging_product": "whatsapp", "metadata": { "display_phone_number": "521234567890", "phone_number_id": "{phone_number_id}" }, "statuses": [{ "id": "wamid.{message_id}", "status": "delivered", "timestamp": "1705320030", "recipient_id": "521234567890" }] }, "field": "messages" }] }] } ``` `"status"` values: `"sent"`, `"delivered"`, `"read"`, `"played"`, `"failed"`. For `"failed"` status, an `"errors"` array is included: ```json theme={null} "errors": [{ "code": 131047, "title": "Re-engagement message", "message": "Message failed to send because more than 24 hours have passed since the customer last replied to this number.", "error_data": { "details": "..." } }] ``` *** **`message_template_status_update`** ```json theme={null} { "object": "whatsapp_business_account", "entry": [{ "id": "{waba_id}", "changes": [{ "value": { "event": "APPROVED", "message_template_id": 123456, "message_template_name": "order_confirmation_es", "message_template_language": "es", "reason": null }, "field": "message_template_status_update" }] }] } ``` `"event"` values: `"APPROVED"`, `"REJECTED"`, `"PAUSED"`, `"DISABLED"`. For `"REJECTED"`, the `"reason"` field contains Meta's rejection explanation. *** ## Related guides * [Integrations — Shopify webhooks](/galantis/whatsapp/integrations/shopify/webhooks) — Processing behavior and downstream effects * [Integrations — Meta webhooks](/galantis/whatsapp/integrations/meta-whatsapp/meta-webhooks) — Processing behavior for Meta webhook events * [Automations — triggers](/galantis/whatsapp/automations/triggers) — Which webhook events drive which automation triggers # WhatsApp API Source: https://docs.digifist.com/galantis/whatsapp/developer-reference/whatsapp-api Meta Cloud API endpoints used by Galantis — message sending, template management, media upload, and catalog operations. Galantis communicates with Meta through the WhatsApp Cloud API (Meta Graph API v23.0). This page documents every endpoint Galantis calls, the operation each performs, and relevant implementation notes. ## What this covers * All Meta Cloud API endpoints Galantis uses * Request patterns per endpoint category * Rate limiting and throughput considerations * Media upload protocol ## Base URL All Meta Graph API calls use: ``` https://graph.facebook.com/v23.0/ ``` The version segment (`v23.0`) is the Graph API version Galantis targets. Meta increments API versions periodically — Galantis pins to a specific version to ensure consistent behavior across all API calls. ## Message API **Send a WhatsApp message** ``` POST https://graph.facebook.com/v23.0/{phone_number_id}/messages ``` Used for all outbound message sends — campaigns, automation Action Nodes, and Inbox agent template replies. The `{phone_number_id}` path parameter identifies which of the workspace's connected phone numbers the message is sent from. For workspaces with multiple phone numbers, each send operation specifies the correct `phone_number_id` for the intended sender. **Request body structure (template message):** ```json theme={null} { "messaging_product": "whatsapp", "to": "{customer_whatsapp_number}", "type": "template", "template": { "name": "{template_name}", "language": { "code": "{language_code}" }, "components": [ { "type": "body", "parameters": [ { "type": "text", "text": "{variable_value_1}" }, { "type": "text", "text": "{variable_value_2}" } ] } ] } } ``` Variable values are populated at send time — each `{{N}}` placeholder is resolved to its mapped customer, order, or static value before the request is constructed. **Request body structure (session message — free-form text):** ```json theme={null} { "messaging_product": "whatsapp", "to": "{customer_whatsapp_number}", "type": "text", "text": { "body": "{message_text}" } } ``` Session messages are only sent within an active 24-hour conversation window. See [Compliance — Conversation Window](/whatsapp/compliance/conversation-window). **Response:** Meta returns a message ID on success. This ID is stored in Galantis and used to match incoming status update webhooks back to the original send. ## Template API **Create a message template** ``` POST https://graph.facebook.com/v23.0/message_templates ``` Called when a merchant submits a template from **Templates → New Template** in the Galantis dashboard. The full template structure — category, language, header, body, footer, and buttons — is serialized and sent to Meta for review. **Fetch template list and status** ``` GET https://graph.facebook.com/v23.0/message_templates ``` Called to sync current template approval statuses from Meta into Galantis. Used to reconcile local template records with Meta's current state — particularly useful after a reconnection or during initial setup when template status may have changed while the connection was inactive. Template status changes in normal operation arrive via the `message_template_status_update` webhook rather than through polling, so this endpoint is used primarily for reconciliation rather than routine status tracking. **Delete a template** ``` DELETE https://graph.facebook.com/v23.0/message_templates ``` Called when a merchant deletes a template from the Galantis dashboard. Removes the template from Meta's system in addition to the local record. ## Media Upload API **Upload media (resumable protocol)** ``` POST https://graph.facebook.com/v23.0/{app_id}/uploads ``` Used when a merchant uploads an image, video, or document for use as a template header. Meta's media upload uses a resumable protocol — large files are uploaded in chunks, and the upload can be resumed if interrupted. The upload process: 1. Galantis initiates the upload session with the file size and MIME type 2. Meta returns an upload session ID 3. Galantis uploads the file data (in chunks for large files) 4. Meta returns a media handle on completion 5. The media handle is stored on the template header component and submitted with the template Media handles are referenced in template submissions and remain valid as long as the template exists and the WABA connection is active. **Supported media types for template headers:** | Header type | Accepted formats | Notes | | ----------- | ---------------- | ------------------------------------ | | Image | JPEG, PNG | Minimum 500×500px for catalog images | | Video | MP4 | | | Document | PDF | Standard PDF format | ## Catalog API **Push products to Meta Catalog** ``` POST https://graph.facebook.com/v23.0/{catalog_id}/products ``` Called to push product data from Galantis into the connected Meta Catalog. The `{catalog_id}` path parameter identifies the specific Meta Catalog associated with the workspace. Product data is sent as a batch — multiple products are pushed in a single request where possible, reducing API call overhead for large catalogs. The request payload maps Galantis product variant fields to Meta's product schema: * `title` → product name * `description` → product description * `price` → product price (formatted per Meta's currency requirements) * `availability` → derived from `inventory_quantity` * `image_link` → product image URL * Variant options → mapped to Meta's item group and variant structure After a successful push, the product's sync status in Galantis is updated from `PENDING` to `SYNCED`. On failure, the status moves to `FAILED` with the error response stored for diagnostic review. ## Rate limiting and throughput **Message API throughput** — WhatsApp enforces per-phone-number message sending limits that scale with the phone number's quality tier and business verification level. Galantis processes recipients in batches that respect these limits. Rate limit errors from the Message API cause the affected batch to be retried. **Template API rate limits** — Template creation and status fetching are subject to standard Graph API rate limits. These are unlikely to be encountered in normal usage — template operations are infrequent relative to message sends. **Catalog API rate limits** — Bulk product pushes are subject to Catalog API rate limits. Galantis processes products in batches sized to avoid exceeding these limits. ## Related guides * [Webhooks Reference](./webhooks-reference) — Meta webhooks that deliver status callbacks for Message API sends * [Templates](/whatsapp/templates/index) — How template submissions map to Template API calls * [Catalog — Meta Catalog](/whatsapp/catalog/meta-catalog) — How catalog data is pushed to Meta # AI Flow Builder Source: https://docs.digifist.com/galantis/whatsapp/galantis-ai/ai-flow-builder How Galantis AI assists during automation flow creation — trigger suggestions, action sequences, node configuration, and the LarAgent framework. The AI Flow Builder is Galantis AI's active assistance mode — it engages while you are building a flow on the canvas, suggesting appropriate node configurations based on your stated goal and highlighting issues as they appear. It is powered by the LarAgent framework and operates as an intelligent layer on top of the standard visual flow editor. ## What this covers * How AI assistance activates during flow building * Trigger and action suggestions * How node-level highlighting works * Optimization suggestions surfaced during building * The LarAgent framework * What AI assistance does and does not control ## How AI assistance works during building Galantis AI monitors the state of the flow canvas as you build. It does not require you to prompt it or switch to a separate interface — assistance surfaces contextually based on what nodes are placed and how they are configured. AI assistance operates in two modes during building: **Goal-based suggestions** — When you start a new automation, Galantis AI can accept a description of what you want the flow to accomplish and suggest a starting structure: the most appropriate trigger, a recommended delay, and an action sequence that fits the use case. This is most useful when you know the outcome you want but are less certain which trigger or condition structure achieves it. **Inline configuration assistance** — As you place nodes and configure them, Galantis AI monitors for incomplete or potentially problematic configurations and surfaces targeted suggestions at the node level. It does not wait for you to finish the entire flow before offering input. ## Trigger and action suggestions When Galantis AI suggests a flow structure based on a goal, it maps the described use case to the available trigger types and action sequences in Galantis. Examples of how goals map to suggestions: | Goal described | Suggested trigger | Suggested structure | | ------------------------------------- | ----------------------- | -------------------------------------------------------------------------- | | Recover abandoned checkouts | `ABANDONED_CHECKOUT` | Delay 30 min → Condition (Order Value) → Action (VIP or standard template) | | Welcome new customers | `CUSTOMER_CREATED` | Delay 10 min → Action (welcome template) | | Re-engage lapsed buyers | `USER_ADDED_TO_SEGMENT` | Delay 1 hour → Action (win-back template) | | Notify subscribers when stock returns | `BACK_IN_STOCK` | Action (restock notification template) | | Cross-sell after purchase | `ORDER_PLACED` | Condition (Product tag) → Delay 3 days → Action (recommendation template) | Suggestions are starting points — you can accept them as-is, modify the suggested structure, or discard them and build manually. Accepting a suggestion places the recommended nodes on the canvas in the suggested configuration, which you then adjust and connect to your specific templates and settings. ## Node-level highlighting When Galantis AI detects an issue or opportunity at a specific node, it highlights that node visually on the canvas and surfaces a description in the node's settings panel. Highlights fall into two categories: **Error highlights** — Configuration issues that will block activation. These are also caught by the formal validation step, but surfacing them during building means you can resolve issues as you go rather than encountering a list of errors at the end. Error-highlighted nodes show the specific problem — a missing template assignment, an unconnected branch, or a condition with incomplete logic. **Advisory highlights** — Optimization suggestions that will not block activation but represent a meaningful improvement opportunity. These are discussed in more detail below. ## Optimization suggestions Beyond errors, Galantis AI surfaces optimization suggestions on flows that are structurally valid but could perform better. These suggestions draw on automation best practices: **Missing delay after trigger** — An automation that sends a message immediately on trigger — with no delay node — is flagged. For most use cases (abandoned checkout, new customer welcome, post-purchase), immediate dispatch produces a worse customer experience than a short delay. Galantis AI surfaces this when no delay exists between the trigger and the first action. Galantis AI also highlights incomplete or conflicting node configurations as optimization suggestions beyond blocking errors. ## The LarAgent framework Galantis AI is powered by LarAgent — the AI framework underlying the flow builder's intelligent assistance capabilities. LarAgent handles the interpretation of flow state, the mapping of merchant goals to node structures, and the evaluation logic behind both error detection and optimization suggestions. LarAgent operates on the structured JSON representation of the flow — the same `nodes` and `edges` arrays that define the flow canvas. It evaluates the graph structure, node configurations, and their relationships to identify issues and generate suggestions. ## What AI assistance does and does not control Understanding the boundaries of AI assistance prevents confusion about what Galantis AI changes versus what remains in merchant control: **Galantis AI does:** * Suggest trigger types and flow structures based on described goals * Highlight nodes with configuration errors during building * Surface optimization advisory suggestions on valid flows * Run formal validation checks before activation * Identify unapproved templates assigned to Action Nodes **Galantis AI does not:** * Create or submit templates — template creation and approval remain manual processes in the Templates module * Automatically fix errors — it identifies and describes them, but all changes are made by the merchant on the canvas * Send messages autonomously — all message dispatch happens through the same automation execution engine used by manually built flows * Override merchant configuration — AI suggestions are suggestions, not enforced changes. A merchant can dismiss any advisory highlight and activate a flow that does not follow the suggested structure ## Related guides * [Flow Validation](./flow-validation) — The formal validation checks run before activation * [Automations — Flow Builder](/whatsapp/automations/flow-builder) — The underlying canvas, node types, and flow structure * [Automations — Triggers](/whatsapp/automations/triggers) — All available trigger types Galantis AI can suggest * [Automations — Recipes](/whatsapp/automations/recipes/index) — Pre-built flow examples that reflect the structures Galantis AI recommends # Flow Validation Source: https://docs.digifist.com/galantis/whatsapp/galantis-ai/flow-validation The validation checks Galantis AI runs before an automation can be activated — what is evaluated, what each result means, and how to resolve issues. Flow validation is a mandatory step that runs before any automation can be activated. It evaluates the assembled flow against a set of structural, compliance, and configuration checks and returns either a clean result — the flow can proceed to activation — or a set of flagged issues that must be resolved first. Validation produces two types of results: **blocking checks** that must pass before activation is permitted, and **advisory checks** that surface recommendations without preventing activation. ## What this covers * When validation runs * Blocking checks and advisory checks * All validation checks and what they look for * How to read and resolve validation results ## When validation runs Validation runs automatically when you attempt to activate an automation. It also runs continuously in the background during flow building — issues detected during building are surfaced as inline node highlights without blocking the canvas. The formal validation gate only applies at the moment of activation. A flow can be saved in any incomplete state as a draft — validation does not prevent saving. It only prevents the transition from inactive to active. ## Check types **Blocking checks** — Structural and compliance conditions that must pass for the flow to be activatable. A flow with any blocking failure cannot be activated until the issue is resolved. **Advisory checks** — Logical completeness and optimization quality checks. Advisory results surface recommendations without preventing activation. A flow with unresolved advisory suggestions can still be activated. ## Validation checks **Check:** Every Action Node in the flow must reference a template with `APPROVED` status. **Type:** Blocking **What is checked:** Galantis inspects every Action Node's template assignment and verifies the current status of each referenced template. If any Action Node references a template in `DRAFT`, `PENDING_APPROVAL`, or `REJECTED` status, the flow fails this check. **Why it blocks:** WhatsApp does not accept message sends using unapproved templates. Activating a flow with an unapproved template would result in every customer who reaches that Action Node receiving a failed message send — the flow would appear active but would not function. **How to resolve:** * Open **Templates** and check the status of the template assigned to the flagged Action Node * If `PENDING_APPROVAL` — wait for Meta's review to complete. Approval typically takes minutes to a few hours * If `DRAFT` — submit the template for Meta review * If `REJECTED` — review the rejection reason, fix the template content, and resubmit Once the template reaches `APPROVED` status, return to the flow and attempt activation again — no changes to the flow itself are required. A template that was `APPROVED` when the automation was built can be paused by Meta after activation. The template approval check runs at activation time — it does not continuously monitor template status after the flow is live. If a template is paused post-activation, the flow will remain active but affected Action Nodes will fail for customers who reach them. **Check:** Every node in the flow must be connected — no orphaned nodes, no dead-end paths. **Type:** Blocking **What is checked:** Galantis validates that the flow graph has no disconnected nodes — every node placed on the canvas must have at least one incoming edge (except the TriggerNode, which has none by design) and at least one outgoing edge (except terminal Action Nodes and explicit exit points). Specifically: * Every node is reachable from the TriggerNode via a connected edge path * No node sits on the canvas without being connected to the flow **Why it blocks:** An orphaned node indicates an incomplete flow — either a node was placed and never connected, or a connection was deleted without removing the node. Customers enrolled in the flow would never reach disconnected nodes, making them dead configuration that implies intent but delivers nothing. **How to resolve:** Open the canvas and look for any nodes without connecting edges. Either connect them into the flow at the appropriate position, or delete them if they were placed in error. The canvas highlights disconnected nodes when validation fails. **Check:** Every Condition Node must have both its YES branch and NO branch connected to a subsequent node. **Type:** Blocking **What is checked:** Galantis inspects every Condition Node in the flow and confirms that both output paths — the YES branch and the NO branch — connect to at least one subsequent node. A condition with one connected branch and one dead-end branch fails this check. **Why it blocks:** A condition branch that leads nowhere means customers routed down that path have no further nodes to execute — they are enrolled and then silently dropped from the flow. This is almost always a configuration error rather than an intentional design choice. **How to resolve:** * Identify the Condition Node with an unconnected branch — it will be highlighted on the canvas * Connect the open branch to an Action Node, Delay Node, or another Condition Node * If the intent is genuinely to do nothing on one path — for example, a YES branch sends a message but the NO branch should exit silently — connect the NO branch to an explicit exit node or a final Action Node appropriate for that path If one branch of a condition should result in no action — for example, "if the customer has already ordered, exit the flow" — connect that branch to a terminal point rather than leaving it unconnected. This makes the intent explicit and passes the validation check. **Check:** Every Condition Node must have its logic fully configured — no empty fields, no partially defined rules. **Type:** Blocking **What is checked:** Galantis inspects the condition logic defined in each Condition Node and verifies that every rule has a complete configuration: a condition type selected, an operator chosen, and a value provided. A condition node that was placed but not configured — or where a rule was started but not completed — fails this check. **Common incomplete states:** * A condition type selected but no operator or value set * An AND/OR group with an empty rule slot * A condition using a dynamic value source that has not been selected **How to resolve:** Open each flagged Condition Node and complete all rule fields. Every rule in every group must have a fully specified condition type, operator, and value before the flow can activate. **Check:** The automation must have a frequency cap configured. **Type:** Blocking **What is checked:** Galantis verifies that a frequency cap is set on the automation. An automation with no frequency cap configured fails this check. **Why it blocks:** A flow without a frequency cap has no protection against a customer being enrolled and messaged multiple times in rapid succession if the trigger fires repeatedly. This is a guardrail against accidental over-messaging, which damages phone number quality and customer trust. **How to resolve:** Open the automation settings and configure a frequency cap appropriate for the trigger type and use case. See [Automations — Frequency Caps](/whatsapp/automations/frequency-caps) for guidance on which cap to choose. **Check:** Galantis AI evaluates the flow's logical quality against automation best practices and surfaces advisory recommendations. **Type:** Advisory — non-blocking Advisory checks do not prevent activation. They surface as highlighted suggestions that can be reviewed, acted on, or dismissed. A flow with unresolved advisory suggestions can still be activated. **Common advisories:** **Missing delay after trigger** — No Delay Node between the TriggerNode and the first Action Node. Immediate dispatch is flagged as an advisory because most use cases benefit from a short delay. Exception: the Back-in-Stock notification flow intentionally omits a delay — this advisory can be dismissed in that context. **Identical templates on both condition branches** — Both the YES and NO paths of a Condition Node reference the same template. The condition adds no differentiation value and is likely a configuration oversight. **High-frequency trigger with `EVER` cap** — A trigger like `ORDER_PLACED` or `CUSTOMER_CREATED` paired with an `EVER` frequency cap flags the question of whether once-per-customer-lifetime enrollment is genuinely intended. If so, the advisory can be dismissed. If not, the cap should be adjusted. **Broad trigger with no conditions** — A trigger that fires for all customers (e.g., `CUSTOMER_CREATED`, `ORDER_PLACED`) with no Condition Node before the first Action Node sends the same message to every enrollee without differentiation. Galantis AI flags this as an opportunity to add targeting. **How to resolve or dismiss:** Review each advisory by opening the flagged node on the canvas. If the suggestion is valid, make the recommended change. If the advisory does not apply to your specific flow design, dismiss it and proceed to activation. ## Validation result summary | Check | Type | Blocks activation | | -------------------------------------- | -------- | ----------------- | | Template approval status | Blocking | Yes | | Node connections | Blocking | Yes | | Condition branch completeness | Blocking | Yes | | Condition logic completeness | Blocking | Yes | | Frequency cap configured | Blocking | Yes | | Missing delay after trigger | Advisory | No | | Identical templates on both branches | Advisory | No | | High-frequency trigger with `EVER` cap | Advisory | No | | Broad trigger with no conditions | Advisory | No | ## How to read validation results When validation runs at activation time, results are surfaced in two ways: **Inline on the canvas** — Nodes with blocking errors are highlighted in a distinct error state. Clicking a highlighted node opens its settings panel, which shows the specific issue and the resolution path. **Validation summary panel** — A summary of all blocking errors and advisory suggestions appears as a list. Blocking errors must be resolved before the activation button becomes available. Advisory suggestions are listed separately and can be individually dismissed. Work through blocking errors one at a time, starting with the simplest to resolve (unconnected nodes, missing frequency caps) before addressing more complex issues (template approval status, incomplete condition logic). ## Related guides * [AI Flow Builder](./ai-flow-builder) — How inline validation highlights surface during building, before the formal activation check * [Automations — Flow Builder](/whatsapp/automations/flow-builder) — The full validation check reference from the flow builder perspective * [Templates — Approval Lifecycle](/whatsapp/templates/approval-lifecycle) — Resolving template status issues that block activation * [Automations — Frequency Caps](/whatsapp/automations/frequency-caps) — Configuring the frequency cap required by validation # Galantis AI Source: https://docs.digifist.com/galantis/whatsapp/galantis-ai/index AI-powered assistance for building, validating, and optimizing WhatsApp automation flows — built into the Galantis flow editor. Galantis AI is an intelligent layer built directly into the automation flow builder. It helps merchants design automation flows faster, catch configuration errors before activation, and surface optimization opportunities that would otherwise require expert knowledge of WhatsApp automation best practices. It is not a separate product or a chatbot interface. Galantis AI operates inside the visual flow canvas — suggesting, validating, and flagging as you build, without requiring any additional setup or configuration beyond using the flow builder itself. ## What Galantis AI does Galantis AI contributes to three distinct stages of automation development: **Building** — When you describe a goal or begin placing nodes, Galantis AI suggests appropriate triggers, conditions, and action sequences based on what you are trying to accomplish. This is most useful for merchants who are new to automation flows or who are building a flow type they have not configured before. **Validating** — Before a flow can be activated, Galantis AI runs structural and compliance checks against the assembled flow. It identifies incomplete configurations, missing connections, unapproved templates, and logic gaps that would cause the flow to malfunction or fail to activate. Validation is not optional — it gates activation. **Optimizing** — Beyond blocking errors, Galantis AI surfaces advisory suggestions for flows that are technically valid but could perform better. A missing delay in an abandonment recovery flow, a condition branch that sends the same template to both YES and NO paths, or a frequency cap that seems too permissive for the trigger type — these are the kinds of recommendations Galantis AI surfaces. ## Guides in this section How Galantis AI assists during flow creation — suggestions, node types, and the LarAgent framework. The validation checks Galantis AI runs before activation — what is evaluated and how to resolve issues. ## Relationship to the Flow Builder Galantis AI is an enhancement to the standard flow builder — not a replacement for it. Every automation you build with AI assistance uses the same node types, trigger options, and configuration settings as a manually built flow. The underlying structure is identical. This means flows built with AI suggestions can be fully edited, extended, and adjusted manually at any point. There is no locked-in AI structure — the canvas is always editable. See [Automations — Flow Builder](/whatsapp/automations/flow-builder) for the full reference on node types, canvas behavior, and flow structure. # Before You Start & Troubleshooting Source: https://docs.digifist.com/galantis/whatsapp/getting-started/before-you-start A quick checklist to prepare for connecting WhatsApp, plus fixes for the stumbling blocks merchants hit most during setup. ## Before you connect Have these ready so the connection goes through in one sitting: Be logged in to the Facebook account that manages your Business Manager, with your 2FA device on hand. The same card you use for Meta Ads works. Meta charges per conversation. Legal business name, address, VAT number and a website on your own .com domain. A new dedicated number (recommended), or your existing WhatsApp Business app number for coexistence. Setting up on a screen-share call with our team? Share your **whole desktop**, not just a browser tab. Meta's signup opens in a separate pop-up window that a single shared tab will hide. ## Common stumbling blocks Meta's Embedded Signup opens as a separate pop-up. If you are screen-sharing, switch to sharing your entire desktop so we can see it. On your own, just bring that window to the front. Use the browser where you are already signed in to Business Manager, and keep your 2FA device ready, since Facebook often sends a confirmation to your phone. Switching browsers (for example to Safari) can help if one keeps rejecting the login. Select **USD**. The per-message pricing is the same; only the billing currency differs. During verification, Meta auto-suggests businesses with names similar to yours. They are not related to you, so ignore them and enter your own business details. Choose **verification by phone call** instead of SMS. Meta calls the number and reads out the code, so make sure someone can answer it. VoIP and toll-free numbers are often not accepted; use a regular mobile or landline. Display-name approval for marketing messages usually clears in 1 to 2 business days. You can already send utility messages (like order confirmations) as soon as the number is verified. ## After connecting: warm up first A new number needs warming up. WhatsApp is strict about spam and will restrict a number that sends marketing too fast. Start with transactional messages so the number builds a healthy reputation. Add abandoned-checkout recovery once the number is warm. Scale into broadcasts and new-collection launches from there. Do not send a marketing campaign on a brand-new number, even for a launch. Let it warm up first, or you risk getting the number banned. # Choose a Phone Number Source: https://docs.digifist.com/galantis/whatsapp/getting-started/choose-phone-number Pick the right WhatsApp Business phone number for your store: dedicated new number (recommended), an existing number, or your WhatsApp Business app number with coexistence — all handled inside the connection modal. The phone number you connect to Galantis becomes your store's WhatsApp identity. Customers see it on every campaign, automation, and inbox conversation. Picking the right number on day one prevents quality issues, brand confusion, and migration hassle later. You have three legitimate paths. **We strongly recommend a new dedicated number** — but the other two work, and Meta's connection modal (Embedded Signup) handles all of them from inside the Galantis app. You don't need to prepare anything in Meta Business Manager before installing Galantis. The connection modal lets you add a new number, pick an existing WABA number, or connect a WhatsApp Business app number with coexistence — all in one flow. ## Why a dedicated number is the best choice A dedicated number is one that **only** powers your business WhatsApp on Galantis. Not your owner's personal WhatsApp, not your store's customer-service WhatsApp Business app, not a shared team phone. Meta tracks message quality per phone number. A dedicated number means your marketing volume won't bring down a number you use for support — and vice versa. Customers know exactly which number is "the store." No accidental personal replies, no confusion when a team member leaves. A fresh number goes through Meta's verification once, with no surprises from prior usage. The display-name approval is clean. When you later add a second number (different brand, region, or use case), the original stays clean. See [Multiple phone numbers](/galantis/whatsapp/integrations/meta-whatsapp/multiple-phone-numbers). Add phone number ## Your three options Get a fresh SIM or business line that has never been used on consumer WhatsApp, WhatsApp Business app, or another WABA. You add it inside the connection modal — Meta sends a verification code to that number to confirm ownership. **Best for:** every store that doesn't already have a customer-facing WhatsApp number it can't change. Most mobile or landline numbers from a major carrier work. Some VoIP and toll-free numbers are not supported by Meta — check before purchasing a number specifically for WhatsApp. Meta verifies the number by sending a one-time code via SMS or voice call to confirm ownership. In the Galantis app, click **Connect WhatsApp**. In the Embedded Signup modal, choose "Add a new phone number" and follow the prompts. See [Connect WhatsApp](/galantis/whatsapp/getting-started/whatsapp-connection). If you already own a business number that has **never** been registered on consumer WhatsApp or the WhatsApp Business app, you can use it directly. The flow is the same as adding a new number — the modal sends a verification code and registers the number to your WABA. **Best for:** stores that already have a published business line they want to keep using. This path is for a number that has **never** been on WhatsApp — it registers directly on the Cloud API. If your number is currently on the **WhatsApp Business app** and you want to keep using the app, use the coexistence flow in the next tab instead. If your number is currently on the **WhatsApp Business app**, you can connect it to Galantis with **coexistence**: you keep using the WhatsApp Business app exactly as you do today, while Galantis sends campaigns, automations and order updates on the same number. No migration, and you do not lose the app. On the connect screen, choose **Continue setup**, then continue into Meta's Embedded Signup and select your existing WhatsApp Business app number. Meta shows a screen titled "Transfer your contacts and chat history". Your business profile, your contacts and the **last 6 months of chat history** are shared with the connected account, so your recent conversations carry over. On the phone that holds the number, scan the on-screen QR code with the **WhatsApp Business app**. Then look for a message from the official Facebook Business Account, tap **Connect**, and confirm sharing your chats. The account links in about 45 seconds. Back in the browser, complete the remaining steps (region, payment method, business verification) on the Galantis page. You keep replying to customers in the WhatsApp Business app as usual. New conversations also appear in the Galantis Inbox, and Galantis runs campaigns and automations on the number. Coexistence depends on Meta eligibility: a recent WhatsApp Business app version, the number already active on that app, and regional availability. If your number is not eligible, connect a new dedicated number for Galantis and keep your existing number on the WhatsApp Business app. ## Phone number requirements Whichever path you choose, the number must be: * **Owned by your business** — you can receive an SMS or voice call to confirm verification * **Not currently active on consumer WhatsApp** — if it is, sign out from consumer WhatsApp on that device first; the Embedded Signup modal will explain the next step if there's a conflict * **From a Meta-supported number type** — most mobile and landline numbers work; some VoIP / toll-free numbers don't. See [Meta's phone number requirements](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started) ## What's a display name? The **display name** is the human-readable name shown to recipients alongside your number — for example, "Sahara Style" rather than just `+1 555 0142`. You set it during the Embedded Signup flow. * Pick a name that matches your brand and your Meta Business name * Avoid promotional language, all-caps shouting, or third-party brand names * Meta reviews display names — approval is typically quick but can take 1–2 business days For Meta's current display name rules and prohibited terms, see [Meta's WhatsApp Business Display Name guidelines](https://developers.facebook.com/docs/whatsapp/embedded-signup/onboard-clients). ## Quick decision guide Lowest friction, cleanest quality rating, easiest to change later if your strategy evolves. Pick a fresh number, give it a clear display name aligned with your brand, and connect it through the modal. ## FAQ Yes — you can add a second number and route campaigns / automations / inbox to it, then deactivate the original. The original number's quality rating doesn't transfer. See [Multiple phone numbers](/galantis/whatsapp/integrations/meta-whatsapp/multiple-phone-numbers). Technically possible, but strongly discouraged. Personal WhatsApp activity affects the number's quality rating, your owner's private chats live next to business chats on the same number, and removing the owner from the team later becomes painful. No. Connecting a WhatsApp Business app number uses **coexistence**, so you keep the app and keep replying to customers there. During setup Meta shares your business profile, contacts, and the last 6 months of chat history with the connected account, and new conversations also appear in the Galantis Inbox. The SMS / voice-call verification is instant. The display-name review by Meta typically clears in 1–2 business days. You can start sending utility messages immediately after verification; marketing-category messages require display-name approval. Yes. A landline is verified **by phone call** rather than SMS — Meta calls the number and reads out the code, so make sure someone can answer it. VoIP and toll-free numbers are often not accepted; use a regular mobile or landline. Meta supports phone numbers from most countries, but a small list of regions is restricted. If verification fails because of country support, the Embedded Signup modal will explain — and Galantis support can suggest alternatives. *** Get the app installed on your store, then connect WhatsApp. Walk through the Embedded Signup modal step by step. # Choose Your Connection Source: https://docs.digifist.com/galantis/whatsapp/getting-started/choose-your-connection The two ways to connect WhatsApp to Galantis — the full WhatsApp Platform for campaigns and automations, or a simple click-to-chat button — and which one to pick so you don't have to reconnect later. When you connect WhatsApp during onboarding, you choose between two paths. They look similar, but they unlock very different things. Picking the right one on day one saves you from reconnecting later. The chat-button-only option adds a clickable WhatsApp button to your store, but it **cannot send campaigns, automations, or templates**. If you installed Galantis to recover abandoned carts or run WhatsApp marketing, choose the full WhatsApp Platform connection. ## The two options at a glance | | Full WhatsApp Platform | Chat button only | | ------------------------------------------------------------------ | -------------------------------------------------------- | ------------------------- | | Clickable WhatsApp button on your store | Yes | Yes | | Campaigns and broadcasts | Yes | No | | Automations (abandoned checkout, back-in-stock, welcome, win-back) | Yes | No | | Message templates | Yes | No | | Catalog and product messages | Yes | No | | Shared Inbox with full Shopify context | Yes | Inbound only | | What it connects | WhatsApp Business Platform (Cloud API) via Meta | A wa.me link only | | Setup | Meta Embedded Signup, register a number, about 5 minutes | Instant, just your number | | Cost | Paid plan plus Meta conversation charges | Free | ## Which one is right for you? Choose this if you want to send campaigns, recover abandoned carts, or run any automation. This is the full Galantis product. Choose this only if you just want a clickable WhatsApp button on your storefront and do not need campaigns or automations. ## Full WhatsApp Platform (recommended) This connects your store to the **WhatsApp Business Platform (Cloud API)** through Meta's official Embedded Signup, right inside Galantis. On the connect screen, choose **"Continue setup"**. It unlocks everything Galantis is built for: * **Campaigns** to segmented audiences with approved templates * **Automations** that fire on Shopify events: abandoned checkout, new order, new customer, product restock * **Message templates** and **catalog / product messages** * The **shared Inbox** with full Shopify customer context You will need a phone number to register. A new dedicated number is recommended for the cleanest quality rating. Already using the WhatsApp Business app? You can keep it. See [Choose a Phone Number](/galantis/whatsapp/getting-started/choose-phone-number) for connecting your existing number with coexistence. Walk through Meta's Embedded Signup modal step by step. Use a new number, an existing one, or your WhatsApp Business app number with coexistence. Connect screen two options Marketing-category messages require Meta to approve your display name, which usually clears in 1 to 2 business days. You can send utility messages as soon as your number is verified. ## Chat button only This adds a click-to-chat (wa.me) button to your storefront so customers can start a WhatsApp conversation with you. On the connect screen, this is the **"Use my number only"** option. It does **not** connect the WhatsApp Business Platform, so the marketing and automation features stay locked. With the chat button only, you cannot: * Send campaigns or broadcasts * Run any automation (abandoned cart, back-in-stock, welcome, win-back) * Use message templates * Send catalog or product messages You receive inbound chats only. **When this is enough:** a store that only wants a simple "message us on WhatsApp" button and has no plans to send marketing or automated messages. **Upgrading later:** you can switch to the full platform at any time from [Connect WhatsApp](/galantis/whatsapp/getting-started/whatsapp-connection). Your store keeps running while you connect. ## FAQ Yes. Open **Connect WhatsApp** and run the full setup whenever you are ready. Nothing you have already configured is lost. Campaigns, automations, and templates run on the WhatsApp Business Platform (Cloud API) through Meta. The chat-button option does not set that up. WhatsApp also requires pre-approved templates and customer opt-in before any marketing message can be sent. See [Opt-in & Consent](/galantis/whatsapp/compliance/opt-in-consent) and [Templates](/galantis/whatsapp/templates/index). For the full platform, a new dedicated number is recommended for the cleanest quality rating and easiest scaling. See [Choose a Phone Number](/galantis/whatsapp/getting-started/choose-phone-number). *** Get the app installed on your store, then connect WhatsApp. Connect the full WhatsApp Platform through Meta's Embedded Signup. # First Automation Source: https://docs.digifist.com/galantis/whatsapp/getting-started/first-automation Build and activate your first event-triggered WhatsApp automation flow. Automations are event-driven flows that send WhatsApp messages automatically when a defined trigger occurs in Shopify or Galantis. Once active, they run without manual intervention — responding to real customer behavior in real time. This guide walks you through building a simple automation using the visual flow builder. ## What this covers * Choosing a trigger * Adding a delay and an action node * Selecting an approved template * Activating the automation ## Before you begin Confirm the following are ready: * Your WhatsApp Business Account is connected — see [WhatsApp Connection](./whatsapp-connection) * You have at least one `APPROVED` message template — see [First Campaign](./first-campaign) for how to create and submit a template Automations can only send approved WhatsApp templates. An automation with an unapproved template will be flagged and cannot be activated. ## Building your first automation In the Galantis dashboard, go to **Automations** and click **New Automation**. Select the event that starts the flow. Common starting points for a first automation: * **Abandoned Checkout** — fires when a customer starts checkout but doesn't complete it (polled every 10 minutes) * **New Customer Created** — fires when a new customer registers on your Shopify store * **New Order Placed** — fires immediately when an order is created Each trigger has an option to **include existing users** — this retroactively enrolls customers who already match the trigger condition at the time of activation. Connect a Delay node after the trigger. Set a wait time — for example, 30 minutes for an abandoned checkout recovery, or 10 minutes for a new customer welcome. This gives customers time to complete an action before receiving a message. Connect an Action node after the delay. Select **WhatsApp Message** and choose an approved template. Map template variables to customer or order data fields. Configure how often this automation can fire per customer (e.g., once per 24 hours, once ever). Add exclusion rules to skip specific lists or segments if needed. Review the flow, confirm there are no validation warnings, and toggle the automation to **Active**. ## Example: New Customer Welcome This is a simple and effective first automation: ``` Trigger: New Customer Created → Delay: 10 minutes → Action: Send welcome template with first-order discount ``` The delay prevents the message from arriving at the exact same moment as the Shopify registration confirmation email, improving the experience. ## Checking automation activity After activating, go to **Automations → \[Automation Name] → Activity** to see a log of every customer enrolled, which nodes they passed through, and the status of each step (`COMPLETED`, `PENDING`, `FAILED`, `SKIPPED`). ## Related guides * [Automations](/whatsapp/automations/index) — Full reference for triggers, conditions, actions, and frequency caps * [Automation Recipes](/whatsapp/automations/recipes/index) — Pre-built flow examples for common use cases * [Templates](/whatsapp/templates/index) — Creating and managing approved templates # First Back-in-Stock Source: https://docs.digifist.com/galantis/whatsapp/getting-started/first-back-in-stock Install the Back-in-Stock widget, capture your first subscription, and test a restock notification. The Back-in-Stock module captures customer WhatsApp numbers when a product variant is out of stock and automatically sends a notification when inventory is replenished. The widget is injected directly into your Shopify storefront — no manual theme editing is required. This guide walks you through customizing the widget, verifying it on your storefront, submitting a test subscription, and confirming the restock notification fires correctly. ## What this covers * Customizing the widget appearance * Verifying the widget appears on out-of-stock product pages * Submitting a test subscription * Triggering a test restock notification ## Before you begin Your WhatsApp Business Account must be connected before restock notifications can be sent. The widget itself can be installed and tested for subscription capture independently, but notifications require an active WhatsApp connection. ## Setting up the widget In the Galantis dashboard, go to **Back-in-Stock → Settings**. Configure the widget to match your brand. Key settings include button position (right, left, or custom), button background color, CTA label text, headline text shown in the subscription modal, and form background colors. Visit a product page on your Shopify store where at least one variant is out of stock. The subscription button should appear automatically. If it does not appear, confirm Galantis has `write_script_tags` permission in Shopify and clear your browser cache. Enter your own WhatsApp number in the widget form and submit. A subscription record will be created in Galantis with `ACTIVE` status. ## Testing the restock notification In your Shopify admin, find the product and variant you subscribed to in the previous step. Change the variant's inventory from `0` to any positive number and save. This triggers a `products/update` webhook from Shopify. Galantis detects the inventory change, fires the `BACK_IN_STOCK` automation trigger, and sends a WhatsApp notification to all `ACTIVE` subscribers for that variant. Check your WhatsApp — you should receive the restock message within a few seconds. In **Back-in-Stock → Subscriptions**, confirm the test subscription moved from `ACTIVE` to `NOTIFIED`. Notified subscriptions do not receive a second notification for the same restock event. ## Subscription status reference | Status | Description | | ----------- | ----------------------------------------------------------- | | `PENDING` | Newly submitted, awaiting activation | | `ACTIVE` | Enrolled — will receive notification when restocked | | `NOTIFIED` | Notification sent — subscription expires after notification | | `CANCELLED` | Customer unsubscribed | Only customers with `SUBSCRIBED` or better marketing consent status receive restock notifications. Customers with `UNSUBSCRIBED` or `REDACTED` status are automatically excluded, even if they have an `ACTIVE` subscription record. ## Related guides * [Back-in-Stock](/whatsapp/back-in-stock/index) — Full module reference including widget design options, inventory rules, and analytics * [WhatsApp Connection](./whatsapp-connection) — Required for sending restock notifications # First Campaign Source: https://docs.digifist.com/galantis/whatsapp/getting-started/first-campaign Create a WhatsApp message template, get it approved, and send your first campaign broadcast. Campaigns are one-time WhatsApp broadcasts sent to a targeted audience. Before you can send a campaign, you need at least one approved message template — Meta must review and approve all templates before they can be used in outbound messages. This guide walks you through creating a template, waiting for approval, and launching your first campaign. ## What this covers * Creating and submitting a message template for Meta approval * Setting up a new campaign * Selecting an audience * Scheduling or sending immediately ## Before you begin Confirm the following are ready: * Your WhatsApp Business Account is connected — see [WhatsApp Connection](./whatsapp-connection) * You have at least one Customer List or Segment with `SUBSCRIBED` customers Only customers with `SUBSCRIBED` marketing consent status are included in campaign sends. Customers who have not opted in are automatically excluded. ## Step 1 — Create and submit a template In the Galantis dashboard, go to **Templates** and click **New Template**. Add a header (optional), body text, footer (optional), and buttons (optional). Use `{{1}}`, `{{2}}` placeholders in the body for dynamic content such as customer name or order details. Select **Marketing** for promotions, offers, and product announcements. Select **Utility** for transactional messages such as order confirmations or shipping updates. The category must accurately reflect the message content. Save and submit the template. Status will change to `PENDING_APPROVAL`. Approval typically takes minutes to a few hours. Templates in `DRAFT` or `REJECTED` status cannot be used in campaigns. Wait for `APPROVED` status before proceeding. If a template is rejected, review the rejection reason in **Templates → \[Template Name] → Status**, fix the issue, and resubmit. ## Step 2 — Create the campaign Once your template is approved, go to **Campaigns** and click **New Campaign**. Choose the approved template from the list. Map any template variables (e.g., `{{1}}` → `customer.first_name`) to the correct customer or order data fields. Select one or more Customer Lists or Segments to include. You can also add exclusion rules to remove specific groups (e.g., customers who purchased in the last 7 days). Use **Estimate Reach** to preview your final audience count before sending. Choose **Send now** to dispatch immediately, or set a future date and time to schedule the campaign. ## Checking campaign results After sending, track performance in **Campaigns → \[Campaign Name]**: | Metric | Description | | ------------- | ------------------------------------------------- | | **Sent** | Messages dispatched to the WhatsApp API | | **Delivered** | Confirmed delivered to the customer's device | | **Read** | Customer opened the message | | **Failed** | Delivery failed — check per-message error details | ## Related guides * [WhatsApp Connection](./whatsapp-connection) — Required before sending any campaign * [Templates](/whatsapp/templates/index) — Full reference for template components and formats * [Campaigns](/whatsapp/campaigns/index) — Audience targeting, scheduling, and analytics # First Catalog Sync Source: https://docs.digifist.com/galantis/whatsapp/getting-started/first-catalog-sync Sync your Shopify products and collections into Galantis and optionally push them to Meta. The Catalog module keeps your Shopify product data in sync with Galantis and Meta, making it available for product message templates — Single Product Messages (SPM), Multi-Product Messages (MPM), and Whole Catalog messages. Without a synced catalog, these message formats cannot function. This guide walks you through your first manual sync, reviewing product data, and optionally connecting Meta for product messages. ## What this covers * Triggering a full Shopify catalog sync * Reviewing synced products and excluding items if needed * Connecting Meta and pushing products for product messages * Understanding sync status per product ## Before you begin Your WhatsApp Business Account must be connected before setting up a Meta Catalog push. A catalog connection is only required if you plan to use product message formats — standard campaigns and automations do not require it. Product Catalog ## Syncing your Shopify catalog In the Galantis dashboard, go to **Catalog → Shopify Sync**. Click **Sync Now** to import all your Shopify products and collections into Galantis. This is a one-time full import — after this, Galantis keeps product data current automatically via Shopify webhooks. Once the sync completes, browse the product list. Check that titles, prices, variants, and images have imported correctly. If specific products should not be synced to Meta, flag them with the `exclude_from_syncforce` option on the individual product record. This does not remove them from Galantis — it only prevents them from being pushed to Meta. ## Pushing products to Meta (optional) This step is only required if you plan to use SPM, MPM, or Whole Catalog message formats. Go to **Catalog → Meta Sync**. You have two options: * **Import an existing Meta Catalog** — connect a catalog you have already configured in Meta Commerce Manager. * **Create a new Meta Catalog from Galantis** — build and push directly from your Shopify data, without setting anything up in Meta Commerce Manager. Once connected, trigger a Meta push. Products that are successfully pushed will show a `SYNCED` status. Review the status column per product. Address any `FAILED` items by checking the error details and resolving the issue (for example, images that do not meet Meta's size requirements). ## Sync status reference | Status | Description | | --------- | --------------------------------------------- | | `PENDING` | Queued for Meta upload | | `SYNCED` | Successfully pushed to Meta | | `FAILED` | Sync error — review error details per product | ## How ongoing sync works After your first manual sync, Galantis keeps product data current automatically. Shopify triggers a webhook whenever a product is created, updated, or deleted — Galantis processes these in near real time. You only need to run a manual sync again after bulk edits or if you need to recover from a sync error. Product images must be JPEG or PNG format and at least 500×500px to pass Meta's validation. Images that do not meet this requirement will cause the product to show a `FAILED` status on the Meta push. ## Related guides * [Catalog](/whatsapp/catalog/index) — Full reference for sync configuration, product fields, and catalog health * [WhatsApp Connection](./whatsapp-connection) — Required for Meta Catalog integration * [First Campaign](./first-campaign) — Use catalog products in campaign messages # Getting Started Source: https://docs.digifist.com/galantis/whatsapp/getting-started/index Go from a fresh Shopify store to a fully operational Galantis WhatsApp setup — typically 5 minutes from install to a connected dashboard if you already have a WhatsApp Business Account. Galantis WhatsApp turns your Shopify store into a measurable WhatsApp revenue channel — campaigns, automations, a shared inbox, and product messaging, all powered by Meta's WhatsApp Business Platform (Cloud API). This Getting Started section walks you through every step from "I just heard about Galantis" to "I sent my first campaign." If you already have a WhatsApp Business Account, **the connection itself takes about 5 minutes** after install — Meta's Embedded Signup modal handles every step inside the Galantis app. There are two ways to connect: the **full WhatsApp Platform** (campaigns and automations) or a **simple chat button**. If you are not sure which you need, read [Choose Your Connection](/galantis/whatsapp/getting-started/choose-your-connection) first. **Marketing requires opt-in.** Before you can send WhatsApp marketing messages to customers, they must have explicitly opted in. Galantis enforces this on every send. Plan how you'll capture consent (checkout checkbox, account preferences, Back-in-Stock subscribe) before you go live. See [Opt-in & consent](/galantis/whatsapp/compliance/opt-in-consent). ## The three phases Prep your accounts, install Galantis on Shopify, and connect WhatsApp through Meta's Embedded Signup modal. Create a template, run your first campaign, build your first automation, and (optionally) sync your catalog and Back-in-Stock widget. Watch the analytics, tune templates, scale up with more automations and additional numbers as the channel grows. ## Phase 1 — Set up The four accounts you need: Shopify, Meta Business, a phone number, and a Meta payment method. Three paths — new dedicated (recommended), existing number, or migrate from the WhatsApp Business app. One click from the [Galantis App Store listing](https://apps.shopify.com/galantis-whatsapp). Grant permissions, land in the in-app wizard. Meta's Embedded Signup modal walks you through WABA setup, phone registration, and display-name approval — all inline in Galantis. ## Phase 2 — Send your first message Build a template, get it approved by Meta, send your first WhatsApp broadcast to an opted-in audience. Set up an event-triggered flow — for example, a New Customer Welcome that fires when a Shopify order is placed. Sync Shopify products to Galantis and push them to Meta. Required if you plan to send product messages. Install the storefront widget and test a restock notification end to end. ## Phase 3 — Iterate Plans, Conversation credits, add-ons, and how Galantis vs Meta charges work. Phone number quality rating, template approval signals, and how to keep your number in green status. ## Have questions before you start? Reach the Galantis support team for setup questions, migration help, or anything the docs don't cover. APIs, webhooks, and the technical details for teams integrating Galantis with their own systems. # Requirements Source: https://docs.digifist.com/galantis/whatsapp/getting-started/requirements Accounts and platforms you need before installing Galantis WhatsApp on your Shopify store. Before you install Galantis, make sure you have the four accounts below in place. The setup itself is fast — connecting WhatsApp to your Shopify store typically takes around 5 minutes after install — but each platform has its own one-time signup and verification you should clear first. You do **not** need a pre-existing WhatsApp Business Account (WABA) before installing Galantis. The connection modal can create one for you. See [Connect WhatsApp](/galantis/whatsapp/getting-started/whatsapp-connection). ## What you need Any plan that allows installing third-party apps from the Shopify App Store. Both new stores and established stores work. A Meta Business account that you (or someone on your team) administrates. If you don't have one, the Embedded Signup modal will help you create one. A number for your WhatsApp Business identity. Dedicated new numbers are strongly recommended — see [Choose a phone number](/galantis/whatsapp/getting-started/choose-phone-number). Meta bills WhatsApp messaging directly. Add a valid payment method in Meta Business Manager before going live with real campaigns. ## Detailed checklist ### 1. Shopify store Galantis installs as a standard Shopify app. There's no minimum plan, but you'll need at least Shopify's basic permissions to install apps and grant the data scopes Galantis requests (orders, customers, products). See [Shopify installation](/galantis/whatsapp/getting-started/shopify-installation) for the exact permissions and what each one enables. ### 2. Meta Business account A Meta Business account (sometimes called a Business Portfolio) is the umbrella that holds your WhatsApp Business Account, ad accounts, catalogs, and Pages. If you already run Facebook or Instagram ads for the store, you almost certainly have one. If not, the [Embedded Signup](/galantis/whatsapp/getting-started/whatsapp-connection) flow inside Galantis lets you create one without leaving the app. ### 3. Phone number for WhatsApp This is the identity customers will see and message. The default and recommended choice is a fresh dedicated number — but you can also use an existing number, or migrate one from the WhatsApp Business app, all from inside the Embedded Signup modal. [Choose a phone number](/galantis/whatsapp/getting-started/choose-phone-number) walks through the three options. ### 4. Payment method in Meta Galantis charges through Shopify Billing for plans, Conversation tiers, and add-ons. **Meta charges separately** for the underlying WhatsApp messaging — billed in Meta Business Manager. Without a Meta payment method, you can still install Galantis and explore the dashboard, but you cannot send real WhatsApp messages. * Add or update payment methods in **Meta Business Manager → Billing** * This is independent of any Facebook/Instagram ads payment method, although you can reuse the same card * See [Meta rate card](/galantis/whatsapp/billing/meta-rate-card) for what Meta charges per message **Opt-in required for marketing messages.** Before you can send WhatsApp marketing to a customer, they must have explicitly opted in to receive WhatsApp messages from your store. See [Opt-in & consent](/galantis/whatsapp/compliance/opt-in-consent) for the consent capture methods Galantis supports. Marketing without consent is a Meta policy violation and risks template rejection or account restriction. ## Policies to read once WhatsApp has two policies every store on the platform must follow: The rules for what you can message customers, how often, and with what kind of content. Restrictions on what products and services can be sold or promoted on WhatsApp. Galantis enforces template approval and opt-in capture at the product level, but the policies apply to **your business** — review them before launching. ## Summary checklist * Shopify store with permissions to install apps * Meta Business account (or willingness to create one in the modal) * Phone number for WhatsApp — [pick one](/galantis/whatsapp/getting-started/choose-phone-number) * Payment method on file in Meta Business Manager * Plan to capture opt-in before sending marketing messages *** Three legitimate paths — dedicated, existing, or migrate from the WhatsApp Business app. The actual install flow from the Shopify App Store. # Install on Shopify Source: https://docs.digifist.com/galantis/whatsapp/getting-started/shopify-installation Install Galantis WhatsApp from the Shopify App Store, grant the required permissions, and launch into the in-app onboarding wizard. Galantis WhatsApp is a public Shopify app. Installation is the standard Shopify flow — review permissions, click install, and you land back in your Shopify admin with the Galantis app launched. The whole step usually takes under 2 minutes. There are two ways to connect: the **full WhatsApp Platform** (campaigns and automations) or a **simple chat button**. If you are not sure which you need, read [Choose Your Connection](/galantis/whatsapp/getting-started/choose-your-connection) first. Open the official Shopify App Store listing and click **Install**. You'll be prompted to sign in to Shopify if you aren't already. ## What happens during install Use the install card above or visit [apps.shopify.com/galantis-whatsapp](https://apps.shopify.com/galantis-whatsapp) directly. Sign in to the Shopify account that owns the store you want to install on. Shopify displays the data scopes Galantis requests — customers, orders, products, checkouts, script tags. Each one powers a specific Galantis feature. See [Required permissions](#required-permissions) below for what each scope unlocks. Shopify provisions the install, grants the permissions, and redirects you to the Galantis app inside your Shopify admin. Once you land in Galantis, the onboarding wizard appears on the dashboard. Its first step launches **Meta's Embedded Signup modal** to connect WhatsApp — see [Connect WhatsApp](/galantis/whatsapp/getting-started/whatsapp-connection) for the modal walkthrough. From install to a connected dashboard typically takes about 5 minutes for merchants who already have a WhatsApp Business Account. Galantis WhatsApp on the Shopify App Store ## Required permissions Galantis requests these Shopify permissions during installation. Each one is tied to a specific feature — denying any disables the feature that depends on it. **Read and write customers** — Syncs customer contact profiles and marketing consent state into Galantis. Consent status (`marketing_state`) is pulled from Shopify and kept in sync via webhook so opt-ins captured at checkout or in your customer account appear immediately in Galantis audiences. **Read and write orders** — Required for order-based automation triggers (New Order Placed, Order Cancelled, Order Shipped), revenue analytics, and customer segment rules based on purchase history. **Read products and collections** — Required for the Catalog module. Product and collection data is synced into Galantis and optionally pushed to Meta for product message templates and catalog campaigns. **Read checkouts** — Required for the Abandoned Checkout automation trigger. Galantis polls for incomplete checkouts every 10 minutes and matches them to opt-in customers. **Read and write script tags** — Required to inject the storefront chat widget (Inbox) and the Back-in-Stock subscription widget into your Shopify theme. No manual theme code editing is needed. All permissions are required for the platform to function end to end. You can install Galantis with a subset and still explore the dashboard, but features tied to denied scopes will be inactive until you re-authorize. See the [Shopify permissions reference](/galantis/whatsapp/integrations/shopify/permissions) for the full breakdown. ## What the in-app onboarding wizard does After install, the wizard guides you through: 1. **Connect WhatsApp** — launches Meta's [Embedded Signup modal](/galantis/whatsapp/getting-started/whatsapp-connection) to attach (or migrate, or create) your WABA and phone number 2. **Sync your Shopify catalog** — optional during onboarding, can be skipped and configured later — see [First catalog sync](/galantis/whatsapp/getting-started/first-catalog-sync) 3. **Invite team members** — optional; roles and seats can be configured later under **Settings → Team** Skip steps you're not ready for. The wizard remembers progress and you can resume from the dashboard. ## Uninstalling Galantis If you ever need to uninstall: in your Shopify admin, go to **Settings → Apps and sales channels**, find Galantis WhatsApp, and click **Uninstall**. Shopify revokes all granted permissions automatically. Your Galantis workspace data is retained according to standard retention policy in case you reinstall later. *** The Embedded Signup walkthrough — the natural next step after installing. Deep reference for every scope, what it enables, and what breaks if it's missing. # Connect WhatsApp Source: https://docs.digifist.com/galantis/whatsapp/getting-started/whatsapp-connection Walk through Meta's official Embedded Signup modal inside Galantis to create or attach your WhatsApp Business Account and register a phone number — usually 5 minutes from install to dashboard. After installing Galantis on Shopify, the next step is connecting WhatsApp. Galantis launches **Meta's official Embedded Signup** modal inside the app — a Facebook-hosted pop-up that handles every step of attaching a WhatsApp Business Account (WABA): logging into Meta, picking or creating your Meta Business, registering a phone number, choosing a display name, and verifying ownership. You stay inside the Galantis app the whole time. If you already have a WABA — including a number from the WhatsApp Business mobile app — the same modal lets you connect or migrate it in the same flow. No separate Meta dashboard visit, no manual token handling. There are two ways to connect: the **full WhatsApp Platform** (campaigns and automations) or a **simple chat button**. If you are not sure which you need, read [Choose Your Connection](/galantis/whatsapp/getting-started/choose-your-connection) first. Embedded Signup modal launching from Galantis ## What is Embedded Signup? Embedded Signup is Meta's recommended onboarding flow for Tech Provider apps like Galantis. Instead of asking you to set things up in Meta Business Manager and copy access tokens, the modal walks you through everything in one place and returns the credentials Galantis needs automatically. From your point of view, it's a single pop-up with 5–7 steps. You don't need a pre-existing WABA or Meta access token. The modal creates them for you if needed — or attaches your existing ones if you have them. ## Before you start * Have your Facebook or Meta Business credentials ready (the email and password you use to log into Meta Business Manager) * Decide which phone number you'll connect — see [Choose a phone number](/galantis/whatsapp/getting-started/choose-phone-number) * Make sure the number can receive an SMS or voice call for verification * If you're migrating from the WhatsApp Business mobile app, keep the device with the app available — Meta may ask you to confirm the migration there ## Pick your starting point You're setting up your first WhatsApp Business Account. The modal will create your WABA, attach a phone number, and verify it — all in one pass. On the in-app onboarding screen (or under **Settings → WhatsApp Connection** afterward), click **Connect WhatsApp**. Meta's Embedded Signup modal opens inside the app. Use the Facebook account that administrates (or will administrate) your Meta Business. If you're not signed in, the modal shows the standard Facebook login screen. Select an existing Meta Business if you already have one (for example, for Facebook/Instagram ads). Otherwise create one in the modal — give it your store name and confirm your country. Confirm the name of your WABA. This is internal — customers don't see it; they see your phone number's display name. Enter the number you decided on in [Choose a phone number](/galantis/whatsapp/getting-started/choose-phone-number). Meta will send a 6-digit code via SMS or voice call — enter it in the modal to confirm ownership. Pick the name customers will see in WhatsApp alongside your number — typically your store or brand name. Meta reviews display names; approval is usually quick but can take 1–2 business days. See [Meta's guidelines](https://developers.facebook.com/docs/whatsapp/embedded-signup/onboard-clients) for naming rules. The modal closes and Galantis receives the credentials. You land in the Galantis dashboard, ready to set up your first campaign. Your Meta Business already has a WABA with one or more registered phone numbers. The modal will let you attach the existing WABA to Galantis without re-creating anything. The Embedded Signup modal opens. Use the account that has admin access to your existing WABA. Select your Meta Business when prompted. The modal lists the WABAs you have permission to manage. Pick the one you want to use with Galantis. Pick a number that's already registered to your WABA, or add a new one in the same flow. New numbers go through SMS/voice verification. Galantis receives the credentials. The connected WABA + number appear on your Galantis dashboard. You can connect multiple numbers per workspace — useful for separating brands, regions, or marketing vs. transactional sends. See [Multiple phone numbers](/galantis/whatsapp/integrations/meta-whatsapp/multiple-phone-numbers). Your store's WhatsApp Business mobile app number can move to the Cloud API and into Galantis directly from the Embedded Signup modal — no separate uninstall, no manual cooldown. Meta handles the migration inside the flow. Meta may prompt you to confirm the migration in the app to make sure the number's owner approves the switch. The Embedded Signup modal opens. Use the Meta Business account associated with the number (or that you want to associate with it). The modal recognizes numbers registered to the WhatsApp Business app and offers to move them to the Cloud API. Confirm in the modal — and in the app if Meta asks. You can keep your existing display name or pick a new one. Meta reviews any changes. Galantis receives the migrated number's credentials. The number now sends through the Cloud API; the WhatsApp Business app's role on this number ends. Past chat history stays on the device's local backup; new conversations land in the Galantis Inbox. After migration, the number is on Cloud API only — the WhatsApp Business app can no longer use it. Plan with your team if anyone was using the app to reply to customers manually. Successfully connected ## How to know it worked Once the modal closes successfully, three things confirm the connection: The Galantis dashboard shows your connected WABA name, phone number, and display name under **Settings → WhatsApp Connection**. The number shows a "Verified" or "Pending verification" badge. Marketing-category messages require display-name approval (1–2 days); utility-category messages are sendable immediately. From **Templates**, send a test utility template to your own phone. A delivered message is the cleanest proof the connection works end-to-end. ## Adding more numbers later You can attach additional phone numbers to the same WABA after the initial connection — useful as your store scales to multiple brands, regions, or message types. Open **Settings → WhatsApp Connection → Add number** to re-launch the Embedded Signup modal for the additional number. See [Multiple phone numbers](/galantis/whatsapp/integrations/meta-whatsapp/multiple-phone-numbers) for when and why to use more than one. ## Troubleshooting Check your browser's pop-up blocker — the Embedded Signup modal is a Facebook-hosted pop-up. Allow pop-ups for the Galantis app domain and try again. If you're using strict privacy extensions, temporarily disable them for this session. Make sure the number is correct including country code, and that it can receive international SMS or calls. Retry in the modal — Meta sends a new code each time. If the number is a VoIP or toll-free number, it may not be supported; check Meta's [phone number requirements](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started). Meta rejects names that contain URLs, email addresses, promotional language ("Best", "Cheap", "Sale"), all-caps shouting, or that don't match your brand. Resubmit with a clear brand-aligned name. See Meta's [display name guidelines](https://developers.facebook.com/docs/whatsapp/embedded-signup/onboard-clients). The modal will explain the specific reason — usually an owner mismatch (the Meta Business doing the migration is different from the one that originally registered the number) or a Meta-side hold. Contact Galantis support with the modal's error message and we'll guide the next step. See the [Technical reference: connecting WABA](/galantis/whatsapp/integrations/meta-whatsapp/connecting-waba) for token expiry handling, reconnection, and how the Cloud API access token is stored and refreshed. ## Connect your product catalog To send product carousels and show product details in automations, connect a **Meta product catalog** in Galantis. This is separate from syncing your Shopify store; WhatsApp product messages need a Meta catalog. In Galantis, go to **Settings → Connections** and find the **Product catalog** section. Click **Connect Meta catalog**. Then either select an existing catalog from your Meta Business account, or create a new one by entering a catalog name. Both directions work: Galantis can use a catalog you already have in Meta, or submit a new catalog to Meta for you. Pick which catalog powers product messages: single product message (SPM), multi-product message (MPM), or the whole catalog. The catalog is required for dynamic product carousels and product information in automations. If your catalog does not appear, your Meta permissions may have expired, or you created the catalog after your last Meta login. Reconnect Meta to load the latest catalogs. *** With a connected number, create a template and send your first WhatsApp broadcast. OAuth scopes, token storage, reconnection, and what Galantis does behind the scenes. # Assignment & Routing Source: https://docs.digifist.com/galantis/whatsapp/inbox/assignment-routing How conversations are assigned to agents in the Galantis Inbox — manual assignment, auto-assignment, and the My Tickets view. The Galantis Inbox supports manual and automatic conversation assignment. Assigning conversations to specific agents keeps accountability clear, prevents multiple agents from working the same thread simultaneously, and makes it easy for each team member to focus on their own queue through the My Tickets view. ## What this covers * Manual assignment by admins or agents * Auto-assignment on first reply * The My Tickets view * Current routing limitations ## Manual assignment Any conversation can be manually assigned to a specific team member by an agent or admin using the assignment control in the conversation view. The assigned agent is updated immediately. Use manual assignment when: * A conversation requires a specific agent's expertise (e.g., a product specialist or senior support agent) * An admin is triaging incoming conversations and distributing them across the team * A conversation needs to be reassigned from one agent to another ## Auto-assignment When an agent sends the first reply in a conversation that has no assigned agent, they are automatically assigned to that conversation. This ensures conversations do not remain unowned after an agent begins working on them, without requiring an explicit assignment step. Auto-assignment applies only to the **first reply** in an unassigned conversation. If a conversation already has an assigned agent, sending a reply does not change the assignment. ## My Tickets view Agents can filter the Inbox to display only conversations assigned to them using the **My Tickets** view. This is the primary working view for most support agents — it removes unassigned or other-agent conversations from the queue and keeps focus on the agent's own workload. Admins and roles with broader access can switch between **My Tickets** and an all-conversations view to monitor overall inbox volume or pick up unassigned threads. ## Routing limitations Round-robin routing — automatically distributing new conversations evenly across available agents — is not currently supported natively in Galantis. Conversation distribution is managed through manual assignment or auto-assignment on first reply. For teams with high inbound volume, the recommended workflow is: 1. A designated team lead or admin monitors unassigned conversations 2. The lead manually assigns conversations to available agents based on capacity 3. Agents work their assigned queue through the My Tickets view ## Related guides * [Roles & Permissions](./roles-permissions) — Which roles can assign and reassign conversations * [Conversation Lifecycle](./conversation-lifecycle) — How conversation statuses interact with assignment * [Inbox Analytics](./inbox-analytics) — Tracking assignment and response performance per agent # Conversation Lifecycle Source: https://docs.digifist.com/galantis/whatsapp/inbox/conversation-lifecycle How conversations move through OPEN, PENDING, and RESOLVED statuses in the Galantis Inbox. Every conversation in the Galantis Inbox has a status that reflects its current state in the support workflow. Statuses help agents prioritize work, track which conversations need attention, and close out resolved threads. Understanding how statuses work — and how they transition — is essential for running an organized and responsive inbox. ## What this covers * The three conversation statuses and what each means * How agents transition conversations between statuses * How conversations reopen automatically * The relationship between conversation status and the WhatsApp 24-hour window ## Conversation statuses | Status | Meaning | | ---------- | ---------------------------------------------------------------------- | | `OPEN` | Active conversation — requires agent attention or action | | `PENDING` | Waiting on a customer reply or an internal action before the next step | | `RESOLVED` | Conversation is closed — no further action needed | ### OPEN A conversation is `OPEN` when it requires attention. All new inbound messages arrive as `OPEN`. This is the default working state — agents pick up `OPEN` conversations to reply, investigate, or escalate. ### PENDING `PENDING` indicates the conversation is in a waiting state. Use this status when you have replied and are waiting for the customer to respond, or when a task needs to be completed internally before the conversation can move forward. `PENDING` is a holding state, not a closed one. Conversations in `PENDING` remain visible and can be actioned at any time. ### RESOLVED `RESOLVED` closes the conversation. Use this when the customer's issue or question has been fully handled and no further action is expected. Resolved conversations are removed from the active queue but remain accessible in conversation history. Resolving a conversation does not affect the WhatsApp 24-hour window. If the window is still active when a conversation is resolved, it will remain active until 24 hours after the customer's last inbound message. ## Transitioning between statuses Agents transition conversations manually using the status controls in the conversation view. Any agent with access to the Inbox can update the status of a conversation assigned to them. Admins can update the status of any conversation. Typical workflow: 1. New inbound message arrives → conversation is `OPEN` 2. Agent replies and is waiting for customer response → agent moves to `PENDING` 3. Customer replies → conversation moves back to `OPEN` automatically 4. Issue resolved → agent moves to `RESOLVED` ## Automatic reopening When a customer sends a new inbound message to a conversation that is `RESOLVED`, the conversation reopens automatically to `OPEN`. This ensures no customer message is missed because a thread was previously closed. The reopened conversation retains the full message history from previous sessions, giving agents the context they need without starting a new thread. ## Relationship with the WhatsApp conversation window The conversation lifecycle status in Galantis and the WhatsApp 24-hour window are separate concepts that run in parallel: * **Galantis status** reflects the internal workflow state managed by your team. * **WhatsApp window** reflects Meta's policy on what type of message can be sent. A conversation can be `RESOLVED` in Galantis while the WhatsApp window is still open. Equally, a conversation can be `OPEN` in Galantis while the WhatsApp window has closed — meaning an agent cannot send a free-form message until the customer writes again or an approved template is used. See [Conversation Window](/whatsapp/compliance/conversation-window) for how the 24-hour window affects what agents can send at any given point. ## Related guides * [Assignment & Routing](./assignment-routing) — How conversations are assigned to agents * [Conversation Window](/whatsapp/compliance/conversation-window) — The WhatsApp 24-hour window rule * [Templates vs Session Messages](/whatsapp/compliance/templates-vs-session) — What agents can send depending on window state # Inbox Analytics Source: https://docs.digifist.com/galantis/whatsapp/inbox/inbox-analytics Track response time, conversation volume, and agent performance across your Galantis Inbox. Inbox analytics give you visibility into how effectively your team is handling customer conversations. The metrics track both the speed and volume of your support operation — helping you identify bottlenecks, measure individual agent performance, and understand conversation patterns over time. ## What this covers * Available Inbox metrics and what each measures * How to interpret response time and resolution data * Agent-level performance breakdown ## Available metrics **First response time**: The average time between a conversation arriving as `OPEN` and the first agent reply being sent. This is the primary speed metric for the Inbox. A low first response time indicates that conversations are being picked up quickly. A high first response time may indicate understaffing, routing inefficiency, or agents being overloaded with concurrent conversations. Monitor this metric alongside conversation volume — a rising response time during a high-volume period is expected, but a consistently high response time during normal volume suggests a structural issue. **Inbound conversation volume**: The total number of new conversations opened during a selected time period. Volume data helps with staffing decisions and capacity planning. Tracking volume over time reveals patterns — peak days, seasonal spikes, or the impact of a campaign sending on inbound message rates. Campaign sends frequently generate inbound replies. If you run a large broadcast, expect a corresponding spike in Inbox volume for the following 24–48 hours and staff accordingly. **Messages sent per agent**: The total number of messages sent by each agent during a selected period. **Conversations resolved per agent**: The number of conversations each agent moved to `RESOLVED` status during a selected period. These metrics provide a per-agent breakdown of workload and output. Use them to identify high-performing agents, spot agents who may be struggling, and distribute workload more evenly through assignment routing. Messages sent and conversations resolved measure different things. An agent can send many messages while resolving few conversations — this may indicate complex or escalated cases, not low performance. Always interpret agent metrics in context. **Average resolution time**: The average time from a conversation opening (`OPEN`) to being marked `RESOLVED`. Resolution time reflects the full lifecycle of a conversation, from first contact to close. It is a more complete picture of support efficiency than response time alone — a fast first response followed by a long unresolved thread still represents a poor customer experience. A high average resolution time may point to: conversations being left in `PENDING` without follow-up, complex issues requiring multiple back-and-forth messages, or agents not closing resolved conversations promptly. ## Best practices * **Track first response time as your primary health metric.** It is the metric most directly in your team's control and most directly experienced by the customer. * **Compare volume to resolution time.** If volume increases and resolution time holds steady, your team is scaling well. If resolution time rises with volume, capacity may need adjustment. * **Review agent performance in aggregate, not in isolation.** Individual message counts vary based on conversation complexity. Look for meaningful outliers rather than minor differences. * **Account for campaign sends when reviewing volume data.** Spikes in inbound conversations shortly after a broadcast are expected — do not interpret them as anomalies. ## Related guides * [Assignment & Routing](./assignment-routing) — How conversation distribution affects agent metrics * [Conversation Lifecycle](./conversation-lifecycle) — How status transitions relate to resolution time measurement * [Inbox Add-on Billing](/whatsapp/billing/add-ons/inbox) — How billable conversations are tracked alongside analytics # Inbox Source: https://docs.digifist.com/galantis/whatsapp/inbox/index Centralized WhatsApp conversation management for your Shopify store — with agent assignment, customer context, and full conversation lifecycle control. The Inbox is the operational hub for all customer WhatsApp conversations in Galantis. Every inbound message from a customer — whether they reached out through the storefront chat widget, replied to a campaign, or responded to an automation — arrives here in a single unified view. Unlike a standard support inbox, the Galantis Inbox surfaces full Shopify customer context alongside every conversation: order history, lifetime value, consent status, and browsing data are visible to agents without leaving the thread. This makes the Inbox useful for both support and pre- or post-purchase sales conversations. ## What this section covers * Installing and configuring the storefront chat widget * Customizing widget appearance and branding * Managing conversation statuses and lifecycle * Agent assignment and routing behavior * Roles, permissions, and team access controls * Inbox analytics and performance metrics ## How the Inbox works The Inbox operates on WhatsApp's 24-hour conversation window model. When a customer sends a message, a window opens and agents can reply freely with session messages. Once the window closes, agents must use an approved template to re-engage. See [Conversation Window](/whatsapp/compliance/conversation-window) for the full rule set. Conversations are assigned to agents manually or automatically on first reply. Agents see only conversations relevant to them through the **My Tickets** view, while admins have visibility across all conversations. ## Guides in this section Install the chat widget on your Shopify storefront via script tag injection. Customize button style, position, colors, and greeting message. Understand OPEN, PENDING, and RESOLVED statuses and how transitions work. Manual and automatic conversation assignment for your support team. Role-based access control for every team member in your workspace. Response time, conversation volume, and agent performance metrics. ## Billing The Inbox is billed per agent seat: **\$19 per seat per month**, including 500 Inbox Threads per seat. **Scale and Enterprise plans include 1 seat** in the plan price; Free, Starter, and Growth plans get 50 threads per month for evaluation but need to add an Additional Agent (\$19) to actively run inbox support. Threads beyond the included amount are billed as tiered overage (\$5 / \$4 / \$3 per 500-thread block depending on monthly volume). See [Inbox Add-on Billing](/galantis/whatsapp/billing/add-ons/inbox) for the full pricing breakdown. # Roles & Permissions Source: https://docs.digifist.com/galantis/whatsapp/inbox/roles-permissions Role-based access control for every team member in your Galantis workspace. Galantis uses a role-based permission system to control what each team member can see and do across the platform. Every user in your workspace is assigned a role, and each role maps to a specific set of granular permissions. Roles are assigned when inviting a team member and can be updated at any time by an Owner or Admin. ## What this covers * All available roles and their access levels * How roles relate to Inbox access specifically * Where to manage team member roles ## Roles **Owner** Full access to every feature and setting in the workspace, including billing management. Only one Owner role exists per workspace. The Owner is the merchant who installed the app. *** **Admin** Full access to all platform features except billing management. Use this role for trusted team leads who need to configure campaigns, automations, templates, and the Inbox without access to subscription or payment settings. **Marketing Manager** Access to Campaigns, Automations, Templates, and Audience. This role covers the full marketing workflow — building automations, creating and submitting templates, managing segments and lists, and launching campaigns. *** **Campaign Operator** Can create and send campaigns. Does not have access to automation building, template creation, or audience management beyond selecting from existing lists and segments. *** **Content Creator** Can create and edit templates only. Use this role for team members responsible for copywriting and template submission who should not have access to campaign sending or automation configuration. **Analyst** Read-only access to analytics across the platform. Can view campaign performance, automation activity, and inbox metrics. Cannot create, edit, or send anything. *** **Data Analyst** Read-only access to customer data and reports. Can view contact profiles, segment membership, and audience data. Cannot access campaign or automation analytics. **Support Agent** Access to the Inbox only. Can view, assign, and reply to conversations. Has no access to campaigns, automations, templates, audience, or analytics. This is the correct role for dedicated support team members whose work is limited to handling customer conversations. Each Support Agent seat is billed at **\$19 per seat per month** (Scale and Enterprise plans include 1 seat in the plan price) — see [Inbox Add-on Billing](/galantis/whatsapp/billing/add-ons/inbox). *** **Viewer** Read-only access across the entire platform. Cannot take any action. Use this role for stakeholders who need visibility into the workspace without the ability to modify anything. ## Role summary | Role | Campaigns | Automations | Templates | Audience | Inbox | Analytics | Billing | | --------------------- | --------- | ----------- | ----------- | --------- | --------- | --------- | ------- | | **Owner** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | **Admin** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | | **Marketing Manager** | ✓ | ✓ | ✓ | ✓ | — | ✓ | — | | **Campaign Operator** | Send only | — | — | View only | — | — | — | | **Content Creator** | — | — | Create/edit | — | — | — | — | | **Analyst** | Read only | Read only | Read only | Read only | Read only | Read only | — | | **Data Analyst** | — | — | — | Read only | — | Read only | — | | **Support Agent** | — | — | — | — | ✓ | — | — | | **Viewer** | Read only | Read only | Read only | Read only | Read only | Read only | — | Galantis uses over 90 granular permissions to control access across the platform. The table above represents the functional access level per role. If you need a custom permission configuration that does not map to an existing role, contact Galantis support. ## Managing team members Team members are invited and assigned roles under **Settings → Team**. Roles can be changed at any time by an Owner or Admin. Changing a role takes effect immediately — there is no pending or confirmation step. ## Best practices * **Assign the most restrictive role that covers the team member's responsibilities.** A marketing manager who only sends campaigns does not need the Marketing Manager role — Campaign Operator is sufficient. * **Reserve Owner access carefully.** The Owner role cannot be duplicated. If the Owner account becomes inaccessible, escalate to Galantis support for workspace recovery options. * **Use Support Agent for all inbox-only team members.** This role is purpose-built for support workflows and prevents accidental access to campaign or automation configuration. * **Review team roles periodically.** When team members change responsibilities or leave, update or remove their access promptly. ## Related guides * [Assignment & Routing](./assignment-routing) — How agent assignment works in practice * [Inbox Add-on Billing](/whatsapp/billing/add-ons/inbox) — Per-seat billing for Support Agent roles # Storefront Widget Source: https://docs.digifist.com/galantis/whatsapp/inbox/storefront-widget Install the Galantis chat widget on your Shopify storefront to capture inbound WhatsApp conversations. The storefront widget adds a WhatsApp chat button to your Shopify store. When a customer taps it, they are connected to your WhatsApp Business number and a conversation is created in the Galantis Inbox. Galantis injects the widget via a Shopify script tag — no manual theme editing is required. ## What this covers * Installation steps and how script injection works * Placement options * How to verify the widget is live on your storefront * Troubleshooting widget display issues ## How installation works Galantis uses Shopify's script tag system to inject the chat widget into your storefront automatically. When you configure the widget in the dashboard, Galantis writes a script tag to your store using the `write_script_tags` Shopify permission. The widget loads on every page that matches your display rules without any changes to your theme code. The `write_script_tags` Shopify permission must be granted for widget injection to work. This permission is requested during the initial app installation. If the widget is not appearing, verify this permission is active under your Shopify app settings. ## Installation steps In the Galantis dashboard, go to **Inbox → Widget Settings**. Set the button position, label text, colors, and greeting message. See [Widget Appearance](./widget-appearance) for the full settings reference. Saving the configuration triggers Galantis to write or update the script tag in your Shopify store. No further action is required to deploy the widget. Visit your store in a browser. The chat button should appear in the configured position. Test by tapping the button — it should open WhatsApp pre-populated with your business number. ## Placement options The widget button can be positioned in three ways: **Bottom-right** — Default position. Works well for most store layouts and does not conflict with common Shopify theme elements. **Bottom-left** — Use when your theme places other fixed elements (such as cookie banners or cart drawers) at the bottom-right. **Custom** — Set a precise position using CSS offset values. Useful when neither default position works with your theme's layout. ## Display rules You can control which pages the widget appears on. Common configurations include: * Show on all pages * Show only on product pages * Hide on the checkout page Display rules are configured under **Inbox → Widget Settings**. ## Verifying the widget After saving your settings, confirm the widget is working correctly: 1. Open your storefront in a browser (not the Shopify theme preview). 2. The chat button should appear in the position you configured. 3. Tap the button — it should launch WhatsApp with your business number pre-filled. 4. Send a test message — it should appear as a new conversation in **Inbox**. ## Troubleshooting If the widget does not appear on your storefront: * Confirm Galantis has `write_script_tags` permission in **Shopify Admin → Apps → \[Galantis] → Permissions**. * Clear your browser cache and reload the storefront page. * Check your browser console for JavaScript errors that may indicate a script loading conflict. * Confirm the page you are viewing matches your configured display rules. The Shopify theme preview editor may not execute third-party script tags. Always verify the widget on your live storefront URL, not inside the Shopify Customizer preview. ## Related guides * [Widget Appearance](./widget-appearance) — Branding and visual configuration options * [Conversation Lifecycle](./conversation-lifecycle) — What happens after a customer sends a message * [Requirements](/whatsapp/getting-started/requirements) — Shopify permission prerequisites # Widget Appearance Source: https://docs.digifist.com/galantis/whatsapp/inbox/widget-appearance Customize the storefront chat widget button, modal, and greeting message to match your brand. The chat widget's appearance is fully configurable from the Galantis dashboard. Every visual element — button position, color, font, label text, and the greeting shown to customers — is controlled through **Inbox → Widget Settings** and applied automatically to your storefront when saved. ## What these settings control * Button position and type * Button colors, font, and CTA text * Greeting message shown before the customer sends their first message * Display rules for which pages show the widget ## How to access Go to **Inbox → Widget Settings**. Configure the appearance options described below. Changes are applied to your storefront immediately after saving. ## Settings **Button position**: Controls where the chat button appears on the page. * **Right** — Bottom-right corner. Default and recommended for most themes. * **Left** — Bottom-left corner. Use when right-side elements conflict with the button. * **Custom** — Precise placement via CSS offset. Use when neither default position fits your layout. *** **Button type**: Determines the visual style of the button. * **Pre-designed** — Uses Galantis's built-in button styles. Quickest to set up and optimized for visibility. * **Custom** — Fully custom button design. Recommended for stores with strict brand guidelines. *** **Button background color**: Sets the fill color of the chat button. Enter a hex value to match your brand color. *** **Button font**: Sets the typeface used for the button label. Enter a custom font family name. Ensure the font is loaded by your Shopify theme — the widget inherits fonts available on the page. *** **Button text**: The CTA label displayed on or beside the button. Keep this short and action-oriented. Common values: `Chat with us`, `Need help?`, `Talk to us`. Short, direct labels perform better than long phrases. The button is a small element — labels beyond 20 characters are likely to be truncated on mobile. **Greeting message**: The opening message shown to the customer inside the chat widget before they send their first message. This is not a WhatsApp message — it is displayed within the widget UI as a prompt to encourage the customer to start a conversation. Use the greeting to set expectations: let the customer know who they are messaging and roughly when to expect a reply. Example values: * `Hi! 👋 Chat with us on WhatsApp — we usually reply within a few minutes.` * `Have a question? We're here to help.` The greeting message is not sent as a WhatsApp message and does not consume a conversation credit. It is purely a UI element within the widget. **Display rules**: Controls which pages on your storefront show the chat widget. By default, the widget appears on all pages. Configure display rules to show or hide the widget on specific pages — for example, hiding it on the checkout page to avoid distraction during purchase, or showing it only on product pages where pre-purchase questions are most likely. ## Best practices * **Match your brand color exactly.** The chat button is a persistent element on every page. A color that clashes with your theme will feel inconsistent and may reduce click rates. * **Test on mobile.** Button position and label length behave differently on small screens. Verify your configuration on a real mobile device, not just a desktop browser resize. * **Keep greeting messages concise.** One or two sentences is sufficient. The goal is to invite the customer to write — not to front-load information before they have asked a question. * **Use custom position with care.** CSS offset values interact with your theme's layout and may conflict with other fixed elements. Test after any theme update that changes footer or fixed-bar positioning. * **Align button font with your theme.** If your theme uses a custom font, enter the same font family name in the button font setting to ensure typographic consistency. ## Related guides * [Storefront Widget](./storefront-widget) — Installation and verification steps * [Conversation Lifecycle](./conversation-lifecycle) — What happens after a customer sends their first message # Introduction Source: https://docs.digifist.com/galantis/whatsapp/index Turn WhatsApp into a measurable revenue channel for your Shopify store, with campaigns, automations, a shared inbox, and product messaging. ## What is Galantis WhatsApp? Galantis WhatsApp is a Shopify-integrated WhatsApp marketing and automation platform. It connects your store to WhatsApp, the highest-engagement messaging channel across LATAM, MENA, India, and beyond, and gives you the tools to turn that channel into a measurable revenue driver. Where most tools treat WhatsApp as a support inbox, Galantis treats it as a full-stack revenue channel. Campaigns reach segmented audiences with approved message templates. Automations respond to real Shopify events in real time: abandoned checkouts, new orders, new customers, and restocked products. The Inbox gives your support team a unified conversation view with full Shopify customer context. The Catalog module keeps your product data in sync with Meta so customers can browse and buy without leaving WhatsApp. ## What you can do with Galantis WhatsApp Send one-time WhatsApp broadcasts to segmented audiences, with lists, dynamic segments, include/exclude rules, and real-time delivery analytics. Build event-driven flows that fire automatically on Shopify triggers: abandoned checkouts, new orders, new customers, product restocks, and more. Manage all customer WhatsApp conversations in a shared inbox, with agent assignment, full Shopify customer context, and conversation lifecycle controls. Capture WhatsApp numbers from customers on out-of-stock products and notify them automatically when inventory is replenished. Sync your Shopify products to Meta and send interactive product messages: Single Product Messages, Multi-Product Messages, and full catalog browsing inside WhatsApp. Build and validate automation flows with AI-powered assistance, including trigger suggestions, inline error detection, and optimization recommendations. ## Who it's built for Galantis WhatsApp is built for Shopify merchants who want to turn WhatsApp into a revenue channel, not just a support inbox. **Growth-focused DTC brands** running paid ads who need a scalable recovery layer for high-traffic, high-abandonment stores. **Mid-market Shopify stores** with dedicated marketing teams looking for an incremental channel beyond saturated email and SMS performance. **Merchants in WhatsApp-heavy regions** across LATAM, MENA, India, and parts of Europe, where customers expect brand communication on WhatsApp. **Support-heavy stores** selling complex products where pre-purchase questions directly impact conversion. ## How it works Galantis sits between your Shopify store and the WhatsApp Business Platform via Meta. Customer data, orders, products, and consent state flow in from Shopify via webhooks. Messages flow out through the WhatsApp Cloud API. Every send is gated by WhatsApp's opt-in requirements: only customers who have explicitly subscribed receive marketing messages. The platform modules are independent but connected. A customer who subscribes through the Back-in-Stock widget is opted in and immediately available for campaigns and automations. An abandoned checkout automation uses the same customer and order data that the Inbox surfaces for agents. Segment rules that drive campaign targeting also drive automation triggers. ## Ready to get started? Install the app, connect your WhatsApp Business Account, and send your first message. # Galantis Connect Source: https://docs.digifist.com/galantis/whatsapp/integrations/galantis-connect Extended integration capabilities for connecting Galantis to additional platforms and custom data sources beyond Shopify and Meta. Galantis Connect provides extended integration capabilities for merchants who need to connect Galantis to platforms and data sources beyond the native Shopify and Meta integrations. Where the core platform is purpose-built for the Shopify + WhatsApp stack, Galantis Connect is the extensibility layer for merchants with more complex infrastructure needs. ## What Galantis Connect covers Galantis Connect is designed for use cases such as: * Connecting a third-party CRM or customer data platform to enrich Galantis contact profiles with data that is not available from Shopify alone * Integrating with a warehouse management system or fulfillment platform to trigger automations based on fulfillment events outside of Shopify's native webhook set * Connecting a loyalty or rewards platform so that loyalty tier changes can trigger automation flows or feed into segment rules * Piping data from a headless commerce setup that does not use Shopify's standard storefront and checkout flows These are use cases where the standard Shopify webhook pipeline does not capture the full data picture, or where events in external systems need to trigger Galantis behavior. ## Availability Galantis Connect is not a self-serve feature — it is configured per merchant in collaboration with the Galantis team. The specific integrations available, the data mapping options, and the implementation approach depend on the merchant's infrastructure and the platforms involved. **To explore Galantis Connect:** Contact Galantis support via the in-app support chat or email. Provide a description of the platform you want to connect, the data you need to bring into or send out of Galantis, and the use case you are trying to enable. The Galantis team will confirm availability and guide the setup process. ## Related guides * [Shopify Integration](./shopify/index) — The primary data integration for all Shopify-native use cases * [Meta & WhatsApp Integration](./meta-whatsapp/index) — The message delivery integration * [Support](/whatsapp/support/index) — Contact information for Galantis Connect enquiries # Integrations Source: https://docs.digifist.com/galantis/whatsapp/integrations/index How Galantis connects to Shopify, Meta, and WhatsApp — the data flows, authentication models, and webhook infrastructure that power the platform. Galantis is built on two foundational integrations: Shopify and Meta. Every feature in the platform — campaigns, automations, the Inbox, catalog sync, Back-in-Stock — depends on one or both of these connections functioning correctly. Understanding how each integration works, what data flows through it, and how to maintain it is essential for operating Galantis reliably. A third integration layer, Galantis Connect, provides extended connectivity for merchants who need to bring additional platforms or custom data sources into their workspace. ## Integration architecture ``` Shopify Store │ ├── Webhooks (customers, orders, products, collections, checkouts, consent) ├── GraphQL API (abandoned checkouts, webhooks management, billing) │ ▼ Galantis Platform │ ├── Customer profiles, order history, product catalog, consent state ├── Automation engine, campaign engine, inbox, billing engine │ ├── Queue Layer │ └── Jobs: message sending, sync, monitoring, billing │ ▼ Meta / WhatsApp Cloud API ├── Message API — send and receive messages ├── Template API — create, submit, sync approval status ├── Media API — upload images, video, documents └── Catalog API — push product data ``` Data flows in one primary direction for most operations: Shopify → Galantis → Meta. Customer and product data originates in Shopify, is processed and enriched in Galantis, and is pushed to Meta for message delivery and catalog display. Inbound messages from customers flow in the opposite direction: Meta → Galantis → merchant Inbox. ## Integrations in this section Data sync, required permissions, webhook registration, and the abandoned checkout polling mechanism. WABA connection, Meta OAuth flow, inbound and outbound webhooks, and multiple phone number support. Extended integration capabilities for additional platforms and custom data sources. ## Integration health Both the Shopify and Meta integrations depend on active access tokens that can expire or be revoked. A lapsed Shopify token prevents customer and order data from syncing. A lapsed Meta token prevents message delivery and catalog updates. When platform behavior appears abnormal — automations not firing, messages not sending, customer data appearing stale — verifying integration token health is the first diagnostic step. Check: * **Shopify connection** — confirm the app is still installed and active under **Shopify Admin → Apps** * **Meta/WhatsApp connection** — confirm the token is valid under **Settings → WhatsApp Connection** See the [Support](/whatsapp/support/index) section for integration-specific troubleshooting guides. # Connecting WABA — Technical Reference Source: https://docs.digifist.com/galantis/whatsapp/integrations/meta-whatsapp/connecting-waba Technical reference for how Galantis connects to a merchant's WhatsApp Business Account: OAuth scopes, token storage and encryption, what the access token enables, and reconnection when a token expires. This page is the **technical reference** for how Galantis authenticates against Meta's WhatsApp Business Platform — token scopes, storage, what the access token enables, and how reconnection works. It is intended for engineers, security reviewers, and merchants debugging a connection issue. If you are a merchant connecting WhatsApp for the first time, start at [Connect WhatsApp](/galantis/whatsapp/getting-started/whatsapp-connection) — that page walks you through Meta's Embedded Signup modal step by step. This page documents what happens behind that modal. The user-facing flow uses **Meta's Embedded Signup**: a Facebook-hosted pop-up rendered inside the Galantis app. Galantis does not implement a separate OAuth redirect — the Embedded Signup SDK returns the necessary credentials directly to Galantis once the merchant completes the modal. ## What the connection produces A successful Embedded Signup hand-off gives Galantis: * A **system user access token** scoped to the merchant's WABA, used for messaging APIs * The **WhatsApp Business Account ID** (WABA ID) * The **phone number ID** for each registered number * (Optional) A **Meta Catalog access token** if the merchant connects a catalog in the same flow All four are stored encrypted per workspace using Galantis's multi-tenant encryption layer. One merchant's credentials cannot be accessed by, or affect, any other workspace. ## What the access token enables A connected WABA access token authorizes the following Meta API calls scoped to the merchant's WABA: * Sending messages via the Cloud API (`POST /{phone_id}/messages`) * Creating, submitting, and managing message templates (`POST /{waba_id}/message_templates`) * Fetching template approval status * Uploading media assets for template headers (`POST /{phone_id}/media`) * Receiving inbound messages and delivery status via Meta webhooks * Reading phone-number quality rating and limits (`GET /{phone_id}`) A separately connected **Meta Catalog access token** additionally enables: * Reading from and writing to the merchant's Meta Catalog (`POST /{catalog_id}/products`) * Pushing product data from Galantis to Meta in batch * Syncing catalog updates incrementally when Shopify product data changes ## Token storage Tokens are encrypted at rest using a per-tenant key derived from the workspace ID and Galantis's master key. Decryption happens only at the moment of an outgoing Meta API call, in-process — tokens are never logged, never echoed in API responses, and never available to other tenants. Galantis acts on the merchant's behalf using their token. The merchant remains the owner of the WABA in Meta Business Manager and can revoke Galantis's access at any time from **Meta Business Settings → Business Integrations**. ## Token expiry and reconnection Meta access tokens can be invalidated when: * Permissions are changed or revoked in Meta Business Manager * The Meta user account that authorized the connection changes password or 2FA settings * The Galantis app's authorization is manually revoked in Meta's app permissions * A long-lived token reaches the end of its validity window ### Symptoms of an invalid token * Messages fail to send across all campaigns and automations simultaneously * Template approval status stops updating in Galantis * Catalog sync fails for all products at once (if the catalog token is affected) * The Meta webhook connection stops receiving inbound messages and status callbacks ### How to reconnect Re-running the Embedded Signup flow issues a new token and replaces the old one. In the Galantis app, go to **Settings → WhatsApp Connection**. Galantis launches the same Embedded Signup modal. Sign in to Meta with the account that owns the WABA. Confirm the WABA selection — no need to re-add phone numbers or re-set the display name. From the Inbox or Templates, send a test message to your own phone. A delivered message confirms the new token is active. If the Meta Catalog token was also invalidated, reconnect it from the same settings screen. Verify by checking the sync status under **Catalog → \[Product]**. Reconnecting generates a new access token; the previous token is invalidated. If the authorizing Meta account's permissions in Meta Business Manager have been reduced since the original connection, the new token may have less scope — reduce-then-reconnect is the most common cause of "reconnect ran but features are still broken." ## Related * [Connect WhatsApp (Getting Started)](/galantis/whatsapp/getting-started/whatsapp-connection) — Merchant-facing walkthrough of the Embedded Signup modal * [Multiple phone numbers](/galantis/whatsapp/integrations/meta-whatsapp/multiple-phone-numbers) — Adding additional numbers after the initial connection * [Meta Catalog](/galantis/whatsapp/catalog/meta-catalog) — Catalog token connection and management * [Meta webhooks](/galantis/whatsapp/integrations/meta-whatsapp/meta-webhooks) — Inbound message and status delivery # Meta & WhatsApp Integration Source: https://docs.digifist.com/galantis/whatsapp/integrations/meta-whatsapp/index How Galantis connects to the WhatsApp Business Platform via Meta — authentication, message delivery, template management, and webhook infrastructure. The Meta and WhatsApp integration is the delivery layer of Galantis. Where the Shopify integration provides the data — customer profiles, orders, products, consent — the Meta integration is what turns that data into actual WhatsApp messages reaching customers' phones. Galantis communicates with Meta through the WhatsApp Cloud API (Meta Graph API v23.0), using your WhatsApp Business Account access token to send messages, submit templates, upload media, and push catalog data. Inbound messages and status updates from Meta arrive via webhooks registered to your WABA. ## What the Meta integration provides * **Outbound messaging** — campaigns, automation messages, and Inbox agent replies sent via the Message API * **Template management** — template creation, submission, and approval status sync via the Template API * **Media upload** — images, videos, and documents uploaded for use in template headers via the Media Upload API * **Catalog sync** — product data pushed from Galantis to Meta via the Catalog API * **Inbound messages** — customer messages received through your WhatsApp number arrive via webhook and appear in the Inbox * **Message status updates** — delivered, read, and failed status callbacks for every sent message, used for analytics and automation condition evaluation ## Guides in this section The Meta OAuth flow, token storage, phone number registration, and reconnection. Inbound message webhooks, message status updates, and template status change events. Adding and managing multiple WhatsApp Business phone numbers per workspace. ## Meta API endpoints used | API | Endpoint | Purpose | | --------------------- | ----------------------------- | --------------------------------------------------------- | | Message API | `POST /{phone_id}/messages` | Send all outbound WhatsApp messages | | Media Upload API | `POST /{app_id}/uploads` | Upload images, videos, and documents (resumable protocol) | | Template API (create) | `POST /message_templates` | Submit new templates for Meta review | | Template API (read) | `GET /message_templates` | Fetch template list and current approval status | | Template API (delete) | `DELETE /message_templates` | Delete a template | | Catalog API | `POST /{catalog_id}/products` | Push product data to Meta Catalog | All API calls use Meta Graph API version `v23.0` using the merchant's encrypted access token per tenant. ## Authentication model Galantis stores one Meta access token per connected WhatsApp Business Account, encrypted per tenant. The token is obtained via Meta OAuth during the WABA connection flow and used for all subsequent Meta API calls. Access tokens can expire or be revoked if permissions change in Meta Business Manager. When this happens, all Meta API calls from Galantis fail for that workspace. Symptoms include messages not sending, catalog sync failing across all products simultaneously, and template status no longer updating. See [Connecting WABA](./connecting-waba) for how to reconnect and refresh the access token. ## Related guides * [Getting Started — WhatsApp Connection](/whatsapp/getting-started/whatsapp-connection) — Initial WABA connection walkthrough * [Catalog — Meta Catalog](/whatsapp/catalog/meta-catalog) — How Galantis uses the Catalog API * [Templates](/whatsapp/templates/index) — How Galantis uses the Template API # Meta Webhooks Source: https://docs.digifist.com/galantis/whatsapp/integrations/meta-whatsapp/meta-webhooks How Galantis receives inbound messages, message status updates, and template status changes from Meta via webhooks. Meta sends webhooks to Galantis for three categories of events: inbound messages from customers, outbound message status updates, and template status changes. These webhooks are the real-time data feed from Meta back into Galantis — they are what makes the Inbox live, what populates campaign and automation analytics with delivery data, and what keeps template approval status current. ## What this covers * The three Meta webhook event categories and what each delivers * How inbound messages are processed into Inbox conversations * How message status updates power analytics and automation conditions * How template status changes update Galantis automatically * Security validation and retry behavior ## Meta webhook event categories ### Inbound messages **Event:** `messages` (inbound) **Payload:** Message object containing sender phone number, message content (text, media, or interactive reply), and context (which message the customer is replying to, if any). **What Galantis does:** When an inbound message webhook arrives, Galantis: 1. Validates the webhook signature 2. Identifies the customer by their phone number — matching against contact records in Galantis 3. Creates or updates a `Conversation` record for the customer 4. Creates a `Message` record with the inbound message content 5. Dispatches the `ConversationMessageCreated` event 6. Broadcasts the new message to the merchant dashboard in real time — agents see the message appear in the Inbox immediately without refreshing The inbound message also opens or resets the 24-hour conversation window for that customer. See [Compliance — Conversation Window](/whatsapp/compliance/conversation-window). **QUICK\_REPLY responses:** When a customer taps a `QUICK_REPLY` button in a template message, the response arrives as an inbound message webhook with the button's reply payload. Automation condition nodes using `USER_REPLY_STATUS` evaluate against these reply events. **STOP responses:** When a customer replies STOP, the inbound message webhook is received, the reply is processed, and the customer's `marketing_state` is immediately updated to `UNSUBSCRIBED`. See [Audience — Consent & Opt-outs](/whatsapp/audience/consent-optouts). *** ### Message status updates **Event:** `message_status` **Payload:** Status update containing the message ID, the new status (`sent`, `delivered`, `read`, `failed`), and a timestamp. **Status progression:** ``` sent → delivered → read ↓ failed (at any stage) ``` **What Galantis does:** When a message status webhook arrives: 1. Galantis matches the message ID to the corresponding `Message` record 2. Updates `Message.status` and the relevant status timestamp field 3. Aggregates the updated status into campaign-level or automation-level analytics This is the mechanism that populates the `SENT`, `DELIVERED`, `READ`, and `FAILED` counts in campaign analytics and automation activity logs. Status updates arrive asynchronously — a campaign's analytics populate gradually as Meta sends callbacks for each message in the send batch. **`played` status:** For audio and video messages, Meta sends a `played` status in addition to `read`. Galantis records this status on the `Message` model. **`failed` status:** A failed status includes an error code and description from Meta indicating why delivery failed. Common failure codes (`CUSTOMER_IS_NOT_OPTED_IN`, `CUSTOMER_IS_MISSING_CALLING_CODE`) are exposed in campaign analytics and automation activity logs as human-readable error reasons. **Automation condition evaluation:** The `MESSAGE_DELIVERY_STATUS` condition type in automation flows evaluates against the delivery status recorded via these webhooks. A condition checking whether the last message was "read" evaluates against the `read` status update received here. *** ### Template status changes **Event:** `message_template_status_update` **Payload:** Template identifier and new status — `approved`, `rejected`, or `paused`. **What Galantis does:** When a template status change webhook arrives: 1. Galantis matches the template identifier to the corresponding `MessageTemplate` record 2. Updates `MessageTemplate.status` to reflect the new state 3. If the template has moved to `APPROVED`, it becomes immediately available for use in campaigns and automation Action Nodes 4. If the template has moved to `REJECTED` or `PAUSED`, any active automations using it begin failing at the affected Action Node on subsequent customer executions — the automation is not automatically deactivated This webhook-based status sync means merchants do not need to manually poll for template approval results. When Meta completes a review, the status in Galantis updates automatically — typically within minutes of the review completing. ## Security validation All incoming Meta webhooks are validated via signature verification before processing. Meta includes a cryptographic signature in the webhook request headers, computed from the payload using the app secret. Galantis verifies this signature before passing the payload to any handler — requests with invalid or missing signatures are rejected immediately and never processed. This validation prevents replay attacks and unauthorized webhook injection from sources other than Meta. ## Retry behavior If Galantis fails to process a Meta webhook — due to a temporary server error, a processing issue, or an application exception — the failed processing is retried automatically with exponential backoff. This means a transient error does not permanently lose a webhook event. Meta also retries webhook delivery from its side if the initial delivery attempt receives an error response. Combined with Galantis's own retry behavior, the system is resilient to most temporary failures in the processing pipeline. If Galantis is unavailable for an extended period — longer than Meta's webhook delivery retry window — some webhook events may not be recoverable from Meta's side. In this case, message status updates may be missing from analytics for messages sent during the outage window, and inbound messages received during the outage may not appear in the Inbox. This is an edge case that applies only to extended outages, not to normal transient errors. ## Related guides * [Inbox — Conversation Lifecycle](/whatsapp/inbox/conversation-lifecycle) — How inbound message webhooks create and update conversations * [Compliance — Conversation Window](/whatsapp/compliance/conversation-window) — How inbound messages open and reset the 24-hour window * [Campaign Analytics](/whatsapp/campaigns/campaign-analytics) — How status update webhooks populate delivery metrics * [Templates — Approval Lifecycle](/whatsapp/templates/approval-lifecycle) — How template status webhooks update template state in Galantis # Multiple Phone Numbers Source: https://docs.digifist.com/galantis/whatsapp/integrations/meta-whatsapp/multiple-phone-numbers Adding and managing multiple WhatsApp Business phone numbers within a single Galantis workspace. Galantis supports connecting multiple WhatsApp Business phone numbers to a single workspace. Each number operates independently — it has its own sending identity, its own conversation threads, and its own quality rating in Meta. Using multiple numbers is appropriate for businesses that operate distinct brands, regions, or support functions under one Shopify store. ## What this covers * When to use multiple phone numbers * How to add a number to an existing workspace * How numbers are used across campaigns, automations, and the Inbox * Quality and compliance considerations per number ## When to use multiple phone numbers **Multiple brands** — A Shopify store operating more than one brand may want each brand to have its own WhatsApp number so customers receive messages from a recognizable brand identity rather than a shared business number. **Regional separation** — Stores serving multiple markets may want country-specific numbers — a Mexican number for LATAM customers and a UAE number for MENA customers — so messages arrive from a local or familiar-looking number. **Functional separation** — Separating marketing sends from customer support conversations onto different numbers keeps the quality signals for each use case independent. A high-volume campaign number with some block rate does not drag down the quality rating of a support number used for high-satisfaction Inbox conversations. **Dedicated high-volume sending** — A number used exclusively for large campaign broadcasts will accumulate quality signals specific to broadcast behavior. Keeping it separate from a transactional number protects the transactional number's quality. ## Adding a phone number Go to **Settings → WhatsApp Connection** in the Galantis dashboard. Select the option to add a phone number. You will be prompted to go through the Meta OAuth flow again — or, if your current WABA access token has sufficient permissions, Galantis may be able to fetch additional numbers from the same WABA without a full re-authorization. Galantis fetches the phone numbers registered on your WABA. Select the additional number you want to connect. After adding, confirm the number appears in your connected numbers list under **Settings → WhatsApp Connection** and is shown as active. All phone numbers connected to a Galantis workspace must be registered on the same WhatsApp Business Account (WABA). Numbers from different WABAs cannot be connected to the same workspace. If you need numbers from multiple WABAs, contact Galantis support to discuss workspace configuration options. ## How multiple numbers work in campaigns and automations **Campaigns** — Each campaign is associated with a single phone number. Multiple numbers are supported per workspace, allowing different numbers to be used for different campaign sends. **Automations** — Each automation's Action Nodes send from a specified phone number. If you have numbers segmented by region, you can build separate automation flows per region, each using the appropriate number, or use `CUSTOMER_COUNTRY` condition nodes to route customers to Action Nodes configured with different number assignments. **Inbox** — Conversations are associated with the phone number the customer messaged. Agents see conversations across all connected numbers in the unified Inbox. ## Quality and compliance per number Every connected phone number has its own independent quality rating in Meta. Actions taken on one number — block rates, template rejection patterns, message frequency — do not directly affect the quality rating of other numbers in the same workspace. This independence is one of the primary operational reasons to separate numbers by use case. A campaign number that absorbs the quality cost of high-volume promotional sends does not contaminate the quality rating of a support number used for Inbox conversations. Each number must maintain its own compliance posture: * Templates used on a number are reviewed against that number's sending history and quality signals * Frequency caps on automations apply per number — a customer enrolled in an automation on Number A is not covered by frequency caps on Number B * Opt-outs (STOP replies) are processed per number — a customer who replies STOP to a message from Number A is opted out from Number A, but their consent state in Galantis is updated globally across the workspace Consent opt-outs update the customer's `marketing_state` globally in Galantis — not per phone number. A customer who replies STOP to any message from any connected number will be moved to `UNSUBSCRIBED` and excluded from all messaging across all numbers in the workspace. Managing separate opt-in lists per number is not supported at the consent state level. ## Related guides * [Connecting WABA](./connecting-waba) — Adding numbers via the OAuth connection flow * [Compliance — Opt-in & Consent](/whatsapp/compliance/opt-in-consent) — How consent state applies globally across numbers * [Compliance — Quality & Deliverability](/whatsapp/compliance/quality-deliverability) — Per-number quality ratings and how they are managed # Abandoned Checkout Source: https://docs.digifist.com/galantis/whatsapp/integrations/shopify/abandoned-checkout How Galantis detects abandoned checkouts through polling — the mechanism, timing, and implications for automation configuration. Abandoned checkout detection works differently from every other Shopify integration in Galantis. While customer, order, and product data are all event-driven — Shopify sends a webhook the moment something changes — there is no equivalent webhook for abandoned checkouts. Shopify does not emit a real-time event when a customer starts a checkout and leaves without completing it. Instead, Galantis polls the Shopify Admin GraphQL API every 10 minutes and queries for incomplete checkouts. This polling mechanism is reliable but introduces a timing gap that has direct implications for how abandoned checkout automations behave. ## What this covers * Why polling is used instead of a webhook * How the polling mechanism works * The 10-minute timing gap and what it means for automation configuration * What qualifies as an abandoned checkout in Galantis * Edge cases and timing considerations ## Why polling is required Shopify's webhook system fires events for discrete state changes — a customer is created, an order is placed, a product is updated. Checkout abandonment is not a discrete event in Shopify — it is the absence of an event (order placement) after a checkout was started. Shopify has no mechanism to push a notification to an external app when this absence occurs. The `read_checkouts` permission grants Galantis access to the Shopify Admin GraphQL API endpoint that lists incomplete checkouts. Galantis queries this endpoint periodically to identify checkouts that were created but have not resulted in a completed order within a qualifying timeframe. ## How the polling mechanism works Galantis runs a scheduled job every 10 minutes that queries the Shopify Admin GraphQL API for incomplete checkouts — checkouts that were created within a recent time window and have no associated completed order. The job filters results to identify checkouts that meet the abandonment criteria — a checkout exists, the customer has a WhatsApp number, and no completed order has been placed from that checkout session. For each qualifying checkout, the `ABANDONED_CHECKOUT` trigger fires for the associated customer, enrolling them in any active automation with that trigger — subject to frequency cap and exclusion rule checks. ## The 10-minute timing gap The polling interval creates an inherent timing gap between the moment a customer abandons a checkout and when the `ABANDONED_CHECKOUT` trigger fires in Galantis. This gap can be anywhere from near-zero (if a customer abandons immediately before a poll runs) to just under 10 minutes (if they abandon immediately after a poll runs). **Practical implication for automation configuration:** A Delay Node set to 30 minutes in an abandoned checkout automation does not mean the customer receives a message 30 minutes after abandoning. It means the customer receives a message approximately 30 to 40 minutes after abandoning — the delay runs from when the trigger fires, not from when the customer actually left. This is not a defect — it is the expected behavior of a polling-based detection system. For most abandoned checkout recovery flows, a 10-minute variance has no meaningful impact on conversion rates. A customer who abandoned 35 minutes ago and one who abandoned 40 minutes ago have equivalent recovery likelihood. For merchants who need more precise timing documentation in their analytics or reporting, the trigger fire time (when the automation enrolled the customer) is recorded in the activity log. The actual checkout abandonment time is available in Shopify's checkout data. ## What qualifies as an abandoned checkout Galantis identifies a checkout as abandoned when: * A Shopify checkout record exists for a customer with a WhatsApp number * The checkout has not been completed — no associated order exists ## Edge cases and timing considerations **Customer completes the order between poll cycles** If a customer abandons their checkout and then returns and completes the order before the next poll runs, Galantis may detect the incomplete checkout on its next poll. Since the order now exists, the checkout no longer qualifies as abandoned and the trigger should not fire. If the trigger fires between the abandonment and the order completion within the same 10-minute poll window — which is possible if the abandonment and completion both occur between polls — an `ORDER_RECENCY` condition node in the automation can catch this. A condition that checks whether the customer placed an order within the last 30 minutes before the first action node will route completed-order customers to the NO path and suppress the recovery message. **Multiple abandoned checkouts from the same customer** If a customer abandons a checkout, receives a recovery message, and then abandons a new checkout within the frequency cap window, the cap prevents the second abandonment from triggering a new automation enrollment. The frequency cap check runs at trigger time — if the customer is within the cap window, the new abandonment is detected but no new enrollment occurs. **Checkouts without a WhatsApp number** Guest customers who have not provided a phone number, or customers whose phone number is not registered on WhatsApp, cannot receive a recovery message. The trigger may still fire for these customers if they have a Shopify customer record, but the subsequent message action will fail with a delivery error. An `ABANDONED_CHECKOUT` automation will attempt enrollment for any customer associated with the incomplete checkout — phone number validity is checked at the message dispatch step, not at the trigger evaluation step. ## Related guides * [Automations — Triggers](/whatsapp/automations/triggers) — ABANDONED\_CHECKOUT trigger configuration including the polling timing note * [Automations — Recipes — Abandoned Checkout Recovery](/whatsapp/automations/recipes/abandoned-checkout) — Full recipe with delay configuration that accounts for polling latency * [Permissions](./permissions) — The `read_checkouts` permission required for polling # Shopify Integration Source: https://docs.digifist.com/galantis/whatsapp/integrations/shopify/index How Galantis connects to Shopify — data synced, authentication, webhook infrastructure, and the abandoned checkout polling mechanism. The Shopify integration is the data foundation of Galantis. Every customer profile, order record, product, collection, and consent state in Galantis originates from Shopify and is kept current through a combination of real-time webhooks and periodic polling. The integration is established during app installation and maintained automatically — but understanding its structure helps diagnose data issues and configure features correctly. ## What the Shopify integration provides * **Customer data** — contact profiles, phone numbers, tags, marketing consent, and order history, synced via webhooks and an initial import at installation * **Order data** — order creation, cancellation, and fulfillment events that power automation triggers and segment rules * **Product and collection data** — the full product catalog synced into Galantis for Back-in-Stock, segment rules, and catalog message formats * **Abandoned checkout data** — polled every 10 minutes via the Shopify Admin GraphQL API * **Marketing consent** — `marketing_state` updates synced via the `customers/marketing_consent_updated` webhook * **App billing** — subscription and plan management handled through Shopify's billing system via `app_subscriptions/update` * **GDPR compliance** — data deletion requests handled via `customers/redact` and `shop/redact` webhooks ## Guides in this section All Shopify permissions required by Galantis and what each enables. Complete webhook topic reference — every registered webhook and its handler job. How the polling mechanism works and its timing implications for automation. ## Authentication The Shopify integration uses OAuth token exchange. When Galantis is installed from the Shopify App Store, the installation initiates the OAuth flow and the resulting access token is stored encrypted per tenant and used for all subsequent Shopify Admin GraphQL API calls. The access token remains valid as long as the Galantis app is installed on the Shopify store. Uninstalling the app revokes the token and triggers the `app/uninstalled` webhook, which deactivates the Galantis tenant workspace. ## Multi-tenant architecture Galantis provides complete isolation between merchant workspaces. Each installed store's data — customer records, automation configurations, campaign history, and integration tokens — is never shared across tenants. The Shopify access token for one store cannot access or affect any other store's data in Galantis. ## Related guides * [Getting Started — Shopify Installation](/whatsapp/getting-started/shopify-installation) — Installation walkthrough and permission grant steps * [Audience — Contacts](/whatsapp/audience/contacts) — How synced Shopify data populates customer profiles * [Catalog — Shopify Sync](/whatsapp/catalog/shopify-sync) — How product and collection data syncs from Shopify # Permissions Source: https://docs.digifist.com/galantis/whatsapp/integrations/shopify/permissions All Shopify permissions required by Galantis, what each enables, and what stops working if a permission is missing. Galantis requests a defined set of Shopify permissions during installation. Each permission unlocks a specific category of data access or action capability. No permissions are requested speculatively — every permission maps directly to a platform feature. If a permission is not granted, the feature that depends on it will not function. ## What this covers * All required Shopify permissions * What each permission enables in Galantis * What breaks if a permission is missing or revoked * How to verify permission status ## Required permissions **`read_customers`** — Allows Galantis to read customer records from Shopify. **Enables:** * Initial customer import at installation — populates the Galantis contact database with your existing customers * Processing of `customers/create`, `customers/update`, and `customers/delete` webhooks — keeps customer profiles current * Reading customer phone numbers, names, emails, tags, and locale for contact profiles * Audience targeting — lists and segments draw from synced customer data **`write_customers`** — Allows Galantis to write to customer records in Shopify. **Enables:** * Updating marketing consent state on the Shopify customer record when changes originate in Galantis **If missing:** Customer profiles will not sync. Campaigns and automations targeting customers will have stale or empty audience data. Consent state will not update. **`read_orders`** — Allows Galantis to read order records from Shopify. **Enables:** * Processing of `orders/create`, `orders/cancelled`, and `orders/updated` webhooks — powers `ORDER_PLACED`, `ORDER_CANCELLED`, and `ORDER_SHIPPED` automation triggers * Order data availability in automation condition evaluation (`ORDER_VALUE`, `ITEM_COUNT_IN_ORDER`, `ORDER_RECENCY`) * Order history display in the Inbox customer context panel * Segment rules based on purchase history (total spent, order count, days since last order, purchased collection) * Template variable mapping for `order.order_number`, `order.total_price`, `order.product_name` **`read_fulfillments`** — Allows Galantis to read fulfillment data from Shopify. **Enables:** * Detecting when an order has been fulfilled and shipped * Powering the `ORDER_SHIPPED` automation trigger via the `orders/updated` webhook with fulfillment data **If missing:** Order-based automation triggers (`ORDER_PLACED`, `ORDER_CANCELLED`, `ORDER_SHIPPED`) will not fire. Segment rules based on purchase history will not evaluate correctly. Order context will not appear in the Inbox. **`read_products`** — Allows Galantis to read product and collection records from Shopify. **Enables:** * Processing of `products/create`, `products/update`, and `products/delete` webhooks — keeps the Galantis product catalog current * Processing of `collections/create`, `collections/update`, and `collections/delete` webhooks — keeps collection data current * Catalog module functionality — product data synced into Galantis and available for Meta push * Back-in-Stock module — inventory quantity monitoring per variant * Segment rules based on purchased collection or purchased brand * Automation condition evaluation using `PRODUCT_IN_ORDER_HAS_TAG` **If missing:** The Catalog module will not function. Back-in-Stock inventory monitoring will not work. Product-based segment rules will not evaluate. Catalog message formats (SPM, MPM, Whole Catalog) will be unavailable. **`read_checkouts`** — Allows Galantis to read checkout records from Shopify via the Admin GraphQL API. **Enables:** * The abandoned checkout polling mechanism — Galantis queries the Shopify Admin API every 10 minutes for incomplete checkouts * The `ABANDONED_CHECKOUT` automation trigger **If missing:** The `ABANDONED_CHECKOUT` trigger will not fire. Abandoned checkout recovery automations will be inactive even if configured and activated. Shopify does not provide a real-time webhook for abandoned checkouts. The `read_checkouts` permission enables polling rather than event-driven detection. See [Abandoned Checkout](./abandoned-checkout) for how the polling mechanism works. **`read_script_tags`** — Allows Galantis to read the script tags currently installed on your Shopify store. **`write_script_tags`** — Allows Galantis to write, update, and delete script tags on your Shopify store. **Enables:** * Injecting the Inbox storefront chat widget into your theme * Injecting the Back-in-Stock subscription widget into your theme * Updating widget scripts when configuration changes are saved in the Galantis dashboard **If missing:** Neither the Inbox widget nor the Back-in-Stock widget will appear on your storefront. Widget configuration saved in Galantis will have no effect on the live store. If `write_script_tags` is revoked after installation, existing injected scripts may continue to load from cache temporarily, but any configuration changes made in Galantis will not deploy to the storefront. Re-granting the permission and saving widget settings will re-establish the injection. ## Permission summary | Permission | Required for | Blocks if missing | | ------------------- | ------------------------------------------ | -------------------------------------------- | | `read_customers` | Customer sync, audience targeting | Contact profiles, campaigns, automations | | `write_customers` | Consent state writeback | Consent sync | | `read_orders` | Order triggers, segments, Inbox context | Order automations, purchase-based segments | | `read_fulfillments` | ORDER\_SHIPPED trigger | Shipping automation trigger | | `read_products` | Catalog, Back-in-Stock, product conditions | Catalog module, BIS module, product segments | | `read_checkouts` | Abandoned checkout trigger | ABANDONED\_CHECKOUT automation | | `read_script_tags` | Widget management | Widget deployment | | `write_script_tags` | Widget injection | Inbox widget, Back-in-Stock widget | ## Verifying permissions Permissions are granted during app installation and displayed in **Shopify Admin → Settings → Apps and sales channels → Galantis → Permissions**. If a feature is not working as expected and data issues are suspected, verifying the permission set is a quick first diagnostic step — particularly for script tag permissions, which can be affected by certain Shopify plan changes or reinstallation flows. ## Related guides * [Getting Started — Shopify Installation](/whatsapp/getting-started/shopify-installation) — How permissions are granted during installation * [Webhooks](./webhooks) — How individual webhooks depend on these permissions * [Support — Widget Not Displaying](/whatsapp/support/troubleshooting/widget-not-displaying) — Troubleshooting script tag permission issues # Webhooks Source: https://docs.digifist.com/galantis/whatsapp/integrations/shopify/webhooks Complete reference for every Shopify webhook registered by Galantis — topic and what each webhook powers in the platform. Galantis registers webhooks across every major Shopify data domain at installation time. These webhooks are the primary mechanism for keeping Galantis data current — when something changes in Shopify, the corresponding webhook fires and Galantis processes the update asynchronously. Webhook handling is resilient to temporary failures — a transient error does not cause a webhook to be permanently lost. Failed processing is retried automatically until it succeeds or exhausts the retry limit. All incoming webhooks are validated via signature verification before processing. ## What this covers * Every registered webhook topic * What each webhook powers in Galantis * Security validation and retry behavior * What happens when a webhook is missed ## Customer webhooks | Topic | What it does in Galantis | | ------------------------------------- | ---------------------------------------------------------------------------------- | | `customers/create` | Creates a new contact record; may enroll customer in `CUSTOMER_CREATED` automation | | `customers/update` | Updates profile fields — name, phone, email, locale, tags | | `customers/delete` | Removes the contact record | | `customers/marketing_consent_updated` | Updates `marketing_state` on the contact record | | `customer_tags/added` | Adds tags to the contact record; may fire `CUSTOMER_TAGGED` automation trigger | | `customer_tags/removed` | Removes tags from the contact record | ## Order webhooks | Topic | What it does in Galantis | | ------------------ | ---------------------------------------------------------------------------------------------------------------- | | `orders/create` | Creates an order record; enrolls qualifying customers in `ORDER_PLACED` automation | | `orders/cancelled` | Updates order status; enrolls qualifying customers in `ORDER_CANCELLED` automation | | `orders/updated` | Detects fulfillment data; enrolls qualifying customers in `ORDER_SHIPPED` automation when fulfillment is present | The `orders/updated` webhook covers all order update events in Shopify, not only shipping. Galantis specifically detects whether the update contains fulfillment data and only fires the `ORDER_SHIPPED` automation trigger when it does. ## Product and collection webhooks | Topic | What it does in Galantis | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `products/create` | Creates a product record in Galantis; queues for Meta catalog push | | `products/update` | Updates product fields, variant data, pricing, and inventory; detects `inventory_quantity` 0→>0 for Back-in-Stock trigger; queues updated product for Meta catalog sync | | `products/delete` | Removes the product record; removes from Meta catalog | | `collections/create` | Creates a collection record in Galantis | | `collections/update` | Updates collection data and product memberships | | `collections/delete` | Removes the collection record | ## Billing and app lifecycle webhooks | Topic | What it does in Galantis | | -------------------------- | -------------------------------------------------------------------------------------------------- | | `app_subscriptions/update` | Processes plan changes, upgrades, downgrades, and subscription status updates from Shopify Billing | | `app/uninstalled` | Deactivates the workspace; stops all automation processing and message sending for the store | The `app/uninstalled` webhook triggers immediate workspace deactivation. If the app is reinstalled, a new OAuth token exchange occurs and data may need to be re-synced. Active automations and campaign schedules from before uninstallation are not automatically re-activated. ## GDPR compliance webhooks | Topic | What it does in Galantis | | ------------------ | ------------------------------------------------------------------------------------------------------------ | | `customers/redact` | Sets the affected customer's `marketing_state` to `REDACTED`; initiates data erasure for the customer record | | `shop/redact` | Initiates full shop-level data erasure for uninstalled stores that have requested data deletion | These webhooks are sent by Shopify in response to GDPR data subject requests and merchant data deletion requests. See [Compliance — GDPR & Data Privacy](/whatsapp/compliance/gdpr-data-privacy) for the full context. ## What happens when a webhook is missed Webhook delivery is not guaranteed — Shopify will retry failed deliveries, but a sustained outage or network issue can result in missed webhooks. When this happens, the Galantis record for affected entities will be stale until a corrective sync occurs. Recovery options: * **For product data** — trigger a manual full sync from **Catalog → Shopify Sync → Sync Now** * **For abandoned checkouts** — the polling mechanism runs every 10 minutes and self-heals; no manual recovery is needed ## Related guides * [Permissions](./permissions) — Shopify permissions that gate each webhook category * [Abandoned Checkout](./abandoned-checkout) — The polling mechanism used instead of a webhook for checkout data * [Catalog — Shopify Sync](/whatsapp/catalog/shopify-sync) — Manual sync as a webhook recovery mechanism for product data * [Compliance — GDPR & Data Privacy](/whatsapp/compliance/gdpr-data-privacy) — GDPR webhook handling # Gather Context Before Contacting Support Source: https://docs.digifist.com/galantis/whatsapp/support/debugging What to capture from the Galantis dashboard before opening a support ticket — the information that turns a 'something is broken' message into a fix in the same day. Most issues that aren't resolved by the troubleshooting guides become a support ticket. The single biggest factor in how fast that ticket gets resolved is the **context you include**. A ticket with a clear reproduction path, the right identifiers, and the visible error message gets triaged immediately; a ticket that just says "messages aren't sending" sits in a queue while we ask the same follow-up questions back. This page is the checklist of what to capture before you hit Send on the support form. ## The five things every ticket should have The full URL of your Galantis dashboard (`https://app.galantis.com/` or similar). This identifies which account is affected. "Campaigns → Send" or "Automations → New Order trigger" — not just "messaging." The more specific, the faster we find it. The exact sequence of clicks that triggers the issue. If it's intermittent, note how often it happens. Copy-paste the exact text Galantis shows you. Screenshots are perfect for this — capture both the error and the screen state. When did it happen? Include your timezone. We use this to locate the relevant operation on our side. What did you expect to happen, and what happened instead? This often surfaces miscommunications faster than the error message. ## Where to find each piece of context ### Workspace URL Your workspace URL is in your browser address bar when you're logged into Galantis. The full URL — not just `app.galantis.com` — uniquely identifies your account. ### Feature and action Be specific about the Galantis section and the specific action: * ✅ "Campaigns → 'Summer Sale 2026' campaign → Send button" * ✅ "Automations → 'Abandoned Cart' → New customer not being enrolled" * ✅ "Inbox → Reply not delivered to customer Maria Santos" * ❌ "Sending doesn't work" * ❌ "Automation broken" ### Reproduction steps Walk through the exact actions that reliably trigger the issue. Numbered steps work best: > 1. Open Campaigns > 2. Click "Summer Sale 2026" > 3. Click "Send" > 4. Confirmation dialog appears, click "Confirm" > 5. Error appears: "Send failed, please try again" If the issue is intermittent (happens sometimes), note that explicitly: "This succeeded the first 4 times today, failed on attempts 5 and 6 about 2 minutes apart." ### Error messages Capture exactly what Galantis shows you: * **Inline error banners** — the red/yellow text at the top of a page * **Toast notifications** — the temporary pop-ups in the corner * **Per-record errors** — failure reasons shown next to a specific message, customer, or template * **Browser console errors** (only if support asks for these specifically — see [Browser console errors](#when-support-asks-for-browser-console-errors)) A screenshot of the error in context is more valuable than a text description. Most browsers can take screenshots with `Cmd+Shift+4` (Mac) or `Win+Shift+S` (Windows). ### Timestamps and timezone Note when the issue happened, including your timezone: * "2026-05-12 14:23 (Europe/Brussels)" * "About 10 minutes ago, around 4:15 PM ET" For repeated failures, the timing of the first occurrence matters — that's when we look for the originating event. ### Expected vs actual Two short lines, side by side: > **Expected:** Campaign sends to all 1,247 opted-in customers, status moves to "Sent." > > **Actual:** Campaign moves to "Sending" but stops at 312 messages, status stuck on "Sending" for 20 minutes. This format catches misunderstandings about how a feature is supposed to work — sometimes "broken" turns out to be "working as designed but unexpectedly." ## Quick diagnostics you can run first Before opening a ticket, three checks resolve a surprising share of issues: Many message failures trace back to the customer record itself. Open **Audience → Contacts → \[Customer Name]** and verify: * **Consent status** — is it Subscribed? Customers in other states are correctly blocked from marketing sends. * **Phone number** — is it in full international format (with `+` and country code)? Numbers without a country code can't be delivered. * **Recent message history** — does the most recent send show a failure reason? For campaign or automation issues: open **Templates → \[Template Name]** and confirm the template status is **Approved**. Templates in Pending, Rejected, or Paused state cannot send. See [Template Rejection](/galantis/whatsapp/support/troubleshooting/template-rejection) if it's Rejected. Open **Settings → WhatsApp Connection** and confirm your WhatsApp Business Account shows as connected with a valid phone number. If you see "Reconnect" or an error state, that's likely the root cause — see [Connect WhatsApp](/galantis/whatsapp/getting-started/whatsapp-connection). Open **Billing → Usage**. If your Conversation credits are at or near zero, that explains any current send failures. Top up or upgrade your plan — see [Billing overview](/galantis/whatsapp/billing/overview). If any of these checks identifies the issue, the [troubleshooting guides](#related-guides) cover the resolution. If everything looks fine and the issue persists, it's time for a support ticket — with all the context above included. ## When support asks for browser console errors For widget display issues or unusual UI behavior, support may ask you to capture browser console errors. These help us diagnose issues that happen client-side (in your browser) rather than server-side. Visit your live store URL (e.g. `https://your-store.com`) — not the Shopify theme editor preview, which doesn't run third-party scripts. Press `F12` (Windows/Linux), `Cmd+Option+I` (Mac), or right-click → Inspect. The Console tab shows runtime messages and errors. Reload the page. Take a screenshot of the Console with the errors visible, or copy the error text. Include the URL of the page where the errors appeared. ## A complete ticket template If you'd like a template to fill in before opening a ticket: ``` Workspace: https://app.galantis.com/ Feature: Campaigns → "Summer Sale 2026" Action: Click Send When: 2026-05-12 14:23 (Europe/Brussels) Steps to reproduce: 1. Open Campaigns 2. Click "Summer Sale 2026" 3. Click "Send" 4. Confirm in the dialog 5. Error: "Send failed, please try again" Expected: Campaign sends to all 1,247 opted-in customers. Actual: Error appears, no messages are dispatched. Already checked: - Customer consent statuses look correct - Template "summer-sale-promo" shows Approved - WhatsApp connection is healthy - Credit balance: 5,200 (sufficient for the send) Screenshot attached. ``` A ticket like this gets resolved fastest. The more of the five context items you include, the less back-and-forth between you and support. ## Related guides * [Support](/galantis/whatsapp/support) — Contact channels, response times, and escalation process * [Message Delivery](/galantis/whatsapp/support/troubleshooting/message-delivery) — Common delivery error types and their resolution * [Catalog Sync Errors](/galantis/whatsapp/support/troubleshooting/catalog-sync-errors) — Resolving Catalog sync failures * [Template Rejection](/galantis/whatsapp/support/troubleshooting/template-rejection) — Why templates get rejected and how to resubmit * [Widget Not Displaying](/galantis/whatsapp/support/troubleshooting/widget-not-displaying) — Storefront widget troubleshooting # Support Source: https://docs.digifist.com/galantis/whatsapp/support/index How to get help with Galantis — troubleshooting guides, contact methods, response times, and escalation process. This section covers everything you need when something isn't working as expected — from self-service troubleshooting guides for the most common issues to direct support contact and escalation paths for confirmed bugs or service disruptions. Start with the troubleshooting guides. Most issues have a documented resolution path that's faster than waiting for a support response. If the guides don't resolve the issue, the gather-context guide explains exactly what to capture from the Galantis dashboard before opening a ticket so support can triage quickly. ## Guides in this section The five things to capture from the Galantis dashboard before opening a ticket — turns "something is broken" into a same-day fix. Diagnosing and resolving Meta template rejections and paused templates. Resolving FAILED product sync status, image format failures, and Meta Catalog token issues. Diagnosing failed message sends — consent errors, missing calling codes, and credit failures. Fixing Inbox and Back-in-Stock widgets that are not appearing on your storefront. ## Contacting support Galantis support is available through two channels: * **In-app support chat** — accessible from the Galantis dashboard. The fastest path for questions and configuration help. * **Email** — for issues that require file attachments, log exports, or detailed written context. When contacting support, include: * Your tenant workspace URL * The feature and specific action that is failing * Steps to reproduce the issue * Any error messages visible in the Galantis interface * A screenshot of the error and the relevant Galantis screen — see [Gather context](./debugging) The more context you provide upfront, the faster the issue can be triaged and escalated if needed. ## Response times | Priority | Definition | Target response | | ------------ | -------------------------------------------------------------- | --------------- | | **Critical** | Service outage — platform unavailable or all messaging stopped | \< 2 hours | | **High** | Feature broken — a specific feature is non-functional | \< 8 hours | | **Normal** | Questions, configuration help, non-urgent issues | \< 24 hours | Response time targets apply during standard business hours. Critical issues with confirmed service outage receive escalated attention outside business hours. ## Escalation process Support requests follow a standard escalation path: A support agent reviews the reported issue, attempts to reproduce it using the provided context, and determines whether it can be resolved through configuration guidance or requires engineering involvement. Confirmed bugs — issues that cannot be resolved through configuration and represent unexpected platform behavior — are escalated to the engineering team with the full reproduction context. Engineering determines the appropriate resolution path — hotfix for critical issues, scheduled fix for lower-severity bugs. The merchant is notified of the fix timeline and informed when the resolution is deployed. ## Before contacting support Run through the relevant troubleshooting guide first — the most common issues have documented resolution paths that don't require a support ticket. If the guide doesn't resolve the issue, gather the context listed in [Gather context for support](./debugging) before reaching out. A support ticket with workspace URL, exact error message, timestamp, and reproduction steps is triaged significantly faster than one without. # Catalog Sync Errors Source: https://docs.digifist.com/galantis/whatsapp/support/troubleshooting/catalog-sync-errors Resolving FAILED product sync status, image format failures, Meta Catalog token issues, and other catalog synchronization problems. Catalog sync errors prevent products from being pushed to Meta, which blocks SPM, MPM, and Whole Catalog message formats from displaying accurate or any product data. Most sync errors have a clear root cause visible in the product's error detail and a straightforward resolution path that does not require engineering involvement. ## What this covers * How to identify which products have sync errors * The most common error types and how to resolve each * How to trigger a re-sync after fixing the root cause * When to contact support ## Step 1 — Identify the failing products Go to **Catalog** in the Galantis dashboard. The main view shows aggregate sync status counts — the number of products with `SYNCED`, `PENDING`, and `FAILED` status. Filter the product list to show only products with `FAILED` status. This gives you the scope of the issue — a handful of isolated failures versus a wholesale failure across many products at once. Click into an individual `FAILED` product and navigate to its sync status detail. The error detail shows the specific reason Meta rejected or failed to process this product during the push. Review several `FAILED` products if there are multiple. Look for a common error type — a single root cause affecting many products at once (e.g., a token expiry) has a different resolution path from isolated per-product failures (e.g., individual image format issues). ## Common error types and resolutions **Symptom:** Individual products with `FAILED` status. Error detail references image format, image size, or image validation. **Cause:** Meta requires product images to be JPEG or PNG format and at least 500×500 pixels. Images that are a different format (WebP, GIF, AVIF), are below the minimum dimensions, or have a corrupted file will fail the Meta push. **How to resolve:** 1. Identify the affected product in **Catalog → \[Product Name] → Error Details** 2. Open the product in **Shopify Admin → Products** and update the product image to a JPEG or PNG file that meets the minimum 500×500px requirement 3. Save the product in Shopify — this triggers an automatic webhook update in Galantis 4. The next catalog sync cycle will re-attempt the Meta push with the updated image You do not need to manually trigger a re-sync for individual image fixes — the Shopify product update webhook handles it automatically. **How to avoid:** When adding product images in Shopify, use JPEG or PNG format at a minimum of 500×500px. Shopify's image optimizer may convert formats, so verify the final stored format if images are uploaded via third-party tools. If many products have image failures, run a bulk image audit in Shopify before triggering a manual re-sync. Fix all image issues first, then trigger one manual sync rather than multiple incremental re-syncs. **Symptom:** A sudden spike of `FAILED` status across many products simultaneously — products that were previously `SYNCED` are now `FAILED` with no corresponding changes in Shopify. The pattern affects many products at once rather than isolated items. **Cause:** The Meta Catalog access token has expired or been revoked in Meta Business Manager. All catalog push attempts fail at the authentication layer before any product data is evaluated. **How to resolve:** 1. Go to **Settings → WhatsApp Connection** and check the Meta Catalog token status 2. If the token is shown as expired or invalid, click **Reconnect** and go through the Meta OAuth flow to issue a new token 3. After reconnecting, trigger a manual sync from **Catalog → Shopify Sync → Sync Now** to re-queue all `FAILED` products for the next Meta push cycle A token expiry causes all products to show `FAILED` simultaneously. Do not attempt to fix individual products while the token is invalid — all attempts will fail. Reconnect the token first, then re-sync. **How to avoid:** Check the Meta Catalog token status periodically, especially before high-traffic campaign periods. A token that expires during a sale or launch period will prevent catalog-based messages from displaying correct product data. **Symptom:** Individual products with `FAILED` status. Error detail references a missing field — typically title, price, or image. **Cause:** Meta requires a minimum set of fields for a product to be accepted into a catalog. Products missing a title, a price, or at least one image cannot be pushed. **How to resolve:** 1. Open the `FAILED` product in **Catalog → \[Product Name] → Error Details** and identify the missing field 2. Open the product in Shopify and add the missing information — a product title, a variant price, or a product image 3. Save in Shopify — the `products/update` webhook fires automatically and updates the Galantis record 4. The next Meta sync cycle will include the now-complete product **Common missing field scenarios:** * Draft products that were synced before their data was complete — ensure products are fully configured before they enter the catalog sync pipeline * Products with variants that have no price set (price = 0 or price = null) — verify all variant prices are correctly set in Shopify **Symptom:** Campaigns or automations using SPM or MPM templates show message send failures. The error references a product that no longer exists. **Cause:** A product was deleted from Shopify after a template was built referencing it. Galantis received the `products/delete` webhook and removed the product from its catalog, but the template still references the deleted product ID. **How to resolve:** 1. Identify which template is referencing the deleted product — check **Templates** for SPM or MPM templates and review their product section configurations 2. Update the template to reference an available, `SYNCED` product 3. Resubmit the template for Meta approval if the product change requires a new approval (it typically will for SPM templates where the product is part of the approved template structure) 4. Once the template is re-approved, update any campaigns or automation Action Nodes that reference it **How to avoid:** Before deleting a product in Shopify, check whether it is referenced in any active templates. If it is, update the templates first before deleting the product. **Symptom:** Many products remain in `PENDING` status for an extended period without moving to `SYNCED` or `FAILED`. The sync appears to not be running. **Cause:** The catalog sync process may not be running as expected — a queue backlog or a processing issue may be preventing products from being pushed. **How to resolve:** 1. Trigger a manual full sync from **Catalog → Shopify Sync → Sync Now** to force a re-queue of all pending products 2. If the manual sync also does not process the products within a reasonable time, contact Galantis support — this indicates a processing issue that requires investigation **What to check before contacting support:** Confirm the issue is genuinely `PENDING` for longer than expected, not just a brief queuing delay for a large catalog. A store with thousands of products may take 10–20 minutes for an initial push to complete. ## Triggering a manual re-sync After fixing the root cause of sync errors, you can accelerate recovery by triggering a manual sync: Ensure the underlying issue is resolved — images updated in Shopify, token reconnected, missing fields added — before triggering a re-sync. Running a re-sync before fixing the root cause will produce the same failures. Go to **Catalog → Shopify Sync** and click **Sync Now**. Products will move from `FAILED` or `PENDING` to `SYNCED` as the Meta push completes for each one. Monitor the aggregate status counts in the Catalog view to confirm progress. After the sync completes, confirm the previously `FAILED` products now show `SYNCED` status. Any that remain `FAILED` have a different or additional issue — review their error details individually. ## Verifying catalog token health The Meta Catalog token is a common failure point that is easy to check proactively: 1. Go to **Settings → WhatsApp Connection** 2. Locate the Meta Catalog token status 3. Confirm it shows as valid and connected 4. If it shows as expired, disconnected, or invalid — reconnect immediately We recommend checking the token status before any catalog-dependent campaign launch and as a first step whenever catalog sync issues appear. ## Related guides * [Catalog — Catalog Health](/whatsapp/catalog/catalog-health) — Full catalog health monitoring reference * [Catalog — Meta Catalog](/whatsapp/catalog/meta-catalog) — Token connection and the three catalog flows * [Catalog — Shopify Sync](/whatsapp/catalog/shopify-sync) — Manual sync and automatic webhook sync behavior * [Gather context for support](../debugging) — What to capture from the dashboard before opening a sync-related ticket # Message Delivery Source: https://docs.digifist.com/galantis/whatsapp/support/troubleshooting/message-delivery Diagnosing and resolving failed WhatsApp message sends — consent errors, missing calling codes, insufficient credits, and other delivery failures. Message delivery failures appear as `FAILED` status on individual messages in campaign analytics, automation activity logs, or Inbox conversation threads. Each failure has a specific error reason attached to it — identifying the error reason is the first step to resolving the underlying issue and preventing it from affecting future sends. ## What this covers * Where to find delivery failure details * All common error types with resolution steps * How to prevent each error type in future sends * What to do when the error is not one of the common types ## Step 1 — Find the failing messages Delivery failures surface in three places depending on what triggered the send: **Campaign failures** — Go to **Campaigns → \[Campaign Name]**. The analytics view shows the `FAILED` count. Click into the failed message detail to see per-message error reasons. **Automation failures** — Go to **Automations → \[Automation Name] → Activity**. Find the customer whose message failed and expand their node execution history. The `FAILED` Action Node shows the specific error reason. **Inbox failures** — In the conversation thread, failed messages are marked with a failure indicator. The error reason is visible by hovering or expanding the message status. ## Common error types and resolutions **What it means:** The customer's `marketing_state` is not `SUBSCRIBED` at the time the message was dispatched. Galantis attempted to send to a customer who has not explicitly opted into WhatsApp marketing. **Common causes:** * A customer's consent state changed from `SUBSCRIBED` to `UNSUBSCRIBED` between when the campaign audience was estimated and when the send ran — for example, the customer replied STOP to a previous message in the gap between scheduling and dispatch * A manually imported list included customers without verified `SUBSCRIBED` consent * A segment was built without a `Consent status = Yes` rule, and some segment members have non-subscribed consent states **How to resolve:** * For the current failed send: the message cannot be retroactively delivered — the customer was correctly excluded per WhatsApp policy * For future sends: add `Consent status = Yes` to all segments used as campaign audiences; review imported lists to ensure all entries have verified consent; check the **Audience → Contacts → \[Customer]** profile to confirm `marketing_state` before investigating further **How to verify the customer's consent state:** Go to **Audience → Contacts**, search for the customer, and check their `marketing_state` field. If it shows `UNSUBSCRIBED`, the customer has opted out. If it shows `NOT_SUBSCRIBED` or `UNKNOWN`, they never provided consent. This error is a compliance enforcement action, not a platform bug. Galantis is working correctly when it blocks sends to non-subscribed customers. The resolution is to ensure your audience targeting only includes `SUBSCRIBED` customers. **What it means:** The customer's phone number in Galantis does not include a country calling code (e.g., `+52` for Mexico, `+971` for UAE). WhatsApp requires internationally formatted phone numbers for message delivery. **Common causes:** * Customers entered their phone number at Shopify checkout without the country code (e.g., `5512345678` instead of `+525512345678`) * A phone number field in Shopify was not configured to require international format * A customer data import included phone numbers without calling codes **How to resolve:** 1. Go to **Audience → Contacts → \[Customer Name]** and check the `phone`, `phone_country_code`, and `phone_calling_code` fields 2. The phone number in Shopify must be corrected — Galantis syncs phone data from Shopify, so fixing it in Galantis only would be overwritten on the next sync 3. Open **Shopify Admin → Customers → \[Customer]** and update the phone number to include the correct international dialing prefix 4. Save the customer record in Shopify — the `customers/update` webhook fires and propagates the corrected number to Galantis **For bulk affected customers:** If many customers are affected, the root cause is likely a checkout phone field that does not enforce international format. Review your Shopify checkout phone field settings and consider adding validation or auto-formatting that appends the correct country code. **How to avoid:** Configure Shopify's phone number collection to require or auto-format international phone numbers at the point of entry. **What it means:** Your Galantis workspace ran out of message credits during the send. Messages dispatched after the credit balance reached zero failed with this error. **Identifying the scope:** Check your credit balance in **Billing → Overview**. If the balance is at or near zero, insufficient credits is the likely cause for recent failures. Compare the failed message count against your remaining credit balance at the time of the send. **How to resolve:** 1. Top up your credit balance or upgrade your plan via **Billing** 2. Determine whether the failed messages need to be re-sent — for campaigns, assess whether the unsent recipients are worth a follow-up send once credits are restored; for automations, the automation will resume processing new enrollments once credits are available, but already-failed messages for past enrollments will not auto-retry **Re-sending failed campaign messages:** If a campaign partially failed due to insufficient credits and you want to reach the failed recipients, you can create a new campaign targeting only those recipients. Filter the audience to customers who did not receive the original campaign — use a list of the failed recipients or a segment based on last-message-received date. **How to avoid:** Set up a credit balance alert under **Billing** so you receive a notification when the balance drops below a threshold. Review estimated credit requirements before launching large campaigns. Credits consumed before the balance hit zero are not refunded for partially failed campaigns. Ensure your credit balance is sufficient for the full estimated audience size before launching a campaign — the pre-launch compliance check validates this, but manually topping up before large sends removes the risk entirely. **What it means:** An agent in the Inbox attempted to send a free-form session message to a customer, but the 24-hour conversation window had closed. Session messages are only permitted within an active window. **How to resolve:** * The agent must use an approved template to re-engage the customer outside the window * In the Inbox, select an approved template from the template picker to send the message This is not an error in the platform — it is correct enforcement of WhatsApp's messaging policy. See [Compliance — Conversation Window](/whatsapp/compliance/conversation-window) for the full window rules. **What it means:** The template assigned to the campaign or automation Action Node is not in `APPROVED` status. The message could not be sent because WhatsApp does not accept unapproved template sends. **How to resolve:** 1. Check the template status in **Templates → \[Template Name]** 2. If `PENDING_APPROVAL` — wait for Meta's review to complete 3. If `REJECTED` — review the rejection reason and fix the template; see [Template Rejection](./template-rejection) 4. If `PAUSED` — the template was previously approved but has been paused by Meta due to quality issues; see [Templates — Quality](/whatsapp/templates/template-quality) For campaigns, re-launch the campaign once the template is `APPROVED`. For automations, the automation will resume sending correctly once the template is restored to `APPROVED` — no re-activation is needed. ## Errors not listed above If the error reason on a failed message does not match any of the above, it is typically a Meta API error code that Galantis surfaces directly. These are less common and often transient: * **Transient network or API errors** — Meta API errors with a 5xx code or a `TEMPORARY_FAILURE` indicator. These typically self-resolve — if the automation or campaign retried the send, check whether subsequent attempts succeeded. * **Recipient phone number not on WhatsApp** — The customer's phone number is valid internationally but is not registered on WhatsApp. This is a data quality issue — the customer cannot be reached on WhatsApp at this number. * **Rate limit exceeded** — The phone number's per-period message throughput limit was reached. High-volume campaigns can hit this limit. The send will typically recover in the next batch cycle as the rate limit window resets. For any persistent error not covered here, capture the specific error code from the failed message detail and open a support ticket via the in-app chat. Include the campaign or automation name, the affected customer (or a sample of affected customers), and a screenshot of the error detail. See [Gather context for support](../debugging) for the full checklist. ## Checking a customer's delivery eligibility Before investigating a delivery failure in depth, a quick eligibility check on the customer's profile often identifies the root cause immediately: Go to **Audience → Contacts** and search for the customer whose message failed. Confirm `marketing_state = SUBSCRIBED`. Any other state means the customer cannot receive campaign or automation messages. Confirm `phone`, `phone_country_code`, and `phone_calling_code` are all populated and correctly formatted. A missing `phone_calling_code` is the cause of `CUSTOMER_IS_MISSING_CALLING_CODE` failures. Review the customer's recent message history on their profile. If the last outbound message shows `FAILED`, the error reason is visible there without needing to open the campaign or automation detail. ## Related guides * [Audience — Consent & Opt-outs](/whatsapp/audience/consent-optouts) — Understanding and managing customer consent states * [Audience — Contacts](/whatsapp/audience/contacts) — Phone number fields and how they sync from Shopify * [Billing — Conversations](/whatsapp/billing/conversations) — Credit consumption and balance management * [Compliance — Conversation Window](/whatsapp/compliance/conversation-window) — The 24-hour window rule for session messages * [Gather context for support](../debugging) — What to capture before opening a delivery-related ticket # Template Rejection Source: https://docs.digifist.com/galantis/whatsapp/support/troubleshooting/template-rejection Diagnosing and resolving Meta template rejections and paused templates in Galantis. Template rejection is one of the most common issues merchants encounter. Meta rejects templates that do not comply with its content policies, category requirements, or structural rules. A rejected template cannot be used in campaigns or automations until the issue is resolved and the template is resubmitted and approved. This guide covers how to find the rejection reason, the most common causes, and exactly what to fix before resubmitting. ## What this covers * Where to find the rejection reason * All common rejection causes and how to resolve each * How to resubmit after fixing the issue * What to do when a previously approved template is paused ## Step 1 — Find the rejection reason Go to **Templates** in the Galantis dashboard and locate the template with `REJECTED` status. Click into the template and navigate to the **Status** tab or section. Meta's rejection reason is displayed here — it identifies the specific policy or structural issue that caused the rejection. Read the rejection reason carefully before making any changes. Fixing the wrong thing and resubmitting wastes the review cycle and delays your campaign. Meta's rejection reasons are specific — they name the component and the violation. Resubmitting a template without addressing the rejection reason will result in another rejection. Repeated submissions of the same non-compliant content may affect your template submission standing with Meta. ## Common rejection causes **What it means:** The template content does not match the declared category. A promotional message was submitted as Utility, or a transactional message was incorrectly submitted as Marketing. **Most common form:** A template with discount codes, sale language, or promotional CTAs submitted under the `UTILITY` category to benefit from lower per-message pricing. **How to fix:** * If the message is promotional — it offers a discount, announces a product, or asks the customer to buy something — change the category to `MARKETING` * If the message is genuinely transactional but was mistakenly categorized — an order confirmation submitted as Marketing — change to `UTILITY` * Review the full decision guide in [Templates — Categories](/whatsapp/templates/template-categories) if you are uncertain which category applies **How to avoid next time:** Apply the single-question test before submitting: "Would the customer benefit from receiving this message even if they were not being asked to buy something?" If yes — Utility. If no — Marketing. **What it means:** One or more `{{N}}` variable placeholders in the template body or header do not have example values provided. Meta requires concrete sample content for every variable. **How to identify:** The rejection reason will reference specific variable positions — e.g., "Variable example missing for `{{2}}`." **How to fix:** * Open the template builder and locate each `{{N}}` placeholder * Provide a realistic example value for each variable — not a generic placeholder like `[name]` or `VALUE`, but actual representative content: * `{{1}}` for `customer.first_name` → example: `María` * `{{2}}` for `order.total_price` → example: `$349.00` * `{{3}}` for a discount code → example: `VERANO20` * Ensure no variable position is left with an empty or placeholder example **How to avoid next time:** Before submitting any template, verify that every `{{N}}` has a filled-in, realistic example value. **What it means:** The template body, header, or button text contains content that violates WhatsApp's Business Policy — exaggerated claims, misleading offers, content from a restricted industry, or deceptive language. **Common examples:** * Superlative claims without substantiation: "The best prices guaranteed", "100% results" * Urgency language that is demonstrably false: "Only 1 left!" when inventory is not actually limited * Content from restricted categories: alcohol, gambling, financial products, health supplements (with restrictions varying by market) * Deceptive button URLs that navigate to a different destination than the button label implies **How to fix:** * Remove or rewrite the flagged content * Replace exaggerated claims with factual descriptions * Verify button URLs navigate to the destination the button label describes * Review Meta's WhatsApp Business Policy for your specific industry and market if you operate in a restricted category **How to avoid next time:** Write template copy as if it will be reviewed for factual accuracy — because it will be. **What it means:** Variable placeholders in the template skip a position number. For example, using `{{1}}` and `{{3}}` in the body without `{{2}}`. Meta requires variables to be sequential starting from `{{1}}`. **How to fix:** * Review the template body and identify all `{{N}}` placeholders * Renumber them sequentially: `{{1}}`, `{{2}}`, `{{3}}` — no gaps * Update the example values to match the renumbered positions * Update any campaign or automation variable mappings that reference the old position numbers after resubmission **How to avoid next time:** When editing an existing template and removing a variable, renumber all subsequent variables rather than leaving a gap. **What it means:** One or more buttons in the template have an invalid configuration — an incorrectly formatted URL, an invalid phone number format, an unsupported button type combination, or a missing required field. **Common examples:** * `URL` button with a malformed URL (missing protocol, contains spaces, or uses an unsupported URL scheme) * `PHONE_NUMBER` button with a phone number that is not in international format (`+` prefix and country code) * `COPY_CODE` button with an empty code value * Incompatible button type combinations (Meta has restrictions on which button types can appear together) **How to fix:** * Open the template builder and check each button configuration * For URL buttons: ensure the URL starts with `https://` and is a valid, reachable URL * For phone number buttons: format the number in full international format including `+` and country code * For copy code buttons: ensure the code field is populated with a non-empty value * Remove any button type combinations that Meta does not support **How to avoid next time:** Test all button URLs before submitting to confirm they resolve correctly. ## Resubmitting after fixing Edit the template in the Galantis template builder. Address every issue identified in the rejection reason — not just the most obvious one. If the rejection lists multiple issues, fix all of them before resubmitting. Before resubmitting, read the complete template as if you are a Meta reviewer seeing it for the first time. Confirm the category matches the content, all variables have examples, and all buttons are correctly configured. Click **Submit**. The template returns to `PENDING_APPROVAL` status. Meta's review typically completes within minutes to a few hours. Status updates arrive automatically via Meta webhook — the template status in Galantis updates without manual polling. Watch for the status to move to `APPROVED` before scheduling campaigns or activating automations that use this template. ## When a previously approved template is paused A template that was previously `APPROVED` and in active use can be paused by Meta if quality signals degrade after approval. When this happens, active campaigns referencing it will fail for new sends, and automation Action Nodes using it will return `FAILED` for customers who reach them. **How to diagnose:** * Go to **Templates → \[Template Name] → Status** and confirm the template is `PAUSED` rather than `APPROVED` * Review Meta's reason for the pause if provided **How to resolve:** * Assess whether the issue is content-based (revise and resubmit), audience-based (review who is being targeted and whether the message is relevant), or frequency-based (adjust send cadence to reduce block rates) * If the template content is sound and the issue is audience quality — recipients are blocking because the message is irrelevant to them — improve targeting rather than revising the template * After addressing the root cause, edit and resubmit the template if content changes were needed See [Templates — Quality](/whatsapp/templates/template-quality) for the broader context on how Meta evaluates live template quality and what signals lead to a pause. ## Related guides * [Templates — Categories](/whatsapp/templates/template-categories) — Category selection rules and the decision guide * [Templates — Creating Templates](/whatsapp/templates/creating-templates) — Variable examples and button configuration * [Templates — Approval Lifecycle](/whatsapp/templates/approval-lifecycle) — Full status lifecycle reference * [Templates — Quality](/whatsapp/templates/template-quality) — Why approved templates can be paused after going live # Widget Not Displaying Source: https://docs.digifist.com/galantis/whatsapp/support/troubleshooting/widget-not-displaying Fixing Inbox chat widgets and Back-in-Stock subscription widgets that are not appearing on your Shopify storefront. Both the Inbox chat widget and the Back-in-Stock subscription widget are injected into your Shopify storefront via script tags. When a widget is not appearing, the cause is almost always one of a small set of identifiable issues — a missing Shopify permission, a caching problem, a theme conflict, or a condition that has not been met for the widget to display. This guide covers both widgets together since they share the same injection mechanism and the same diagnostic path. ## What this covers * Pre-checks before troubleshooting * Diagnosing why a widget is not appearing * Fixes for each common cause * Testing after a fix ## Before troubleshooting Confirm which widget is affected and which symptom you are seeing: | Symptom | Widget | Section | | --------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------- | | Chat button not visible on any page | Inbox widget | [Inbox widget not appearing](#inbox-widget-not-appearing) | | Chat button not visible on specific pages | Inbox widget | [Display rules and page targeting](#display-rules-and-page-targeting) | | Back-in-Stock button not visible on out-of-stock products | BIS widget | [BIS widget not appearing](#back-in-stock-widget-not-appearing) | | Back-in-Stock button visible on in-stock products | BIS widget | [Widget appearing on in-stock variants](#widget-appearing-on-in-stock-variants) | | Widget visible but form submission fails | Either | [Form submission failures](#form-submission-failures) | Do not test widgets inside the Shopify theme editor or Customizer preview. The Shopify theme preview does not execute third-party script tags. Always verify widgets on your live storefront URL (e.g., `https://your-store.com`), not `https://your-store.myshopify.com/admin`. *** ## Inbox widget not appearing ### Check 1 — Verify the write\_script\_tags permission The `write_script_tags` permission is required for Galantis to inject the widget script. If this permission is missing or was revoked, no widget will appear. **How to check:** 1. Go to **Shopify Admin → Settings → Apps and sales channels** 2. Find Galantis in the installed apps list and click it 3. Open the **Permissions** section 4. Confirm `write_script_tags` is listed as a granted permission **If the permission is missing:** * Uninstall and reinstall the Galantis app from the Shopify App Store — this re-initiates the permission grant flow * Contact Galantis support if reinstalling is not practical *** ### Check 2 — Clear browser cache and reload Script tag injection can be cached by the browser. A widget that was configured after a recent change may not appear until the cache is cleared. **Steps:** 1. Open your live storefront URL in a browser 2. Clear the browser cache (`Cmd+Shift+R` on Mac, `Ctrl+Shift+R` on Windows for a hard reload) 3. Check whether the widget now appears If the widget appears after a hard reload, the issue was browser caching. Future visitors will see the widget after their own cache clears. *** ### Check 3 — Check for JavaScript errors in the browser console A script conflict with your Shopify theme or another installed app can prevent the Galantis widget script from loading correctly. **Steps:** 1. Open your live storefront in a browser 2. Open the browser developer tools (`F12` or right-click → Inspect) 3. Navigate to the **Console** tab 4. Reload the page and look for JavaScript errors If the console shows errors referencing the Galantis widget script or errors that appear to block script execution, note the error message and include it in a support ticket. A screenshot of the console errors is more useful than a text description. *** ### Check 4 — Verify widget settings are saved If the widget was recently configured but not saved, the script tag may not have been written to Shopify. **Steps:** 1. Go to **Inbox → Widget Settings** in the Galantis dashboard 2. Confirm the settings are configured (button position, colors, label text) 3. Click **Save** — even if settings appear correct, re-saving forces a script tag write to Shopify 4. Return to your storefront and reload *** ## Display rules and page targeting If the Inbox chat button is visible on some pages but not others, the issue is likely the widget's display rules configuration. **Steps:** 1. Go to **Inbox → Widget Settings** and review the **Display rules** section 2. Confirm the pages where the button should appear are included in the display rules 3. Confirm the page you are testing on matches one of the included page patterns 4. Update display rules if needed and save *** ## Back-in-Stock widget not appearing ### Check 1 — Confirm the variant is genuinely out of stock The Back-in-Stock widget only appears when the currently selected variant has `inventory_quantity = 0` in Shopify. The widget does not appear for in-stock variants, regardless of widget configuration. **Steps:** 1. Go to **Shopify Admin → Products → \[Product Name]** 2. Find the specific variant you are testing on and confirm its inventory shows `0` 3. If the inventory shows a positive number, the variant is in stock and the widget is working correctly — it should not appear **Common source of confusion:** A product page where all variants are in stock — the Back-in-Stock widget will not appear on any of them, which may look like a missing widget but is actually correct behavior. *** ### Check 2 — Verify the write\_script\_tags permission Same check as for the Inbox widget — see [Check 1](#check-1--verify-the-writescript_tags-permission) above. *** ### Check 3 — Check inventory tracking is enabled If the product has inventory tracking disabled in Shopify, Shopify does not report an `inventory_quantity` for variants. The widget cannot determine stock status and will not appear. **Steps:** 1. Go to **Shopify Admin → Products → \[Product Name]** 2. In the Inventory section, confirm **Track quantity** is enabled 3. If tracking is disabled, enable it and set the inventory quantity to `0` for the out-of-stock variant *** ### Check 4 — Verify widget settings are saved Same check as for the Inbox widget — go to **Back-in-Stock → Settings**, confirm configuration, click **Save**, and reload the storefront page. *** ### Check 5 — Test on the live storefront, not theme preview Repeat the same verification as for the Inbox widget — theme preview does not execute script tags. Test on your live URL. *** ## Widget appearing on in-stock variants If the Back-in-Stock widget button appears when a customer selects an in-stock variant, the issue is a stale page load — the widget is evaluating inventory data embedded in the page at load time. **Why this happens:** The page was loaded when the variant was out of stock. The variant was restocked in Shopify after the page loaded. The widget does not re-evaluate inventory in real time — it uses the data embedded at page load. **Resolution:** This resolves itself on the next page load. No configuration change is needed. The widget will correctly show or hide based on the current inventory state after any page refresh. *** ## Form submission failures If the widget button appears and the modal opens correctly, but submitting the form fails, the issue is separate from the display/injection layer. **For the Inbox chat widget:** When a customer taps the chat button and it fails to open WhatsApp or fails to pre-fill your business number, confirm: * Your WhatsApp Business Account is connected under **Settings → WhatsApp Connection** * The selected phone number is active and not in an error state **For the Back-in-Stock subscription form:** When a customer submits their number but the subscription is not recorded in **Back-in-Stock → Subscriptions**: * Check the browser console for network errors on the form submission request * Confirm your WhatsApp Business Account is connected * Contact Galantis support with the browser console error if the issue persists *** ## Testing checklist after a fix After applying any of the resolutions above, run through this checklist to confirm the widget is working end to end: * [ ] Widget appears on the correct pages (Inbox: configured pages; BIS: out-of-stock variants only) * [ ] Widget does not appear where it should not (BIS: in-stock variants; Inbox: excluded pages) * [ ] Widget button is styled correctly with your configured colors and label text * [ ] Modal opens when the button is tapped * [ ] Form submission creates a record (BIS: subscription appears in **Back-in-Stock → Subscriptions**; Inbox: initiates a conversation in **Inbox**) ## Related guides * [Inbox — Storefront Widget](/whatsapp/inbox/storefront-widget) — Widget installation and placement options * [Inbox — Widget Appearance](/whatsapp/inbox/widget-appearance) — Display rules and appearance settings * [Back-in-Stock — Widget Installation](/whatsapp/back-in-stock/widget-installation) — BIS widget installation and verification * [Back-in-Stock — Product & Inventory Rules](/whatsapp/back-in-stock/product-inventory-rules) — How inventory quantity controls widget visibility * [Integrations — Shopify — Permissions](/whatsapp/integrations/shopify/permissions) — write\_script\_tags permission context # Approval Lifecycle Source: https://docs.digifist.com/galantis/whatsapp/templates/approval-lifecycle The four template statuses in Galantis — DRAFT, PENDING_APPROVAL, APPROVED, and REJECTED — and what each means for your campaigns and automations. Every template in Galantis moves through a defined lifecycle from creation to active use. The status at each stage determines whether the template can be used to send messages. Understanding what each status means — and what actions are available at each stage — prevents delays in campaign launches and automation activations. ## What this covers * All four template statuses and their meaning * What triggers each status transition * What you can and cannot do at each status * How to resolve a rejection and resubmit * How status changes in Meta affect active automations ## Template statuses **`DRAFT`** — The template has been saved in Galantis but not yet submitted to Meta. A template enters `DRAFT` status when it is created and saved without being submitted. It stays in `DRAFT` until you explicitly click **Submit**. **What you can do in DRAFT:** * Edit all template components — header, body, footer, buttons, category, and language * Preview the assembled template * Submit for Meta review when ready **What you cannot do in DRAFT:** * Use the template in a campaign * Assign the template to an automation Action Node and activate the automation `DRAFT` templates are not visible to Meta. No review has been initiated. The template exists only in Galantis until submitted. Use `DRAFT` status to build and iterate on templates before committing to a submission. It is better to spend time in `DRAFT` refining copy, variable examples, and category accuracy than to submit prematurely and receive a rejection. **`PENDING_APPROVAL`** — The template has been submitted to Meta and is awaiting review. A template enters `PENDING_APPROVAL` immediately when you click **Submit**. Galantis sends the template to Meta's Template API and the status updates to reflect the pending review. **What you can do in PENDING\_APPROVAL:** * View the template and its submitted content * Monitor the status — it will update automatically when Meta responds **What you cannot do in PENDING\_APPROVAL:** * Edit the template — submitted content is locked during review * Use the template in a campaign or automation Meta's review typically completes within minutes to a few hours. In some cases — particularly for first-time submissions from a new WhatsApp Business Account — review may take longer. Status updates arrive via Meta webhook and are reflected in Galantis automatically. You do not need to manually refresh or poll for status updates. Galantis receives Meta's webhook notification when the review completes and updates the template status immediately. **`APPROVED`** — Meta has reviewed and approved the template. It is ready for use in campaigns and automations. A template reaches `APPROVED` status when Meta's review confirms the template content is compliant with WhatsApp's Business Policy and the declared category is accurate. **What you can do in APPROVED:** * Select the template in the campaign builder * Assign the template to automation Action Nodes * Use the template for Inbox agent replies when the conversation window is closed **What can change after APPROVED:** * Meta may pause or suspend a template if quality signals degrade after it is live — block rates, report rates, or category compliance flags can cause Meta to move a template from `APPROVED` to a paused state without action from you * If a template is paused by Meta, active automations using it will begin failing for customers who reach the affected Action Node Monitor template status periodically in **Templates**, especially for high-volume templates that are actively sending. See [Template Quality](./template-quality) for how quality signals affect live templates. **`REJECTED`** — Meta's review found the template non-compliant. The template cannot be used until the issues are resolved and it is resubmitted and approved. A template is rejected when Meta's review identifies one or more compliance issues. The rejection reason is visible in **Templates → \[Template Name] → Status**. **Common rejection reasons:** * **Misleading category** — promotional content submitted as Utility, or vice versa * **Missing or empty variable examples** — `{{N}}` placeholders without sample values * **Prohibited content** — language that violates WhatsApp's content policies (exaggerated claims, prohibited industries, misleading offers) * **Incomplete variable sequence** — variable numbers that skip positions (e.g., `{{1}}` and `{{3}}` without `{{2}}`) * **Invalid button configuration** — button type, URL format, or phone number format errors **What you can do in REJECTED:** * Read the rejection reason carefully — it identifies the specific issue * Edit the template to address the rejection cause * Resubmit for a new review **What you cannot do in REJECTED:** * Use the template in any campaign or automation Resubmitting a template without addressing the rejection reason will result in another rejection. Read the rejection reason fully before making changes. Repeated submissions of non-compliant content may affect your template submission standing with Meta. **Resolving a rejection:** 1. Open **Templates → \[Template Name] → Status** and read the rejection reason 2. Identify which component caused the rejection — category, body copy, variable examples, or buttons 3. Edit the template to address the specific issue 4. Add complete, realistic example values to all variable placeholders if missing 5. Resubmit — the template returns to `PENDING_APPROVAL` ## Status transition summary ``` DRAFT │ └─ Submit ──→ PENDING_APPROVAL │ ├─ Meta approves ──→ APPROVED ──→ (Meta may pause) ──→ Paused/Suspended │ └─ Meta rejects ──→ REJECTED ──→ Edit and resubmit ──→ PENDING_APPROVAL ``` ## Impact on active automations If a template used in an active automation is paused or suspended by Meta after the automation was activated: * The automation remains active — it is not automatically deactivated * Customers who reach the Action Node using the affected template will have that node fail with a `FAILED` status in the activity log * The automation continues executing for other customers using other Action Nodes that reference approved templates To resolve: address the template quality issue, restore the template to `APPROVED` status, and confirm the automation's action node is pointing to the restored template. No automation re-activation is needed once the template is approved again. Automations with any Action Node referencing a non-`APPROVED` template are flagged and cannot be activated. This flag is checked at activation time — an automation that was correctly configured at activation is not retroactively deactivated if a template is later paused. ## Related guides * [Creating Templates](./creating-templates) — Building templates correctly to minimize rejection risk * [Template Categories](./template-categories) — Category accuracy — the most common rejection cause * [Template Quality](./template-quality) — How live template performance affects status after approval * [Support — Template Rejection](/whatsapp/support/troubleshooting/template-rejection) — Detailed rejection troubleshooting # Creating Templates Source: https://docs.digifist.com/galantis/whatsapp/templates/creating-templates How to build and submit a WhatsApp message template in Galantis — header, body, footer, buttons, and submission. Templates are built in Galantis and submitted to Meta for review from the same interface. The template builder walks through each structural component — header, body, footer, and buttons — and lets you preview the assembled message before submitting. Once submitted, Meta reviews the template and returns an approval or rejection, typically within minutes to a few hours. ## What this covers * The four template components and their options * How to create and submit a template * Variable placeholder syntax * Component requirements and limits * Submission behavior and what happens after ## Creating a template Go to **Templates → New Template** in the Galantis dashboard. Select **Marketing** or **Utility**. This must be set before building the template content — it is a declaration of intent that Meta evaluates against your message. See [Template Categories](./template-categories) if you are unsure which applies. Select the language code for this template (e.g., `en`, `es`, `pt_BR`). Each template is tied to a single language. If you need the same message in multiple languages, create separate template records — one per language. Configure the header, body, footer, and buttons as described below. Review the assembled template in the preview panel. When ready, click **Submit** to send it to Meta for review. The status changes to `PENDING_APPROVAL` immediately. ## Template components ### Header (optional) The header appears above the body text. It is optional but strongly recommended for templates that use image or product formats — a text-only template without a header is valid but may perform less well visually. A single line of plain text. Supports one optional variable placeholder (`{{1}}`). Use for: subject-line-style context above the body — store name, offer headline, or a personalized greeting that would feel redundant in the body. An uploaded image displayed above the body. The image is stored in Galantis and uploaded to Meta's media infrastructure. Use for: product shots, promotional banners, brand imagery. Meta requires images meet minimum size and format standards — see [Support — Catalog Sync Errors](/whatsapp/support/troubleshooting/catalog-sync-errors) for image requirements. An uploaded video displayed above the body. Use for: product demonstrations, brand videos, how-to content. Keep videos short — WhatsApp loads media inline and long videos create friction. An uploaded PDF or document file. Use for: product guides, size charts, menus, or any reference material the customer needs to download or view. A single product pulled from your synced Meta Catalog. Displays the product image, name, and price. Use for: Single Product Message (SPM) format templates. Requires a connected and synced Meta Catalog. See [Template Formats](./template-formats). A location pin with coordinates, name, and address. Use for: store location messages, event venue details, or delivery address confirmations. *** ### Body (required) The body is the main text of the message. It is the only required component — a template with only a body and no header, footer, or buttons is valid. **Variable placeholders** are defined in the body using positional syntax: `{{1}}`, `{{2}}`, `{{3}}`. Each placeholder is mapped to a customer or order data field when the template is used in a campaign or automation. Variable positions must be sequential starting from `{{1}}` — gaps in the sequence (e.g., using `{{1}}` and `{{3}}` without `{{2}}`) will cause submission to fail. **Rich text** — the body supports bold (`*text*`), italic (`_text_`), and strikethrough (`~text~`) formatting. Meta requires that all variable placeholders in a submitted template include example values — concrete sample text that demonstrates what the variable will contain at send time. Submitting a template with empty variable examples is a common rejection cause. Fill in realistic example values for every `{{N}}` placeholder before submitting. *** ### Footer (optional) A short line of static text below the body. Does not support variables. Character limit applies — keep it brief. Common uses: * Opt-out instruction: `Reply STOP to unsubscribe` * Brand tagline * Legal or compliance notice *** ### Buttons (optional, up to 3) Buttons appear below the footer and give the customer a tappable action. Up to three buttons can be added per template, but all buttons must be of compatible types — not all button type combinations are supported by Meta. A tappable reply button that sends a predefined text response back to your WhatsApp number when the customer taps it. Use for: simple binary responses ("Yes, I'm interested" / "No thanks"), feedback collection, or opt-in confirmation flows. The reply text is defined at template creation time and is fixed — it cannot be personalized per recipient. Opens a link in the customer's browser when tapped. Supports a dynamic URL variable — the path or query string can be personalized per recipient using a `{{1}}` placeholder in the URL field. Use for: "Shop now" links to collection pages, "View order" links to order status pages, abandoned checkout recovery links. Use dynamic URL variables to link directly to a customer's abandoned checkout URL or a personalized recommendation page rather than a generic homepage. Initiates a phone call to a specified number when tapped. Use for: customer service contact, sales team calls, or support escalation paths where a live call is the appropriate next step. Copies a predefined text string to the customer's clipboard when tapped. Typically used for discount codes. Use for: promotional offer codes, referral codes, or any fixed string the customer needs to paste elsewhere. The code is set at template creation time. If your offer codes vary per customer, use a URL button linking to a personalized checkout with the discount pre-applied instead. ## Submission and what happens next When you click **Submit**, Galantis sends the template to Meta's Template API. The template status changes to `PENDING_APPROVAL` and Meta begins its review. Meta reviews templates for: * Category accuracy — does the content match the declared category? * Variable example completeness — are all `{{N}}` placeholders accompanied by example values? * Content policy compliance — does the message contain prohibited content? * Button configuration validity — are the button types and values correctly formed? Approval is typically returned within minutes to a few hours. The template status updates automatically in Galantis when Meta responds — you do not need to manually check or refresh. See [Approval Lifecycle](./approval-lifecycle) for the full status reference. ## Best practices * **Write the body copy first, then set variables.** Decide what the message says before deciding what to personalize — over-using variables produces awkward, robotic-feeling messages. * **Always include example values for every variable placeholder.** Empty examples are a rejection trigger. Use realistic values that reflect actual customer data — `Sarah` for `customer.first_name`, `$89.00` for `order.total_price`. * **Keep footer text genuinely brief.** The footer competes with the body for the customer's attention. `Reply STOP to unsubscribe` is ideal — anything longer reduces the clarity of the main message. * **Test button URLs before submitting.** A URL button linking to a broken or redirecting URL is a poor first impression and may affect quality signals. Verify all URLs are live and landing on the intended destination. * **Do not resubmit a rejected template without addressing the rejection reason.** Repeated submissions of the same rejected content signals disregard for Meta's policies and may affect your account standing. ## Related guides * [Template Categories](./template-categories) — Choosing the correct category before building * [Template Formats](./template-formats) — Structural format options beyond the standard layout * [Variables & Localization](./variables-localization) — Variable placeholder mapping and language management * [Approval Lifecycle](./approval-lifecycle) — What happens after submission # Templates Source: https://docs.digifist.com/galantis/whatsapp/templates/index WhatsApp message templates in Galantis — the pre-approved messages required for all campaigns, automations, and proactive outbound messaging. Templates are the foundation of every outbound message in Galantis. Every campaign broadcast, every automation action node, and every proactive message sent outside a 24-hour conversation window requires a WhatsApp template that has been submitted to and approved by Meta before it can be used. A template is not just a message — it is a structured artifact with a fixed format, a category declaration, optional dynamic variables, and a status that Meta controls. Understanding how templates work, what they require, and how Meta evaluates them is essential before building any campaign or automation. ## How templates work in Galantis Templates are created in Galantis, submitted to Meta for review, and used in campaigns and automations once approved. The lifecycle moves through four states: `DRAFT` → `PENDING_APPROVAL` → `APPROVED` or `REJECTED`. Only `APPROVED` templates can be used to send messages. At send time, dynamic variable placeholders in the template body — `{{1}}`, `{{2}}` — are populated with real customer or order data, producing a personalized message for each recipient while the template structure remains fixed and Meta-approved. ## Guides in this section Marketing vs Utility — what each category means and when to use it. Headers, body, footer, buttons, and how to build and submit a template. Single Rich Card, Multi Rich Card, SPM, MPM, and Whole Catalog structures. DRAFT, PENDING\_APPROVAL, APPROVED, and REJECTED — what each status means. Dynamic variable mapping and per-language template management. How Meta evaluates template quality and how to keep templates healthy. ## Before creating your first template Two decisions shape every template before you write a single word of copy: **Category first** — decide whether the message is Marketing or Utility. This is a compliance decision, not a formatting one. The category you declare must accurately reflect the message's purpose. Getting this wrong is the most common cause of rejection. See [Template Categories](./template-categories). **Format second** — decide whether you need a standard message, a product card, a carousel, or a catalog-based format. Format choice depends on your campaign type and whether you have a Meta Catalog connected. See [Template Formats](./template-formats). ## Where templates are used | Feature | Template requirement | | ----------------- | ------------------------------------------------------------------------------------------------ | | **Campaigns** | All campaigns require an `APPROVED` template | | **Automations** | Every Action Node requires an `APPROVED` template | | **Inbox** | Required when the 24-hour conversation window is closed | | **Back-in-Stock** | The restock notification is sent via an automation Action Node — requires an `APPROVED` template | ## Related guides * [Campaigns — Compliance Checks](/whatsapp/campaigns/compliance-checks) — Pre-launch template status validation * [Automations — Actions](/whatsapp/automations/actions) — How templates are assigned to Action Nodes * [Compliance — Templates vs Session Messages](/whatsapp/compliance/templates-vs-session) — When templates are required vs session messages # Template Categories Source: https://docs.digifist.com/galantis/whatsapp/templates/template-categories Marketing and Utility — the two template categories in Galantis, what each covers, and why accurate categorization matters. Every WhatsApp template submitted to Meta must be assigned a category. The category declares the message's purpose to Meta and determines how it is reviewed, how it is priced, and how Meta monitors it after approval. In Galantis, the two categories available are **Marketing** and **Utility**. Choosing the correct category is a compliance decision. It must accurately reflect what the message does — not what you want it to cost or how quickly you want it approved. Miscategorization is the leading cause of template rejection in Galantis and one of the fastest paths to phone number quality degradation. ## What this covers * What Marketing and Utility categories mean * Which messages belong in each category * Why accurate categorization matters for compliance and deliverability * Authentication templates and why they are out of scope ## Categories **Marketing** is the correct category for any message that promotes your brand, drives a purchase decision, or delivers an offer — regardless of how it is worded. **Use Marketing for:** * Promotional offers, discount codes, and sale announcements * New product launches and collection reveals * Seasonal or event-based campaigns * Re-engagement messages and win-back offers * Back-in-stock broadcasts sent as campaigns * Any message where the primary goal is to drive a customer action that benefits your business Marketing templates carry a higher per-message cost on **Meta's pricing model** compared to Utility in most markets. Galantis Conversation credits, however, are flat — 1 delivered message = 1 credit regardless of category — so the cost difference only shows up on your Meta invoice, not on the Galantis (Shopify) invoice. Marketing templates also receive closer scrutiny during quality monitoring: a Marketing template with high block rates will degrade your phone number quality faster than a Utility template under the same conditions, because recipients who block a promotional message signal stronger dissatisfaction. Any message that includes a discount code, promotional CTA, or offer — even if it is embedded alongside transactional content — should be categorized as Marketing. The presence of promotional intent, not the proportion of the message it occupies, determines the correct category. **Utility** is the correct category for transactional, informational, or service messages — messages the customer expects and benefits from regardless of a purchase decision. **Use Utility for:** * Order confirmations and receipts * Shipping updates and delivery notifications * Return or refund status updates * Appointment reminders and booking confirmations * Account or subscription status updates * Operational store announcements (policy changes, service updates) Utility templates carry a lower per-message cost on **Meta's pricing model** in most markets and typically have lower block rates because recipients expect and welcome transactional messages. (Galantis credits are still 1 per delivered message — the Meta saving is real, the Galantis saving is not.) However, Utility templates are held to strict content standards precisely because of these advantages — Meta actively checks that Utility templates do not contain marketing content. Do not use Utility to send promotional content in order to benefit from lower pricing or faster approval. This is a Meta policy violation. Common violations include: adding a discount code to an order confirmation, embedding a "shop now" CTA in a shipping update, or framing a promotional announcement as a service message. Rejected templates and quality flags are the consequence — not just a formal warning. ## Authentication templates WhatsApp supports a third category — Authentication — for one-time passcodes and verification messages. Authentication templates are supported at the WhatsApp platform level but are not currently used in Galantis. If your use case requires OTP or verification messaging, contact Galantis support to discuss availability. ## Why accurate categorization matters Meta enforces category compliance at two points: **During approval** — Meta's review checks whether the submitted template content matches the declared category. A promotional message submitted as Utility is frequently caught and rejected at this stage. Rejection wastes the approval cycle time and delays your campaign. **After approval** — Meta monitors live templates through quality signals: block rates, report rates, and engagement patterns. A Utility template that functions as Marketing will be flagged through quality monitoring even if it passed the initial review. Consequences include the template being paused, reduced throughput on your phone number, and in repeated cases, account-level restrictions. **Cost is not a valid reason to miscategorize.** The Meta per-message pricing difference between Marketing and Utility is real (Galantis credits are flat, so this difference only affects your Meta invoice), but the cost of a quality incident — reduced throughput, template suspension, or phone number restriction — significantly outweighs any short-term savings from incorrect categorization. ## Decision guide When categorizing a template, ask one question: > Would the customer benefit from receiving this message even if they were not being asked to buy something? If yes — the message is informational and Utility is likely correct. An order confirmation, shipping update, or appointment reminder serves the customer's needs independent of any purchase intent. If no — the message is promotional and Marketing is the correct category. A discount offer, product launch announcement, or re-engagement message serves your business's goals, not a pre-existing customer need. If the message contains both informational and promotional content, Marketing is the correct category. The presence of promotional intent takes precedence. ## Related guides * [Creating Templates](./creating-templates) — How to set the category when building a template * [Template Quality](./template-quality) — How category compliance affects quality rating * [Campaigns — Campaign Types](/whatsapp/campaigns/campaign-types) — How template category determines campaign type * [Compliance — Quality & Deliverability](/whatsapp/compliance/quality-deliverability) — Phone number quality consequences of miscategorization # Template Formats Source: https://docs.digifist.com/galantis/whatsapp/templates/template-formats The five WhatsApp template formats in Galantis — from standard rich cards to single and multi-product messages and whole catalog browsing. Template format determines the visual structure and interactive capabilities of a WhatsApp message. Galantis supports five formats — each with a distinct component structure, a specific use case, and different catalog requirements. The format you choose is set at template creation time and determines how the message renders in the customer's WhatsApp client. Standard campaigns use rich card formats. Product-focused campaigns use catalog-based formats that require a synced Meta Catalog. Choosing the right format depends on what you are promoting and whether you have catalog infrastructure in place. ## What this covers * All five template formats with their component structures * When to use each format * Catalog requirements per format * A format selection guide ## Formats **`SINGLE_RICH_CARD`** — A single promotional card combining header, body, footer, and buttons into one visual unit. **Component structure:** | Component | Required | Notes | | --------- | -------- | -------------------------------- | | Header | Yes | Text with optional variable | | Body | Yes | Rich text with dynamic variables | | Footer | Optional | Static short text | | Buttons | Optional | Up to 3 buttons | **Use for:** Single-focus promotional messages where one clear call to action drives the customer forward — a product spotlight, a limited-time offer, a discount code delivery, or an event announcement. **Meta Catalog required:** No **Best practices:** * Keep the header text short — it is a label, not a sentence * Use one primary URL button for the main CTA and a `COPY_CODE` button if a discount code is included * Avoid stacking three buttons unless all three represent genuinely distinct actions the customer would choose between Single Rich Card is the most versatile format and the right starting point for most first templates. It works for promotional and utility purposes, requires no catalog infrastructure, and renders cleanly across all WhatsApp client versions. **`MULTI_RICH_CARD`** — A horizontally swipeable carousel of multiple individual cards, each with its own image, body text, and buttons. **Component structure:** | Component | Required | Notes | | -------------- | -------- | -------------------------------------------------- | | Body | Yes | Carousel-level introductory text | | Carousel cards | Yes | Multiple cards, each with image, body, and buttons | Each carousel card contains: * Image (required per card) * Body text (required per card) * Buttons (optional per card) **Use for:** Showcasing multiple products, offers, or content items in a single message where the customer swipes through and selects what interests them. More engaging than sending multiple sequential messages, and less overwhelming than a product list. **Meta Catalog required:** No — carousel card content is defined at template creation time. Content is fixed in the template and not pulled from a live catalog sync. **Best practices:** * Keep card count to what is genuinely useful — a 3–5 card carousel outperforms a 10-card one because customers rarely swipe past the first few * Use consistent image dimensions across all cards for a clean visual presentation * Each card should have a distinct CTA — avoid repeating the same button label across all cards Because Multi Rich Card content is fixed at template creation, it is less suitable for products with frequently changing prices or availability. For dynamic product showcasing, consider Single Product Message or Multi-Product Message formats that pull live catalog data. **`SINGLE_PRODUCT_MESSAGE` (SPM)** — Showcases one specific product from your Meta Catalog, with variants, pricing, and a native WhatsApp commerce buy interface. **Component structure:** | Component | Required | Notes | | ---------------- | -------- | ------------------------------------------ | | Header | Yes | `PRODUCT` type — pulled from catalog | | Body | Yes | Supporting text with dynamic variables | | Footer | Optional | Static text | | Buttons | Optional | Action buttons | | Product sections | Yes | Product and variant data from Meta Catalog | **Use for:** Targeted product promotions where a specific item is the focus — a best-seller highlight, a personalized recommendation based on purchase history, a back-in-stock broadcast for a specific product, or a high-AOV item promotion. **Meta Catalog required:** Yes — the product displayed is pulled from your synced Meta Catalog. The catalog must be connected and the referenced product must have `SYNCED` status before this template can be used in a campaign or automation. **Best practices:** * Choose products with strong imagery — the catalog product photo is the primary visual element * Use the body text to add context that the product card alone does not provide (urgency, social proof, personalization) * Verify the product's `SYNCED` status in the Catalog module before activating any campaign or automation that uses this template If the product referenced in an SPM template loses its `SYNCED` status in the Meta Catalog — due to a sync error, image format issue, or catalog disconnection — messages using this template will fail for all recipients until the sync issue is resolved. **`MULTI_PRODUCT_MESSAGE` (MPM)** — Displays up to 30 products from your Meta Catalog in a scrollable list, organized into sections. **Component structure:** | Component | Required | Notes | | ---------------- | -------- | ----------------------------------------------------------------- | | Header | Yes | Text with optional variable | | Body | Yes | Introductory message text | | Footer | Optional | Static text | | Buttons | Optional | Action buttons | | Product sections | Yes | Multiple product entries from Meta Catalog, grouped into sections | **Use for:** Collection-based campaigns, curated product selections, and "shop the look" or "complete the set" messaging where the goal is to give the customer a browsable set of options rather than focus on a single item. Useful for promoting a new collection launch or a seasonal edit. **Meta Catalog required:** Yes — all products displayed must be present in your synced Meta Catalog with `SYNCED` status. Products with `PENDING` or `FAILED` status cannot be included. **Best practices:** * Organize products into meaningful sections (e.g., "New Arrivals", "Top Sellers", "Under \$50") — sections add context and make the list easier to browse * Limit the total product count to what a customer would realistically browse — 8–15 well-chosen products outperforms 30 indiscriminately selected ones * Use the body text to frame the selection: "Here are this season's top picks" gives the customer a reason to engage with the list **`WHOLE_CATALOG`** — A message with a catalog browse button that opens your entire WhatsApp catalog for the customer to browse freely. **Component structure:** | Component | Required | Notes | | -------------- | -------- | ------------------------------------------ | | Body | Yes | Introductory message text | | Footer | Optional | Static text | | CATALOG button | Yes | Opens the full catalog browser in WhatsApp | **Use for:** High-intent audiences who are likely to browse broadly — frequent purchasers, VIP customers, or customers who have visited your store multiple times without converting. Also the most practical format for stores with large catalogs where pre-selecting products for MPM would be impractical. **Meta Catalog required:** Yes — your entire catalog must be synced and connected to Meta. Product availability and pricing in the catalog browser reflects the current state of your Meta Catalog sync. **Best practices:** * Reserve Whole Catalog sends for audiences with demonstrated browse intent — sending it to cold or low-intent audiences typically underperforms compared to SPM or MPM with curated selections * Use the body text to prompt browsing with a clear reason: "We just launched 50 new styles — explore them all" is more effective than a generic "Browse our catalog" * Ensure your Meta Catalog is fully synced and up to date before sending — a Whole Catalog message that opens a catalog with missing or outdated products creates a poor experience ## Format selection guide | Format | Catalog required | Products shown | Best for | | ------------------------ | ---------------- | ---------------------------- | ------------------------------------------------ | | `SINGLE_RICH_CARD` | No | 0 — image or text only | Single-focus promotions, most standard campaigns | | `MULTI_RICH_CARD` | No | Multiple (fixed in template) | Multi-offer showcases, content carousels | | `SINGLE_PRODUCT_MESSAGE` | Yes | 1 specific product | Targeted product promotions, personalized picks | | `MULTI_PRODUCT_MESSAGE` | Yes | Up to 30 products | Collection sends, curated product selections | | `WHOLE_CATALOG` | Yes | Full catalog | Browse-driven sends for high-intent audiences | ## Catalog requirements for product formats SPM, MPM, and Whole Catalog formats all require: 1. A Meta Catalog connected to your Galantis workspace — go to **Catalog → Meta Sync** 2. Products with `SYNCED` status — check **Catalog → \[Product]** for sync status per item 3. Product images meeting Meta's format requirements — JPEG or PNG, minimum 500×500px See [Catalog](/whatsapp/catalog/index) for the full catalog setup and sync reference. ## Related guides * [Template Categories](./template-categories) — Category selection before choosing a format * [Creating Templates](./creating-templates) — Building template components in the template builder * [Catalog — Meta Catalog](/whatsapp/catalog/meta-catalog) — Connecting Meta Catalog for product formats * [Campaigns — Message Composition](/whatsapp/campaigns/message-composition) — How formats map to campaign message types # Template Quality Source: https://docs.digifist.com/galantis/whatsapp/templates/template-quality How Meta evaluates template quality after approval, what signals affect it, and how to keep your templates healthy. Template approval is not the end of Meta's evaluation — it is the beginning. Once a template is live and sending, Meta monitors how customers respond to it. Block rates, report rates, delivery failures, and category compliance signals all feed into a quality assessment that can affect your template's status and your phone number's throughput capacity. A template that passes approval but receives poor engagement signals can be paused by Meta without warning, removing it from active use in campaigns and automations mid-flight. ## What this covers * The quality signals Meta monitors for live templates * What happens when template quality degrades * How template quality connects to phone number quality * Optimization practices for keeping templates healthy ## Quality signals Meta monitors Meta does not publish the exact formula used to calculate template quality, but the primary signals are well-documented: **Customer block and report rates** — When a customer blocks your WhatsApp number or reports a message as spam after receiving a template, it is a strong negative quality signal. A single block is not significant; a pattern of blocks across recipients of the same template indicates the message is unwanted. **Delivery failure rates** — Templates with high delivery failure rates — messages sent but not delivered — accumulate negative signals. This can result from targeting inactive or invalid numbers, but also from template-level issues that affect deliverability. **Template category compliance** — Meta reviews live templates against their declared category on an ongoing basis. A Utility template with embedded promotional content that passed initial review may be flagged through quality monitoring when actual send patterns reveal its marketing nature. **Message frequency vs engagement** — Sending a template to the same customers repeatedly in a short period without engagement signals — no reads, no replies, no clicks — indicates the message is not valued by recipients. ## What happens when quality degrades Template quality degradation follows a progression that can affect both the template and the phone number it sends from: | Quality State | Consequence | | ---------------------- | ---------------------------------------------------------------------------------------------------------- | | **High quality** | No restrictions — full throughput, normal delivery | | **Medium quality** | Warning state — no immediate action but continued degradation will escalate | | **Low quality** | Template may be paused by Meta — messages using it fail until quality recovers or the template is revised | | **Paused / Suspended** | Template cannot send — active campaigns fail and automation Action Nodes fail for customers who reach them | When a template is paused by Meta, active automations using it continue to execute — but the Action Node for the affected template returns `FAILED` status for every customer who reaches it. The automation does not stop; the individual message sends fail silently until the template is restored or replaced. **Phone number impact** — Template quality issues aggregate at the phone number level. Multiple templates with poor quality signals simultaneously will degrade the phone number's overall quality rating more rapidly than a single template issue. See [Compliance — Quality & Deliverability](/whatsapp/compliance/quality-deliverability) for how phone number quality affects throughput. ## Monitoring template quality Template quality metrics in Galantis are tracked through message-level delivery data — `SENT`, `DELIVERED`, `READ`, and `FAILED` statuses per message, aggregated per template. This gives an indirect view of quality health: * **Read rate relative to delivered rate** — a low read rate suggests customers are receiving the message but not opening it, which may correlate with high block rates * **Failed rate** — persistent delivery failures on a specific template warrant investigation * **Trend over time** — a declining read rate across sends of the same template is a leading indicator of quality degradation before Meta flags it formally For phone-number-level quality data and formal template status information from Meta, refer to your WhatsApp Business Account settings in Meta Business Manager directly. Galantis does not currently surface Meta's internal quality score for individual templates within the dashboard. ## Optimization practices **Match category to content precisely.** The single most effective quality practice is accurate categorization. A Marketing template sent to opted-in customers who expected it has fundamentally better quality signal characteristics than a Utility template used for promotional content — because the recipients of the latter are more likely to block or report. **Personalize with variables.** Templates that address the customer by name and reference relevant data (their order, their browsed product, their location) generate better engagement signals than generic broadcast copy. Use `customer.first_name` and order variables wherever the template context supports it. **Respect frequency caps.** A customer who receives the same template — or different templates from the same number — multiple times in a short period is more likely to block. Configure automation frequency caps to prevent over-messaging, and space campaign sends to avoid hitting the same audience repeatedly within a short window. **Honor opt-outs immediately.** Customers who replied STOP and are incorrectly messaged again are almost certain to block and report. Galantis enforces opt-out automatically, but manually imported contact lists should be reviewed carefully to ensure no `UNSUBSCRIBED` customers are included. **Avoid spam-like language in Utility templates.** Phrases like "Limited time offer!", "Act now!", or "Exclusive deal!" in a Utility template are consistent quality flags during Meta's ongoing monitoring, even if they passed initial review. Keep Utility templates transactional in both structure and language. **Retire poorly performing templates.** A template with consistently low read rates and high failure rates is better replaced than defended. Archive it, analyze what drove the poor performance, build a revised version, and submit the new template. ## What to do when a template is paused 1. Go to **Templates → \[Template Name] → Status** in Galantis to confirm the current status and any reason provided by Meta 2. Review the template content against Meta's current content policies — policies evolve and a template compliant at approval may conflict with a later policy update 3. Assess whether the quality signal cause is content-based (fix the template), audience-based (review who is being targeted), or frequency-based (adjust send cadence) 4. Make the necessary changes and resubmit 5. If the template is used in active automations, those automations will resume sending correctly once the template is restored to `APPROVED` status — no automation re-activation is required ## Related guides * [Template Categories](./template-categories) — Category accuracy as the primary quality lever * [Approval Lifecycle](./approval-lifecycle) — How template status changes when quality degrades * [Compliance — Quality & Deliverability](/whatsapp/compliance/quality-deliverability) — How template quality aggregates to phone number quality * [Support — Template Rejection](/whatsapp/support/troubleshooting/template-rejection) — Troubleshooting rejected and paused templates # Variables & Localization Source: https://docs.digifist.com/galantis/whatsapp/templates/variables-localization Dynamic variable placeholders in WhatsApp templates — how they are defined, mapped, and managed across multiple languages in Galantis. Variables make templates personal. Instead of a fixed message that reads identically for every recipient, variables allow a single approved template to address each customer by name, reference their order, or include their specific product — all within a Meta-approved structure. Localization ensures the same variable-driven personalization is available across every language your customers speak. ## What this covers * Variable placeholder syntax and how placeholders are defined * The `template_variables_mapping` structure * Available data sources for variable values * Example values and why they are required * Localization — one template per language * Managing multiple language versions ## Variable placeholder syntax Variables in WhatsApp templates use positional syntax: `{{1}}`, `{{2}}`, `{{3}}`, and so on. Each number refers to the position of the variable in the template — `{{1}}` is the first variable, `{{2}}` is the second, regardless of where in the body text they appear. **Rules for placeholders:** * Positions must be sequential starting from `{{1}}` — skipping a number (e.g., using `{{1}}` and `{{3}}` without `{{2}}`) causes submission to fail * Variables can appear in the body text and in the text header — not in the footer, and not as the entire content of a button label * A URL button supports one variable in the URL path: `https://yourstore.com/checkout/{{1}}` * There is no enforced maximum number of variables, but templates with many variables become harder to maintain and map correctly ## Variable mapping When a template is selected for use in a campaign or automation, each placeholder must be mapped to a data source. Galantis stores this mapping as `template_variables_mapping`: ```json theme={null} [ { "initialValue": "{{1}}", "selectedValue": "customer.first_name" }, { "initialValue": "{{2}}", "selectedValue": "order.total_price" }, { "initialValue": "{{3}}", "selectedValue": "static:SUMMER20" } ] ``` Each placeholder is assigned either a dynamic field from customer or order data, or a static text value entered at configuration time. ## Available variable data sources | Field | Description | | --------------------- | ---------------------------------- | | `customer.first_name` | Customer's first name from Shopify | | `customer.last_name` | Customer's last name from Shopify | | `customer.email` | Customer's email address | | `customer.phone` | Customer's phone number | `customer.first_name` is the most used variable across all template types. Opening with the customer's name meaningfully improves engagement compared to a generic greeting — and costs nothing beyond the variable slot. Avoid mapping `customer.email` or `customer.phone` to visible body text variables. Reflecting a customer's own contact details back to them in a promotional message is unexpected and can feel surveillance-like. These fields are available for edge-case technical use, not general personalization. | Field | Description | | -------------------- | -------------------------------------- | | `order.order_number` | Shopify order number | | `order.total_price` | Order total value | | `order.product_name` | Name of the first product in the order | Order variables are most appropriate for post-purchase templates — cross-sell sequences, shipping confirmations, or review requests — where the customer expects their recent order to be referenced. **Store name** — The name of your Shopify store. Useful for brand reinforcement in templates sent from a number the customer may not immediately recognize. **Custom static text** — A fixed string entered directly at mapping configuration time. The same value is sent to all recipients for that placeholder — it does not vary per customer. Use static text for: * Discount codes that apply to all recipients (`SUMMER20`, `FREESHIP`) * Fixed URLs for specific landing pages * Consistent offer terms or product names used across a campaign Static text is the correct choice any time a variable slot needs a value that does not come from customer data. ## Example values — why they are required Meta requires that every variable placeholder in a submitted template include an example value — a concrete sample of what that variable will contain at send time. Example values are reviewed by Meta as part of the approval process to confirm that the variable content is appropriate for the declared template category. **What to provide:** * `{{1}}` mapped to `customer.first_name` → example: `Sarah` * `{{2}}` mapped to `order.total_price` → example: `$89.00` * `{{3}}` mapped to a discount code → example: `SUMMER20` **What not to provide:** * Generic placeholders like `[name]` or `[value]` — these do not satisfy the example requirement * Empty strings — a blank example value causes rejection * Misleading examples that do not represent the actual variable content Submitting a template with missing or empty variable examples is one of the most common rejection causes. Fill in realistic, representative examples for every `{{N}}` placeholder before clicking Submit. ## Localization WhatsApp templates are language-specific. Each template is tied to a single `language` code — for example, `en` for English, `es` for Spanish, `pt_BR` for Brazilian Portuguese. A template approved for `en` cannot be sent to a customer whose preferred language is `es` — a separate template record must exist for each language. **Creating templates per language:** 1. Build the template content in one language and submit it for approval 2. Create a new template with the same name and structure, set the language to the target language, translate the content, and submit that template separately 3. Repeat for each additional language Each language version is a fully independent template record with its own approval status, quality metrics, and usage history. An `APPROVED` status in one language does not transfer to another — each must be reviewed and approved by Meta independently. **Routing customers to language-appropriate templates:** In automations, use a `CUSTOMER_COUNTRY` or `CUSTOMER_LANGUAGE` condition node to branch customers to the Action Node configured with the appropriate language template. See [Automations — Conditions](/whatsapp/automations/conditions). In campaigns, create separate campaigns per language and select the corresponding language's template and audience segment for each send. ## Managing variable mapping across language versions Variable positions must be consistent across language versions of the same template. If `{{1}}` maps to `customer.first_name` in the English version, it must also map to `customer.first_name` in the Spanish version — not to a different field. Inconsistent variable positions across language versions cause confusion when configuring automation Action Nodes that may serve multiple markets. Establish variable position conventions before creating your first template and apply them consistently across all language versions. ## Best practices * **Use `{{1}}` for `customer.first_name` consistently across all templates.** Making first name the first variable creates a predictable convention that simplifies mapping configuration across many templates. * **Keep the variable count low.** Each variable is a mapping task at campaign and automation configuration time. Templates with 5+ variables are harder to configure correctly and more likely to produce awkward messages if any mapping is misconfigured. * **Write example values that reflect real data.** Use a realistic name, a realistic order value, and a real discount code format. Example values that look nothing like actual customer data can contribute to a misleading category impression during Meta's review. * **Name language variants consistently.** A naming pattern like `welcome_en`, `welcome_es`, `welcome_pt_BR` makes it easy to identify and select the correct language version when configuring campaigns and automations. * **Audit variable mappings when updating templates.** If a template is edited and resubmitted with a different variable structure, review and update all campaign and automation configurations that reference it. ## Related guides * [Creating Templates](./creating-templates) — Where variable placeholders are defined in the template builder * [Campaigns — Personalization](/whatsapp/campaigns/personalization) — Variable mapping configuration in campaigns * [Automations — Actions](/whatsapp/automations/actions) — Variable mapping in automation Action Nodes * [Automations — Conditions](/whatsapp/automations/conditions) — CUSTOMER\_COUNTRY condition for language-based routing # Blog Posts Source: https://docs.digifist.com/themes/everest/blog-posts Configure Everest's article template, content blocks, metadata, sharing, and comment-aware behavior. Blog Posts control the article detail template in Everest. The template is powered by the `main-article` section, which renders the article through reorderable blocks for tags, metadata, heading, share actions, featured image, and rich article content. Blog Posts overview ## What this template controls * The block order used to present article content * Back-to-blog navigation behavior * Article metadata such as author and publish date * Tag links, sharing, featured image, and article content output * Shared width, color, and spacing settings for the article wrapper * Comment form and comment list visibility when blog comments are enabled in Shopify ## Template structure This template uses the following main section and default blocks: * **Article** * **Tags** * **Info** * **Heading** * **Share** * **Featured Image** * **Content** ## Getting started In Theme Customizer, open a blog post resource so Everest loads the article template with real content. Review the article blocks first because their order defines how readers move through the post. Choose the article width before adjusting styling so text-heavy content remains comfortable to scan. Decide whether back navigation, post details, tags, and comments support the way your blog is meant to be read. Blog Posts location in Theme Customizer ## Main settings ### Article settings Blog Posts Article settings Adds a link below the article content that sends visitors back to the parent blog. **Default:** Enabled ### Layout Blog Posts Layout settings Controls the reading width of the article container. **Available options:** `XXS`, `Page`, `Fluid`\ **Default:** `XXS` `XXS` keeps long-form reading narrower and is the default Everest article presentation. Sets the visual treatment for the article section wrapper. Control the vertical space around the article section. **Available options:** `No`, `S`, `M`, `L`, `XL` ## Default blocks Renders article tags as linked buttons that take visitors to the tagged blog archive. Displays author, publish date, or both depending on block settings. Outputs the article title. Everest promotes it to `h1` when the section appears first on the page. Adds the shared social sharing control for the current article URL. Displays the article image when one exists. The block also controls the image aspect ratio used for the article hero. Renders the main blog post body from Shopify's article content field. ## Comment behavior Everest only shows the comment list and comment form when comments are enabled on the parent Shopify blog. When comments are moderated, the template also shows moderation-aware success messaging after form submission. ## Best practices * Keep article width narrow enough for comfortable reading, especially on text-heavy posts. * Use metadata and tag blocks consistently so archive pages and article pages feel connected. * Review featured image ratios with real article imagery before publishing layout changes. * If comments are enabled, test the full submission flow so validation and moderation messages are clear. ## Related guides * [Blogs](/themes/everest/blogs) * [Theme Settings: Typography](/themes/everest/theme-settings/typography) * [Theme Settings: Colors](/themes/everest/theme-settings/colors) # Blogs Source: https://docs.digifist.com/themes/everest/blogs Configure Everest's blog listing template, article cards, tag filters, and grid layout. Blogs control the main article listing experience in Everest. The template is driven by the `main-blog` section, which combines a selected blog source, optional tag filters, pagination, and reusable article card blocks into one customizable listing page. Blogs overview ## What this template controls * Which Shopify blog the page displays * Tag-based article filtering on desktop and mobile * Articles per page and pagination behavior * Article grid columns on desktop and mobile * Shared width, color, spacing, and border settings * The default Section Header and Article Card block structure used inside the template ## Template structure This template uses the following main section and related blocks by default: * **Blog** * **Section Header** block * **Article Card** block with tags, heading, and article details sub-blocks ## Getting started In Theme Customizer, open a blog resource or assign the blog template before editing it. Set the correct Shopify blog first so filtering, article count, and pagination reflect the right content set. Adjust articles per page and column count together so the listing stays readable across desktop and mobile. If tag filters are enabled, review both the desktop button list and the mobile dropdown flow. Blogs location in Theme Customizer ## Main settings ### Content and navigation Blogs Content and navigation settings Selects which Shopify blog this template should render. If no blog is chosen in the section, Everest falls back to the current blog resource. Shows article tag filters above the article grid. Everest renders the filters as a button row on desktop and as a dropdown menu on mobile. Controls how many articles appear before pagination. **Default:** `12` ### Layout Blogs Layout settings Controls the article grid density on larger screens. **Range:** `1` to `6`\ **Default:** `3` Controls how many article cards display per row on smaller screens. **Available options:** `1`, `2`\ **Default:** `2` ### Common settings Blogs Common settings Sets the maximum layout width for the blog listing container. **Available options:** `Page`, `Fluid`, `Full`\ **Default:** `Page` Applies the main color treatment for the template wrapper and article listing area. Control the vertical spacing around the blog listing section. **Available options:** `No`, `S`, `M`, `L`, `XL` Adds a border treatment to the blog section wrapper. **Available options:** `None`, `Top`, `Bottom`, `Both` ## Block behavior The default article card structure is defined inside the template JSON. Everest uses: * **Tags** to show article tags when available * **Heading** for the article title * **Article Details** for author and publish date These blocks work together inside the shared article card component, so card presentation is affected by both the template and Everest's reusable card styling. ## Best practices * Choose article counts and column settings together so pagination feels intentional instead of crowded. * Keep tag filtering enabled only when the selected blog has a clear tag structure. * Review mobile filtering carefully because Everest switches from visible buttons to a dropdown pattern. * Use consistent featured image ratios across posts so the grid looks balanced. ## Related guides * [Blog Posts](/themes/everest/blog-posts) * [Theme Settings: Cards](/themes/everest/theme-settings/cards) * [Theme Settings: Typography](/themes/everest/theme-settings/typography) # Collection Landing Page Source: https://docs.digifist.com/themes/everest/collections/collection-landing-page Configure Everest's alternate collection landing template with banner, sidebar navigation, and featured product sections. The Collection Landing Page template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. Collection Landing Page overview ## What this template controls * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **Banner** * **Sidebar Menu** * **Rich Text** * **Featured Products** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. Collection Landing Page location in Theme Customizer ## Supporting sections This template relies on reusable sections working together rather than on a single main schema. Review the linked section guides below when you want to fine-tune each part in more depth. ## Best practices * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Sidebar Menu](/themes/everest/sections/sidebar-menu) * [Banner](/themes/everest/sections/banner) # Collection List Page Source: https://docs.digifist.com/themes/everest/collections/collection-list-page Configure Everest's collection list template and its collection card layout options. The Collection List Page template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. Collection List Page overview ## What this template controls * Layout structure, width, alignment, and spacing * Product, collection, or cart-related storefront behavior * Search, filter, and sorting behavior for product discovery * Color schemes, contrast, and shared visual styling * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **List Collections** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. Collection List Page location in Theme Customizer ## Main settings ### Settings Collection List Page Settings settings Select the collection source used by **collections**. Choose how **Sort by** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** Alphabetically, A-Z, Alphabetically, Z-A, Date, new to old, Date, old to new, Product count, high to low, Product count, low to high. **Default:** `title-ascending` Adjust **Number of columns on desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `6` **Default:** `3` Choose how **Number of columns on mobile** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** 1, 2. **Default:** `2` ### Common settings Collection List Page Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Collection Page Source: https://docs.digifist.com/themes/everest/collections/collection-page Configure Everest's collection template, product grid, filters, sorting, and supporting merchandising sections. The Collection Page template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. Collection Page overview ## What this template controls * Layout structure, width, alignment, and spacing * Product, collection, or cart-related storefront behavior * Search, filter, and sorting behavior for product discovery * Color schemes, contrast, and shared visual styling * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **Callout Banner** * **Collection** * **Rich Text** * **Recently Viewed Products** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. Collection Page location in Theme Customizer ## Main settings ### Settings Collection Page Settings settings Adjust **Products per page** with a slider-based control. **Range:** `8` to `50` **Default:** `24` Choose how **Number of columns** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** 3, 4. **Default:** `4` ### Filtering and sorting Collection Page Filtering and sorting settings Enable or disable **Enable filtering**. Make sure the chosen option still feels easy to scan and use on smaller screens. **Default:** `enabled` Customize filters with the Search & Discovery app. [Learn more](https://help.shopify.com/manual/online-store/search-and-discovery/filters) Choose how **Desktop filter layout** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** Vertical, Drawer. **Default:** `vertical` Drawer is the default mobile layout. Enable or disable **Enable sorting**. Make sure the chosen option still feels easy to scan and use on smaller screens. **Default:** `enabled` Select the color scheme used for **color for active filters**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-6` ### Mobile layout Collection Page Mobile layout settings Choose how **Number of columns on mobile** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** 1, 2. **Default:** `2` ### Common settings Collection Page Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `full` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Recently Viewed Products](/themes/everest/sections/recently-viewed-products) # Search Source: https://docs.digifist.com/themes/everest/collections/search Configure Everest's search results template, grid behavior, filters, sorting, and search-specific cards. The Search template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. Search overview ## What this template controls * Layout structure, width, alignment, and spacing * Product, collection, or cart-related storefront behavior * Search, filter, and sorting behavior for product discovery * Color schemes, contrast, and shared visual styling * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **Search** * **Predictive Search** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. Search location in Theme Customizer ## Main settings ### Settings Search Settings settings Select the color scheme used for **color for header**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-4` Choose how **Header layout** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Page, Full. **Default:** `full` Adjust **Products per page** with a slider-based control. **Range:** `8` to `50` **Default:** `24` ### Layout Search Layout settings Adjust **Number of columns on desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `6` **Default:** `3` Choose how **Number of columns on mobile** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** 1, 2. **Default:** `2` ### Filtering and sorting Search Filtering and sorting settings Enable or disable **Enable filtering**. Make sure the chosen option still feels easy to scan and use on smaller screens. **Default:** `enabled` Customize filters with the Search & Discovery app. [Learn more](https://help.shopify.com/manual/online-store/search-and-discovery/filters) Choose how **Desktop filter layout** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** Vertical, Drawer. **Default:** `vertical` Drawer is the default mobile layout. Enable or disable **Enable sorting**. Make sure the chosen option still feels easy to scan and use on smaller screens. **Default:** `enabled` Select the color scheme used for **color for active filters**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-6` ### Common settings Search Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `4` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `4` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Predictive Search](/themes/everest/sections/predictive-search) # Footer Source: https://docs.digifist.com/themes/everest/footer/footer Configure Everest's footer columns, utility content, localization controls, and footer block types. The footer controls the global bottom area of the Everest storefront. It combines shared footer settings with reusable blocks, so the main decisions are about information density, utility links, branding, localization, payment methods, and overall footer styling. Everest's footer also depends on global brand and social settings. That means logo, brand text, description, and social profile links can all affect the final footer output even when the section settings stay the same. Footer overview ## What this section controls * Footer column structure on desktop * Copyright text and policy link output * Follow on Shop, social icons, and localization selectors * Payment icon visibility and custom payment icon names * Footer color, width, spacing, and border treatment * Link list and information block content ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. In the footer group, select **Footer** to review the global footer settings and blocks. Start with columns, width, color scheme, and spacing so the footer layout feels balanced before you refine block content. Finish by checking localization, payment icons, social output, and the content inside each footer block. Footer location in Theme Customizer ## Section settings ### Structure Footer Structure settings Controls how many columns the footer grid uses on larger screens. **Range:** `1` to `6`\ **Default:** `5` Everest automatically adjusts the layout on smaller screens, so this setting matters most for desktop balance and content density. Controls the copyright line shown in the bottom area of the footer. The default text includes the `[year]` token, which Everest replaces with the current year automatically. Displays links to the store policies available in Shopify, such as refund, privacy, shipping, or terms pages. ### Utility Features Footer Utility Features settings Shows Shopify's **Follow on Shop** button when the store and sales channel support it. Displays the shared social profile icons in the footer utility area. The icons only appear when the related social links are filled in **Theme settings -> Social Media**. Shows the country selector in the footer when Shopify Markets data includes more than one available country. Shows the language selector in the footer when the store has more than one available language. ### Payment Methods Footer Payment Methods settings Displays the payment method icons in the footer utility area. Lets you define the payment icons that Everest should render. The default value includes common providers such as `master`, `visa`, `american_express`, `apple_pay`, `shopify_pay`, `diners_club`, `discover`, and `google_pay`. Controls whether payment icons use their full color versions or a grayscale treatment. ### Styling Footer Styling settings Controls the width of the footer container. **Page** keeps the footer aligned to the standard content width.\ **Fluid** gives the footer a wider but still padded layout.\ **Full** stretches the footer edge to edge. Controls the main footer background and text treatment. Controls the color scheme used for footer content surfaces inside the main footer area. Controls the spacing above the footer content area. Controls the spacing below the footer content area. Adds border styling to the footer wrapper. **Available options:** None, Top, Bottom, Both. ## Block settings ### Link List Footer Link List settings The **Link list** block creates an accordion-style footer menu with Shopify navigation links. Controls the heading shown above the footer link list. Sets the display size of the footer menu heading. Selects the Shopify menu used for the footer link list. Everest renders the chosen menu as a structured footer navigation group and collapses it into accordion behavior where needed. ### Information Footer Information settings The **Information** block is the flexible content block in Everest's footer. It can combine editorial text, images, newsletter signup, and shared brand details inside a single column. Controls how much width the information block takes relative to other footer blocks. Controls the main heading shown inside the information block and its display size. Adds supporting rich text content such as contact information, store details, or a short brand message. Adds an optional image to the information block and controls its maximum display width. Controls how the optional image aligns on larger screens. Displays shared brand content from theme settings, including the logo or text logo, brand headline, and brand description. This block reads from **Theme settings -> Brand**, so the visible output depends on your global brand setup. Adds the footer newsletter signup form inside the information block. ## Important dependencies Footer branding uses the global brand settings. Depending on the setup, Everest can show the uploaded logo, SVG logo, text logo, brand headline, and brand description. Social icons only render when the related profile URLs are filled in the global social media settings. Country and language selectors only appear when the store has multiple available countries or languages. ## Best practices * Keep the footer information hierarchy clear by mixing one broader information block with smaller link columns. * Review desktop and mobile layouts together when you change the column count or block mix. * Use shared brand and social settings before troubleshooting missing footer content. * Keep footer menus concise so the lower part of the storefront stays easy to scan. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Brand Settings](/themes/everest/theme-settings/brand) * [Social Media Settings](/themes/everest/theme-settings/social-media) # Announcement Bar Source: https://docs.digifist.com/themes/everest/header/announcement-bar Configure Everest's slim header utility bar for rotating announcements, a secondary link menu, and social icons. The announcement bar controls the compact utility strip above Everest's main header. It is designed for short promotional messages, a simple secondary menu, and optional social icons without adding too much visual weight to the top of the store. This implementation is intentionally lighter than some other themes. Everest does not add countdowns, standalone CTA blocks, or a separate localization block here, so the main decisions are about message rotation, device visibility, width, and supporting utility content. Announcement Bar overview ## What this section controls * The overall width and color treatment of the announcement bar * Rotating message behavior through the announcements slider block * Individual announcement slides inside that slider * A simple top-level utility menu * Social icon output tied to global theme settings * Desktop and mobile visibility for each top-level block ## How Everest announcement bar works The section itself only controls the outer wrapper. The actual content comes from three supported block types: * **Announcements** for the rotating message area * **Menu** for a simple inline link list * **Social** for social media icons In the default Everest header group preset, the announcements slider appears first, followed by a desktop-only menu and desktop-only social icons. Everest always uses the announcements slider structure for message content. Disabling autoplay stops automatic rotation, but the message area still uses the same slider-based block. ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. In the header group, select **Announcement bar** to access the section settings and block list. Choose the section width and color scheme before adjusting content blocks so you can judge spacing and contrast more accurately. Configure the announcements slider first, then add or refine the menu and social blocks based on how much utility content you want in the bar. Announcement Bar location in Theme Customizer ## Section settings Controls the maximum width of the inner announcement bar container. **Page** keeps the bar aligned to Everest's standard page width. **Fluid** gives the content a wider container while still respecting page gutters. **Full** stretches the bar edge to edge. The schema default is **Full**, while the default header-group preset uses **Page**. Controls the overall background and foreground treatment of the announcement bar wrapper. Use this to keep the bar visually connected to the header or intentionally separate it as its own utility layer. Announcement bar section settings ## Block settings This is the parent slider block for all rotating messages in the bar. Announcement bar announcements block settings Controls how quickly the slider rotates through messages. **Range:** `0` to `10` seconds **0 seconds** disables automatic rotation. In Everest's swiper implementation, autoplay only activates when there is more than one announcement slide. Controls where the announcements slider appears. **Desktop** shows the block only on larger screens. **Mobile** shows the block only on smaller screens. **Both** shows the block across devices. In Everest, device visibility also affects section spacing because the announcement bar CSS adjusts padding based on which block visibility classes are present. Each nested **Announcement** block becomes one slide inside the parent announcements slider. Announcement bar single announcement block settings Controls the message content for an individual slide. The field uses rich text, so you can add light formatting when needed, but this block works best with short, easily scannable copy. Displays an icon before the message text on that specific slide. This is useful for adding a small visual cue to shipping updates, promotions, or store notices. Accepts raw SVG markup for the announcement icon. If **Show icon** is disabled, this field has no visible effect. Everest renders this field directly as SVG markup. Invalid, oversized, or inconsistent SVG code can affect alignment and visual quality. The menu block adds a simple inline utility navigation area to the announcement bar. Announcement bar menu block settings Selects the Shopify menu used for the announcement bar link list. Everest renders only the top-level links from the selected menu in this block. Controls whether the utility menu appears on desktop, mobile, or both. This block works best with short menus that contain only a few high-priority links. This is not a dropdown navigation block. It renders a flat inline list of top-level links only. The social block outputs social media icons using Everest's shared social-media snippet. Announcement bar social block settings The block does not store platform URLs directly. Instead, it reads the global social link fields from **Theme settings**, such as Instagram, Facebook, YouTube, TikTok, X, LinkedIn, Snapchat, Pinterest, and Vimeo. Controls where the social icon list appears. Use desktop-only visibility when the bar already feels dense on mobile. If the related global social link fields are blank, this block may show little or no visible output. ## Important behavior and limitations The announcement bar wrapper still contains a conditional reference to localization-related classes, but the current section schema does not expose country or language selector settings here. In practice, Everest's announcement bar should be documented as a message, menu, and social utility bar rather than a localization bar. Everest's global header script measures the visible announcement bar height and stores CSS variables used by desktop menu overlays. Taller announcement bar content can therefore influence menu positioning and the available height for large desktop navigation panels. On smaller screens, the announcement bar container switches to a column layout and centers announcement slide content. This is another reason to keep message text brief and utility content limited. ## Best practices Everest's announcement bar is strongest when each slide is brief, scannable, and easy to read in a single line. Use the menu block for a few supporting links such as shipping, help, or store policies rather than a full navigation set. Rotation helps when you have two or three important messages, but faster timing can reduce readability. Add platform URLs in theme settings before relying on the social block, otherwise the bar may feel incomplete. Start with the announcements block only, then add the menu or social block only if the bar still feels clean on both desktop and mobile. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Header Source: https://docs.digifist.com/themes/everest/header/header Configure Everest's primary navigation, desktop and mobile menus, localization controls, and header utilities. The header controls the primary navigation experience across your store. In Everest, it also acts as the connection point for search, customer account access, localization controls, extra utility icons, and mega menu promotions. Several visible header elements also depend on global theme settings such as your logo, search behavior, cart type, and social links. Once those dependencies are clear, the header becomes much easier to customize confidently. Header overview ## What this section controls * Desktop header layout and menu placement * Sticky header behavior * Desktop dropdown or mega menu behavior * Menu trigger mode for desktop navigation * Country and language selectors * Customer avatar display * Two optional additional icon links * Header width, colors, and border treatment * Static mobile and slideout menu blocks * Mega menu promotion blocks ## How Everest header works The section renders three main zones: * **Start area**: mobile menu trigger and search * **Center area**: logo or text-based brand mark * **End area**: localization, additional icons, account, app blocks, and cart Desktop navigation can render as either a **dropdown menu** or a **mega menu**. Mobile navigation uses a dedicated drawer block, while desktop also includes a separate slideout menu block for an additional drawer-style navigation experience. The header also reads several global theme settings, especially for logo, search, cart, and social links. Those controls are documented later on this page so you can tell which behavior belongs to the section and which comes from theme settings. ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. In the header group, select **Header** to access the main section settings. Start with header layout, menu trigger, and desktop menu type so the main navigation structure is in place first. Open the built-in mobile and slideout menu blocks, then configure promotion blocks only if you are using the mega menu layout. Header location in Theme Customizer ## Layout options Logo stays on the left and the main menu moves to a dedicated row below it. This layout gives longer menus more room and creates a clearer separation between branding and navigation. Header logo start menu below layout Logo stays centered while the navigation sits on its own row below. This works well when brand presence should feel more prominent without compressing the menu into the top row. Header logo center menu below layout Logo and desktop navigation share the same row. This is the most compact layout and works best when your top-level navigation is short and easy to scan. Header logo start menu inline layout ## Navigation settings Header navigation structure settings Select the main Shopify menu used by the header. This menu drives the desktop dropdown or mega menu, acts as the default source for the mobile menu, and also becomes the practical source of truth for the main slideout navigation. Choose how desktop menus open. **Click** opens menus on click and closes them when visitors click outside the menu. **Hover** opens menus on pointer hover and uses a short close delay to reduce flicker when moving across the menu boundary. Choose the desktop navigation style. **Dropdown** uses stacked disclosure menus and works well for simpler navigation trees. **Mega** uses a full-width panel with grouped child links and can include promotion blocks tied to top-level menu items. Header navigation typography and width settings Controls the desktop top-level menu label size. Available presets are **XS**, **S**, **M**, **L**, and **XL**. Controls the width of desktop dropdown panels. **Range:** `10rem` to `32rem`\ **Default:** `22.4rem` This setting only appears when **Menu type** is set to **Dropdown**. Controls how top-level menu items size horizontally. **Auto** keeps the natural width of each item. **Min content** shrinks items to their tightest content width, which can make long labels wrap more aggressively. ### Enable sticky header Keeps the header attached to the top of the viewport while visitors move through the page. In Everest's current implementation, sticky mode behaves as a scroll-aware header that hides while scrolling down and returns while scrolling up. Header sticky header setting The section exposes sticky mode as a simple on/off control. The underlying code also supports internal sticky variants, but those modes are not available as separate section settings in the current schema. ## Localization and account Header localization and account settings Displays the country selector in the header icon area when your store has more than one available country. The selector uses Shopify Markets data and renders a searchable country list when enough countries are available. In the current header implementation, the country selector is rendered only on desktop screens. Displays the language selector in the header icon area when your store has more than one available language. In the current header implementation, the language selector is also desktop-only. Changes how the account icon behaves when Shopify customer accounts are enabled. If enabled and the signed-in customer has an avatar, the avatar is shown. Otherwise the standard user icon is displayed. ## Additional icons Header additional icons settings Turns on two optional desktop-only quick-link slots inside the header. These work well for actions such as **Track order**, **Help center**, or **Store locator**. Each icon slot supports: * image icon * optional SVG override * text label * destination link If SVG mode is enabled and SVG code is provided, the SVG overrides the uploaded image. The second icon slot uses the same structure as the first one. Empty icon slots are skipped automatically, so you do not need to fill both. Keep additional icons limited to one or two high-value actions. Too many icon links reduce the clarity of the header's main navigation. ## Design settings Header width and border settings Controls the header container width. **Page** keeps the header aligned to the theme's standard content width. **Fluid** expands the header more generously while still respecting page gutters. **Full** stretches the header edge to edge. Adds top, bottom, or dual borders using the shared section styling system. Available options are **None**, **Top**, **Bottom**, and **Both**. Header color settings Controls the main header wrapper color scheme. This is the primary background and text treatment for the visible header bar itself. Controls the color scheme used for dropdown panels and mega menu overlays. Use this when the desktop menu surface should feel visually distinct from the main header bar. This setting appears in the header schema, but the current header markup does not use it for visible output. In the current theme code, **Color scheme for content** has no visible effect on the main header output. You can treat it as an inactive setting unless a future theme update connects it to rendered header content. ## Block settings Controls the mobile and tablet drawer navigation. Header mobile menu block settings Select a dedicated menu for mobile navigation. If left empty, the block falls back to the header section's main **Menu** setting. Use **Parent text size** for top-level drawer links and **Child text size** for nested links. This helps preserve hierarchy in deeper mobile menu structures. Adds a second list of links below the main mobile menu. This is useful for support pages, policies, or utility links that should stay separate from the main navigation. Controls the text size of the secondary menu list. The mobile drawer also renders social links in its utility area when those links are configured in global theme settings. Controls the additional desktop slideout navigation drawer. Header slideout menu block settings Sets the label shown beside the desktop slideout trigger. Adds an optional menu above the main slideout navigation. This is useful for featured collections, highlighted campaigns, or quick utility destinations. Controls the visual weight of those featured links. Controls the main slideout navigation text size. The block schema includes its own **Menu** setting, but the current rendered main link list uses the header section's main **Menu** value in practice. Treat the header section's main **Menu** setting as the source of truth for the primary slideout navigation structure in the current theme version. Adds promotion cards inside the desktop mega menu. Header promotions block settings Tie the promotion group to a top-level desktop menu item by entering its position number. For example, entering `2` connects the promotion group to the second main navigation item. Each promotion card supports: * its own color scheme * half or full column width * content alignment * content padding * optional image or video * desktop/mobile media visibility Promotion cards support nested **Heading**, **Text**, and **Button** blocks. Header promotion blocks render only in the **Mega** menu path. If the header uses **Dropdown** menu type, promotion blocks will not appear in desktop navigation. The header supports standard `@app` blocks. Header app block placement App blocks render in the right-hand icon area and can be useful for wishlist, loyalty, or translation integrations. ## Global theme settings that affect the header Everest header output depends on global brand settings for: Header global brand and logo settings * logo image * SVG logo * text logo mode * logo text * logo color scheme * logo width Practical behavior: * **Use text for logo** overrides image and SVG usage * **SVG logo** overrides uploaded logo image when SVG code is present * if no logo is configured, the store name is shown Header search behavior depends on global search settings. Header global search settings These settings control: * whether product type filtering appears in search * whether predictive search suggestions are enabled * whether predictive suggestions show product vendor and price Everest uses different search UI patterns on desktop and mobile, but both rely on these global search settings. Header global cart and social settings **Cart type** changes how the header cart icon behaves: * **Drawer** makes the cart icon act like a button that opens the cart drawer * **Page** makes the cart icon link to the cart page * **Notification** enables cart notification markup after the header The header bubble displays **cart total price**, not item count, and that price label is hidden on mobile. Social links configured in global theme settings also appear in the mobile drawer utility area. ## Best practices Use **menu below** layouts when your store has longer top-level labels or more categories to scan. Reserve the mega menu for categories that genuinely need multi-level navigation or promotional support. Create a dedicated mobile menu instead of mirroring every desktop navigation choice one-to-one. Use additional icons for one or two high-value actions so the header stays easy to parse. Country and language selectors appear only when your Shopify Markets and language setup includes multiple options. Unexpected logo behavior usually comes from Brand settings, not from the Header section itself. Review sticky header behavior on real devices, especially if your first viewport is already busy with navigation, search, and icons. Tie header promotions to the correct top-level menu position and verify them in mega menu mode before publishing. ## Related guides Start with the theme overview and preset context before documenting other Everest sections. Review the shared icon reference used across DigiFist theme documentation. # Introduction Source: https://docs.digifist.com/themes/everest/index A versatile, feature-rich Shopify theme built for stores of any size. Everest is a Shopify theme built for merchants who need a reliable, fully-featured storefront. It includes a comprehensive section library, advanced product and collection tools, and a complete set of page templates. ## Presets Coming soon. ## Products Flexible block-based product page with media gallery, variants, and dynamic checkout. Link separate products to behave like variants using swatches, images, or text. Highlight products with Sale, New, Bestseller, and custom tag-based badges. Branding configuration for digital gift card pages. ## Collections Product grid with filtering, sorting, and promotional card injection. Display all or selected collections with custom imagery and pagination. Dedicated landing page template for featured or seasonal collections. Full search results with filtering, sorting, and multi-type results. ## Pages & Templates Customizable error page that guides lost visitors back to your store. Article feed with tag filtering and block-based individual article layout. Full-page cart with item management, discounts, and express checkout. Contact page template with form and store information. Account dashboard, login, register, addresses, and order details. Frequently asked questions page template with accordion layout. Generic content template for About, policies, and more. Coming soon page with email signup for pre-launch stores. ## Sections & Theme Settings Browse the full library of sections available for any page in your store. Control colors, typography, buttons, layout, and global behavior. Set up navigation, announcement bar, logo, and footer content. Embed third-party Shopify apps for reviews, wishlists, live chat, and more. # 404 Page Source: https://docs.digifist.com/themes/everest/pages-templates/404 Configure Everest's 404 template and the recovery content shown when a page cannot be found. The 404 Page template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. 404 Page overview ## What this template controls * Headings, text content, and on-page messaging * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Color schemes, contrast, and shared visual styling * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **404** * **Featured Collections** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. 404 Page location in Theme Customizer ## Main settings ### Settings 404 Page Settings settings Enter the content used for **heading**. **Default:** `404 - Page not found` Enter the content used for **text**. **Default:** `

Oops, We can't find what you're looking for here.

`
Enter the content used for **button label**. Keep action labels short so they remain readable across devices. **Default:** `Continue shopping` Leave empty to hide the button Set the destination URL for **button link**. Keep action labels short so they remain readable across devices. **Default:** `/collections/all` Choose how **Button style** behaves in the section. Keep action labels short so they remain readable across devices. **Available options:** Filled, Outlined, Text. **Default:** `outlined` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1`
### Common settings 404 Page Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** XXS, Page, Fluid. **Default:** `xxs` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Cart Source: https://docs.digifist.com/themes/everest/pages-templates/cart Configure Everest's cart template, sidebar content, and cart action blocks. The Cart template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. Cart overview ## What this template controls * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling * Block types such as Subtotal, Note, Payment Icons, Shipping Estimator * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **Cart** * **Featured Products** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. Cart location in Theme Customizer ## Main settings ### Sidebar Cart Sidebar settings Select the color scheme used for **color for sidebar**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-4` ### Common settings Cart Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Small, Page, Fluid. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Cart Drawer](/themes/everest/sections/cart-drawer) # Contact Source: https://docs.digifist.com/themes/everest/pages-templates/contact Configure Everest's contact page template and the supporting form, map, and content sections it can include. The Contact template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. Contact overview ## What this template controls * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **Page** * **Contact Form** * **Map** * **Rich Text** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. Contact location in Theme Customizer ## Supporting sections This template relies on reusable sections working together rather than on a single main schema. Review the linked section guides below when you want to fine-tune each part in more depth. ## Best practices * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Contact Form](/themes/everest/sections/contact-form) * [Map](/themes/everest/sections/map) # Customer Accounts Source: https://docs.digifist.com/themes/everest/pages-templates/customer-accounts Understand the Everest customer account templates for login, registration, addresses, orders, activation, and password reset flows. The Customer Accounts template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. Customer Accounts overview ## What this template controls * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **Account** * **Addresses** * **Login** * **Order** * **Register** * **Activate Account** * **Reset Password** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. Customer Accounts location in Theme Customizer ## Included account templates * Account overview * Addresses * Login * Order detail * Register * Activate account * Reset password These templates have minimal theme-level settings in Everest. Their behavior depends more on Shopify customer account flows, shared theme styling, and the customer account theme settings category. ## Best practices * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Customer Account Settings](/themes/everest/theme-settings/customer-account) # FAQ Source: https://docs.digifist.com/themes/everest/pages-templates/faq Configure Everest's FAQ page template and the accordion-based answer groups used on it. The FAQ template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. FAQ overview ## What this template controls * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **Page** * **Accordions** * **Rich Text** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. FAQ location in Theme Customizer ## Supporting sections This template relies on reusable sections working together rather than on a single main schema. Review the linked section guides below when you want to fine-tune each part in more depth. ## Best practices * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Accordions](/themes/everest/sections/accordions) # Page Source: https://docs.digifist.com/themes/everest/pages-templates/page Configure Everest's standard page template and the rich content blocks that support it. The Page template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. Page overview ## What this template controls * Headings, text content, and on-page messaging * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling * Block types such as Content, Custom Liquid * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **Page** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. Page location in Theme Customizer ## Main settings ### Settings Page Settings settings Enter the content used for **heading**. **Default:** `{{ page.title }}` Choose how **Heading size** behaves in the section. **Available options:** S, M, L, XL. **Default:** `h2` Enter the content used for **text**. ### Common settings Page Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** XXS, Page, Fluid, Full. **Default:** `xxs` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Password Source: https://docs.digifist.com/themes/everest/password Configure Everest's locked-store password experience, launch messaging, brand presentation, and access flow. Password controls the temporary storefront experience shown while the store is protected. In Everest, this page uses the dedicated password layout together with the `main-password-header`, `banner`, and `main-password-footer` sections, so the final result depends on both page-level content and shared brand or social settings. Password overview ## What this template controls * Brand logo or shop name display at the top of the locked store * The password entry modal and admin access link * Shopify password message output * The main banner content used for launch messaging or newsletter signup * Social icons and footer utility content on the password page * Color schemes for the dedicated password header and footer sections ## Template structure This template uses the following password-specific layout pieces by default: * **Password Header** * **Banner** * **Password Footer** ## Getting started In Theme Customizer, open the password template while the store password is enabled. Start with the banner content because it carries the main message visitors see before the store opens. Check the header logo, store name fallback, password entry flow, and any store password message set in Shopify. Review social icons and footer styling last so the page feels complete without distracting from the launch message. Password location in Theme Customizer ## How Everest's password page works The header shows the brand logo when a global brand logo or SVG logo exists. If no logo is configured, Everest falls back to the shop name. It also displays the optional Shopify password message and opens the storefront password form inside a modal dialog. The main content area comes from the standard Everest banner section. In the default password template, the banner is configured as a newsletter-style launch section with heading, text, and newsletter blocks. The footer shows social icons, the Shopify attribution text, and the admin access link. Social icons only appear when the related links are filled in Everest's global social settings. Everest uses `layout/password.liquid` for this page type instead of the standard storefront layout. That is why the password page has its own header and footer sections separate from the main storefront header and footer. ## Section settings ### Password Header and Password Footer Password Password Header and Password Footer settings Both password-specific utility sections expose a single color scheme setting so you can keep the locked-store experience aligned with the rest of your launch styling. ### Banner dependency Password Banner dependency settings The banner carries most of the visible launch content. Text, newsletter signup, spacing, and layout choices for the password page are primarily managed through the Banner section rather than through the password header or footer. ## Best practices * Keep the banner message short so visitors understand the launch state immediately. * Configure brand and social settings before troubleshooting missing password-page content. * Test the password modal on mobile to make sure access remains easy while the store is locked. * Use the password page to support a launch goal such as email capture, early access, or simple status messaging. ## Related guides * [Banner](/themes/everest/sections/banner) * [Theme Settings: Brand](/themes/everest/theme-settings/brand) * [Theme Settings: Social Media](/themes/everest/theme-settings/social-media) # Gift Card Source: https://docs.digifist.com/themes/everest/products/gift-card Understand how Everest's gift card template uses brand settings, QR codes, and customer-facing gift card actions. The Gift Card template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. Gift Card overview ## What this template controls * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. Gift Card location in Theme Customizer ## Key implementation notes Gift cards pull branding from global brand settings such as the main logo, SVG logo, and favicon-related assets when available. The template renders a QR code for the gift card identifier and includes built-in copy-to-clipboard behavior for the gift card code. This template renders outside the normal storefront layout, so it behaves more like a self-contained customer-facing utility page. ## Best practices * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Brand Settings](/themes/everest/theme-settings/brand) # Product Badges Source: https://docs.digifist.com/themes/everest/products/product-badges Configure Everest's built-in sale and sold-out badges on product cards, search results, and product pages. Product Badges control the small status labels Everest shows for important product states. In Everest, badge behavior is intentionally narrow and automatic: the theme shows badges for sold-out or on-sale products, and the visual styling comes from global badge settings plus an optional Product Badge block on the product page. Product Badges overview ## What this feature controls * Global badge position on product cards * Badge corner radius styling * Sale and sold-out badge color schemes * Product page badge placement through the Product Badge block * Search result badge styling for page-type results ## Getting started In Theme Customizer, go to **Theme settings -> Badges** to configure the shared badge style first. Check collection cards or other product-card surfaces to confirm the global position and color choices feel balanced. On the product template, add or review the **Product Badge** block if you want the same state labels shown on the product page. Verify badge output with at least one on-sale product and one sold-out product so both styling paths are covered. Product Badges location in Theme Customizer ## Global badge settings Controls the default overlay position for badges rendered on product cards. **Available options:** `Bottom left`, `Bottom right`, `Top left`, `Top right`\ **Default:** `Top right` Controls how rounded the badge corners appear. **Range:** `0px` to `40px`\ **Default:** `40px` Sets the color scheme used when a product is available and its compare-at price is higher than its selling price. **Default:** `scheme-5` Sets the color scheme used when a product is unavailable. **Default:** `scheme-3` ## Product page block settings The Product Badge block can place badges either inline with other product content or as an overlay. **Available options:** `Inline`, `Overlay`\ **Default:** `Overlay` Controls the space below the Product Badge block on the product page. ## Display logic Everest shows the sold-out badge whenever the selected product is unavailable. Everest shows the sale badge when the selected product is available and its compare-at price is greater than its current price. On `main-search`, the badge snippet can also render a page-type label for search result cards that represent pages rather than products. ## Important limitation Everest does not use the broader tag-based custom badge system documented in some other themes. The built-in badge snippet only handles sale and sold-out product states automatically, so custom promotional badge text is not a native Everest badge feature. ## Best practices * Choose badge colors that remain readable over real product imagery. * Keep badge placement consistent across cards and product pages unless there is a clear layout reason to change it. * Test both sold-out and on-sale states because each badge can use a different color scheme. * Avoid relying on Everest badges for custom campaign messaging unless you plan to extend the theme code. ## Related guides * [Product Page](/themes/everest/products/product-page) * [Theme Settings: Badges](/themes/everest/theme-settings/badges) * [Theme Settings: Products](/themes/everest/theme-settings/products) # Product Groups Source: https://docs.digifist.com/themes/everest/products/product-groups Link separate Everest products into switchable groups on product cards and product pages. Product Groups let Everest present separate Shopify products as one connected group. Instead of relying only on native variants, the theme reads metaobject data and renders linked options that send customers to the matching product page while preserving a grouped shopping experience on cards and product pages. Product Groups overview ## What this feature controls * Links separate products into one grouped selection flow * Displays grouped items on product cards and product pages * Chooses how groups appear on cards versus product pages * Uses text, image, swatch, or product-image style outputs * Supports custom labels and custom option images through metaobjects * Extends the Product Variant Picker block on the product page ## Getting started Create a Shopify metaobject definition for grouped products. Everest expects fields such as the grouped product list, the grouping label, the display type on cards, the display type on pages, and the optional custom label toggle. If you want custom text or images for grouped options, create a second metaobject definition for product option value data. In **Theme settings -> Products**, fill in the text fields for the Product Groups metaobject handle and, if used, the Product Options Type Values metaobject handle. Turn on **Show product groups on product card** if grouped options should also appear on collection cards and other standard product cards. Check the Product Variant Picker block on the product page because Everest renders Product Groups through that block before the native variant picker. Product Groups location in Theme Customizer ## Theme settings Controls whether grouped product options appear on standard product cards when variant options are also enabled there. **Default:** Enabled Stores the handle of the Shopify metaobject definition that Everest should read for grouped product relationships. This is a text field, so the handle needs to match the actual Shopify metaobject handle exactly. Stores the handle of the optional metaobject definition used for custom text or image values. Everest uses this when group options should render with custom labels or custom images instead of only product titles and featured images. ## Display behavior On the product page, Everest renders Product Groups above the native product variant picker inside the Product Variant Picker block. The legend uses the group label and can show a custom current value when the grouped metaobject enables custom labels on page. On product cards, Product Groups render only when card variant options are enabled and the global Product Groups card setting is turned on. Card interactions link directly to the grouped product URL instead of switching a native variant. Everest supports different outputs depending on the metaobject value: **Swatch** uses Shopify color-pattern data or custom swatch imagery.\ **Image** uses custom option images when available, otherwise the grouped product image.\ **Text** uses a matched custom text value or the option text.\ **Fallback image style** uses the grouped product featured image. ## Important dependencies The snippet reads specific metaobject fields directly. If field names or data structure do not match what Everest expects, grouped options will not render correctly. Swatch groups rely on Shopify's `shopify--color-pattern` data when the group type is set to swatch. The Product Variant Picker block still affects the page experience through settings such as picker type, swatch shape, and spacing. ## Best practices * Treat Product Groups as linked products with their own URLs, content, and pricing rather than as a replacement for simple native variants. * Keep group labels consistent so customers understand what attribute is being changed. * Use custom option values only when the product title alone is not enough for a clear selection experience. * Test grouped products on both cards and product pages because the interaction pattern is different in each context. ## Related guides * [Product Page](/themes/everest/products/product-page) * [Theme Settings: Products](/themes/everest/theme-settings/products) * [Product Badges](/themes/everest/products/product-badges) # Product Page Source: https://docs.digifist.com/themes/everest/products/product-page Configure Everest's product template, gallery layout, product information, and supporting purchase blocks. The Product Page template controls the main structure used for this page type in Everest. It combines template-specific sections with reusable content blocks, which means most storefront behavior can be adjusted in the Theme Customizer without editing theme code. Product Page overview ## What this template controls * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling * Block types such as Product Media Gallery, Product Blocks Main, Product Blocks Side * The template section order and the supporting sections included by default ## Template structure This template uses the following main sections or related theme building blocks by default: * **Product** * **Related Products** * **Pickup Availability** ## Getting started Open the relevant page type or assign the template to a resource before customizing it. Start with the primary content section so layout, filtering, gallery, or page-level behavior is defined before refining supporting content. Review any banners, content sections, or utility sections included in the template so the full page works together as a set. Product Page location in Theme Customizer ## Main settings ### Settings Product Page Settings settings Choose how **Sticky product information on desktop** behaves in the section. **Available options:** None, Gallery, Page. **Default:** `gallery` When you choose page option, the sticky product information will be sticky throughout the page, other sections' widths will be adjusted according to product gallery width. Adjust **Product information width on desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `24.0` to `72.0` **Default:** `38.4` ### Common settings Product Page Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Test this template with real content volume so headings, cards, and filters behave as expected. * Review supporting sections together because template defaults often work as a coordinated set. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Related Products](/themes/everest/sections/related-products) * [Pickup Availability](/themes/everest/sections/pickup-availability) # Accordions Source: https://docs.digifist.com/themes/everest/sections/accordions Configure Everest's accordions section and its main settings, content structure, and styling controls. The Accordions section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Accordions overview ## What this section controls * Images, videos, and other media presentation options * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling * Block types such as Accordion ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Accordions** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Accordions location in Theme Customizer ## Section settings ### Settings Accordions Settings settings Enable or disable **Open first collapsible row**. **Default:** `disabled` Enable or disable **Show accordions media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `enabled` ### Media Accordions Media settings Choose how **Show on** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Desktop, Mobile, Both. **Default:** `both` This setting only appears when its related parent option is enabled. Choose how **Media position** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Start, End. **Default:** `start` This setting only appears when its related parent option is enabled. Desktop and tablet only. Automatically adjusted for mobile. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, Square, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Enable or disable **Enable mobile specific media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` This setting only appears when its related parent option is enabled. Displays mobile-specific alternative media. Add a media before setting a mobile alternative. ### Media for mobile Accordions Media for mobile settings Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. ### Common settings Accordions Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Accordion Accordions Accordion settings This block controls the **accordion** content used inside the Accordions section. ### Settings Accordions Settings settings Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` ### Content Accordions Content settings Enter the content used for **heading**. Enter the content used for **text**. Choose how **Text size** behaves in the section. **Available options:** XS, S, M, L. **Default:** `sm` Choose the Shopify page connected to **page**. Enable or disable **Show accordion icon**. **Default:** `disabled` ### Icon Accordions Icon settings Enter the content used for **svg code**. This setting only appears when its related parent option is enabled. You can use SVG code for custom icons. Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `4` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Review media-heavy layouts on both desktop and mobile before publishing. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Apps Source: https://docs.digifist.com/themes/everest/sections/apps Configure Everest's apps section and its main settings, content structure, and styling controls. The Apps section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Apps overview ## What this section controls * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Apps** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Apps location in Theme Customizer ## Section settings ### Common settings Apps Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `full` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Banner Source: https://docs.digifist.com/themes/everest/sections/banner Configure Everest's banner section and its main settings, content structure, and styling controls. The Banner section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Banner overview ## What this section controls * Images, videos, and other media presentation options * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Color schemes, contrast, and shared visual styling * Block types such as Slide ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Banner** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Banner location in Theme Customizer ## Section settings ### Settings Banner Settings settings Choose how **Section height** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Ratio, Custom. **Default:** `ratio` Adjust **Custom height** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `0` to `100` **Default:** `60` This setting only appears when its related parent option is enabled. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, 1:1, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. ### Slideshow Banner Slideshow settings Adjust **Autoplay** with a slider-based control. **Range:** `0` to `10` **Default:** `5` Set to 0 to disable autoplay. Choose how **Pagination** behaves in the section. **Available options:** None, Dots 1, Dots 2, Dynamic, Fraction. **Default:** `dots-2` Choose how **Navigation** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** None, 1, 2, 3. **Default:** `style-1` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` This setting only appears when its related parent option is enabled. ### Mobile settings Banner Mobile settings Enable or disable **Enable mobile specific settings**. **Default:** `disabled` Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Full. **Default:** `full` This setting only appears when its related parent option is enabled. Choose how **Section height** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Ratio, Custom. **Default:** `ratio` This setting only appears when its related parent option is enabled. Adjust **Custom height** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `0` to `100` **Default:** `60` This setting only appears when its related parent option is enabled. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, 1:1, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. ### Common settings Banner Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `full` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Slide Banner Slide settings This block controls the **slide** content used inside the Banner section. ### Settings Banner Settings settings Choose how **Slide layout** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Full, Side by side, Split. **Default:** `1` Choose how **Media width** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** S, M, L. **Default:** `md` This setting only appears when its related parent option is enabled. It will be optimized for mobile. Choose how **Media order** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** First, Last. **Default:** `first` This setting only appears when its related parent option is enabled. Enable or disable **Reverse layout on mobile**. It has the strongest effect on layout balance and visual hierarchy. **Default:** `disabled` This setting only appears when its related parent option is enabled. Media will be displayed above content on mobile. Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-2` ### Content Banner Content settings Choose how **Container** behaves in the section. **Available options:** Box, No. **Default:** `none` Select the color scheme used for **color for box**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` This setting only appears when its related parent option is enabled. Choose how **Content width** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Small, Medium, Large, Page. **Default:** `page` This setting only appears when its related parent option is enabled. Choose how **Vertical alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⤒, Center, ⤓. **Default:** `center` Vertical alignment automatically optimized for mobile. Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `center` Choose how **Content alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `center` This setting only appears when its related parent option is enabled. Enable or disable **Show slide media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `enabled` ### Media Banner Media settings Choose how **Show on** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Desktop, Mobile, Both. **Default:** `both` This setting only appears when its related parent option is enabled. Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Adjust **Media overlay** with a slider-based control. Review the result on both desktop and mobile when media changes are involved. **Range:** `0` to `100` **Default:** `30%` This setting only appears when its related parent option is enabled. Enable or disable **Enable mobile specific media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` This setting only appears when its related parent option is enabled. Displays mobile-specific alternative media. Add a media before setting a mobile alternative. ### Media for mobile Banner Media for mobile settings Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. ### Secondary media Banner Secondary media settings Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` This setting only appears when its related parent option is enabled. Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Enable or disable **Enable mobile specific media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` This setting only appears when its related parent option is enabled. Displays mobile-specific alternative media. Add a media before setting a mobile alternative. ### Media for mobile Banner Media for mobile settings Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. ### Product Banner Product settings Choose the product source used by **product**. **Supports nested blocks:** * **Heading** for more granular content inside this block. * **Text** for more granular content inside this block. * **Description** for more granular content inside this block. * **Button Group** for more granular content inside this block. * **Newsletter** for more granular content inside this block. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Blog Posts Source: https://docs.digifist.com/themes/everest/sections/blog-posts Configure Everest's blog posts section and its main settings, content structure, and styling controls. The Blog Posts section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Blog Posts overview ## What this section controls * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Color schemes, contrast, and shared visual styling * Block types such as Article Card ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Blog Posts** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Blog Posts location in Theme Customizer ## Section settings ### Settings Blog Posts Settings settings Select the blog source used for **blog**. ### Layout Blog Posts Layout settings Choose how **Desktop** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `carousel` ### Number of columns Blog Posts Number of columns settings Adjust **Desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `6` **Default:** `4` Adjust **Mobile** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `1.4` **Default:** `1` ### Carousel layout Blog Posts Carousel layout settings Choose how **Navigation** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** None, 1, 2. **Default:** `style-1` Select the color scheme used for **color for navigation**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Enable or disable **Overflow**. **Default:** `disabled` ### Common settings Blog Posts Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Article Card Blog Posts Article Card settings This block controls the **article card** content used inside the Blog Posts section. ### Style Blog Posts Style settings Choose how **Card frame** behaves in the section. **Available options:** None, Border. **Default:** `border` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. ### Content Blog Posts Content settings Choose how **Padding** behaves in the section. **Available options:** No, S, M, L. **Default:** `lg` Choose how **Vertical alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⤒, Center, ⤓. **Default:** `start` Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `start` ### Media Blog Posts Media settings Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. Overwrites the image. Choose how **Media position** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Inline, Background. **Default:** `inline` Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, Square, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `1.00` This setting only appears when its related parent option is enabled. Choose how **Object fit** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Cover, Contain. **Default:** `cover` This setting only appears when its related parent option is enabled. **Supports nested blocks:** * **Heading** for more granular content inside this block. * **Text** for more granular content inside this block. * **Article Card Details** for more granular content inside this block. * **Article Card Tags** for more granular content inside this block. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Callout Banner Source: https://docs.digifist.com/themes/everest/sections/callout-banner Configure Everest's callout banner section and its main settings, content structure, and styling controls. The Callout Banner section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Callout Banner overview ## What this section controls * Headings, text content, and on-page messaging * Images, videos, and other media presentation options * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Callout Banner** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Callout Banner location in Theme Customizer ## Section settings ### Settings Callout Banner Settings settings Choose how **Layout** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Boxed, Minimal, Inline. **Default:** `1` Choose how **Spacing** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Standard, Compact. **Default:** `standard` This setting only appears when its related parent option is enabled. ### Content Callout Banner Content settings Enter the content used for **heading**. **Default:** `Callout heading` Choose how **Heading size** behaves in the section. **Available options:** S, M, L, XL. **Default:** `h2` This setting only appears when its related parent option is enabled. Enter the content used for **text**. This setting only appears when its related parent option is enabled. Choose how **Action preference** behaves in the section. **Available options:** Button, Newsletter. **Default:** `button` This setting only appears when its related parent option is enabled. Enter the content used for **button label**. Keep action labels short so they remain readable across devices. This setting only appears when its related parent option is enabled. Leave empty to hide the button Set the destination URL for **button link**. Keep action labels short so they remain readable across devices. This setting only appears when its related parent option is enabled. Enter the content used for **newsletter button label**. Keep action labels short so they remain readable across devices. **Default:** `Submit` This setting only appears when its related parent option is enabled. Choose how **Button style** behaves in the section. Keep action labels short so they remain readable across devices. **Available options:** Filled, Outlined, Text. **Default:** `outlined` This setting only appears when its related parent option is enabled. Select the color scheme used for **color for content**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-4` Enable or disable **Show callout banner media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` ### Media Callout Banner Media settings Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Upload or choose an image for **mobile image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. If mobile image is set, it will be used on mobile devices instead of the main image. Choose how **Media position** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Start, End, Full. **Default:** `full` This setting only appears when its related parent option is enabled. ### Timer Callout Banner Timer settings Enable or disable **Show timer**. **Default:** `enabled` Set the numeric value used for **year**. **Default:** `2027` Choose how **Month** behaves in the section. **Available options:** January, February, March, April, May, June, July, August, September, October, November, December. **Default:** `01` Adjust **Day** with a slider-based control. **Range:** `1` to `31` **Default:** `1` Adjust **Hour** with a slider-based control. **Range:** `0` to `23` **Default:** `0h` Adjust **Minute** with a slider-based control. **Range:** `0` to `59` **Default:** `0m` Enter the content used for **end message**. **Default:** `Sale has ended` This message will be displayed when the timer ends. ### Parts display settings Callout Banner Parts display settings Enable or disable **Show day part**. **Default:** `enabled` Enable or disable **Show hour part**. **Default:** `enabled` Enable or disable **Show minute part**. **Default:** `enabled` Enable or disable **Show second part**. **Default:** `enabled` ### Common settings Callout Banner Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `full` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Review media-heavy layouts on both desktop and mobile before publishing. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Cart Drawer Source: https://docs.digifist.com/themes/everest/sections/cart-drawer Understand how Everest's cart drawer helper works and which sections or theme settings influence it. The cart drawer is rendered through a shared snippet rather than a section schema, so its behavior is primarily driven by global cart settings and cart state. It handles empty-cart messaging, item list rendering, subtotal areas, optional recommendations, and checkout actions in an overlay-style drawer. Because there is no regular section schema here, most customization comes from theme settings, cart content, and the supporting cart snippet structure. Cart Drawer overview ## What this feature controls * Drawer-based cart interactions and checkout flow * Line item display, empty-state behavior, and subtotal area * Optional cart recommendations and supporting cart content ## How it is configured Start in the Theme Customizer or the related theme settings category that controls this feature. Review the product, header, cart, or search area that surfaces this helper so you can understand where the storefront output comes from. Because these helpers react to live cart, product, or search data, verify the result with realistic content before publishing. Cart Drawer location in Theme Customizer ## Key implementation notes The cart drawer is rendered through a shared snippet, so there is no regular section settings panel for it. Cart settings, line items, upsell logic, and customer cart state all influence the final drawer experience. Test the empty state, a cart with multiple items, and the checkout action area before publishing changes that affect the drawer. ## Best practices * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) * [Cart Settings](/themes/everest/theme-settings/cart) # Compare Slider Source: https://docs.digifist.com/themes/everest/sections/compare-slider Configure Everest's compare slider section and its main settings, content structure, and styling controls. The Compare Slider section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Compare Slider overview ## What this section controls * Images, videos, and other media presentation options * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Compare Slider** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Compare Slider location in Theme Customizer ## Section settings ### Settings Compare Slider Settings settings Choose how **Media ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** 1:1, 2:3, 3:4, 4:5, 9:16. **Default:** `3/2` ### Common settings Compare Slider Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Review media-heavy layouts on both desktop and mobile before publishing. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Contact Form Source: https://docs.digifist.com/themes/everest/sections/contact-form Configure Everest's contact form section and its main settings, content structure, and styling controls. The Contact Form section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Contact Form overview ## What this section controls * Headings, text content, and on-page messaging * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling * Block types such as Field ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Contact Form** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Contact Form location in Theme Customizer ## Section settings ### Settings Contact Form Settings settings Enter the content used for **heading**. **Default:** `Contact form` Choose how **Heading size** behaves in the section. **Available options:** XS, S, M, L, XL. **Default:** `h1` Enter the content used for **contact form footer text**. ### Common settings Contact Form Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Field Contact Form Field settings This block controls the **field** content used inside the Contact Form section. This block does not expose additional documented settings beyond its placement and content usage. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Content Tiles Source: https://docs.digifist.com/themes/everest/sections/content-tiles Configure Everest's content tiles section and its main settings, content structure, and styling controls. The Content Tiles section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Content Tiles overview ## What this section controls * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling * Block types such as Content Tile ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Content Tiles** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Content Tiles location in Theme Customizer ## Section settings ### Settings Content Tiles Settings settings Choose how **Spacing** behaves in the section. **Available options:** Standard, Compact. **Default:** `standard` Adjust **Tile corner radius** with a slider-based control. **Range:** `0` to `8` **Default:** `0.8rem` Adjust **Minimum height of each row** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `0` to `100` **Default:** `0rem` ### Common settings Content Tiles Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` ## Block settings ### Content Tile Content Tiles Content Tile settings This block controls the **content tile** content used inside the Content Tiles section. ### Settings Content Tiles Settings settings Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` Adjust **Column factor** with a slider-based control. **Range:** `1` to `12` **Default:** `1` Adjust **Row factor** with a slider-based control. **Range:** `1` to `12` **Default:** `1` Enable or disable **Mobile grid and row settings**. **Default:** `disabled` Adjust **Column factor (mobile)** with a slider-based control. **Range:** `1` to `12` **Default:** `12` This setting only appears when its related parent option is enabled. Adjust **Row factor (mobile)** with a slider-based control. **Range:** `1` to `12` **Default:** `1` This setting only appears when its related parent option is enabled. Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Controls **gradient background**. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, 1:1, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` ### Content Content Tiles Content settings Choose how **Vertical alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⤒, Center, ⤓. **Default:** `start` Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `start` Choose how **Content padding** behaves in the section. **Available options:** No, S, M, L, ↺. **Default:** `default` Enable or disable **Show content tile media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` This setting only appears when its related parent option is enabled. Enable or disable **Show content tile icon**. **Default:** `disabled` This setting only appears when its related parent option is enabled. ### Media Content Tiles Media settings Choose how **Show on** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Desktop, Mobile, Both. **Default:** `both` This setting only appears when its related parent option is enabled. Choose how **Media position** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Top, Bottom, Start, End, Background. **Default:** `top` This setting only appears when its related parent option is enabled. Desktop and tablet only. Automatically adjusted for mobile. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, Square, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. Choose how **Object fit** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Cover, Contain. **Default:** `cover` This setting only appears when its related parent option is enabled. Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Enable or disable **Enable mobile specific media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` This setting only appears when its related parent option is enabled. Displays mobile-specific alternative media. Add a media before setting a mobile alternative. ### Media for mobile Content Tiles Media for mobile settings Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, Square, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. ### Icon Content Tiles Icon settings Choose how **Icon position** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Top, Bottom, Start, End. **Default:** `start` This setting only appears when its related parent option is enabled. Adjust **Icon width** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `0` to `40` **Default:** `3.6rem` This setting only appears when its related parent option is enabled. Enter the content used for **svg code**. This setting only appears when its related parent option is enabled. You can use SVG code for custom icons. **Supports nested blocks:** * **Heading** for more granular content inside this block. * **Text** for more granular content inside this block. * **Button** for more granular content inside this block. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Custom Liquid Source: https://docs.digifist.com/themes/everest/sections/custom-liquid Configure Everest's custom liquid section and its main settings, content structure, and styling controls. The Custom Liquid section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Custom Liquid overview ## What this section controls * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Custom Liquid** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Custom Liquid location in Theme Customizer ## Section settings ### Settings Custom Liquid Settings settings Controls **liquid code**. Add app snippets or other code to create advanced customizations. [Learn more](https://shopify.dev/docs/api/liquid) ### Common settings Custom Liquid Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Featured Collections Source: https://docs.digifist.com/themes/everest/sections/featured-collections Configure Everest's featured collections section and its main settings, content structure, and styling controls. The Featured Collections section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Featured Collections overview ## What this section controls * Headings, text content, and on-page messaging * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling * Block types such as Collection Group, Card Group ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Featured Collections** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Featured Collections location in Theme Customizer ## Section settings ### Default settings for blocks Featured Collections Default settings for blocks settings Choose how **Content padding** behaves in the section. **Available options:** No, S, M, L, XL. **Default:** `4` ### Common settings Featured Collections Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` ## Block settings ### Collection Group Featured Collections Collection Group settings This block controls the **collection group** content used inside the Featured Collections section. ### Settings Featured Collections Settings settings Enter the content used for **label**. Select the collection source used by **collections**. Choose how **Layout** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `grid` ### Number of columns Featured Collections Number of columns settings Adjust **Desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `0` to `8` **Default:** `4` Use 0 to let columns adjust to their content width Adjust **Mobile** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `0` to `2` **Default:** `1` Use 0 to let columns adjust to their content width ### Carousel layout Featured Collections Carousel layout settings Choose how **Navigation** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** None, 1, 2. **Default:** `style-2` Select the color scheme used for **color for navigation**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-2` Enable or disable **Overflow**. **Default:** `disabled` Overflow is available only when the featured card layout is normal. ### Card Group Featured Collections Card Group settings This block controls the **card group** content used inside the Featured Collections section. ### Settings Featured Collections Settings settings Enter the content used for **label**. Choose how **Layout** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `grid` ### Number of columns Featured Collections Number of columns settings Adjust **Desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `0` to `12` **Default:** `4` Use 0 to let columns adjust to their content width Adjust **Mobile** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `0` to `2` **Default:** `1` Use 0 to let columns adjust to their content width ### Carousel layout Featured Collections Carousel layout settings Choose how **Navigation** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** None, 1, 2. **Default:** `style-1` Select the color scheme used for **color for navigation**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Enable or disable **Overflow**. **Default:** `disabled` Overflow is available only when the featured card layout is normal. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, Square, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `1.00` **Supports nested blocks:** * **Card** for more granular content inside this block. * **Collection Card** for more granular content inside this block. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Featured Product Source: https://docs.digifist.com/themes/everest/sections/featured-product Configure Everest's featured product section and its main settings, content structure, and styling controls. The Featured Product section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Featured Product overview ## What this section controls * Headings, text content, and on-page messaging * Layout structure, width, alignment, and spacing * Product, collection, or cart-related storefront behavior * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Featured Product** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Featured Product location in Theme Customizer ## Section settings ### Settings Featured Product Settings settings Choose the product source used by **product**. Adjust **Product information width on desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `24.0` to `72.0` **Default:** `38.4` Select the color scheme used for **color for content**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` ### Common settings Featured Product Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Featured Products Source: https://docs.digifist.com/themes/everest/sections/featured-products Configure Everest's featured products section and its main settings, content structure, and styling controls. The Featured Products section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Featured Products overview ## What this section controls * Images, videos, and other media presentation options * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Product, collection, or cart-related storefront behavior * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Featured Products** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Featured Products location in Theme Customizer ## Section settings ### Settings Featured Products Settings settings Select the collection source used by **collection**. Choose the product source used by **product list**. Overrides the collection choice. Choose how **Featured card** behaves in the section. **Available options:** Normal, Big. **Default:** `normal` Choose how **Layout** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `grid` Choose how **Media order** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** First, Last. **Default:** `first` This setting only appears when its related parent option is enabled. Optimized for mobile ### Number of columns Featured Products Number of columns settings Adjust **Desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `6` **Default:** `3` Adjust **Mobile** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `1.4` **Default:** `1` ### Carousel layout Featured Products Carousel layout settings Choose how **Pagination** behaves in the section. **Available options:** None, Progress. **Default:** `progress` Choose how **Navigation** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** None, 1, 2. **Default:** `style-1` Select the color scheme used for **color for navigation**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Enable or disable **Overflow**. **Default:** `disabled` ### Common settings Featured Products Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Review media-heavy layouts on both desktop and mobile before publishing. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Image with Text Source: https://docs.digifist.com/themes/everest/sections/image-with-text Configure Everest's image with text section and its main settings, content structure, and styling controls. The Image with Text section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Image with Text overview ## What this section controls * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling * Block types such as Card ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Image with Text** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Image with Text location in Theme Customizer ## Section settings ### Settings Image with Text Settings settings Choose how **Spacing** behaves in the section. **Available options:** Standard, Compact. **Default:** `standard` Enable or disable **Separate cards**. **Default:** `disabled` Separate content and image ### Common settings Image with Text Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Card Image with Text Card settings This block controls the **card** content used inside the Image with Text section. ### Settings Image with Text Settings settings Choose how **Corner radius** behaves in the section. **Available options:** No, S, M, L, ↺. **Default:** `default` ### Style Image with Text Style settings Choose how **Card frame** behaves in the section. **Available options:** None, Border. **Default:** `border` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. ### Content Image with Text Content settings Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` Choose how **Content padding** behaves in the section. **Available options:** No, S, M, L, ↺. **Default:** `default` ### Desktop alignment Image with Text Desktop alignment settings Choose how **Vertical alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⤒, Center, ⤓. **Default:** `start` Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `start` ### Mobile alignment Image with Text Mobile alignment settings Choose how **Vertical alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⤒, Center, ⤓. **Default:** `start` Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `start` ### Media Image with Text Media settings Enable or disable **Show card media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` Enable or disable **Reverse layout on mobile**. It has the strongest effect on layout balance and visual hierarchy. **Default:** `disabled` This setting only appears when its related parent option is enabled. Reverses the layout of the card on mobile. Choose how **Media position** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Top, Bottom, Start, End, Background. **Default:** `bottom` This setting only appears when its related parent option is enabled. Desktop and tablet only. Automatically adjusted for mobile. Enable or disable **Stack on mobile**. **Default:** `enabled` This setting only appears when its related parent option is enabled. When enabled, media and content stack vertically on mobile devices. Only applies when media position is set to Left or Right. Adjust **Media width** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `2` to `12` **Default:** `6` This setting only appears when its related parent option is enabled. If you set 0, media will use automatic width. Choose how **Object fit** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Cover, Contain. **Default:** `cover` This setting only appears when its related parent option is enabled. Choose how **Show on** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Desktop, Mobile, Both. **Default:** `both` This setting only appears when its related parent option is enabled. Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, Square, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. Enable or disable **Enable mobile specific media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` This setting only appears when its related parent option is enabled. Displays mobile-specific alternative media. Add a media before setting a mobile alternative. ### Media for mobile Image with Text Media for mobile settings Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, Square, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. **Supports nested blocks:** * **Icon Svg** for more granular content inside this block. * **Heading** for more granular content inside this block. * **Text** for more granular content inside this block. * **Button** for more granular content inside this block. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Interactive Popup Source: https://docs.digifist.com/themes/everest/sections/interactive-popup Configure Everest's interactive popup section and its main settings, content structure, and styling controls. The Interactive Popup section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Interactive Popup overview ## What this section controls * Headings, text content, and on-page messaging * Images, videos, and other media presentation options * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling * Block types such as Heading, Text, Form Newsletter, Button Group and more ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Interactive Popup** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Interactive Popup location in Theme Customizer ## Section settings ### Settings Interactive Popup Settings settings Enable or disable **Show on customizer**. **Default:** `disabled` Choose how **Popup type** behaves in the section. **Available options:** Newsletter signup, Age verification, Custom. **Default:** `custom` Sets the popup type used for its behavior and targeting. Adjust **Delay** with a slider-based control. **Range:** `1` to `20` **Default:** `10s` ### Content Interactive Popup Content settings Choose how **Vertical alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⤒, Center, ⤓. **Default:** `start` Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `start` Enable or disable **Show interactive popup media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `enabled` ### Media Interactive Popup Media settings Choose how **Show on** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Desktop, Mobile, Both. **Default:** `both` This setting only appears when its related parent option is enabled. Choose how **Media position** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Start, End. **Default:** `start` This setting only appears when its related parent option is enabled. Desktop and tablet only. Automatically adjusted for mobile. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, Square, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Enable or disable **Enable mobile specific media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` This setting only appears when its related parent option is enabled. Displays mobile-specific alternative media. Add a media before setting a mobile alternative. ### Media for mobile Interactive Popup Media for mobile settings Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. ### Common settings Interactive Popup Common settings Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` ## Block settings ### Heading Interactive Popup Heading settings This block controls the **heading** content used inside the Interactive Popup section. ### Settings Interactive Popup Settings settings Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` Choose how **HTML tag** behaves in the section. **Available options:** H1, H2, H3. **Default:** `h3` Useful for SEO and accessibility. Enter the content used for **heading**. Choose how **Heading size** behaves in the section. **Available options:** XS, S, M, L, ↺. **Default:** `default` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `0` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `sm` ### Text Interactive Popup Text settings This block controls the **text** content used inside the Interactive Popup section. ### Settings Interactive Popup Settings settings Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` Adjust **Line count** with a slider-based control. **Range:** `0` to `10` **Default:** `0` Text truncate to the specified number of lines. If you set 0, the text will not be truncated. Enter the content used for **text**. Choose how **Text size** behaves in the section. **Available options:** XS, S, M, L. **Default:** `sm` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `0` ### Form Newsletter Interactive Popup Form Newsletter settings This block controls the **form newsletter** content used inside the Interactive Popup section. ### Settings Interactive Popup Settings settings Enable or disable **Show label**. **Default:** `enabled` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `0` ### Button Group Interactive Popup Button Group settings This block controls the **button group** content used inside the Interactive Popup section. ### Settings Interactive Popup Settings settings Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, Auto. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, Auto. **Default:** `0` Choose how **Space between** behaves in the section. **Available options:** S, M, L, XL. **Default:** `4` Space between buttons, optimized for mobile **Supports nested blocks:** * **Button** for more granular content inside this block. ### Age Verification Actions Interactive Popup Age Verification Actions settings This block controls the **age verification actions** content used inside the Interactive Popup section. ### Confirm button Interactive Popup Confirm button settings Enter the content used for **button label**. Keep action labels short so they remain readable across devices. **Default:** `Yes` Choose how **Button style** behaves in the section. Keep action labels short so they remain readable across devices. **Available options:** Filled, Outlined, Text. **Default:** `filled` Choose how **Button width** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, ↔. **Default:** `full` ### Decline button Interactive Popup Decline button settings Enter the content used for **button label**. Keep action labels short so they remain readable across devices. **Default:** `No` Set the destination URL for **button link**. Keep action labels short so they remain readable across devices. **Default:** `/` Choose how **Button style** behaves in the section. Keep action labels short so they remain readable across devices. **Available options:** Filled, Outlined, Text. **Default:** `outlined` Choose how **Button width** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, ↔. **Default:** `full` ### Common settings Interactive Popup Common settings Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Review media-heavy layouts on both desktop and mobile before publishing. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Map Source: https://docs.digifist.com/themes/everest/sections/map Configure Everest's map section and its main settings, content structure, and styling controls. The Map section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Map overview ## What this section controls * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Map** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Map location in Theme Customizer ## Section settings ### Settings Map Settings settings Choose how **Section height** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Fixed, Half, Full. **Default:** `36rem` Enter the content used for **google maps api key**. To display a map, you need a Google Maps API key. [Learn more](https://support.google.com/googleapi/answer/6158862?hl=en) Enter the content used for **address**. Adjust **Zoom level** with a slider-based control. **Range:** `0` to `21` **Default:** `16` ### Common settings Map Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Marquee Source: https://docs.digifist.com/themes/everest/sections/marquee Configure Everest's marquee section and its main settings, content structure, and styling controls. The Marquee section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Marquee overview ## What this section controls * Headings, text content, and on-page messaging * Color schemes, contrast, and shared visual styling * Block types such as Item ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Marquee** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Marquee location in Theme Customizer ## Section settings ### Settings Marquee Settings settings Enable or disable **Enable animation**. **Default:** `enabled` Adjust **Animation speed** with a slider-based control. **Range:** `1` to `10` **Default:** `5` The higher the number, the slower the animation. Adjust **Text size** with a slider-based control. **Range:** `1.2` to `12.0` **Default:** `12rem` Adjust **Text size for mobile** with a slider-based control. **Range:** `1.2` to `4.0` **Default:** `4rem` Adjust **Item spacing** with a slider-based control. **Range:** `0` to `6` **Default:** `4.8` ### Common settings Marquee Common settings Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Item Marquee Item settings This block controls the **item** content used inside the Marquee section. This block does not expose additional documented settings beyond its placement and content usage. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Multicolumn Source: https://docs.digifist.com/themes/everest/sections/multicolumn Configure Everest's multicolumn section and its main settings, content structure, and styling controls. The Multicolumn section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Multicolumn overview ## What this section controls * Headings, text content, and on-page messaging * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Color schemes, contrast, and shared visual styling * Block types such as Card ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Multicolumn** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Multicolumn location in Theme Customizer ## Section settings ### Layout Multicolumn Layout settings Choose how **Desktop** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `grid` Choose how **Mobile** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `grid` ### Number of columns Multicolumn Number of columns settings Adjust **Desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `12` **Default:** `3` Adjust **Mobile** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `2` **Default:** `1` ### Carousel layout Multicolumn Carousel layout settings Choose how **Navigation** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** None, 1, 2. **Default:** `style-1` Select the color scheme used for **color for navigation**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Enable or disable **Overflow**. **Default:** `disabled` Overflow is available only when the featured card layout is normal. ### Default settings for blocks Multicolumn Default settings for blocks settings Choose how **Heading size** behaves in the section. **Available options:** XS, S, M, L, XL. **Default:** `h1` ### Common settings Multicolumn Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Card Multicolumn Card settings This block controls the **card** content used inside the Multicolumn section. ### Settings Multicolumn Settings settings Choose how **Corner radius** behaves in the section. **Available options:** No, S, M, L, ↺. **Default:** `default` ### Style Multicolumn Style settings Choose how **Card frame** behaves in the section. **Available options:** None, Border. **Default:** `border` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. ### Content Multicolumn Content settings Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` Choose how **Content padding** behaves in the section. **Available options:** No, S, M, L, ↺. **Default:** `default` ### Desktop alignment Multicolumn Desktop alignment settings Choose how **Vertical alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⤒, Center, ⤓. **Default:** `start` Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `start` ### Mobile alignment Multicolumn Mobile alignment settings Choose how **Vertical alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⤒, Center, ⤓. **Default:** `start` Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `start` ### Media Multicolumn Media settings Enable or disable **Show card media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` Enable or disable **Reverse layout on mobile**. It has the strongest effect on layout balance and visual hierarchy. **Default:** `disabled` This setting only appears when its related parent option is enabled. Reverses the layout of the card on mobile. Choose how **Media position** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Top, Bottom, Start, End, Background. **Default:** `bottom` This setting only appears when its related parent option is enabled. Desktop and tablet only. Automatically adjusted for mobile. Enable or disable **Stack on mobile**. **Default:** `enabled` This setting only appears when its related parent option is enabled. When enabled, media and content stack vertically on mobile devices. Only applies when media position is set to Left or Right. Adjust **Media width** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `2` to `12` **Default:** `6` This setting only appears when its related parent option is enabled. If you set 0, media will use automatic width. Choose how **Object fit** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Cover, Contain. **Default:** `cover` This setting only appears when its related parent option is enabled. Choose how **Show on** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Desktop, Mobile, Both. **Default:** `both` This setting only appears when its related parent option is enabled. Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, Square, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. Enable or disable **Enable mobile specific media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` This setting only appears when its related parent option is enabled. Displays mobile-specific alternative media. Add a media before setting a mobile alternative. ### Media for mobile Multicolumn Media for mobile settings Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, Square, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. **Supports nested blocks:** * **Icon Svg** for more granular content inside this block. * **Heading** for more granular content inside this block. * **Text** for more granular content inside this block. * **Button** for more granular content inside this block. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Pickup Availability Source: https://docs.digifist.com/themes/everest/sections/pickup-availability Understand how Everest's pickup availability helper works and which sections or theme settings influence it. Pickup availability shows store pickup information for the currently selected product variant when Shopify pickup data is available. The output changes automatically with variant selection, making it a dynamic helper tied closely to the product page and inventory location data. This section is typically surfaced through product-related blocks rather than as a standalone customizable section. Pickup Availability overview ## What this feature controls * Store pickup availability for the selected product variant * Pickup timing, store details, and availability messaging * The pickup drawer content used when shoppers request more detail ## How it is configured Start in the Theme Customizer or the related theme settings category that controls this feature. Review the product, header, cart, or search area that surfaces this helper so you can understand where the storefront output comes from. Because these helpers react to live cart, product, or search data, verify the result with realistic content before publishing. Pickup Availability location in Theme Customizer ## Key implementation notes Pickup availability updates when the selected variant changes, so the feature should always be tested across actual variant combinations. The feature only appears when Shopify pickup locations and inventory data are available for the selected product. In Everest, this helper is most relevant as part of the product information flow rather than as a standalone merchandising section. ## Best practices * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) * [Product Page](/themes/everest/products/product-page) # Predictive Search Source: https://docs.digifist.com/themes/everest/sections/predictive-search Understand how Everest's predictive search helper works and which sections or theme settings influence it. Predictive search powers the live search results shown from Everest's search UI in the header and search overlay. It can return queries, collections, pages, articles, and products, with product cards optionally showing vendor and price information. Its behavior depends heavily on global search settings, so Theme settings and search snippet behavior matter as much as the template markup. Predictive Search overview ## What this feature controls * Live search suggestions and grouped search result types * Product, collection, page, article, and query previews * Search UI behavior that depends on global search settings ## How it is configured Start in the Theme Customizer or the related theme settings category that controls this feature. Review the product, header, cart, or search area that surfaces this helper so you can understand where the storefront output comes from. Because these helpers react to live cart, product, or search data, verify the result with realistic content before publishing. Predictive Search location in Theme Customizer ## Key implementation notes Predictive search can show queries, collections, pages, articles, and products in grouped result areas. Global search settings control which product details appear and how the broader live-search experience behaves. The feature is closely tied to the search UI rendered from the header and search snippet components. ## Best practices * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) * [Search Settings](/themes/everest/theme-settings/search) # Quick Links Source: https://docs.digifist.com/themes/everest/sections/quick-links Configure Everest's quick links section and its main settings, content structure, and styling controls. The Quick Links section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Quick Links overview ## What this section controls * Headings, text content, and on-page messaging * Images, videos, and other media presentation options * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Color schemes, contrast, and shared visual styling * Block types such as Quick Link ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Quick Links** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Quick Links location in Theme Customizer ## Section settings ### Layout Quick Links Layout settings Choose how **Desktop** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `grid` Choose how **Mobile** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `grid` ### Number of columns Quick Links Number of columns settings Adjust **Desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `12` **Default:** `3` Adjust **Mobile** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `2.4` **Default:** `1` ### Carousel layout Quick Links Carousel layout settings Choose how **Navigation** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** None, 1, 2. **Default:** `none` Select the color scheme used for **color for navigation**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Pagination** behaves in the section. **Available options:** None, Dots, Dynamic, Progress. **Default:** `none` Enable or disable **Overflow**. **Default:** `disabled` Overflow is available only when the featured card layout is normal. ### Card Quick Links Card settings Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. Choose how **Card frame** behaves in the section. **Available options:** None, Border. **Default:** `none` Choose how **Corner radius** behaves in the section. **Available options:** No, S, M, L, ↺. **Default:** `default` Choose how **Card padding** behaves in the section. **Available options:** No, S, M, L. **Default:** `md` Enable or disable **Enable auto width**. It has the strongest effect on layout balance and visual hierarchy. **Default:** `disabled` This setting only appears when its related parent option is enabled. ### Content Quick Links Content settings Enable or disable **Show card labels**. **Default:** `disabled` Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `center` ### Media Quick Links Media settings Enable or disable **Show card media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `enabled` Adjust **Media height** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `0.4` to `20.0` **Default:** `10.0rem` This setting only appears when its related parent option is enabled. Choose how **Media padding** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** No, S, M, L. **Default:** `md` This setting only appears when its related parent option is enabled. Choose how **Media shape** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Default, Square, Circle. **Default:** `default` This setting only appears when its related parent option is enabled. Enable or disable **Enable mix blend mode**. **Default:** `disabled` This setting only appears when its related parent option is enabled. Applies blend mode effect to the media based on the mix blend color. Controls **mix blend color**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `#f1f1f1` This setting only appears when its related parent option is enabled. ### Common settings Quick Links Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Quick Link Quick Links Quick Link settings This block controls the **quick link** content used inside the Quick Links section. ### Settings Quick Links Settings settings Set the destination URL for **card link**. Keep action labels short so they remain readable across devices. Enter the content used for **card label**. This setting only appears when its related parent option is enabled. If left blank, the card label will use the linked page's title. ### Media Quick Links Media settings Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Choose how **Aspect ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Default, Auto, 1:1, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2. **Default:** `auto` This setting only appears when its related parent option is enabled. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Review media-heavy layouts on both desktop and mobile before publishing. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Quick Order List Source: https://docs.digifist.com/themes/everest/sections/quick-order-list Configure Everest's quick order list section and its main settings, content structure, and styling controls. The Quick Order List section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Quick Order List overview ## What this section controls * Images, videos, and other media presentation options * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Quick Order List** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Quick Order List location in Theme Customizer ## Section settings ### Settings Quick Order List Settings settings Enable or disable **Show images**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` Enable or disable **Show SKUs**. **Default:** `disabled` ### Common settings Quick Order List Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Review media-heavy layouts on both desktop and mobile before publishing. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Recently Viewed Products Source: https://docs.digifist.com/themes/everest/sections/recently-viewed-products Configure Everest's recently viewed products section and its main settings, content structure, and styling controls. The Recently Viewed Products section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Recently Viewed Products overview ## What this section controls * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Recently Viewed Products** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Recently Viewed Products location in Theme Customizer ## Section settings ### Settings Recently Viewed Products Settings settings This section’s product cards are generated through search, based on the customer’s browsing history, so the product card setup is handled through search page. Choose how **Layout** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `grid` Choose how **Mobile** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `grid` ### Number of columns Recently Viewed Products Number of columns settings Adjust **Desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `6` **Default:** `3` Adjust **Mobile** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `2.4` **Default:** `1` ### Carousel layout Recently Viewed Products Carousel layout settings Choose how **Navigation** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** None, 1, 2. **Default:** `style-1` This setting only appears when its related parent option is enabled. Select the color scheme used for **color for navigation**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` This setting only appears when its related parent option is enabled. Enable or disable **Overflow**. **Default:** `disabled` This setting only appears when its related parent option is enabled. Overflow is available only when the featured card layout is normal. ### Common settings Recently Viewed Products Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Related Products Source: https://docs.digifist.com/themes/everest/sections/related-products Configure Everest's related products section and its main settings, content structure, and styling controls. The Related Products section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Related Products overview ## What this section controls * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Product, collection, or cart-related storefront behavior * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Related Products** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Related Products location in Theme Customizer ## Section settings ### Settings Related Products Settings settings Dynamic recommendations use order and product information to change and improve over time. [Learn more](https://help.shopify.com/themes/development/recommended-products) Adjust **Maximum products to show** with a slider-based control. **Range:** `2` to `10` **Default:** `4` Choose how **Layout** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Grid, Carousel. **Default:** `carousel` ### Number of columns Related Products Number of columns settings Adjust **Desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `6` **Default:** `3` Adjust **Mobile** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `1.4` **Default:** `1` ### Carousel layout Related Products Carousel layout settings Choose how **Navigation** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** None, 1, 2. **Default:** `style-1` This setting only appears when its related parent option is enabled. Select the color scheme used for **color for navigation**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` This setting only appears when its related parent option is enabled. Choose how **Display** behaves in the section. **Available options:** Full, Partial. **Default:** `partial` Enable or disable **Overflow**. **Default:** `disabled` This setting only appears when its related parent option is enabled. Overflow is available only when the featured card layout is normal. ### Common settings Related Products Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Rich Text Source: https://docs.digifist.com/themes/everest/sections/rich-text Configure Everest's rich text section and its main settings, content structure, and styling controls. The Rich Text section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Rich Text overview ## What this section controls * Headings, text content, and on-page messaging * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling * Block types such as Heading, Text, Button Group ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Rich Text** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Rich Text location in Theme Customizer ## Section settings ### Content Rich Text Content settings Choose how **Content width** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Small, Medium, Large, Page, Fluid, Full. **Default:** `page` Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `center` Automatically adjusted for mobile. Select the color scheme used for **color for content**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` ### Common settings Rich Text Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Heading Rich Text Heading settings This block controls the **heading** content used inside the Rich Text section. ### Settings Rich Text Settings settings Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` Choose how **HTML tag** behaves in the section. **Available options:** H1, H2, H3. **Default:** `h3` Useful for SEO and accessibility. Enter the content used for **heading**. Choose how **Heading size** behaves in the section. **Available options:** XS, S, M, L, ↺. **Default:** `default` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `0` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `sm` ### Text Rich Text Text settings This block controls the **text** content used inside the Rich Text section. ### Settings Rich Text Settings settings Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` Adjust **Line count** with a slider-based control. **Range:** `0` to `10` **Default:** `0` Text truncate to the specified number of lines. If you set 0, the text will not be truncated. Enter the content used for **text**. Choose how **Text size** behaves in the section. **Available options:** XS, S, M, L. **Default:** `sm` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `0` ### Button Group Rich Text Button Group settings This block controls the **button group** content used inside the Rich Text section. ### Settings Rich Text Settings settings Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, Auto. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, Auto. **Default:** `0` Choose how **Space between** behaves in the section. **Available options:** S, M, L, XL. **Default:** `4` Space between buttons, optimized for mobile **Supports nested blocks:** * **Button** for more granular content inside this block. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Sidebar Menu Source: https://docs.digifist.com/themes/everest/sections/sidebar-menu Configure Everest's sidebar menu section and its main settings, content structure, and styling controls. The Sidebar Menu section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Sidebar Menu overview ## What this section controls * Calls to action, links, and navigation behavior * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Sidebar Menu** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Sidebar Menu location in Theme Customizer ## Section settings ### Settings Sidebar Menu Settings settings Select the Shopify menu used for **menu**. Make sure the chosen option still feels easy to scan and use on smaller screens. Select a menu to display in the sidebar. Enter the content used for **menu label for mobile**. Make sure the chosen option still feels easy to scan and use on smaller screens. **Default:** `Collections` ### Common settings Sidebar Menu Common settings Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Store Locator Source: https://docs.digifist.com/themes/everest/sections/store-locator Configure Everest's store locator section and its main settings, content structure, and styling controls. The Store Locator section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Store Locator overview ## What this section controls * Layout structure, width, alignment, and spacing * Search, filter, and sorting behavior for product discovery * Color schemes, contrast, and shared visual styling * Block types such as Pin ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Store Locator** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Store Locator location in Theme Customizer ## Section settings ### Settings Store Locator Settings settings Choose how **Layout** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Image, Map. **Default:** `map` Each pin supports its own image. ### Map Store Locator Map settings Enter the content used for **google maps api key**. To display a map, you need a Google Maps API key. [Learn more](https://support.google.com/googleapi/answer/6158862?hl=en) Adjust **Zoom level** with a slider-based control. **Range:** `0` to `21` **Default:** `4` Enable or disable **Show store list**. **Default:** `enabled` ### Search bar Store Locator Search bar settings Select the color scheme used for **color for search bar**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` ### Common settings Store Locator Common settings Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Pin Store Locator Pin settings This block controls the **pin** content used inside the Store Locator section. This block does not expose additional documented settings beyond its placement and content usage. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Testimonials Source: https://docs.digifist.com/themes/everest/sections/testimonials Configure Everest's testimonials section and its main settings, content structure, and styling controls. The Testimonials section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Testimonials overview ## What this section controls * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Color schemes, contrast, and shared visual styling * Block types such as Testimonial ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Testimonials** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Add, remove, or reorder blocks after the main layout feels right so content hierarchy stays easier to manage. Testimonials location in Theme Customizer ## Section settings ### Number of columns Testimonials Number of columns settings Adjust **Desktop** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `6` **Default:** `3` Adjust **Mobile** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `1` to `1.4` **Default:** `1` ### Carousel layout Testimonials Carousel layout settings Choose how **Pagination** behaves in the section. **Available options:** None, Dots, Progress, Dynamic. **Default:** `dots` Choose how **Navigation** behaves in the section. Make sure the chosen option still feels easy to scan and use on smaller screens. **Available options:** None, 1, 2. **Default:** `style-1` Select the color scheme used for **color for navigation**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Enable or disable **Overflow**. **Default:** `disabled` Overflow is available only when the featured card layout is normal. ### Common settings Testimonials Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Block settings ### Testimonial Testimonials Testimonial settings This block controls the **testimonial** content used inside the Testimonials section. ### Settings Testimonials Settings settings Choose how **Corner radius** behaves in the section. **Available options:** No, S, M, L, ↺. **Default:** `default` ### Style Testimonials Style settings Choose how **Card frame** behaves in the section. **Available options:** None, Border. **Default:** `border` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. ### Content Testimonials Content settings Choose how **Show on** behaves in the section. **Available options:** Desktop, Mobile, Both. **Default:** `both` Choose how **Content padding** behaves in the section. **Available options:** No, S, M, L, ↺. **Default:** `default` Choose how **Vertical alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⤒, Center, ⤓. **Default:** `start` Choose how **Horizontal alignment** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** ⇤, Center, ⇥. **Default:** `start` Enable or disable **Show card media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` ### Media Testimonials Media settings Choose how **Media position** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Top, Bottom, Start, End, Background. **Default:** `top` This setting only appears when its related parent option is enabled. Desktop and tablet only. Automatically adjusted for mobile. Adjust **Media width** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `2` to `12` **Default:** `6` This setting only appears when its related parent option is enabled. If you set 0, media will use automatic width. Choose how **Show on** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Desktop, Mobile, Both. **Default:** `both` This setting only appears when its related parent option is enabled. Choose how **Object fit** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Cover, Contain. **Default:** `cover` This setting only appears when its related parent option is enabled. Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. Enable or disable **Enable mobile specific media**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` This setting only appears when its related parent option is enabled. Displays mobile-specific alternative media. Add a media before setting a mobile alternative. ### Media for mobile Testimonials Media for mobile settings Upload or choose an image for **image**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. This setting only appears when its related parent option is enabled. Overwrites the image and video. We recommend above video option for better performance, external videos can cause performance issues. Use a YouTube or Vimeo URL. **Supports nested blocks:** * **Text** for more granular content inside this block. * **Button** for more granular content inside this block. * **Divider** for more granular content inside this block. * **Rating** for more granular content inside this block. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Video Source: https://docs.digifist.com/themes/everest/sections/video Configure Everest's video section and its main settings, content structure, and styling controls. The Video section lets you control the content, layout, and presentation of this part of the Everest storefront. Most changes happen directly in the Theme Customizer, so you can adjust structure first and then refine styling, spacing, and supporting blocks with confidence. Video overview ## What this section controls * Headings, text content, and on-page messaging * Images, videos, and other media presentation options * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling ## Getting started In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Add the **Video** section to a compatible template or select the existing section from the left sidebar. Start with the structural settings such as layout, width, color scheme, spacing, or content source before refining smaller details. Video location in Theme Customizer ## Section settings ### Settings Video Settings settings Shows when no Shopify-hosted video is selected. Enter the content used for **heading**. **Default:** `t:sections.video.settings.heading.default` Choose how **Heading size** behaves in the section. **Available options:** XS, S, M, L, XL. **Default:** `h1` Enable or disable **Play video on loop**. Review the result on both desktop and mobile when media changes are involved. **Default:** `disabled` Choose a hosted video for **video**. Review the result on both desktop and mobile when media changes are involved. Paste an external video URL for **external video**. Review the result on both desktop and mobile when media changes are involved. **Default:** `https://www.youtube.com/watch?v=_9VUPq3SxOc` Use a YouTube or Vimeo URL Upload or choose an image for **cover image**. Review the result on both desktop and mobile when media changes are involved. Enter the content used for **video alt text**. Review the result on both desktop and mobile when media changes are involved. Describe the video for customers using screen readers. [Learn more](https://help.shopify.com/manual/online-store/themes/theme-structure/theme-features#video) ### Style Video Style settings Enable or disable **Make section full width**. It has the strongest effect on layout balance and visual hierarchy. **Default:** `disabled` ### Common settings Video Common settings Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid, Full. **Default:** `page` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Section border** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** None, Top, Bottom, Both. **Default:** `none` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Review media-heavy layouts on both desktop and mobile before publishing. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Start with the structural settings first, then refine decorative styling after the layout feels settled. * Preview the section with realistic content length to catch spacing and wrapping issues early. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Badges Source: https://docs.digifist.com/themes/everest/theme-settings/badges Configure Everest's global badges settings and the shared behavior they control across the store. The Badges settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Badges theme settings overview in Everest ## What these settings control * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Badges** to review and update the shared settings in this category. Badges location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Badges Choose how **Badge position** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Bottom left, Bottom right, Top left, Top right. **Default:** `top right` Adjust **Badge corner radius** with a slider-based control. **Range:** `0` to `40` **Default:** `40px` Select the color scheme used for **sale badge color**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-5` Select the color scheme used for **sold out badge color**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-3` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Brand Source: https://docs.digifist.com/themes/everest/theme-settings/brand Configure Everest's global brand settings and the shared behavior they control across the store. The Brand settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Brand theme settings overview in Everest ## What these settings control * Headings, text content, and on-page messaging * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Brand** to review and update the shared settings in this category. Brand location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Brand Enter the content used for **headline**. Enter the content used for **description**. Upload or choose an image for **logo**. Paste custom HTML or SVG code for **logo svg**. SVG is recommended for better quality and performance. Overwrites logo image. Enable or disable **Use text for logo**. **Default:** `enabled` Overwrites the image and svg Enter the content used for **logo text**. **Default:** `Everest` This setting only appears when its related parent option is enabled. Select the color scheme used for **logo color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-3` This setting only appears when its related parent option is enabled. Adjust **Logo width** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `50` to `300` **Default:** `100px` This setting only appears when its related parent option is enabled. Adjust **Logo width in footer** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `50` to `550` **Default:** `100px` This setting only appears when its related parent option is enabled. Upload or choose an image for **favicon image**. Review the result on both desktop and mobile when media changes are involved. Will be scaled down to 32 x 32px ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Everest Header](/themes/everest/header/header) # Buttons and Inputs Source: https://docs.digifist.com/themes/everest/theme-settings/buttons-and-inputs Configure Everest's global buttons and inputs settings and the shared behavior they control across the store. The Buttons and Inputs settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Buttons and Inputs theme settings overview in Everest ## What these settings control * Headings, text content, and on-page messaging * Layout structure, width, alignment, and spacing * Calls to action, links, and navigation behavior * Color schemes, contrast, and shared visual styling ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Buttons and Inputs** to review and update the shared settings in this category. Buttons and Inputs location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Buttons and Inputs Controls **font**. Keep action labels short so they remain readable across devices. **Default:** `figtree_n6` Adjust **Font size scale** with a slider-based control. Keep action labels short so they remain readable across devices. **Range:** `50` to `200` **Default:** `100%` Choose how **Letter spacing (em)** behaves in the section. Keep action labels short so they remain readable across devices. **Available options:** -0.05, -0.025, 0, 0.025, 0.05. **Default:** `-0.025em` Choose how **Text transform** behaves in the section. Keep action labels short so they remain readable across devices. **Available options:** None, Uppercase, Capitalize. **Default:** `none` Choose how **Button shape** behaves in the section. Keep action labels short so they remain readable across devices. **Available options:** Square, Rounded, Diagonal. **Default:** `rounded` Adjust **Button radius (rem)** with a slider-based control. Keep action labels short so they remain readable across devices. **Range:** `0` to `8` **Default:** `0.8` Adjust **Button border opacity** with a slider-based control. Keep action labels short so they remain readable across devices. **Range:** `0` to `100` **Default:** `100%` Choose how **Icon stroke width** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Light, Medium, Bold. **Default:** `1.5` Choose how **Icon corner shape** behaves in the section. **Available options:** Rounded, Sharp. **Default:** `round` Only for icons with corner option. ## Best practices * Keep labels short and scannable, especially in tighter layouts or utility areas. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Cards Source: https://docs.digifist.com/themes/everest/theme-settings/cards Configure Everest's global cards settings and the shared behavior they control across the store. The Cards settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Cards theme settings overview in Everest ## What these settings control * Headings, text content, and on-page messaging * Images, videos, and other media presentation options * Color schemes, contrast, and shared visual styling ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Cards** to review and update the shared settings in this category. Cards location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Cards Choose how **Card style** behaves in the section. **Available options:** Standard, Card. **Default:** `standard` Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-2` Choose how **Shape** behaves in the section. **Available options:** Square, Rounded, Diagonal. **Default:** `rounded` Enable or disable **Enable card shadow**. **Default:** `enabled` Adds a subtle shadow to cards. Adjust **Corner radius** with a slider-based control. **Range:** `0` to `8` **Default:** `0.8rem` This setting only appears when its related parent option is enabled. Choose how **Media ratio** behaves in the section. It has the strongest effect on layout balance and visual hierarchy. **Available options:** Auto, 3:4, 1:1, 4:5. **Default:** `auto` Choose how **Media padding** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** No, S, M, L, XL. **Default:** `4` Choose how **Content padding** behaves in the section. **Available options:** No, S, M, L. **Default:** `md` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Review media-heavy layouts on both desktop and mobile before publishing. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Cart Source: https://docs.digifist.com/themes/everest/theme-settings/cart Configure Everest's global cart settings and the shared behavior they control across the store. The Cart settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Cart theme settings overview in Everest ## What these settings control * Product, collection, or cart-related storefront behavior * Color schemes, contrast, and shared visual styling ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Cart** to review and update the shared settings in this category. Cart location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Cart Choose how **Cart type** behaves in the section. **Available options:** Drawer, Page, Popup notification. **Default:** `notification` Choose how **Show vendor on** behaves in the section. **Available options:** None, Drawer, Cart page, Both. **Default:** `none` Choose how **Free shipping notification** behaves in the section. **Available options:** None, Drawer, Cart page, Both. **Default:** `both` Enter the content used for **free shipping threshold**. **Default:** `150` Choose how **Cart note** behaves in the section. **Available options:** None, Drawer. **Default:** `none` Use note block for cart page. Choose how **Cart upsell** behaves in the section. **Available options:** None, Drawer. **Default:** `none` Use upsell block for cart page. ### Cart drawer Cart drawer settings in Everest Cart Select the collection source used by **collection**. Visible when cart drawer is empty. Select the color scheme used for **color scheme**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Cart Template](/themes/everest/pages-templates/cart) # Colors Source: https://docs.digifist.com/themes/everest/theme-settings/colors Configure Everest's global colors settings and the shared behavior they control across the store. The Colors settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Colors theme settings overview in Everest ## What these settings control * Color schemes, contrast, and shared visual styling ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Colors** to review and update the shared settings in this category. Colors location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Colors Controls **color schemes**. Use this to keep contrast and branding consistent with the rest of the store. ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Customer Account Source: https://docs.digifist.com/themes/everest/theme-settings/customer-account Configure Everest's global customer account settings and the shared behavior they control across the store. The Customer Account settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Customer Account theme settings overview in Everest ## What these settings control * Layout structure, width, alignment, and spacing ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Customer Account** to review and update the shared settings in this category. Customer Account location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Customer Account Choose how **Section width** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** Page, Fluid. **Default:** `page` Choose how **Top spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Choose how **Bottom spacing** behaves in the section. This setting shapes the section container and how it sits against surrounding content. **Available options:** No, S, M, L, XL. **Default:** `2` Enable or disable **Enable sign in with Shop login**. **Default:** `disabled` ## Best practices * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Customer Accounts](/themes/everest/pages-templates/customer-accounts) # Features Source: https://docs.digifist.com/themes/everest/theme-settings/features Configure Everest's global features settings and the shared behavior they control across the store. The Features settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Features theme settings overview in Everest ## What these settings control * Images, videos, and other media presentation options ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Features** to review and update the shared settings in this category. Features location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Features Choose how **Enable breadcrumbs on** behaves in the section. **Available options:** None, Products, Pages, All. **Default:** `all` Enable or disable **Show currency code**. **Default:** `enabled` ### Performance Performance settings in Everest Features Choose how **Image optimization** behaves in the section. Review the result on both desktop and mobile when media changes are involved. **Available options:** Best detailed, Optimized. **Default:** `true` Optimized option will improve performance and reduce bandwidth usage of your store. Best detailed option will keep the original image quality. Enable or disable **Reveal sections on scroll**. **Default:** `enabled` ## Best practices * Review media-heavy layouts on both desktop and mobile before publishing. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Layout Source: https://docs.digifist.com/themes/everest/theme-settings/layout Configure Everest's global layout settings and the shared behavior they control across the store. The Layout settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Layout theme settings overview in Everest ## What these settings control * Headings, text content, and on-page messaging * Layout structure, width, alignment, and spacing * Color schemes, contrast, and shared visual styling ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Layout** to review and update the shared settings in this category. Layout location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Layout Adjust **Page width** with a slider-based control. It has the strongest effect on layout balance and visual hierarchy. **Range:** `720` to `1920` **Default:** `1440px` Adjust **Section spacing unit size** with a slider-based control. **Range:** `0.2` to `2.4` **Default:** `1.6rem` Affects the spacing between sections. ### Grid Grid settings in Everest Layout Adjust **Grid horizontal gap** with a slider-based control. **Range:** `0.4` to `4.0` **Default:** `0.8rem` Adjust **Grid vertical gap** with a slider-based control. **Range:** `0.4` to `4.0` **Default:** `0.8rem` ### Pages with sidebar Pages with sidebar settings in Everest Layout Enable or disable **Sidebar for pages**. **Default:** `enabled` Sidebar layout will be used for pages like contact, FAQ, about us, etc. Select the color scheme used for **color of page**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-6` Select the color scheme used for **color of page content**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` ### Drawer Drawer settings in Everest Layout Select the color scheme used for **color for drawers**. Use this to keep contrast and branding consistent with the rest of the store. **Default:** `scheme-1` ## Best practices * Check contrast after changing color schemes so text and controls remain easy to read. * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Products Source: https://docs.digifist.com/themes/everest/theme-settings/products Configure Everest's global products settings and the shared behavior they control across the store. The Products settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Products theme settings overview in Everest ## What these settings control * Calls to action, links, and navigation behavior * Product, collection, or cart-related storefront behavior ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Products** to review and update the shared settings in this category. Products location in the Everest theme settings ## Settings ### Product cards Product cards settings in Everest Products Enable or disable **Show product rating**. **Default:** `disabled` Ratings are powered by the [Product Reviews](https://apps.shopify.com/product-reviews) app. Make sure you have the app installed and configured to display ratings. Adjust **Variant options display limit** with a slider-based control. **Range:** `2` to `6` **Default:** `3` Enable or disable **Show product groups**. **Default:** `enabled` To display your product groups, add related metaobject for product groups. Choose how **Quick add** behaves in the section. **Available options:** None, Standard. **Default:** `none` Quick add is only available for products with variants. Bulk is optimized for items purchased in higher quantities. Enable or disable **Enable comparison feature**. Keep action labels short so they remain readable across devices. **Default:** `enabled` Comparison feature is only available for products with 'Product compare fields' metafield. ### Product options Product options settings in Everest Products Enable or disable **Show product swatches**. **Default:** `enabled` Swatches are shown on products when available. ### Product options Product options settings in Everest Products Enter the content used for **metaobject for product groups**. This custom metaobject will be used to display the product groups. Enter the content used for **metaobject for product options type values**. This custom metaobject will be used to display the product options thumbnails. ## Best practices * Keep labels short and scannable, especially in tighter layouts or utility areas. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Search Source: https://docs.digifist.com/themes/everest/theme-settings/search Configure Everest's global search settings and the shared behavior they control across the store. The Search settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Search theme settings overview in Everest ## What these settings control * Product, collection, or cart-related storefront behavior * Search, filter, and sorting behavior for product discovery ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Search** to review and update the shared settings in this category. Search location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Search Enable or disable **Show search in product types**. Make sure the chosen option still feels easy to scan and use on smaller screens. **Default:** `enabled` ### Search suggestions Search suggestions settings in Everest Search Enable or disable **Enable search suggestions**. Make sure the chosen option still feels easy to scan and use on smaller screens. **Default:** `enabled` Enable or disable **Show product vendor**. Make sure the chosen option still feels easy to scan and use on smaller screens. **Default:** `disabled` Visible when search suggestions enabled. Enable or disable **Show product price**. Make sure the chosen option still feels easy to scan and use on smaller screens. **Default:** `disabled` Visible when search suggestions enabled. ## Best practices * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) * [Search Template](/themes/everest/collections/search) # Social Media Source: https://docs.digifist.com/themes/everest/theme-settings/social-media Configure Everest's global social media settings and the shared behavior they control across the store. The Social Media settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Social Media theme settings overview in Everest ## What these settings control * Calls to action, links, and navigation behavior ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Social Media** to review and update the shared settings in this category. Social Media location in the Everest theme settings ## Settings ### Share button Share button settings in Everest Social Media Enable or disable **Share on X (Twitter)**. Keep action labels short so they remain readable across devices. **Default:** `enabled` Enable or disable **Share on WhatsApp**. Keep action labels short so they remain readable across devices. **Default:** `enabled` Enable or disable **Share on Facebook**. Keep action labels short so they remain readable across devices. **Default:** `enabled` Enable or disable **Share on Pinterest**. Keep action labels short so they remain readable across devices. **Default:** `enabled` Enable or disable **Share on LinkedIn**. Keep action labels short so they remain readable across devices. **Default:** `enabled` ### Social accounts Social accounts settings in Everest Social Media Enter the content used for **facebook**. Keep action labels short so they remain readable across devices. Enter the content used for **instagram**. Keep action labels short so they remain readable across devices. Enter the content used for **youtube**. Keep action labels short so they remain readable across devices. Enter the content used for **tiktok**. Keep action labels short so they remain readable across devices. Enter the content used for **x (twitter)**. Keep action labels short so they remain readable across devices. Enter the content used for **linkedin**. Keep action labels short so they remain readable across devices. Enter the content used for **snapchat**. Keep action labels short so they remain readable across devices. Enter the content used for **pinterest**. Keep action labels short so they remain readable across devices. Enter the content used for **tumblr**. Keep action labels short so they remain readable across devices. Enter the content used for **vimeo**. Keep action labels short so they remain readable across devices. ## Best practices * Keep labels short and scannable, especially in tighter layouts or utility areas. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Typography Source: https://docs.digifist.com/themes/everest/theme-settings/typography Configure Everest's global typography settings and the shared behavior they control across the store. The Typography settings control shared theme behavior across Everest. Because these values affect multiple sections and templates at once, they are best used to set global design direction and core storefront behavior before adjusting individual sections. Typography theme settings overview in Everest ## What these settings control * Headings, text content, and on-page messaging ## How to access In Shopify admin, go to **Online Store** -> **Themes** -> **Customize**. Select **Theme settings** in the customizer sidebar. Open **Typography** to review and update the shared settings in this category. Typography location in the Everest theme settings ## Settings ### Settings Settings settings in Everest Typography Choose how **Type scale** behaves in the section. **Available options:** Small, Medium, Large. **Default:** `1.333` ### Heading Heading settings in Everest Typography Controls **font**. **Default:** `figtree_n6` Selecting a different font from system fonts can affect the speed of your store. [Learn more about system fonts.](https://help.shopify.com/manual/online-store/os/store-speed/improving-speed#fonts) Adjust **Font size scale** with a slider-based control. **Range:** `50` to `200` **Default:** `100%` Choose how **Letter spacing (em)** behaves in the section. **Available options:** -0.05, -0.025, 0, 0.025, 0.05. **Default:** `0em` Choose how **Text transform** behaves in the section. **Available options:** None, Uppercase, Capitalize. **Default:** `none` ### Body Body settings in Everest Typography Controls **font**. **Default:** `figtree_n4` Selecting a different font from system fonts can affect the speed of your store. [Learn more about system fonts.](https://help.shopify.com/manual/online-store/os/store-speed/improving-speed#fonts) Adjust **Font size scale** with a slider-based control. **Range:** `100` to `200` **Default:** `100%` Choose how **Letter spacing (em)** behaves in the section. **Available options:** -0.05, -0.025, 0, 0.025, 0.05. **Default:** `0.025em` ## Best practices * Adjust layout changes alongside neighboring sections so page rhythm stays consistent. * Change one global setting area at a time and preview multiple templates before publishing. * Remember that theme settings affect many sections at once, so small adjustments can have wide impact. ## Related guides * [Everest Theme Overview](/themes/everest/index) # Icons Source: https://docs.digifist.com/themes/icons Customize the appearance of icons used throughout your store. All icons and graphical assets in the theme are **DigiFist** property and protected by copyright.\ They may only be used within your store that uses our themes. Any external use, reproduction, or distribution is prohibited. # Welcome to DigiFist Docs Source: https://docs.digifist.com/themes/index Everything you need to set up, customize, and get the most out of your DigiFist theme. Browse the documentation for your theme or explore shared guides on sections, settings, and storefront configuration. ## Themes A modern, clean design that puts your products front and center. A fresh, vibrant design with a focus on imagery and color. A calming, minimalist design that enhances the shopping experience. A versatile, feature-rich design built for stores of any size. ## What's in each theme Every DigiFist theme includes the following out of the box. Purpose-built templates for product, collection, cart, account, blog, and more. A full library of drag-and-drop sections for any page in your store. Global controls for colors, typography, buttons, layout, and behavior. Product badges, product groups, pre-order support, and gift card branding. ## Need help? See what's new in the latest Release updates. See what's new in the latest Sahara updates. See what's new in the latest Mojave updates. # Changelog Source: https://docs.digifist.com/themes/mojave/changelog Stay updated with the latest changes, improvements and fixes in the theme. Comprehensive documentation restructuring and quality improvements completed. ### Documentation Restructuring * Reorganized 62 documentation files into logical folder structure. * Created dedicated folders: header/, footer/, products/, collections/, pages-templates/, sections/. * Moved customer templates to pages-templates/customers/ subfolder. * Updated 35+ internal cross-reference links to reflect new file locations. ### Documentation Improvements * Updated all terminology to consistently use "Theme Customizer" instead of "theme editor". * Fixed "Best practices" capitalization across 28 documentation files. * Improved content structure consistency across all sections. * Enhanced navigation and discoverability with organized folder structure. ### Files Restructured * 17 files renamed to remove "main-" prefix. * 2 files renamed to remove "section-" prefix. * All files moved to appropriate category folders. * Zero broken links after restructuring. In this release, we’ve added the new preset structure to support new theme store experience. In this release, we made improvements, and fixed bugs to enhance the user experience of the Mojave Theme. ### Features * Added new Content tiles section. * Added PDP Product rating block feature. * Added thumbnails option to PDP gallery pagination style on mobile. * Added link style option for hero banner section. * Added back in stock feature support. * Added Sign in with Shop button to the login page. * Added decoration line option for hero banner section. * Added option to select video from library in video section. ### Improvements * Theme settings title and description improvements for a better user experience. * Improvements have been made to ensure that breadcrumbs provide SEO support. * Design improvements have been made to the PDP. * Design improvements have been made to the PLP. * Design improvements have been made to the product card swatches. * Design improvements have been made to the Marquees section. * Design improvements have been made to the Trust indicators section. * Design improvements have been made to the Promotional collections section. * Design improvements have been made to the Press section. * Design improvements have been made to the Testimonials section. * Improvements have been made for Newsletter modal in theme customizer. ### Fixes * The issue with unavailable products in PDP variant selection has been fixed. * Resolved script errors on the PDP. * PDP vertical thumbs spacing issue has been fixed. * PDP variant picker arrows visibility issue has been fixed. * Login form not being centered issue has been fixed. # Collection list page (CLP) Source: https://docs.digifist.com/themes/mojave/collections/collection-list-page Collections directory page (list.collections) displaying all or selected store collections ## What It Does The **Collections List** section displays on your `/collections` page (Collections List template), showing an organized grid of all your store's collections or a curated selection. Each collection displays as a card with image, title, and product count, allowing customers to browse your catalog by category. Configure page title, choose to show all collections or hand-picked selections, set pagination, and customize collection cards with overrides for specific images or titles. This is a **template section** (appears on `/collections` page only - Collections List template). Not available as a regular section on other pages. Configure in Theme Customizer → Collections List page template. ## Getting Started Visit `yourstore.myshopify.com/collections` to see your collections directory. This page auto-generates from Shopify collections. In Theme Customizer → Collections List template → Set title (default "Collections"). This appears as page heading. Select "Show all collections" or "Show selected collections". If selected, add Collection blocks for curated list. Set "Collections per page" (default 12). For stores with many collections (50+), pagination improves page load. ## Settings **Type:** Text input\ **Default:** "Collections"\ **Translatable:** Yes (uses locale file default "Collections") Sets the page heading displayed at top of collections list page. ### How It Displays * Large heading text (H1) at top of page * Typically styled as page title (40-60px font size) * Appears above collection cards grid ### Customizing Title **Default "Collections":** * Generic, functional, clear * Works for most stores * Translates automatically in multi-language stores **Custom titles:** * "Shop by Category" - More descriptive, guides browsing * "Explore Collections" - Action-oriented, engaging * "Browse Our Catalog" - Formal, traditional * "Shop All" - Minimal, direct * Brand-specific terms (e.g., "Women's Categories," "Product Lines") ### Choosing a Title **Use "Collections" when:** * Standard e-commerce terminology sufficient * Customers familiar with "collections" concept * Simple, direct language preferred **Use custom title when:** * Target audience unfamiliar with "collections" (may prefer "Categories") * Brand voice is specific (playful, formal, technical) * Want action-oriented language ("Explore," "Discover") * Multi-brand store (e.g., "Shop Brands" if collections are brands) ### SEO Considerations **H1 heading:** * Title becomes H1 heading (most important heading for SEO) * Should describe page purpose clearly * "Collections" or "Shop by Category" both SEO-friendly **Keywords:** * Include target keywords if natural (e.g., "Women's Fashion Collections") * Avoid keyword stuffing ("Cheap Products Collections Sale") * Keep concise (3-5 words ideal) ### Best Practices **Concise:** * Keep to 1-4 words (long titles crowd page) * "Collections" (1 word) - minimal * "Shop by Category" (3 words) - descriptive * "Explore Our Fashion Collections" (4 words) - max length **Descriptive:** * Should communicate page purpose * Visitor should know this is collections/category directory **Consistent:** * Match terminology used elsewhere in site * If main nav says "Categories," use "Categories" here (not "Collections") **Translatable:** * If multi-language store, keep default "Collections" (auto-translates via locale files) * Or edit translations in theme's locale files for each language **Recommendation:** Use default "Collections" for most stores. Change to "Shop by Category" if customers unfamiliar with collections terminology, or "Explore \[Your Brand]" for brand-specific messaging. **Type:** Radio select\ **Options:** Show all collections, Show selected collections\ **Default:** Show all collections Controls whether page displays all store collections automatically or only hand-picked collections via blocks. ### Show All Collections (Default) **How it works:** * Automatically displays every collection in your Shopify store * Collections pulled from Shopify Admin → Products → Collections * Order determined by Shopify settings or theme logic (often alphabetical) * No manual collection selection needed **Pros:** * Zero maintenance—new collections auto-appear * Comprehensive—customers see all available categories * Fast setup—no need to add collection blocks **Cons:** * No control over order (automatic sorting) * Displays ALL collections (including hidden/test collections if published) * Can't exclude specific collections **Best for:** * Stores with organized collection structure (all collections customer-facing) * 5-30 collections (manageable number for auto-display) * Low-maintenance preference (don't want to manually curate) ### Show Selected Collections **How it works:** * Only displays collections added via "Collection" blocks (see Blocks tab) * Must manually add Collection block for each collection to show * Control exact order by reordering blocks * Can display same collection multiple times (if needed for different images/titles) **Pros:** * Full control over which collections appear * Custom order (drag-and-drop blocks to reorder) * Exclude collections (e.g., hidden categories, staff-only, test collections) * Override collection images/titles per-card **Cons:** * Manual maintenance—must add new collections as blocks * More setup time (especially for stores with many collections) * Forgetting to add new collections means customers don't see them **Best for:** * Curated experience (only show primary collections) * Specific collection order important (e.g., Women → Men → Kids, not alphabetical) * Need to hide certain collections (Sale, Staff Picks, etc.) * Want custom images/titles different from Shopify Admin defaults ### Examples **Example 1: Auto-display (Show all)** * Store has 12 collections, all customer-facing * All collections have good featured images, clear titles * Order doesn't matter (alphabetical fine) * **Setting:** "Show all collections" (automatic,zero maintenance) **Example 2: Curated display (Show selected)** * Store has 20 collections, but 5 are internal/test * Want specific order: Best Sellers → New Arrivals → Seasonal → Men → Women → Kids * **Setting:** "Show selected collections", add 15 Collection blocks in desired order **Example 3: Custom imagery (Show selected)** * Collections have generic featured images in Admin (created by staff) * Want professional branded imagery for collections page * **Setting:** "Show selected collections", add Collection blocks with custom images ### Switching Between Options **Moving from All to Selected:** 1. Change setting to "Show selected collections" 2. Add Collection block for each collection you want to display 3. Reorder blocks to desired sequence 4. Optionally add custom images/titles **Moving from Selected to All:** 1. Change setting to "Show all collections" 2. Collection blocks become inactive (not deleted, just not used) 3. All collections auto-display ### Best Practices **Use "Show all" when:** * All collections are customer-ready (published, good images, clear naming) * Collection count is reasonable (5-30) * You want hands-off management **Use "Show selected" when:** * Have hidden/internal collections to exclude * Specific order is critical (brand hierarchy, seasonal priority) * Need different imagery than Shopify Admin featured images * Collection count very large (50+) and want to feature top categories **Hybrid approach:** * Use "Show all" initially (get site launched quickly) * Switch to "Show selected" later when ready to curate experience **Recommendation:** Use "Show all collections" (default) for straightforward stores with clean collection structure. Use "Show selected collections" for curated experiences or when collection order matters. **Type:** Number input\ **Default:** 12\ **Info:** "Collections will be divided to pages by pagination" Sets how many collection cards display per page before pagination kicks in. ### How Pagination Works **If you have 50 collections and set "Collections per page" to 12:** * **Page 1:** Collections 1-12 * **Page 2:** Collections 13-24 * **Page 3:** Collections 25-36 * **Page 4:** Collections 37-48 * **Page 5:** Collections 49-50 * Pagination links below grid: `< 1 2 3 4 5 >` **If you have 8 collections and set to 12:** * All 8 collections display on one page * No pagination links (unnecessary) ### Choosing Collections Per Page **Small number (8-12):** ← **Default: 12** * **Pro:** Fast page load (fewer images) * **Pro:** Less scrolling (easier to browse) * **Con:** More pagination clicks to see all collections * **Best for:** Stores with 20+ collections, slower internet users, mobile-first **Medium number (16-24):** * **Pro:** Balance browsing vs loading * **Pro:** 2-3 rows of collections visible without scrolling (desktop) * **Con:** Moderate page load (more images) * **Best for:** Stores with 30-60 collections, desktop-heavy traffic **Large number (30+):** * **Pro:** Minimal pagination (maybe 2 pages total) * **Pro:** All or most collections visible on single page * **Con:** Slow page load (many images loading at once) * **Con:** Long scrolling (overwhelming on mobile) * **Best for:** Stores with 30-50 collections max, fast hosting, desktop-only **No pagination (100+):** * **Pro:** All collections on one page (no pagination) * **Con:** Very slow load for stores with 50+ collections * **Risk:** Page timeout, poor UX * **Best for:** ONLY stores with \<20 collections (pagination unnecessary) ### Performance Considerations **Image loading:** * Each collection card loads featured image * 12 collections = 12 images loading * 50 collections = 50 images loading (can be slow) **Recommendation by collection count:** * **5-15 collections:** 12-24 per page (all fit on 1 page or 2 pages max) * **15-30 collections:** 12-16 per page (2-3 pages) * **30-60 collections:** 12 per page (5 pages, manageable) * **60+ collections:** 12 per page (consider if you need this many customer-facing collections) ### Mobile Considerations **Mobile scrolling:** * Mobile displays 1-2 collection cards per row (vs 3-4 on desktop) * 12 collections = 6-12 rows of scrolling on mobile * 24 collections = 12-24 rows (too much scrolling) **Mobile recommendation:** * Keep pagination at 12 or less if mobile-heavy audience * Customers comfortable with pagination links ("Next" button) ### SEO Implications **Pagination:** * Each pagination page has unique URL (e.g., `/collections?page=2`) * Search engines crawl pagination pages * Not a negative SEO factor (standard e-commerce pattern) **Load time:** * Faster page load (fewer collections per page) improves SEO * Google favors fast-loading pages * Balance UX (fewer clicks) vs speed (fewer images) ### Best Practices **Test your store:** 1. Count your collections (Shopify Admin → Products → Collections) 2. Set to 12 (default) 3. Preview collections page 4. Check page load speed (Google PageSpeed Insights) 5. **If fast & many collections:** Increase to 16 or 24 6. **If slow:** Keep at 12 or reduce to 8 **Future-proofing:** * If you have 10 collections now but plan to grow to 50+, set to 12 (room to grow) * If you have 8 collections and don't plan to add many, set to 24 (all on one page now and later) **User experience:** * Most users comfortable with 2-3 clicks to browse all collections * Page 1 should showcase primary/popular collections * Avoid forcing users through 10+ pages (set higher pagination if this happens) **Recommendation:** Use 12 (default) for most stores. Adjust to 8-10 for mobile-heavy stores or 16-24 for desktop-heavy stores with strong hosting. Never exceed number of total collections (avoid unnecessary pagination). **Type:** Select dropdown\ **Options:** Page width (container--default), Narrow (container--md), Full-width (container--fullwidth)\ **Default:** Page width (container--default) Controls the maximum width of the collections grid container. ### Width Options **Page Width (Default - container--default):** * **Width:** \~1200-1400px max (typical theme page width) * **Best for:** Most stores, balanced layout * **Appearance:** Collection grid centered with moderate side margins * **Cards per row (desktop):** 3-4 collection cards **Narrow (container--md):** * **Width:** \~900-1000px max (narrower than page width) * **Best for:** Minimal aesthetic, few collections * **Appearance:** Tighter grid, larger margins, more whitespace * **Cards per row (desktop):** 2-3 collection cards **Full-Width (container--fullwidth):** * **Width:** Edge-to-edge (100% browser width minus small padding) * **Best for:** Many collections, visual/image-focused brands * **Appearance:** Collections span nearly entire screen width * **Cards per row (desktop):** 4-5+ collection cards (depends on screen size) ### Choosing Section Width **Page Width when:** (Recommended default) * Standard e-commerce layout * 10-30 collections (3-4 cards per row is comfortable) * Balanced, professional appearance **Narrow when:** * Few collections (5-10) - narrower grid prevents excessive whitespace * Minimal brand aesthetic (lots of whitespace, breathing room) * Collection images are detailed (larger cards when fewer per row) * Mobile-first design (narrow desktop grid closer to mobile experience) **Full-Width when:** * Many collections (30+) - more cards per row reduces scrolling * Image-heavy brand (fashion, photography) - showcase large collection images * Modern, gallery-style layout * Desktop-heavy traffic (utilize wide screens) ### Visual Comparison **Narrow (2-3 cards per row):** ``` [ Collection ] [ Collection ] [ Collection ] [ Collection ] ``` Large cards, lots of whitespace **Page Width (3-4 cards per row):** ``` [ Collection ] [ Collection ] [ Collection ] [ Collection ] [ Collection ] [ Collection ] ``` Balanced, standard grid **Full-Width (4-5 cards per row):** ``` [Collection] [Collection] [Collection] [Collection] [Collection] [Collection] [Collection] [Collection] [Collection] [Collection] ``` Many cards, edge-to-edge ### Mobile Behavior **All widths behave similarly on mobile:** * Mobile typically displays 1-2 collection cards per row * Width settings primarily affect desktop/tablet (>768px) * Full-width may have slightly less side padding on mobile ### Best Practices **Consider collection count:** * Few collections: Narrow (prevents cards stretching too wide) * Many collections: Page Width or Full-Width (more cards visible) **Match site aesthetic:** * Check other pages' section widths * Consistent width across pages feels cohesive * If homepage uses page width, collections page should too **Test on large screens:** * Full-width can look sparse on 27"+ monitors (cards very small) * Page Width maintains comfortable card size on large screens * Narrow may look awkwardly tight on wide screens (excess whitespace on sides) **Image quality:** * Full-width requires high-res collection images (cards display larger) * Narrow can get away with lower-res images (cards smaller) **Recommendation:** Use Page Width (default) for most stores. Switch to Narrow for minimal aesthetic or \<10 collections. Use Full-Width for image-focused brands with many collections (30+). **Block Type:** Collection\ **Limit:** 50 blocks max\ **Required when:** "Show selected collections" enabled (otherwise blocks inactive) Add individual collection cards to display on collections list page. Each block represents one collection card. ### When to Use **Blocks only active when:** * Section setting "Collections to show" set to "Show selected collections" * If set to "Show all collections," blocks are ignored **Use Collection blocks to:** * Manually curate which collections appear * Control exact order of collections * Override collection featured images (custom imagery per card) * Override collection titles (custom names per card) ### Block Settings **Collection (Collection picker - Required)** * Select which collection this block represents * Dropdown shows all collections from Shopify Admin * Must select a collection (required field) **Image (Image picker - Optional)** * Override collection's featured image (from Shopify Admin) * If blank: Uses collection's default featured image from Admin * If uploaded: Uses custom image instead for this card only * **Use when:** Collection featured image unsuitable for collections page (wrong aspect ratio, poor quality, off-brand) **Title (Text input - Optional)** * Override collection's title (from Shopify Admin) * If blank: Uses collection's default title from Admin * If filled: Displays custom title for this card only * **Use when:** Collection title in Admin is technical/long, want shorter/different title for display ### Adding Collection Blocks **Steps:** 1. Set "Collections to show" to "Show selected collections" 2. Click "Add Collection" block button 3. Select collection from dropdown 4. Optionally upload custom image (override featured image) 5. Optionally enter custom title (override collection title) 6. Repeat for each collection you want to display 7. Drag-and-drop blocks to reorder ### Use Cases for Image Override **Scenario 1: Featured image wrong aspect ratio** * Collection featured image in Admin is 1200x600px (wide rectangle) * Collections page cards are square (crops awkwardly) * **Solution:** Upload square 800x800px image in block (override) **Scenario 2: Consistent aesthetic** * Collections have varied featured images (some lifestyle, some product shots, some text graphics) * Want uniform style for collections page (all lifestyle images) * **Solution:** Upload consistent lifestyle images for each block **Scenario 3: Branded imagery** * Admin featured images are generic product grids (created quickly during setup) * Ready to upgrade to professional branded photography * **Solution:** Upload branded images in blocks without changing Admin images (Admin images still used elsewhere) ### Use Cases for Title Override **Scenario 1: Long collection titles** * Collection title in Admin: "Spring 2024 Limited Edition Women's Apparel" * **Card title override:** "Spring 2024 Limited" (shorter, fits card better) **Scenario 2: Technical titles** * Collection title in Admin: "CAT-MENS-CASUAL-SHIRTS" (technical, for internal use) * **Card title override:** "Men's Casual Shirts" (customer-friendly) **Scenario 3: Multilingual** * Collection title in Admin in English, but theme locale file doesn't translate * **Card title override:** Manually enter translated title for non-English stores ### Best Practices **Block order:** * Drag-and-drop to reorder blocks (top block = first card on page) * Strategic ordering: Best Sellers → New Arrivals → Seasonal → Evergreen categories * Most important collections first (above the fold) **Image consistency:** * If overriding images, override for ALL collections (consistent style) * Mixing default Admin images + custom overrides looks inconsistent * Use same aspect ratio for all images (all square or all 3:2 ratio) **Title length:** * Keep titles under 30 characters (long titles wrap awkwardly on cards) * Test on mobile (titles truncate on small screens) **Don't duplicate:** * Don't add same collection twice unless intentional (e.g., different images for sub-categories) * Duplicates confuse customers **Max 50 blocks:** * Theme limits blocks to 50 (performance) * If you have 50+ collections, use "Show all collections" instead (no limit) **Recommendation:** Add Collection blocks ONLY when using "Show selected collections." Use image overrides for consistent aesthetic, use title overrides for customer-friendly display names. ## Best practices Use "Show all collections" (default) for low-maintenance, comprehensive display. Switch to "Show selected" only when curation or custom order required. Keep pagination at 12 collections (default) for fast page load and mobile-friendly scrolling. Increase to 16-24 only for desktop-heavy stores. If using "Show selected," order blocks strategically: Best Sellers → New Arrivals → Seasonal → Core categories. First 12 most important (page 1). Ensure all collection featured images have same aspect ratio (square recommended). Inconsistent aspect ratios create uneven grid. Use concise, customer-friendly titles (under 30 characters). "Women's Shoes" better than "WOMENS-SHOES-SPRING-2024-CLEARANCE". Preview collections page on mobile—grid becomes 1-2 cards per row. Ensure images clear, titles readable, pagination easily tappable. Use "Show selected collections" to exclude internal/test collections. Customers shouldn't see "Staff Picks" or "DO NOT DELETE" collections. Use "Page width" section width (default) for balanced layout. Narrow for minimal aesthetic, Full-width for many collections (30+). ## Common Use Cases ### Auto-Display All Collections **Settings:** Title "Collections", Show all collections, 12 per page, Page width **Setup:** Zero-maintenance collections directory. All collections auto-appear, alphabetical order, pagination for stores with 20+ collections. **Best for:** Standard stores with organized collection structure, 10-40 collections ### Curated Collections Showcase **Settings:** Title "Shop by Category", Show selected collections, 16 per page, Page width **Setup:** Hand-picked 15 primary collections in strategic order (exclude internal collections). Custom order: Women → Men → Kids → Accessories. **Best for:** Stores with many collections but want to highlight primary categories ### Minimal Collection Grid **Settings:** Title "Collections", Show all collections, 12 per page, Narrow width **Setup:** Small store with 8 collections, narrow grid creates elegant spacing, all collections fit on one page. **Best for:** Boutique stores, few collections (\<10), minimal aesthetic ### Visual Fashion Gallery **Settings:** Title "Explore", Show selected collections, 24 per page, Full-width **Setup:** 30 fashion collections with professional imagery, full-width grid showcases images, 24 per page for comprehensive view. **Best for:** Fashion brands, image-focused, many collections (30+) ### Custom Branded Directory **Settings:** Title "Shop Our Brands", Show selected collections, 12 per page, Page width, Image overrides on all blocks **Setup:** Collections represent brands, upload custom brand logo images (override featured images), display as branded directory. **Best for:** Multi-brand retailers, collections organized by brand ## Layout Behavior ### Desktop Layout **Collection cards grid:** * **Page Width:** 3-4 cards per row (1200-1400px container) * **Narrow:** 2-3 cards per row (900-1000px container) * **Full-Width:** 4-5+ cards per row (edge-to-edge) **Card contents:** * Collection featured image (square or 3:2 ratio typical) * Collection title below image * Product count (e.g., "24 products") below title **Pagination:** * Displays below grid if total collections exceeds "Collections per page" setting * Links: `< 1 2 3 4 ... 10 >` ### Mobile Layout **Responsive behavior:** * Mobile (\< 768px): 1-2 cards per row (usually 1 on narrow screens, 2 on wide phones) * Section width setting minimally affects mobile (cards span nearly full width) * Vertical scrolling (pagination links below grid) **Card sizing:** * Cards larger on mobile (fewer per row = more screen space per card) * Images remain clear (not too small) ### Empty State **If no collections:** * Page displays title but no cards * (Shopify requires at least 1 collection, so empty state rare) **If all collections hidden:** * "Show selected collections" with no blocks added * Page shows title, no cards (add Collection blocks to fix) ## Related Sections * **[Collection Banner (Template)](/themes/mojave/sections/main-collection-banner)** - Hero banner on individual collection pages * **[Featured Collections Links](/themes/mojave/featured-collections-links)** - Collection grid for homepage * **[Featured Collection](/themes/mojave/featured-collection)** - Single collection products showcase * **[Collection Product Grid (Template)](/themes/mojave/collections/collection-page)** - Product grid within collection pages ## Technical Notes ### Collections Source **Shopify Admin collections:** * Products → Collections → All collections listed here * Collections List page pulls from this source * **Published collections only:** Unpublished collections don't appear (even in "Show all" mode) **Collection visibility:** * Check collection settings in Admin → Collection → Sales channels * Must be published to "Online Store" channel to appear ### Collection Cards Data **Each card displays:** * **Image:** Collection featured image (Admin → Collection → Featured image), or block override * **Title:** Collection title (Admin → Collection → Title), or block override * **Product count:** Auto-calculated (e.g., "15 products") * **Link:** Clicks go to collection page (`/collections/collection-handle`) ### Pagination Logic **URL structure:** * Page 1: `/collections` (no query param) * Page 2: `/collections?page=2` * Page 3: `/collections?page=3` **SEO:** * Pagination query params are SEO-friendly (Google crawls paginated pages) * Each page has unique URL, indexed separately ### Dynamic Collection Count **"Show all collections" mode:** * If you add new collection in Shopify Admin, it auto-appears on page * If you delete collection, it auto-disappears * Zero maintenance (dynamic) **"Show selected collections" mode:** * Must manually add Collection block for new collections * Deleted collections show error in block (remove block) * Requires maintenance ### Performance **Image loading:** * Collection featured images lazy load (below fold cards load as scrolling) * First 12 cards load immediately, rest on-demand * Shopify CDN auto-optimizes images (WebP format for supported browsers) **Pagination improves performance:** * 12 collections per page = 12 images loading * vs 60 collections on one page = 60 images (much slower) ### Accessibility **Keyboard navigation:** * Tab through collection cards (each card focusable link) * Enter on card navigates to collection page * Pagination links keyboard-accessible **Screen reader:** * Each card announces: "Collection name, Link, X products" * Images have alt text (collection title as alt) **Color contrast:** * Text overlays on images should have sufficient contrast * Theme typically adds semi-transparent overlay to images for readability ## Troubleshooting **Collections not showing:** * Check "Collections to show" setting—if "Show selected," must add Collection blocks * Verify collections published: Admin → Collection → Sales channels → Online Store enabled * Check collection visibility (some themes have hidden collection feature) **Wrong collections displaying:** * If "Show all collections" enabled, shows ALL published collections (check Admin for unwanted collections) * Switch to "Show selected collections" to exclude specific collections **Collection images missing:** * Add featured images in Admin: Products → Collections → \[Collection] → Featured image * If using "Show selected" with image overrides, verify images uploaded in blocks * Check browser console for image load errors **Pagination not working:** * Check "Collections per page" setting—if set higher than total collections, no pagination * Example: 8 collections with 12 per page = no pagination (fits on 1 page) * Reduce "Collections per page" to see pagination (e.g., set to 4 for 8 collections = 2 pages) **Collection order wrong:** * "Show all collections" orders alphabetically or by Shopify sort (no custom order) * Use "Show selected collections" for custom order (drag-and-drop blocks) **Custom images not applying:** * Verify "Show selected collections" enabled (image overrides only work in blocks) * Check image uploaded in Collection block (not just in Admin) * Hard refresh browser (Cmd/Ctrl+Shift+R) to clear cache **Custom titles not applying:** * Same as images—only works in "Show selected collections" mode with blocks * Verify title entered in block's "Title" field * Check for trailing spaces (extra spaces may cause issues) **Page load slow:** * Too many collections per page (reduce "Collections per page" to 12) * Collection images too large (compress images to under 300KB before upload in Admin) * Check Shopify status (hosting issues rare but possible) **Mobile grid looks broken:** * Test on actual mobile device (not just browser resize—may render differently) * Check collection image aspect ratios (all should be consistent) * Clear mobile browser cache **Collections page blank:** * Verify in Theme Customizer → Templates → Collections List that section is enabled * Check if section accidentally deleted (re-add from section library) * Preview specific collection URL (not `/collections`) to verify collections exist **Product count incorrect:** * Product count auto-calculated by Shopify (# of published products in collection) * If wrong, check collection products in Admin (may have unpublished products) * Count only includes products published to Online Store channel **Blocks not reordering:** * Drag-and-drop by clicking block name/handle (not settings area) * Ensure "Show selected collections" enabled (blocks inactive otherwise) * Save changes, hard refresh browser to see new order # Collection Page (PLP) Source: https://docs.digifist.com/themes/mojave/collections/collection-page Configure your collection page product grid with flexible layouts, filtering, and sorting options The Product grid template (main-collection-product-grid) controls how products display on collection pages. It provides customization for grid layout, filtering options, and sorting controls to help customers browse and find products efficiently. Collection page product grid overview ## What this section controls * Products per row on mobile and desktop * Products per page before pagination * Product filtering controls * Sorting dropdown options * Filter layout (horizontal bar vs. sidebar) * Filter button styling ## Getting started In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. Use the page selector dropdown at the top center to select **Collections** and choose any collection to preview. The "Product grid" section controls the main collection template. Additional sections (like collection banner) can be added above it. Product grid section location ## Filter layout options Choose how filtering controls display on desktop: Filters appear in a horizontal bar above the product grid, with full-width products below. **Characteristics**: * Compact filtering interface * Maximizes product grid width * Filter style setting (square/round) applies to buttons * Modern, streamlined appearance **Best for**: Stores with fewer filter options, clean minimal designs, or when product visibility is priority. Filters display in a left sidebar with products to the right. **Characteristics**: * Traditional e-commerce layout * Dedicated space for extensive filters * Filter style setting doesn't apply (sidebar has fixed styling) * Always visible filtering options **Best for**: Stores with many filter options, detailed categorization needs, or customers who expect traditional layouts. **Note**: On mobile devices, filters always use a vertical layout regardless of desktop setting. ## Template settings Control how many products display side-by-side on mobile devices: * **1 product**: Single column, vertical scrolling - Emphasizes each product with large images * **2 products** (default): Two columns - Balances product size with browsing efficiency **Recommendation**: Keep default 2-column layout for most stores. Use 1-column only for products requiring detailed image viewing (art, complex items). Control desktop grid columns: * **2 products**: Large product cards, maximum image size * **3 products**: Balanced layout with good visibility * **4 products** (default): Standard e-commerce grid, efficient browsing **Selection guidance**: * **2 columns**: Image-focused stores (art, photography, luxury goods) * **3 columns**: Balanced approach for most product types * **4 columns**: Efficient browsing, standard for apparel/accessories * Consider 5-column option if you have many SKUs (requires custom CSS) Set how many products display before pagination loads more (2-50 products, default: 12). **Sizing recommendations**: * **8-16 products**: Standard range, balances page load with browsing * **24-36 products**: Power users, reduces pagination clicks * **50 products**: Maximum, may slow page load on slower connections **Tips**: * Keep default 12 for most stores * Increase for collections with extensive filtering (reduces filter re-application) * Consider page load speed - more products = slower initial load * Popular numbers: 12, 16, 20, 24 (divisible by common column counts) Show/hide product filtering controls. Enabled by default. **When enabled**: Customers can filter by availability, price, product type, vendor, tags, and custom metafields configured in the Search & Discovery app. **When to disable**: * Small collections where filtering isn't needed * Curated collections where you want to control product order * Landing pages with specific product selections **Configure filters**: Manage filter options in **Shopify Admin → Search & Discovery app → Filters**. You can customize which filters appear, their order, and filter types (checkboxes, price range, etc.). Show/hide the sorting dropdown. Enabled by default. **Available sort options** (standard Shopify): * Featured (manual collection order) * Best Selling * Alphabetical: A-Z * Alphabetical: Z-A * Price: Low to High * Price: High to Low * Date: Newest to Oldest * Date: Oldest to Newest **When to disable**: * You want complete control over product order (featured only) * Small curated collections where sorting doesn't add value * Product order is part of your storytelling/merchandising Control filter layout on desktop devices. Disabled by default (uses horizontal bar). **Disabled (horizontal bar)**: * Filters in compact horizontal bar above products * Full-width product grid * Modern, clean appearance * Filter style (square/round) setting applies **Enabled (sidebar)**: * Filters in dedicated left sidebar * Product grid uses remaining width * Traditional e-commerce layout * More space for extensive filter options * Filter style setting doesn't apply Choose based on number of filters and store aesthetic preferences. Choose visual style for filter buttons when horizontal bar is active. Doesn't apply to sidebar layout. * **Square** (default): Clean, modern rectangular buttons * **Round**: Softer, rounded button edges **Effect**: Only visible when "Show in sidebar on desktop" is disabled (horizontal bar mode). Match filter style to your overall design system - square for modern/minimalist themes, round for softer/friendly aesthetics. ## Configuring filters Product filters are managed through Shopify's **Search & Discovery** app, not in the Theme Customizer. In Shopify admin, go to **Apps → Search & Discovery** (or install if not present). Click on **Filters** in the left sidebar. * Add/remove filter options (price, availability, product type, vendor, tags, metafields) * Reorder filters by dragging * Configure filter types (checkbox, swatch, price range) * Set filter labels and display names Save changes and test on your storefront collection pages. Available filter types: * **Availability**: In stock / Out of stock * **Price**: Range slider or preset ranges * **Product type**: Automatically from product types * **Vendor**: Filter by brand/manufacturer * **Tags**: Product tags as filters * **Metafields**: Custom product properties (color swatches, materials, etc.) ## Best practices Use 4 columns on desktop for standard browsing efficiency. Consider 3 columns for products requiring larger images (jewelry, art) or 2 columns for luxury/high-detail items. Keep at 12-24 products for best performance. Higher values reduce clicks but slow page load. Test with your target audience's connection speed. Most customers expect both options. Only disable when you have strong merchandising reasons to control the exact product order. Use horizontal bar for smaller stores (5-10 filter options). Use sidebar for extensive filtering needs (15+ options) or traditional customer expectations. In Search & Discovery, enable only relevant filters. Too many filters overwhelm customers. Focus on filters that genuinely help narrow choices (size, color, price). Test 2-column mobile layout across devices. Single column rarely adds value unless products require extremely detailed views. Use numbers divisible by your column count (12 for 3-4 columns, 16 for 4 columns, 18 for 3 columns) for balanced final rows. Square filters suit modern/minimalist themes, round filters suit friendly/approachable brands. Maintain consistency with button styles elsewhere. Use "Featured" sort (manual collection order) to highlight seasonal items, bestsellers, or high-margin products at the top of collections. Track which filters customers use most (via analytics). Remove unused filters to reduce interface complexity and improve experience. # Search Template (main-search) Source: https://docs.digifist.com/themes/mojave/collections/search Configure your search results page with product grid, blog results, and page results display options The Search template (main-search) controls how search results display, combining products, blog articles, and pages with filtering and customizable metadata display. Search results page overview ## What this section controls * Product grid layout and density * Product filtering and sorting * Blog article result display with metadata * Page result display options * Results per page pagination * Label and tag display for mixed results ## Getting started In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. Use the page selector dropdown to select **Search** or perform a search on your live site. The "Search" section controls the search results template. ## Template settings Control product grid columns on mobile (1-2 products, default: 2). Same as collection page - 2 columns recommended for balanced browsing. Control product grid columns on desktop (2-4 products, default: 4). 4 columns maintains consistency with collection pages and efficient browsing. Total items (products + articles + pages) before pagination (4-48 items, default: 24). **Note**: Mixed result types - 24 items might be 20 products, 3 articles, 1 page. Shows product filtering controls (enabled by default). Filters managed through Search & Discovery app. **Mixed results behavior**: Filters only apply to products, not blog articles or pages. Shows sorting dropdown for products (enabled by default). Standard sort options apply. **Note**: Sorting affects product results only. Moves filters to sidebar on desktop (disabled by default - uses horizontal bar). Same options as collection page. Square or round filter buttons (default: square). Only applies to horizontal bar layout. Controls label display for blog articles in search results: * **Show blog post label** (default): Displays "Blog post" badge * **Show tags**: Displays article tags instead * **Show none**: No labels Helps distinguish blog articles from products and pages in mixed results. When showing tags: * **Show all** (default): All article tags * **Show first**: First tag only Display article preview text (disabled by default). Helps users decide relevance. Display article publish date (enabled by default). Display article author name (enabled by default). Display "Page" badge on page results (enabled by default). Distinguishes standard pages from products and articles. Display page content preview (disabled by default). Enable to help users identify relevant pages quickly. Display "Read more" link on pages (enabled by default). Provides explicit call-to-action for page results. ## Search result types The search template displays three types of results in mixed format: **Products**: Displayed in grid matching collection pages, with images and purchase options. **Blog articles**: Card format with optional metadata (date, author, excerpt, tags). **Pages**: Simple list format with title, optional excerpt, and "Read more" link. **Result ordering**: Shopify's search algorithm determines relevance and ranking across all result types. ## Best practices Show "Blog post" and "Page" labels to help users distinguish different content types in mixed results. Turn on blog excerpt display - helps users quickly determine article relevance from search results. Use same product grid settings (4 columns, filtering, sorting) as collection pages for consistency. Keep date and author enabled for blog results - provides context about content freshness and source. Consider enabling page excerpts if you have many pages - helps users identify right page in results. Search for terms that return products, articles, and pages to ensure all result types display correctly. 24 items balances browsing with performance. Adjust if users frequently paginate or complain about slow loading. Use Search & Discovery app to customize which product filters appear on search results. # Footer Source: https://docs.digifist.com/themes/mojave/footer/footer Build a comprehensive site footer with navigation, social links, payment icons, and localization options The Footer section appears at the bottom of every page on your store, providing essential navigation links, brand information, social media connections, and trust signals like payment icons. It supports up to 3 content blocks with flexible layout options. Footer overview ## What this section controls * Footer navigation menus with organized columns * Brand logo and descriptive content * Social media icon links * Copyright information and legal links * Payment method icons * Language and currency selectors * Follow on Shop integration * Two visual style variations ## Getting started In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. The Footer section is located at the bottom of your site and remains consistent across all pages. Footer location in Theme Customizer ## Footer styles Choose between two visual style variations: Standard footer layout with traditional styling and expanded localization controls. **Characteristics**: * Full-size localization selectors * Classic visual hierarchy * Standard spacing and typography Alternative footer layout with compact styling and streamlined appearance. **Characteristics**: * Compact localization selectors * Modified visual treatment * Adjusted spacing and presentation ## Key settings Extends the footer to full browser width, removing container constraints. When disabled, footer content stays within the theme's standard container width. **Visual impact**: * **Enabled**: Edge-to-edge footer spanning entire viewport * **Disabled**: Footer contained within standard width, creating margins on wide screens Select between Style 1 (default) or Style 2 for different visual presentations of your footer. Style variants affect layout, spacing, localization display, and overall visual treatment. Test both to see which better matches your store aesthetic. Displays copyright text in the footer bottom area, including: * Current year (auto-updates annually) * Your shop name with link to homepage * "Powered by Shopify" attribution This setting is enabled by default and recommended for legal protection and brand attribution. Select a menu to display in the footer bottom alongside copyright text. Commonly used for legal and policy links. **Typical links included**: * Privacy Policy * Terms of Service * Refund Policy * Shipping Policy * Accessibility Statement Create this menu at: **Shopify Admin → Online Store → Navigation** Displays icons for payment methods enabled in your Shopify Payments settings. Icons automatically populate based on available payment providers. **Benefits**: * Builds customer trust by showing accepted payment methods * professional appearance signaling secure checkout * No manual updates required - syncs with your payment settings Enabled by default. Icons only appear if you have payment methods configured in Shopify admin. Shows "Follow on Shop" button allowing customers to follow your store in the Shop app for updates and easy reordering. **Requirements**: * Shop Pay must be enabled in your payment settings * Feature must be available for your store When customers follow your store, they receive notifications about new products, back-in-stock items, and order updates through the Shop app. Learn more: [Follow on Shop Help](https://help.shopify.com/manual/online-store/themes/customizing-themes/follow-on-shop) ## Block settings Add up to **3 blocks total** in any combination to build your footer content. Blocks can include brand content, navigation menus, and social links. Display your brand logo and descriptive content about your store, mission, or unique value proposition. Upload a logo image to display in the footer. The logo can be different from your header logo if desired. **Logo considerations**: * Often displayed in monochrome or alternative colorway in footer * Should maintain legibility against footer background * Can be same as header logo or a footer-specific variant Control logo size as a percentage of the container width (25-100%). Default is 50%. **Sizing guidance**: * **25-40%**: Small, subtle logo presence * **45-55%**: Balanced size (default: 50%) * **60-75%**: Prominent logo emphasis * **80-100%**: Maximum visibility Adjust based on your footer layout and content density. Add rich text describing your brand, mission statement, tagline, or unique value proposition. **Content ideas**: * Brief brand story or mission statement * Unique selling points or commitments (e.g., "Sustainably sourced") * Customer service highlights (e.g., "Free shipping over \$50") * Quality guarantees or certifications Keep content concise - footers are scanned quickly, not read in detail. Add footer navigation menus with organized columns. Menu structure determines column layout automatically. Select a menu to display in the footer. The menu structure determines how content is organized: **Menu structure rules**: * **Top-level links with no children**: Display as standalone column headers * **Top-level links with children**: Column header with listed sublinks * **Maximum 3 columns**: Footer automatically limits to 3 columns per navigation block **Example structure**: ``` Footer Menu ├── Shop (Column 1 header) │ ├── New Arrivals │ ├── Best Sellers │ └── Sale ├── About (Column 2 header) │ ├── Our Story │ ├── Contact Us │ └── Careers ├── Help (Column 3 header) ├── FAQs ├── Shipping └── Returns ``` **Responsive behavior**: * **Desktop**: Columns always expanded and visible * **Mobile**: Collapsible accordions for links with children, simple links for standalone items Create and manage menus at: **Shopify Admin → Online Store → Navigation** **Note**: You can add multiple Navigation blocks (up to the 3 block total limit) to display different menus in separate footer sections. Display social media icon links to your social profiles. Icons automatically populate from theme settings. Optional heading text displayed above social media icons (e.g., "Follow Us", "Connect With Us", "Stay in Touch"). Leave blank for icons without a heading. Social icons are controlled by **Theme Settings → Social Media**. Configure your social media URLs there, and they'll automatically appear in footer social blocks. **Supported platforms** (configure in theme settings): * Facebook * Instagram * Twitter/X * Pinterest * TikTok * YouTube * Snapchat * Tumblr * Vimeo Only platforms with configured URLs will display icons. To configure: **Theme Customizer → Theme Settings → Social Media** ## Language and currency selectors If you've enabled multiple languages or currencies for your store, localization selectors appear automatically in the footer above the bottom bar. Appears when multiple languages are configured, allowing customers to switch between available languages. To enable: **Shopify Admin → Settings → Languages → Add language** Appears when multiple currencies are enabled, allowing customers to view prices in their preferred currency. To enable: **Shopify Admin → Settings → Payments → Currency formatting** The display style adapts based on your selected footer style (compact for Style 2, full for Style 1). ## Best practices Group related links under clear column headers. Limit to 3-6 links per column for easy scanning. Common groups: Shop, About, Help, Legal. Footer text should be scannable, not detailed. Aim for 1-3 sentences maximum. Save detailed content for dedicated pages. Maximize footer value by using all 3 available blocks. Common combination: Textual + Navigation + Socials for comprehensive footer content. Use copyright navigation menu for Privacy Policy, Terms, and other required legal pages. Protects your business and builds customer trust. Always show payment icons to build trust and set expectations about accepted payment methods before customers reach checkout. Set up social media URLs in theme settings before adding Socials block. Only configured platforms will display - test to avoid empty blocks. Test both style options to see which better complements your overall store design. Style affects spacing, typography, and visual hierarchy. Enable Follow on Shop if you use Shop Pay. It helps retain customers by making reordering and order tracking easier through the Shop app. Footer automatically adapts for mobile with collapsible navigation. Test on mobile devices to ensure accordions work smoothly and content remains accessible. Footer logos typically display smaller than header logos (50% default). Adjust based on content density and brand emphasis desired. # Header Source: https://docs.digifist.com/themes/mojave/header/header Configure your store's main navigation header with flexible layouts, transparent options, and megamenu capabilities The Header section controls your store's primary navigation, branding, and utility functions. It supports multiple layout configurations including transparent header modes, powerful megamenu dropdowns with featured content, and responsive mobile navigation. Header overview ## What this section controls * Logo display and positioning * Main navigation menu and dropdown styles * Transparent header on homepage and collection pages * Megamenu dropdowns with multi-column layouts and featured content * Search, account, and cart utility icons * Sticky header behavior * Mobile menu drawer with footer links ## Getting started In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. The Header section is located at the very top of your site and remains consistent across all pages. Header location in Theme Customizer ## Menu styles Choose how navigation menus behave on desktop devices: Dropdown menus open automatically when customers hover over navigation links. Provides quick access to submenu items with minimal interaction required. **Best for**: Stores with organized navigation hierarchies where customers browse multiple categories. Dropdown menus open only when customers click navigation links. Requires explicit interaction to reveal submenus. **Best for**: Touch-enabled devices, accessibility-focused designs, or when you want deliberate navigation interaction. Uses mobile-style drawer menu on all devices, sliding in from the side. Provides a consistent experience across desktop and mobile. **Best for**: Minimalist designs, mobile-first stores, or navigation systems with many levels. ## Key settings Extends the header to the full browser width, removing container constraints. When disabled, header content stays within the theme's standard container width. **Visual impact**: * **Enabled**: Edge-to-edge header spanning entire viewport * **Disabled**: Header contained within standard width, creating margins on wide screens Upload your store logo. If no image is uploaded, your shop name displays as text with automatic sizing that adapts to text length. **Logo sizing recommendations**: * Maximum width: 200px (desktop), 180px (mobile) * Transparent PNG or SVG recommended for best quality * Consider creating an alternative logo for transparent header mode **Automatic text logo scaling**: Without an image, shop name size adjusts dynamically - shorter names display larger, longer names reduce to fit comfortably. Control logo image width on desktop devices (50-200px). This setting only applies when a logo image is uploaded. **Sizing tips**: * **Small logos (50-100px)**: Subtle branding, emphasizes navigation * **Medium logos (100-150px)**: Balanced presence (default: 145px) * **Large logos (150-200px)**: Strong brand emphasis, prominent identity Independently control logo size on mobile devices (50-180px). This allows optimization for smaller screens without affecting desktop appearance. Typically set 10-20px smaller than desktop to maintain proportion on mobile viewports. Choose logo placement and navigation layout: * **Start**: Logo positioned at the left/start of the header with navigation alongside * **Center**: Logo centered with navigation items distributed around it * **Center with menu below**: Logo centered at top, full navigation menu displayed below the logo **Note**: "Center with menu below" option only works with hover or click menu styles (not available with drawer menu). Select which navigation menu displays in the header. Choose from menus created in **Navigation** settings. By default uses "main-menu". Create and manage menus at: **Shopify Admin → Online Store → Navigation** Control how dropdown menus open on desktop: * **Hover**: Menus open on mouseover (default) * **Click**: Menus open on click only * **Drawer**: Mobile-style slide-out drawer on all devices All three styles automatically use drawer navigation on mobile devices. Adds a bottom border line to the header, visually separating it from page content below. Enabled by default. When enabled, the header remains fixed at the top of the viewport as customers scroll down the page. This keeps navigation always accessible. **User experience benefits**: * Quick access to navigation without scrolling back to top * Persistent search and cart access throughout shopping experience * Reinforces branding with consistent logo visibility Makes the header background transparent on your homepage, allowing hero images or videos to display beneath it. This creates an integrated, immersive homepage experience. **Requirements for proper display**: * First homepage section must be: Hero, Banner - Fullwidth, or Video section * These sections need sufficient height to accommodate transparent header * Logo and text must have sufficient contrast against background images **Design considerations**: * Test visibility with all hero images you use * Consider using the transparent logo option for better contrast * Ensure hero images have suitable composition (clear space for header content) Activates transparent header on collection pages, integrating with collection banner sections. **Requirement**: The first section on collection template must be a Collection banner section for proper integration. Works similarly to homepage transparency but specifically optimized for collection page layouts. Upload an alternative logo that displays specifically when transparent header is active. This allows you to use a different colored logo that contrasts better against hero backgrounds. **Common use cases**: * White logo for dark hero images * Dark logo for light hero images * Different color variations for brand flexibility The default logo automatically swaps to this alternative when transparency is enabled and active on qualifying pages. Controls the font size of top-level navigation links using preset size options: XS, S, M, L, XL (default: L). These are the main menu items visible in your header navigation bar. **Sizing guidance**: * **L-XL**: Prominent navigation, easy to see and click * **M**: Balanced presence (good for many menu items) * **XS-S**: Subtle navigation, maximizes space Controls font size for dropdown menu content including column headers and submenu links. Options: XS, S, M, L, XL (default: M). This affects text within megamenus and standard dropdown menus. Typically set smaller than top-level links to create visual hierarchy (default M vs. default L). Select a page to link in the mobile menu footer. Appears below navigation links when customers open the mobile menu drawer. Provides quick access to contact information from any page on mobile devices. Select a FAQ or help page to link in the mobile menu footer, appearing alongside the contact link. Gives mobile customers easy access to self-service support resources. ## Block settings Add blocks to create enhanced dropdown menus with featured content. Two block types are available: featured images for standard dropdowns and megamenus for multi-column layouts. Add promotional images to standard dropdown menus for specific navigation links. **Critical**: Enter the exact title of a top-level navigation link to associate this featured image with that link's dropdown menu. For example, if you have a main menu link called "Women's Clothing", enter exactly "Women's Clothing" here to attach the featured image to that dropdown. **Title must match exactly** (case-sensitive) to function properly. Upload the featured image to display in the dropdown menu. **Recommended specifications**: * Ratio: Portrait orientation * Size: 720 x 900 pixels * Format: JPG or PNG The image displays alongside standard dropdown menu links. Optional URL to make the featured image clickable. When customers click the image, they navigate to the specified link. Typically links to featured collection, seasonal promotion, or highlighted product. Create rich multi-column dropdown menus with organized navigation, collections, labels, and featured imagery. **Critical**: Enter the exact title of a top-level navigation link to convert its dropdown into a megamenu. For example, to create a megamenu for "Shop All", enter exactly "Shop All" here. **Title must match exactly** (case-sensitive) for the megamenu to appear. Select a menu with **at least 2 levels** of hierarchy to populate the megamenu columns. **Structure requirements**: * **Tier 1 links** (top level) create column headers * **Tier 2 links** (sublinks) populate items within each column **Example structure**: ``` Categories (Menu name) ├── New Arrivals (Column 1 header) │ ├── Dresses (link) │ ├── Tops (link) │ └── Accessories (link) ├── Best Sellers (Column 2 header) │ ├── Summer Collection (link) │ └── Winter Collection (link) ``` Create hierarchical menus at: **Shopify Admin → Online Store → Navigation** Optionally feature a specific collection in the megamenu. The collection can be highlighted with products or visual emphasis depending on theme implementation. Add a badge or label text to display on the megamenu, useful for highlighting "New", "Sale", "Popular", or seasonal content. Add a featured image to the megamenu for visual interest and promotional content. **Recommended specifications**: * Ratio: Portrait orientation * Size: 720 x 800 pixels * Format: JPG or PNG Displays prominently within the megamenu layout alongside navigation columns. Make the megamenu featured image clickable by adding a destination URL. Useful for directing customers to featured collections, promotions, or landing pages. ## Best practices Keep logos between 100-150px for balanced visual weight. Too large dominates the header, too small reduces brand recognition. When using transparent header, test with all hero images to ensure logo and navigation remain readable against various backgrounds. Create a transparent header logo variant with inverted colors for better contrast against hero images (e.g., white logo for dark images). Plan megamenu hierarchy carefully - tier 1 links become column headers, so organize categories logically. Aim for 3-5 columns maximum. Featured image and megamenu blocks require exact title matches (case-sensitive) to function. Double-check spelling and capitalization. Keep sticky header enabled for better user experience - customers can access navigation, search, and cart without scrolling to top. Populate Contact and FAQ links in mobile menu settings to provide easy access to support resources on mobile devices. Choose menu style based on your audience: hover for desktop-first, click for accessibility, drawer for mobile-first or minimalist designs. Avoid overly deep menu hierarchies (more than 3 levels). Use megamenus to organize large catalogs into scannable column layouts. Maintain visual hierarchy by keeping parent link size smaller than main navigation link size (default: M vs L). # Password Header Source: https://docs.digifist.com/themes/mojave/header/password-header Simplified header for password-protected storefront pages ## What It Does The **Header (Password Page)** section displays a simplified header on password-protected storefront pages (when your store is password-protected or in "Coming Soon" mode). This header typically shows your store logo and basic branding without navigation menus or cart functionality. Configure logo appearance, positioning, transparency, and separator line to maintain brand consistency even before customers enter your store. This header **only appears on password pages** (pre-launch, maintenance mode, or password-protected stores). Regular storefront uses the main Header section. Switch between headers automatically based on page type. ## Getting Started In Shopify Admin → Online Store → Preferences → Enable password protection. This activates the password page and this header section. In Theme Customizer → Password page template → Header section → Upload your store logo (same logo as main header recommended for consistency). Adjust logo width slider (50-250px) until logo looks properly sized. Start at 145px (default), adjust as needed for your logo dimensions. Select logo position (left or center), enable transparent header if desired, and enable/disable bottom separator line. ## Settings **Type:** Checkbox\ **Default:** Disabled (unchecked)\ **Label:** "Transparent - Password page" Makes the header background transparent, allowing password page background content to show through. ### When Disabled (Default - Solid Header) * Header has solid background color (typically white or theme brand color) * Logo and elements sit on opaque header bar * Clear separation between header and page content below * Traditional, professional header appearance ### When Enabled (Transparent Header) * Header background fully transparent (no solid bar) * Logo appears to "float" over password page background image/color * Creates seamless, editorial aesthetic * Password page background visible behind header ### Use Cases **Transparent header when:** * Password page has strong hero image/video that should extend to top of page * Modern, editorial, high-fashion aesthetic * Want immersive brand experience on coming-soon page * Logo contrasts well with password page background **Solid header when:** * Password page background is busy/complex (transparent header logo hard to see) * Traditional, e-commerce aesthetic * Logo needs consistent background for readability * Professional, corporate brand ### Contrast Considerations **Critical:** Logo must contrast with password page background when header transparent. **Testing process:** 1. Enable transparent header 2. Preview password page 3. Check logo visibility 4. **If logo hard to see:** Add dark overlay to password page background, or disable transparent header **Example scenarios:** * Dark logo + light background image = Good contrast * Dark logo + dark background image = Poor contrast (logo invisible) * Light logo + dark background image = Good contrast * Light logo + light background image = Poor contrast **Solution for contrast issues:** * Upload alternate logo version (e.g., white logo for dark backgrounds) * Add dark overlay to password page background image (in section-password settings) * Use solid header instead (disable transparent) ### Best Practices **When using transparent header:** * Test logo visibility on multiple devices (mobile/desktop) * Ensure logo remains readable as background content scrolls (if password page scrolls) * Consider sticky positioning (logo stays visible when scrolling) **Password page coordination:** * Header transparency setting works in conjunction with Password page section background * Design both sections together (transparent header + hero image password page = cohesive look) **Recommendation:** Use solid header (default) for most stores unless you have strong branded password page background. Transparent works best for fashion, lifestyle, creative brands with curated coming-soon pages. **Type:** Image picker\ **Required:** Upload recommended (optional, but password header looks empty without logo) Upload your store logo to display in the password page header. ### Logo Specifications **File format:** * **PNG** (recommended) - Supports transparency, clean edges, best for logos * **SVG** (ideal) - Vector format, scales perfectly, smallest file size * **JPG** - Only if logo is photographic (rare for logos) **Image size:** * **Width:** 300-800px (Shopify auto-resizes, but upload at intended display size for quality) * **Height:** Proportional to width (maintain aspect ratio) * **File size:** Under 100KB (logos should be small files) **Content:** * Your store/brand logo (same logo as main header recommended) * Horizontal logo works best (vertical logos may need width adjustment) * Transparent background preferred (PNG with transparency) ### Uploading Logo **Steps:** 1. Theme Customizer → Password page → Header section 2. Click "Logo" image picker 3. Upload logo file or select from media library 4. Adjust "Logo width" slider below to size appropriately ### Logo Visibility **Without logo:** * Header displays store name (from Shopify settings) as text * Less professional, less branded * Fallback if logo not uploaded **With logo:** * Brand logo displays prominently * Professional appearance * Stronger brand recognition ### Best Practices **Same logo as main header:** * Use identical logo for password header and main header (consistency) * Customers should see same branding when they enter store * Upload once, select from library for both headers **Logo variants:** * If using transparent header on password page, may need logo variant for contrast * Example: Dark logo for solid header, white logo for transparent header over dark background * Upload alternate logo version if needed **High-resolution:** * Upload logo at 2x actual display size for Retina displays * Example: If logo displays at 145px wide, upload 290px wide source file * Ensures crisp logo on high-DPI screens **Transparency:** * PNG with transparent background adapts to any header background color * JPG with white background only works on white headers * Always prefer PNG for logos **Recommendation:** Upload high-resolution PNG logo with transparent background. Use same logo as main header for brand consistency. **Type:** Range slider\ **Range:** 50px - 250px\ **Step:** 5px\ **Default:** 145px\ **Unit:** Pixels (px) Controls the width of the logo image in the header. ### How Width Works * Logo scales proportionally (height adjusts automatically to maintain aspect ratio) * Example: 200x100px logo at 100px width = 100x50px displayed size * Larger width = larger logo (more prominent) * Smaller width = smaller logo (more subtle) ### Choosing Logo Width **Small (50-100px):** * Subtle, minimal branding * Best for: Simple text logos, minimal aesthetic * Risk: Logo may be too small to read (especially mobile) **Medium (100-150px):** ← **Default: 145px** * Balanced, professional size * Best for: Most logos, standard branding * Works well for horizontal wordmark logos **Large (150-250px):** * Prominent, bold branding * Best for: Icon logos, very simple logos, strong brand focus * Risk: Logo may dominate header (especially mobile) ### Adjusting for Logo Type **Horizontal wordmark logos:** * Need wider width (120-180px) for text readability * Example: "COMPANY NAME" stretched horizontally **Square icon logos:** * Need less width (80-120px) since height grows proportionally * Example: Circle logo, badge logo **Vertical logos:** * Tricky in horizontal header (consider horizontal variant) * May need smaller width (60-100px) to prevent excessive height **Complex logos:** * Larger width (150-200px) for detail visibility * Ensure intricate elements remain clear ### Testing Process 1. Upload logo 2. Set width to 145px (default starting point) 3. Preview password page on desktop and mobile 4. **If logo too small/hard to read:** Increase width (try 160px, 180px, 200px) 5. **If logo too large/dominating:** Decrease width (try 120px, 100px, 80px) 6. **Mobile check:** Logo should be readable but not overwhelming on small screens ### Mobile Considerations **Responsive behavior:** * Logo width may scale down on mobile (theme-dependent) * Some themes use same width mobile/desktop, others scale to \~80% on mobile * Test on actual mobile device (not just browser resize) **Mobile-specific width:** * This setting typically applies to both desktop and mobile * If logo too large on mobile, reduce width (affects both) * Advanced: Custom CSS can set different mobile width if needed ### Best Practices **Readability first:** * Logo must be legible at chosen size (text readable, details visible) * Test at arm's length (typical viewing distance) **Mobile priority:** * If logo looks good on mobile, usually looks good on desktop * If choosing between too large on desktop vs too small on mobile, prioritize mobile **Consistent with main header:** * Use same logo width as main header (brand consistency) * Password page → main store transition feels seamless **Header balance:** * Logo shouldn't dominate entire header (leave breathing room) * If header feels cramped, reduce logo width or increase header height **Recommendation:** Start at 145px (default), adjust ±20px based on logo type. Horizontal wordmarks may need 160-180px, icon logos may need 100-120px. **Type:** Select dropdown\ **Options:** Left, Center\ **Default:** Left Controls horizontal alignment of the logo within the header. ### Position Options **Left (Default):** * Logo aligns to left side of header * Standard e-commerce header convention * Creates asymmetrical layout (logo left, rest of header open/right-aligned elements) * Professional, familiar positioning **Center:** * Logo centers horizontally in header * Symmetrical, balanced layout * Creates editorial, high-fashion aesthetic * More formal, intentional appearance ### Choosing Logo Position **Left when:** * Standard e-commerce aesthetic (most online stores use left) * Multi-element header (logo left, navigation/cart right—though password header has no nav) * Western reading pattern (eyes start top-left) * Preparing for main store with left-logo header (consistency) **Center when:** * Minimal, editorial aesthetic (fashion, luxury, lifestyle) * Symmetrical design preference * Password page is coming-soon/brand launch (more formal) * Logo is primary/only header element (no nav/cart on password page makes centering work well) ### Use Cases by Brand Type **E-commerce retail (apparel, home goods, general):** * **Left** - Standard, expected, professional **Fashion/luxury brands:** * **Center** - Editorial, high-end, fashion-forward **Tech/SaaS companies:** * **Left** - Functional, familiar, web convention **Creative/lifestyle brands:** * **Center** - Unique, artistic, intentional **Small business/local shops:** * **Left** - Safe, standard choice ### Transitioning to Main Store **Consistency consideration:** * If main store header has left-aligned logo, password header should too (seamless transition) * If main store header has centered logo, password header should too * Customers entering store shouldn't experience jarring layout shift **Checking main header:** 1. Theme Customizer → Main header section (not password header) 2. Check logo position setting 3. Match password header position to main header ### Best Practices **Default recommendation:** * Left-aligned logo is safe, standard choice (works for 80% of stores) **Center for brand statement:** * Use center position to make password page feel more special/intentional * "Coming soon" pages often benefit from centered logos (formal launch vibe) **Mobile behavior:** * Centered logos remain centered on mobile (expected) * Left-aligned logos remain left on mobile (standard) * Both work well on small screens **Test with transparency:** * If using transparent header, logo position affects visual balance with password page background * Centered logo with centered password content feels cohesive * Left logo may feel unbalanced if password content centered **Recommendation:** Use Left (default) for standard e-commerce stores. Use Center for fashion, luxury, or coming-soon pages with formal/editorial aesthetic. **Type:** Checkbox\ **Default:** Enabled (checked) Controls whether a horizontal border line displays below the header. ### When Enabled (Default) * Thin horizontal line appears at bottom edge of header * Separates header from password page content below * Creates clear visual boundary * Typically subtle (1px line, light gray or theme color) ### When Disabled * No separator line * Header blends seamlessly into page content * Cleaner, more minimal appearance * Works well with transparent headers ### Use Cases **Enable separator when:** * Header background color similar to password page background (separator adds definition) * Traditional, structured design aesthetic * Want clear header boundaries * Solid (non-transparent) header (separator reinforces header bar) **Disable separator when:** * Transparent header (separator can look awkward floating over background) * Minimal aesthetic preference (cleaner without lines) * Password page background contrasts strongly with header (separator redundant) * Modern, seamless design ### Visual Impact **With separator:** ``` [ LOGO ] ––––––––––––––––––––––––––––– ← Separator line [ Password page content ] ``` **Without separator:** ``` [ LOGO ] [ Password page content ] ← No line, seamless transition ``` ### Best Practices **Transparent headers:** * Usually disable separator (floating line looks disconnected) * Exception: If password background is very busy, separator can help anchor header **Solid headers:** * Usually enable separator (defines header bottom edge) * Exception: If header color contrasts strongly with page background, separator may be redundant **Minimalist brands:** * Disable separator (fewer visual elements = cleaner) **Traditional brands:** * Enable separator (structured, defined sections) **Testing:** * Toggle setting and preview both states * Check on mobile (separator may be more or less prominent on small screens) * Ensure separator color contrasts enough to be visible but not harsh **Recommendation:** Leave enabled (default) for solid headers, disable for transparent headers or minimal aesthetic. ## Best practices Use identical logo on password header and main header for brand consistency. Customers should see same branding when entering your store. If using transparent header, ensure logo contrasts with password page background. Dark logo needs light background, light logo needs dark background. Start with 145px logo width (default), adjust ±20px based on logo type. Horizontal wordmarks need 160-180px, icon logos need 100-120px. Align password header logo position (left/center) with main header. Seamless transition when customers enter store. Turn off line separator when using transparent header (floating line looks disconnected). Keep enabled for solid headers. Use PNG logo format with transparent background. Adapts to any header color and looks professional on all backgrounds. Always preview password page on mobile devices. Logo size and position may appear different on small screens—adjust accordingly. Design password header and password page section together. Transparent header + hero image or solid header + simple background. ## Common Use Cases ### Standard Coming Soon Page **Settings:** Logo uploaded (145px width), Left position, Solid header (transparent disabled), Separator enabled **Setup:** Professional coming-soon page with left-aligned logo, clear header separation, works for most e-commerce stores. **Best for:** General retail, standard store launches, traditional brands ### Fashion Launch (Editorial Style) **Settings:** Logo uploaded (120px width), Center position, Transparent header, Separator disabled **Setup:** Centered logo over hero image background, no separator for seamless look. High-fashion, editorial aesthetic. **Best for:** Fashion, luxury, lifestyle brands with branded coming-soon pages ### Minimal Brand Launch **Settings:** Logo uploaded (100px width), Center position, Solid header, Separator disabled **Setup:** Small centered logo, clean white/solid header, no separator for minimal look. Focus on simplicity. **Best for:** Minimal brands, modern startups, clean aesthetic ### Maintenance Mode **Settings:** Logo uploaded (145px width), Left position, Solid header, Separator enabled **Setup:** Standard header matching main store. Simple message page during maintenance. Looks like regular store. **Best for:** Temporary password protection, maintenance downtime, gradual store changes ### Exclusive/VIP Access **Settings:** Logo uploaded (180px width), Center position, Transparent header over dark background, Separator disabled **Setup:** Large centered logo, dramatic dark background, premium feel for exclusive access. **Best for:** VIP launches, exclusive memberships, luxury brand soft launches ## Layout Behavior ### Desktop Layout **Solid header:** * Full-width header bar with background color * Logo positioned left or center (based on setting) * Header height: \~80-100px (varies by theme) * Separator line below (if enabled) **Transparent header:** * No background bar (logo floats over password page background) * Logo positioned left or center * Separator disabled recommended (or very subtle if enabled) ### Mobile Layout **Responsive behavior:** * Header typically full-width on mobile (same as desktop) * Logo may scale slightly smaller on mobile (theme-dependent) * Position (left/center) maintained on mobile * Separator scales to full mobile width **Logo sizing:** * Same logo width setting as desktop (some themes scale to \~80% on mobile) * Test to ensure logo readable on small screens * May need to reduce logo width if too large on mobile ### Header Height **Auto-calculated:** * Header height adjusts to logo height + padding * Larger logo = taller header * Smaller logo = shorter header * Typically minimum height \~60px, maximum \~120px ## Related Sections * **[Header (Main)](/themes/mojave/header/header)** - Main storefront header (after password entry) * **[Password Page (Template)](/themes/mojave/pages-templates/password)** - Password page content section * **[Footer](/themes/mojave/footer/footer)** - Footer (also appears on password page) ## Technical Notes ### When This Header Displays **Password protection enabled:** * Shopify Admin → Online Store → Preferences → Password protection → Enabled * Sets entire storefront to password-protected * All pages show password page until correct password entered * Password header displays instead of main header **Password protection disabled:** * Main header displays on all pages * Password header not visible * To test password header: Enable password protection, view storefront in private window ### Switching Between Headers **Automatic switching:** * Theme automatically uses password header on password pages * Uses main header on all other pages (after password entry) * No manual configuration needed **Template structure:** ```liquid theme={null} {% if template == 'password' %} {% section 'header-password' %} {% else %} {% section 'header' %} {% endif %} ``` ### Transparent Header Implementation **CSS class:** ```css theme={null} .header-password--transparent { background-color: transparent; position: absolute; /* Overlays password page content */ } ``` **Layout shift:** * Transparent header position: absolute (doesn't push content down) * Solid header position: relative (pushes content down by header height) * Password page must account for header overlap when transparent ### Logo Rendering **Liquid code:** ```liquid theme={null} {% if section.settings.logo %} {{ shop.name }} {% else %}

{{ shop.name }}

{% endif %} ``` **Fallback:** * If no logo uploaded, displays store name as text (from Shopify settings → Store details → Store name) ### Accessibility **Logo alt text:** * Automatically set to store name (e.g., `alt="My Store"`) * Screen readers announce store name when logo focused * Important for brand recognition **Skip link:** * Many themes include "Skip to content" link before header * Allows keyboard users to bypass header, jump to password input * Hidden visually, appears on Tab focus **Keyboard navigation:** * Logo typically keyboard-focusable (Tab to logo, Enter to go to homepage) * On password page, logo may not link anywhere (just branding) ### SEO Implications **Password page:** * Not indexed by search engines (blocked by password protection) * No SEO value until password protection disabled * Header content (logo alt text) not relevant for SEO while password-protected **Pre-launch best practice:** * Add meta description and title in Shopify → Preferences even before launch * When password removed, SEO content already configured ## Troubleshooting **Password header not showing:** * Verify password protection enabled: Shopify Admin → Online Store → Preferences → Password protection * Check you're viewing password page (logged-out state, private browser window) * If logged in as staff, you bypass password page (log out or use private window) **Logo not displaying:** * Verify logo uploaded in section settings * Check logo file format (PNG, JPG, SVG supported) * Try re-uploading logo (may have failed to save) * Check browser console for image load errors **Logo too large/small:** * Adjust "Logo width" slider (50-250px range) * Preview on desktop and mobile—may need compromise size * Check logo's original dimensions (very tall logos may need different width) **Logo hard to see (transparent header):** * Increase contrast: Upload alternate logo color (white logo for dark background) * Add dark overlay to password page background image * Disable transparent header (use solid background) * Adjust password page background to be lighter/darker **Logo position not changing:** * Hard refresh browser (Cmd/Ctrl+Shift+R) to clear CSS cache * Check theme code for CSS overrides (some themes hard-code position) * Try toggling position, save, preview again **Separator line not showing:** * Ensure "Show line separator" enabled in settings * Line may be very subtle (check separator color in theme settings) * If header background same color as line, appears invisible * Inspect element to see if separator present but color-matched **Header looks different than main header:** * Check main header settings (logo width, position, transparency) * Match password header settings to main header for consistency * May be intentional design (password header often simpler) **Mobile header too tall:** * Reduce logo width (logo height determined by width proportionally) * Check theme's mobile-specific header padding (may be excessive) * Test on actual mobile device (not just browser resize) **Transparent header not working:** * Clear browser cache (Cmd/Ctrl+Shift+R) * Check password page template—may have inline styles overriding transparency * Verify password page section background image/color set (transparent header needs background to show through) * Inspect element—check for CSS `background-color` overrides **Logo blurry/pixelated:** * Upload higher resolution logo (2x display size minimum) * Use SVG format for perfect scaling (vector graphics) * Check original logo file quality * Ensure logo width not enlarged beyond original file dimensions # Introduction Source: https://docs.digifist.com/themes/mojave/index Contemporary design with proven functionality that converts to sales. Mojave is a Shopify theme for brands that want a clean, conversion-focused storefront with a calming aesthetic. It includes a flexible section system, essential product features, and a full set of customizable templates. ## Presets Mojave comes with 3 ready-made designs for your store. A dark, high-impact design with dramatic imagery, built for fashion and apparel brands. A soft, minimal design with neutral tones, ideal for skincare and wellness brands. A bold, structured design with vibrant accents, crafted for home decor and furniture stores. ## Products Flexible block-based product page with media gallery, variants, and dynamic checkout. Branding configuration for digital gift card pages. ## Collections Product grid with filtering, sorting, and promotional card injection. Display all or selected collections with custom imagery and pagination. Full search results with filtering, sorting, and multi-type results. ## Pages & Templates Customizable error page that guides lost visitors back to your store. Article feed with tag filtering and block-based individual article layout. Full-page cart with item management, discounts, and express checkout. Account dashboard, login, register, addresses, and order details. Generic content template for About, policies, and more. Coming soon page with email signup for pre-launch stores. ## Sections & Theme Settings Browse the full library of sections available for any page in your store. Set up navigation, announcement bar, logo, and footer content. ## Resources See what's new and what's changed in each Mojave release. # Page (Template Wrapper) Source: https://docs.digifist.com/themes/mojave/page Empty template wrapper for basic pages ## What It Does The **Page** template is an empty section file used as a wrapper for basic Shopify pages (created in Admin → Online Store → Pages). This file contains no content or settings—it serves only as a template assignment placeholder. This is an **empty template wrapper** with no content or customizable settings. Page content comes from Shopify Admin pages, not this template file. ## How It Works ### Template Purpose **Standard Shopify architecture:** * Pages created in Admin → Online Store → Pages * Each page assigned a template (default: `page.json` or `page.liquid`) * Template wraps page content with header, footer, and sections **page.liquid section:** * Empty file (no liquid code, no schema) * Acts as placeholder for template system * Actual page content rendered by Shopify's page object (`{{ page.content }}`) * Header and footer sections wrap page automatically ### Page Content Source **Content comes from Admin:** 1. Shopify Admin → Online Store → Pages 2. Create/Edit page 3. Enter title, content (rich text editor) 4. Publish page 5. Page displays on storefront at `/pages/[page-handle]` **Template just wraps it:** * Header (navigation) * Page content (from Admin) * Footer (footer links, copyright) ## Creating & Editing Pages ### In Shopify Admin **Steps:** 1. Online Store → Pages → Add page 2. Enter page title (e.g., "About Us," "Shipping Policy") 3. Write content in rich text editor (supports formatting, images, links) 4. Set SEO metadata (title, description) 5. Select template (usually "Default page" which uses page.liquid) 6. Set visibility (Published / Hidden) 7. Save **Result:** Page accessible at `yourstore.com/pages/[page-handle]` ### Common Page Types **Standard store pages:** * About Us * Contact Us (or use Contact form section instead) * Shipping Policy * Return Policy / Refund Policy * Privacy Policy * Terms of Service / Terms & Conditions * FAQ / Help Center * Sizing Guide * Store Locator (or use dedicated section) ## Best practices Shopify rich text editor supports formatting, images, links. No HTML/code needed for basic pages. Set page title and meta description in Admin. Helps search engines index pages, improves SEO. Add important pages to main navigation (Header menu). Customers can easily find About, Policies, Contact pages. Add policy pages (Privacy, Terms, Refund) to footer. Standard e-commerce practice, builds trust. ## Related Pages * **\[Main Page Template]\(/themes/mojave/pages-templates/page** - Main page template (if different from this empty wrapper) * **[Contact Page](/themes/mojave/sections/contact-form)** - Contact form template * **[Header](/themes/mojave/header/header)** - Navigation that links to pages * **[Footer](/themes/mojave/footer/footer)** - Footer that links to policy pages ## Technical Notes ### Empty File **File contents:** * page.liquid contains no code (empty file) * Template system expects file to exist (placeholder) * Actual page rendering handled by Shopify core (not theme) **Why empty:** * Theme may use `page.json` (JSON template) instead of `page.liquid` * Or uses different page template structure * This file exists for backwards compatibility or template assignment ### Template Assignment **Each page can use different template:** * Default: `page` (uses page.liquid or page.json) * Custom: `page.contact`, `page.about`, etc. (custom page templates) * Selected in Admin → Pages → \[Page] → Template dropdown **Custom page templates:** * Create custom templates for specific pages (e.g., `page.about.liquid`) * Add custom sections, layouts * Assign to specific pages in Admin ## Key Takeaways * **Empty template file** - No content, no settings, acts as wrapper placeholder * **Page content in Admin** - Create/edit pages in Online Store → Pages * **Automatic wrapping** - Header and footer wrap page content automatically * **No customization here** - To modify page layout, edit template JSON/Liquid or use custom page templates * **Standard pages** - About, Policies, FAQ, etc. created as Shopify pages using this template * **SEO important** - Set page title/description in Admin for search engine optimization To create pages, go to Shopify Admin → Online Store → Pages → Add page. For custom page layouts, create custom page templates or use page sections. # 404 Error Page Source: https://docs.digifist.com/themes/mojave/pages-templates/404 404 error page template for page not found errors ## What It Does The **404 Page** template displays when visitors navigate to a non-existent page on your store (broken link, deleted product, mistyped URL). This template provides a user-friendly error message and navigation options to help customers find what they're looking for. This is a **static template section** with no customizable settings. Content and layout are coded in the template file. To customize, edit the template code directly or use theme customization apps. ## Template Structure ### Default Content **Typical 404 page includes:** * **Error message** - "404 Page Not Found" or similar heading * **Explanation text** - Brief message (e.g., "The page you're looking for doesn't exist") * **Search bar** - Allows customers to search for products/pages * **Navigation links** - Links to homepage, collections, or popular pages * **Visual element** - Icon, illustration, or branded imagery ### User Experience **When 404 page displays:** 1. Customer clicks broken link or types wrong URL 2. Server can't find page (404 error) 3. Theme displays 404 template instead of blank error 4. Customer sees friendly message and navigation options 5. Customer searches or clicks link to continue browsing ## Common Scenarios ### Broken External Links **Scenario:** Customer clicks old link from Google search or external blog\ **Solution:** 404 page helps customer search for product or navigate to collections ### Deleted Products/Collections **Scenario:** Product discontinued and deleted, but link still circulating\ **Solution:** 404 page prevents dead end, offers alternatives ### Mistyped URLs **Scenario:** Customer types incorrect URL manually\ **Solution:** 404 page politely corrects course with navigation ### Moved Pages **Scenario:** Store restructured, URLs changed\ **Solution:** 404 page catches old URLs before implementing redirects ## Best practices Use friendly, non-technical language. "Oops! Page Not Found" better than "Error 404: HTTP Not Found". Include search bar prominently. Customers can find what they need without leaving 404 page. Add links to homepage, collections, popular category pages. Give customers clear next steps. For known broken URLs (moved/deleted pages), set up redirects in Shopify Admin → Navigation → URL Redirects. Monitor which URLs trigger 404s (Google Analytics, Shopify apps). Identify patterns and fix broken links. Match 404 message to brand personality. Playful brands can use humor, professional brands stay formal. Visit non-existent URL on your store to preview 404 page. Ensure search works and links are current. 404 page should be fully responsive. Buttons easily tappable, search bar functional on mobile. ## Customization Options ### Via Theme Customizer (Limited) **No settings available in this section**, but other sections may appear on 404 page: * Header section (standard navigation) * Footer section (standard footer) * Additional sections (if theme allows adding sections to 404 template) ### Via Code Editing **For developers:** * Edit `templates/404.json` (JSON template) or `templates/404.liquid` (Liquid template) * Modify section `/sections/section-404.liquid` * Customize heading text, description, search styling, navigation links * Add custom illustrations or animations ### Via Apps **3rd-party apps:** * "404 Page Redirect" apps can auto-redirect to relevant pages * "Related Products" apps can show product recommendations on 404 * Check Shopify App Store for "404 customization" apps ## SEO & Technical Notes ### HTTP Status Code **Important:** Page must return proper 404 HTTP status code (not 200) * Shopify templates automatically return 404 status * Tells search engines page doesn't exist (prevents indexing bad URLs) * Preserves SEO health (broken links don't dilute site authority) ### Not Indexed by Google **404 pages are not indexed:** * Search engines recognize 404 status, don't add to search results * No SEO value to optimize 404 page content for keywords * Focus on user experience, not SEO ### URL Redirects Alternative **Instead of showing 404 error:** 1. Shopify Admin → Navigation → URL Redirects 2. Add redirect: Old URL → New URL 3. Customer redirected automatically (no 404 page shown) 4. **Use when:** Known broken URLs (deleted products, moved pages) ## Troubleshooting **404 page not displaying:** * Check theme includes `/templates/404.json` or `/templates/404.liquid` file * Some themes may have broken 404 template (reinstall theme or contact support) **Search not working on 404 page:** * Verify search functionality works on main site (test in header search) * If broken on 404 only, likely template code issue (needs developer review) **Custom content not showing:** * If edited template/section code, clear browser cache (Cmd/Ctrl+Shift+R) * Check for liquid syntax errors in code editor * Preview in incognito window (avoids cache issues) **404 page showing on valid pages:** * URL likely broken (check spelling, ensure page published) * Check Shopify Admin → Online Store → Pages/Products for page status * If page exists but shows 404, may be theme template assignment issue **Too many 404 errors:** * Check Google Search Console for 404 report (identifies broken URLs) * Common causes: Deleted products still linked externally, old URLs from Google * Set up URL redirects for high-traffic broken URLs ## Related Documentation * **[Password Page](/themes/mojave/pages-templates/password)** - Password protection page template * **[Header](/themes/mojave/header/header)** - Navigation that appears on 404 page * **[Footer](/themes/mojave/footer/footer)** - Footer that appears on 404 page * **[Search Results](/themes/mojave/collections/search)** - Search results page (where 404 search directs) ## Key Takeaways * **No settings to configure** - 404 template is static, styled by theme * **Friendly error message** - Helps customers recover from broken links * **Include search and navigation** - Don't trap customers on dead-end page * **Set up redirects** - For known broken URLs, redirect instead of showing 404 * **Returns proper 404 HTTP status** - Tells search engines page doesn't exist * **Not indexed by Google** - No SEO value, focus on user experience * **Customization requires code editing** - Or use apps for advanced features For custom 404 page design, contact a Shopify developer or explore 404 customization apps in Shopify App Store. # Article Template (main-article) Source: https://docs.digifist.com/themes/mojave/pages-templates/article Configure your blog post article page with featured images, metadata, social sharing, and comments The Blog post template (main-article) controls how individual blog articles display on your store. It provides customization for featured images, article metadata, social sharing, and comment pagination through a flexible block system. Blog post article overview ## What this section controls * Featured image display and sizing * Article title with date and author * Article content display * Tag display (links or badges) * Back to blog navigation * Social media sharing buttons * Comment pagination * Third-party app integrations ## Getting started In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. Use the page selector dropdown to select **Blog posts** and choose any article to preview. The "Blog post" section controls the main article template. Additional sections can be added below it. Blog post section location ## Template settings Displays a navigation link at the top of the article that returns readers to the parent blog. Enabled by default. **Benefits**: * Improves blog navigation and user experience * Encourages readers to browse more articles * Reduces bounce rate by providing clear exit path **When to disable**: If you prefer custom navigation or want readers to focus only on current article without distraction. Displays social media sharing buttons allowing readers to share the article. Enabled by default. **Included networks** (based on theme settings social media configuration): * Facebook * Twitter/X * Pinterest * LinkedIn * Email **Benefits**: * Increases article reach through social sharing * Builds backlinks and referral traffic * Encourages reader engagement **Best practices**: Keep enabled for content marketing and traffic growth. Position near article end or after compelling content. Controls how many comments display before pagination (2-20 comments, default: 5). **Sizing recommendations**: * **5-10 comments** (default: 5): Standard, keeps page manageable * **15-20 comments**: High-engagement blogs, reduces pagination clicks * **2-3 comments**: Long detailed comments, preserves page load speed **Requirements**: * Shopify blog comments must be enabled in blog settings * Comments are moderated through Shopify admin **Note**: Lower numbers improve page performance but increase pagination clicks. Higher numbers show more engagement but may slow page load. ## Block settings Build your article page by adding and arranging blocks. Typical order: Featured Image → Title → Content → Tags. Displays the article's featured image. Limit 1 per article page. **Configuration**: * **Featured image height**: Choose aspect ratio for image display: * **Adapt to image**: Uses natural aspect ratio, no cropping * **Small (16:9)**: Widescreen format, good for landscape photography * **Medium (4:3)**: Balanced ratio, traditional photography format * **Large (3:4)**: Portrait format, taller images **Image source**: Automatically pulls from article.image set in blog post editor. **Best practices**: * Use 16:9 ratio for consistency across articles * Recommended size: 1200x675px minimum for crisp display * Optimize images before upload (compress to reduce file size) * Choose "Adapt to image" if you have varying image dimensions **Info**: For best results, use images with 16:9 aspect ratio. [Learn more about image aspect ratios](https://help.shopify.com/en/manual/shopify-admin/productivity-tools/image-editor#understanding-image-aspect-ratio) Displays article title with optional metadata. Limit 1 per article page. **Configuration**: * **Show date**: Display article publish date (enabled by default) * **Show author**: Display article author name (enabled by default) **Metadata display**: Date and author appear below the article title. **When to show metadata**: * **Show both**: Multi-author blogs, time-sensitive content, news articles * **Date only**: Single-author blogs where authorship is implied * **Neither**: Timeless evergreen content where dates may reduce perceived value **SEO note**: Title automatically includes proper heading structure (H1) for search optimization. Displays the main article content. Limit 1 per article page. No configuration needed - automatically renders full article content including: * Rich text formatting * Embedded images * Videos * Links * Lists and blockquotes **Content editing**: Edit article content in **Shopify Admin → Online Store → Blog posts → \[Article]**. Displays article tags as clickable links or visual badges. Limit 1 per article page. **Configuration**: * **Tags type**: Choose visual style: * **Links** (default): Plain text links with separators * **Badges**: Styled pill/badge buttons **Tag functionality**: Tags are clickable and filter the blog to show all articles with that tag. **Tag management**: Add tags when creating/editing articles in Shopify admin. Tags help with: * Article categorization * Content filtering for readers * Internal linking and navigation * SEO through topical grouping **Best practices**: * Use 3-7 tags per article * Create consistent tag naming conventions * Use badges for modern aesthetic, links for minimal design * Position tags at article end or near social sharing Integration point for third-party blog apps. Unlimited blocks allowed. **Common blog apps**: * Comment systems (Disqus, Facebook Comments) * Related posts recommendations * Email subscription widgets * Reading time calculators * Table of contents generators * Social proof widgets No configuration needed - apps appear automatically when installed and configured. ## Managing blog comments Article comments are managed through Shopify's built-in blog comment system. Go to **Shopify Admin → Online Store → Blog posts → Manage blogs → \[Your blog] → Edit**. Check "Comments are" and choose moderation setting: * **Disabled**: No comments * **Moderate**: Approve before publishing * **Published automatically**: Immediate publishing View and manage comments at **Shopify Admin → Online Store → Blog posts → Comments**. You can approve, spam, or delete comments. Set "Comments per page" in the template settings. Lower numbers (5-10) are recommended for performance. **Comment best practices**: * Use moderation to prevent spam * Respond to legitimate comments to encourage engagement * Monitor comments regularly for quality discussions ## Best practices Use the same aspect ratio across all articles (16:9 recommended). Creates cohesive visual experience and professional appearance. Keep social sharing enabled to amplify content reach. Position after article content when readers are primed to share valuable insights. Show dates for time-sensitive content (news, updates). Hide dates for evergreen content to maintain perceived freshness. Create 5-10 core topic tags and use consistently across articles. Avoid tag sprawl - consolidate similar tags (e.g., "Fashion Tips" not "fashion", "Fashion", "fashion-tips"). Compress images before upload (aim for under 200KB). Use tools like TinyPNG or ImageOptim. Large images slow page load significantly. Use badge-style tags for contemporary design. Link-style tags suit minimalist or text-heavy blogs. The return navigation improves user experience and keeps readers engaged with more content. Only remove if you have custom navigation. Set comments to moderated to prevent spam. Respond to genuine comments quickly to build community and encourage future engagement. Standard order works best: Featured Image → Title → Content → Tags → Comments. Social sharing typically appears near content end. Keep at 5-10 comments per page for optimal performance. Long comment threads slow page load and overwhelm readers. # Blog Template (main-blog) Source: https://docs.digifist.com/themes/mojave/pages-templates/blog Configure your blog listing page with hero banner, article cards, and tag filtering The Main Blog template (main-blog) controls how your blog listing page displays articles. It features a customizable hero banner with images and filtering, plus full control over article card metadata and pagination. Blog listing page overview ## What this section controls * Hero banner with custom images and content * Tag-based filtering interface * Article cards with metadata display options * Articles per page pagination * Article excerpts, tags, dates, and authors * Tag count display per article ## Getting started In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. Use the page selector dropdown to select **Blogs** and choose your blog to preview. The "Main Blog" section controls the blog listing template. Main blog section location ## Template settings Upload separate hero images for mobile and desktop. **Both images are required** for the hero to display properly. **Main image - Mobile**: * Recommended size: 800x600px minimum * Portrait or square orientation works best * Optimized for vertical mobile viewports **Main image - Desktop**: * Recommended size: 1920x600px minimum * Landscape orientation * Wide format for desktop hero banners **Image tips**: * Use high-quality images that represent your blog content * Ensure sufficient contrast for overlaid text * Consider image focal point - text appears centered * Compress images before upload (under 500KB ideal) Controls the darkness of the overlay on hero images (0-100%, default: 50%). **Overlay purpose**: Creates contrast between hero image and overlaid text for readability. **Adjustment guidance**: * **0-30%**: Light overlay, for dark images with good text contrast * **40-60%** (default: 50%): Balanced overlay for most images * **70-100%**: Heavy overlay for very bright images or maximum text emphasis Test with your specific images to ensure title and content remain readable. Custom hero title text that replaces the default blog name. **When to customize**: * Create more engaging headline than blog name alone * Add context or value proposition (e.g., "Design Inspiration & Tips") * Maintain consistency with overall brand messaging **Leave blank** to use default blog name from Shopify settings. **Character guidance**: 30-60 characters works best for most displays. Rich text description or subtitle below the hero title. **Content ideas**: * Brief blog description or mission statement * What readers will find (e.g., "Weekly insights on sustainable fashion") * Call to action (e.g., "Discover our latest stories") * Publication frequency (e.g., "New articles every Tuesday") **Formatting**: Supports rich text (bold, italic, links). **Length**: 1-2 sentences (100-200 characters) for optimal readability. Displays tag filter buttons in the hero area. Enabled by default. **When enabled**: Readers can click tags to filter articles by topic. **Filtering behavior**: * Shows all tags used across blog articles * Clicking tag filters to show only articles with that tag * "All" button returns to full article list **When to disable**: * Small blogs with few articles where filtering isn't needed * Single-topic blogs without diverse tags * You prefer manual navigation over filtering Recommended to keep enabled for blogs with 10+ articles and multiple topics. Controls pagination - how many articles display before "Load more" or pagination (2-50 articles, default: 20). **Sizing recommendations**: * **12-20 articles** (default: 20): Standard range, balances browsing with performance * **6-10 articles**: Image-heavy blogs, reduces page load time * **25-50 articles**: Text-heavy blogs, reduces pagination clicks **Performance considerations**: * More articles = longer initial page load * Fewer articles = more pagination interactions * Consider featured image sizes - larger images favor fewer articles **Best practice**: Keep at 15-25 for optimal user experience. Control how many tags show per article in the listing. * **Show all** (default): Display all tags assigned to each article * **Show first**: Display only the first tag per article **Show all** benefits: * Complete topic visibility * Better for content discovery * Helps readers understand article scope **Show first** benefits: * Cleaner, less cluttered appearance * Focus on primary topic * Better for articles with many tags Choose based on your tagging strategy and visual preference. Show or hide article tags in listing cards. Enabled by default. **When enabled**: Tags appear as links below article excerpt, allowing topic-based filtering. **When to keep enabled**: * Multi-topic blogs where categorization helps readers * You use tags consistently across articles * Content discovery through topics is important **When to disable**: * Single-topic focused blog * Minimalist design preference * Tags aren't consistently used Display article excerpt (preview text) in listing cards. Enabled by default. **Excerpt generation**: Automatically pulls first \~200 characters from article content. **Benefits of showing excerpts**: * Helps readers decide which articles to read * Provides context beyond just titles * Improves click-through rates on relevant content * Creates more substantial article cards **When to disable**: * Very short articles where excerpt doesn't add value * Image-focused blog where visuals are primary draw * Minimalist design with title and image only Strongly recommended to keep enabled for content engagement. Display publish date in article cards. Enabled by default. **When to show dates**: * Time-sensitive content (news, updates, trends) * Establishes recency and credibility * Readers care about content freshness * Regular publishing schedule you want to highlight **When to hide dates**: * Evergreen content where dates reduce perceived value * Older articles you don't want marked as "old" * Irregular publishing where dates call attention to gaps Consider your content strategy - timely vs. timeless. Display author name in article cards. Enabled by default. **When to show authors**: * Multi-author blogs where attribution matters * Building personal brands for contributors * Author expertise adds credibility * Team blog highlighting different perspectives **When to hide authors**: * Single-author blog where attribution is implied * Brand-focused content over personal attribution * Minimalist card design For single-author blogs, hiding author reduces redundancy. ## Configuring tags for filtering Tags are managed when creating/editing blog articles in Shopify admin. Go to **Shopify Admin → Online Store → Blog posts → \[Select article]**. In the right sidebar under "Tags", enter tags separated by commas. Tags automatically become filterable in your blog listing. Create standardized tag names across articles: * "Fashion Tips" not "fashion", "Fashion", "tips", "fashion-tips" * Capitalize consistently * Use 1-2 words per tag * Aim for 5-10 core tags across your blog **Tag best practices**: * Limit to 3-7 tags per article * Create core topic tags and reuse them * Avoid one-off tags (consolidate similar tags) * Tags should represent browseable topics, not keywords ## Best practices Upload optimized mobile and desktop hero images. Missing either image will break hero layout. Desktop landscape (1920x600px), mobile portrait (800x600px). Adjust overlay (40-60%) to ensure hero text remains readable against your images. Test across different devices and lighting conditions. Use custom title and content to set expectations and intrigue readers. Bland "Blog" title wastes valuable hero space. Keep tag filtering enabled for blogs with 10+ articles. Helps readers discover relevant content without scrolling through everything. Keep excerpt, tags, and date enabled for content blogs. Only minimal designs or image-focused blogs benefit from hiding these. Start with 15-20 articles per page. Adjust based on image sizes and page load performance. Monitor bounce rates. Create 5-10 core tags and use consistently. Tag sprawl (50+ unique tags) defeats filtering purpose and looks messy. Hide dates on evergreen content blogs to maintain perceived freshness. Older valuable content shouldn't seem outdated. Large hero images (over 500KB) significantly slow page load. Use TinyPNG or similar before upload. Target under 300KB. For articles with many tags (7+), use "Show first" to avoid cluttering cards. For 3-5 tags, "Show all" works well. # Cart page Source: https://docs.digifist.com/themes/mojave/pages-templates/cart Main cart items template displaying shopping cart contents The Cart items template (main-cart-items) displays the shopping cart page when customers click the cart icon (for stores not using cart drawer). Cart page overview ## What this section controls * Cart items list with quantities * Remove item functionality * Cart total calculation * Checkout button * Empty cart message ## Getting started In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. Use the page selector dropdown to select **Cart** to preview the cart page. The "Cart items" section controls the main cart template (when not using cart drawer). ## Template settings This section has **no customizable settings** - cart functionality is automatic and controlled by theme settings. **Automatic features**: * Cart item list with product images * Quantity adjustment (+/- buttons) * Remove item buttons * Price calculations (subtotal, totals) * Checkout button * Empty cart state * Continue shopping link **Cart type**: Whether this page or cart drawer displays is controlled in **Theme Settings → Cart**. ## Best practices Regularly test adding items, updating quantities, and removing items to ensure smooth cart experience. Many stores prefer cart drawer over cart page for faster checkout flow. Configure in Theme Settings → Cart. Use additional sections on cart template for product recommendations, shipping thresholds, or trust badges. Track cart abandonment rates - high rates may indicate checkout friction beyond cart display itself. # Account Dashboard Source: https://docs.digifist.com/themes/mojave/pages-templates/customers/account Customer account dashboard page showing order history and account overview ## What It Does The **Account Dashboard** template displays when logged-in customers visit `/account`. This page serves as the main customer account hub, showing recent order history, account details, and navigation to other account pages (addresses, orders). This is a **static template section** with no customizable settings. Layout and content are coded in the template. Customization requires code editing. ## Template Content ### Default Sections **Typical account dashboard includes:** * **Welcome message** - "Welcome, \[Customer Name]" * **Account navigation** - Links to Orders, Addresses, Account Details * **Recent orders** - List of recent orders (order number, date, total, status) * **Account overview** - Email, default address summary * **Logout button** ### User Experience **Customer flow:** 1. Customer logs in (via `/account/login`) 2. Redirected to account dashboard (`/account`) 3. Views recent orders, account info 4. Clicks navigation links to view full order history, edit addresses, etc. ## Best practices Account navigation should be prominent. Customers need easy access to Orders, Addresses, Account Settings pages. Display 3-5 most recent orders on dashboard. Link to full orders page for complete history. Account dashboard sees heavy mobile traffic. Ensure navigation tappable, orders readable on small screens. Logout button should be easily found (typically in account navigation or top-right). ## Related Pages * **[Login Page](/themes/mojave/pages-templates/customers/login)** - Customer login (entry to account) * **[Orders Page](/themes/mojave/pages-templates/customers/order)** - Full order history * **[Addresses Page](/themes/mojave/pages-templates/customers/addresses)** - Manage shipping addresses * **[Registration](/themes/mojave/pages-templates/customers/register)** - Create customer account ## Key Takeaways * **No settings to configure** - Template is static, no customization options in Theme Customizer * **Account hub** - Starting point for customer account activities * **Shows recent orders** - Quick view of order history (full history on Orders page) * **Navigation to account pages** - Links to Orders, Addresses, Account Details * **Requires login** - Customers must be logged in to access (redirects to login if not) * **Customization via code** - To modify layout/content, edit template code or use apps For custom account dashboard design, contact a Shopify developer or explore customer account customization apps. # Activate Account Source: https://docs.digifist.com/themes/mojave/pages-templates/customers/activate-account Customer account activation page for email verification ## What It Does The **Activate Account** template displays when customers need to verify their email address after registration (if email verification enabled in Shopify settings). This page allows customers to set their password after clicking the activation link sent to their email. This is a **static template section** with no customizable settings. Activation functionality is standard Shopify behavior. This page only appears if "email verification" is enabled in Admin settings. ## When This Page Displays ### Email Verification Enabled **Activate in Shopify Admin:** * Settings → Customer accounts → Enable "Customers must verify email" * After registration, customers receive activation email * Cannot login until email verified (clicks activation link) **Without email verification:** * This page never displays * Customers set password during registration, login immediately * No email verification step ## Template Content ### Default Activation Form **Typical activate account page includes:** * **Heading** - "Activate Your Account" or "Set Your Password" * **Email display** - Shows customer's email (read-only) * **Password** input (create password for new account) * **Confirm password** input (re-enter password) * **"Activate account" button** * **Instructions** - Explanation of activation process ### User Experience **Account activation flow:** 1. Customer registers on `/account/register` 2. Sees message "Check email to activate account" 3. Receives activation email (contains secure activation link) 4. Clicks activation link in email 5. Lands on activate account page (`/account/activate/[token]`) 6. Sets password (enters twice for confirmation) 7. Clicks "Activate account" button 8. Account activated, customer logged in automatically 9. Redirected to account dashboard ## Best practices Explain activation process on registration page ("Check email to activate account"). Sets customer expectations. Activation emails sometimes lands in spam. Instruct customers to check spam/junk if email doesn't arrive. Provide "Resend activation email" button/link. Customers may need new link if didn't receive or expired. Display password requirements clearly (minimum 5 characters). Reduces form errors. Activation links expire (typically 7 days). Communicate expiration, offer resend option. After activation, log customer in automatically. Eliminates extra login step. Include support link if customer can't receive activation email. Provide manual activation alternative. Email verification adds friction. Consider disabling for most stores (enable only if spam/fake accounts are issue). ## Email Verification Settings ### Enable/Disable in Admin **Shopify Admin → Settings → Customer accounts:** **"Customers must verify email" (checkbox):** * **Enabled:** Customers receive activation email after registration, must verify before login * **Disabled (Default):** Customers set password during registration, login immediately, no verification **When to enable:** * High spam/fake account registrations * B2B store requiring verified business emails * Compliance requirements (verified customer data) * Want to confirm customer email accuracy **When to disable (Recommended):** * Standard e-commerce stores (adds unnecessary friction) * Maximize conversion (extra step reduces registrations) * Customers purchase without accounts (guest checkout primary) ## Related Pages * **[Registration](/themes/mojave/pages-templates/customers/register)** - Registration page (triggers activation email) * **[Login Page](/themes/mojave/pages-templates/customers/login)** - Login page (can't login until activated) * **[Account Dashboard](/themes/mojave/pages-templates/customers/account)** - Redirected here after activation * **[Password Reset](/themes/mojave/pages-templates/customers/reset-password)** - Reset password (for activated accounts) ## Technical Notes ### Activation Link Token **Security:** * Activation link contains unique, secure token * Token tied to customer account + email * Expires after 7 days (default, may vary by Shopify plan) * One-time use (token invalidated after activation) **URL structure:** ``` yourstore.com/account/activate/[unique-token] ``` ### Activation Email **Sent via:** * Shopify's transactional email system * Automatically sent upon registration (if verification enabled) * From address: `noreply@shopify.com` (or custom sender) * Can customize: Admin → Settings → Notifications → Customer account invite **Email content:** * Subject: "Activate your \[Store Name] account" * Body: Activation link button, instructions * Customizable via Liquid templates in Admin ### Account Status Before Activation **Unactivated account:** * Exists in Admin → Customers list (status: "Disabled" or "Not activated") * Cannot login (activation required) * Cannot make purchases (must activate first) * Not subscribed to marketing emails until activated **After activation:** * Status changes to "Active" * Can login with email + password * Full account functionality ## Troubleshooting **Activation email not received:** * Check spam/junk folder (most common) * Verify email address correct during registration * Email provider may block Shopify emails (whitelist `noreply@shopify.com`) * Request new activation email (contact store support or re-register) **Activation link expired:** * Links expire after 7 days (varies by plan) * Contact store support for manual activation or re-registration * Store owner can send new invitation: Admin → Customers → \[Customer] → Send account invitation **"Invalid token" error:** * Link already used (one-time use) * Link expired (7 day limit) * URL malformed (email client broke link—copy entire URL) * Request new activation link **Can't set password (validation error):** * Password must be minimum 5 characters * Ensure passwords match (password + confirm password identical) * No leading/trailing spaces * Try simpler password, then update to stronger later **Account shows activated but can't login:** * Verify using correct email (registered email) * Try password reset (may have forgotten password set during activation) * Check Admin customer status (should show "Active") * Contact Shopify Support if persists ## Key Takeaways * **No template settings** - Activation page is static, no customization options * **Only appears if verification enabled** - Admin → Settings → Customer accounts → "Customers must verify email" * **Activation email required** - Customers click link in email to reach activation page * **Set password on activation** - Unlike registration where password set immediately * **Link expires (7 days)** - Security measure (request new link if expired) * **Auto-login after activation** - Customer logged in automatically upon successful activation * **Adds friction** - Email verification reduces registrations (disable unless necessary) * **Customization via email templates** - Customize activation email in Admin → Notifications **Recommendation:** Keep email verification disabled for most stores (standard behavior). Enable only if spam accounts, B2B verification, or compliance requirements justify added friction. # Addresses Source: https://docs.digifist.com/themes/mojave/pages-templates/customers/addresses Customer address book page for managing shipping and billing addresses ## What It Does The **Addresses Page** template displays when logged-in customers navigate to `/account/addresses` to manage saved shipping and billing addresses. Customers can add new addresses, edit existing ones, set a default address, and delete old addresses. This is a **static template section** with no customizable settings. Address management functionality is standard Shopify behavior. Customization requires code editing. ## Template Content ### Default Address Management Interface **Typical addresses page includes:** * **Heading** - "Addresses" or "Address Book" * **Add new address button** - Opens form to add address * **Saved addresses list** - All customer's saved addresses displayed as cards * **Default address indicator** - Badge/label showing default shipping address * **Edit button** (per address) - Edit address details * **Delete button** (per address) - Remove address from account * **"Set as default" button** (per address) - Make this the default address ### Address Card Display **Each saved address shows:** * Name (First + Last) * Address line 1 * Address line 2 (if provided) * City, Province/State, Zip/Postal code * Country * Phone number (if provided) * Default badge (if default address) ## User Experience **Managing addresses flow:** 1. Customer logs in, navigates to account 2. Clicks "Addresses" in account navigation 3. Lands on addresses page (`/account/addresses`) 4. Views all saved addresses 5. Clicks "Add new address" → Fills form → Saves 6. Or clicks "Edit" on existing address → Updates fields → Saves 7. Or clicks "Delete" on address → Confirms deletion 8. Or clicks "Set as default" → Address marked as default for checkout ## Best practices "Add new address" button should be easily found (top of page or prominent position). Customers need clear way to add addresses. Clearly mark default address (badge, icon, different styling). Customers should know which address is used at checkout. Make edit/delete buttons visually distinct. Prevent accidental deletions (use confirmation modal for delete). Validate addresses on save (correct format, valid zip code). Reduces shipping errors, returns. Address forms often used on mobile. Ensure form inputs large, easy to tap, appropriate keyboard types (number pad for zip code). No hard limit on saved addresses. Customers can save home, work, gift recipient addresses without deleting old ones. When editing, pre-fill form with existing address data. Customers only update changed fields. Show confirmation after add/edit/delete ("Address saved!", "Address deleted"). Provides feedback. ## Address Form Fields ### Standard Fields **Required fields:** * First name * Last name * Address line 1 * City * Country * Province/State (if applicable to country) * Zip/Postal code **Optional fields:** * Address line 2 (apartment, suite, unit) * Company (for business addresses) * Phone number **Auto-populated:** * Country (defaults to store's primary country) * Province/State dropdown (populated based on country selection) ## Related Pages * **[Account Dashboard](/themes/mojave/pages-templates/customers/account)** - Account hub (links to Addresses page) * **[Orders Page](/themes/mojave/pages-templates/customers/order)** - Order history (uses saved addresses for shipping) * **[Checkout](/themes/mojave/checkout)** - Checkout uses default address (or customer selects from saved addresses) ## Technical Notes ### Default Address **Behavior:** * First address added automatically becomes default * Default address pre-selected at checkout (customer can change) * Only one default address per customer * Setting new default removes default status from previous address **Checkout integration:** * At checkout, default address auto-fills shipping address form * Customer can select different saved address from dropdown/list * Or enter new address (can save to account during checkout) ### Address Limits **No hard limit:** * Customers can save unlimited addresses (practical limit \~20-30) * No Shopify-imposed maximum * Theme typically displays all addresses (may paginate if many) ### Address Data Storage **Stored in customer object:** * Addresses saved to customer account in Shopify database * Accessible via Liquid customer object: `{{ customer.addresses }}` * Persists across sessions (saved until customer deletes) ### Address Validation **Shopify provides:** * Basic validation (required fields, format checking) * Province/State validation (must match selected country) * Zip/Postal code format validation (country-specific) **Advanced validation:** * Requires apps or custom code (e.g., Google Address Validation API) * Verifies address exists, suggests corrections ### Edit vs Delete **Edit:** * Opens pre-filled form with address data * Customer updates fields * Saves changes (overwrites old address, same ID) **Delete:** * Removes address from customer account * Cannot be undone (customer must re-add if mistake) * If deleting default address, another address becomes default (or no default if last address) ## Troubleshooting **Can't add new address:** * Verify all required fields filled (First name, Last name, Address 1, City, Country, Province, Zip) * Check zip/postal code format (must match country's format—e.g., US 12345 or 12345-6789) * Province/State may not match country (re-select country first, then province) * Browser console errors? May be JavaScript issue (refresh page, try different browser) **Address not saving:** * Check internet connection (must be online to save) * Try submitting again (may have been temporary server issue) * Verify logged in (session may have expired—log back in) * Check browser console for errors (may be theme bug) **Can't edit address:** * Try deleting and re-adding (workaround if edit broken) * Check theme supports address editing (older themes may have bugs) * Clear browser cache, try again * Contact theme support if persists **Can't delete address:** * Some themes don't allow deleting default address (set different default first, then delete) * Try hard refresh (Cmd/Ctrl+Shift+R) * Check theme code supports delete (older themes may not have delete button) **Default address not applying at checkout:** * Verify address set as default (badge/star indicator on address) * Try setting default again (may not have saved properly) * Clear browser cookies, log in again * Check checkout page refreshed (may be showing cached address) **Province/State dropdown empty:** * Select country first (province dropdown populates based on country) * Some countries don't have provinces (dropdown doesn't appear—normal) * If country has provinces but dropdown empty, may be theme bug **Address format looks wrong:** * Different countries have different formats (US vs UK vs Japan address formats) * Shopify auto-formats based on country selection * If incorrect, may need to manually format in form (or contact theme developer) **Mobile form not working:** * Check form inputs large enough to tap (48x48px minimum) * Ensure correct keyboard type (number pad for zip code, full keyboard for address) * Test on actual device (browser mobile emulation may not match real behavior) ## Key Takeaways * **No template settings** - Addresses page is static, no customization in Theme Customizer * **Manage shipping addresses** - Add, edit, delete, set default address * **Default address used at checkout** - Pre-fills shipping address form (customer can change) * **No limit on saved addresses** - Customers can save unlimited addresses (home, work, gifts) * **Required fields** - Name, address line 1, city, country, province, zip/postal code * **First address is default** - Automatically becomes default when added (change later) * **Edit pre-fills form** - Existing address data populates form for easy updating * **Delete requires confirmation** - Prevent accidental address deletion * **Mobile-optimized** - Form inputs should be large, easy to tap on mobile * **Customization via code** - Modify layout or add features via theme code editing For custom address book features (address validation, auto-complete, custom fields), explore Shopify apps or hire a developer. # Login Source: https://docs.digifist.com/themes/mojave/pages-templates/customers/login Customer login page template with optional Shop Pay sign-in ## What It Does The **Login Page** template displays when customers navigate to your store's `/account/login` page to sign in to their customer account. This template shows a login form (email + password) and optionally the "Sign in with Shop" button powered by Shop Pay for faster authentication. Configure whether to show the "Sign in with Shop" button for streamlined login experience. This is a **template section** for the customer login page. Most login functionality is standard Shopify behavior. This section controls optional Shop Pay integration only. ## Getting Started Customers reach login page by clicking "Account" or "Sign In" in header navigation, or visiting `yourstore.com/account/login`. In Theme Customizer → Login template → Enable "Enable Sign in with Shop" checkbox to show Shop Pay login button. Create test customer account (Admin → Customers → Add customer), then test login on storefront with email/password. If enabled, customers with Shop Pay accounts can click "Sign in with Shop" button for faster login (redirects to Shop Pay authentication). ## Settings **Type:** Checkbox\ **Default:** Disabled (unchecked)\ **Powered by:** Shop Pay (Shopify's accelerated checkout platform) Controls whether "Sign in with Shop" button displays on login page. ### When Disabled (Default) * Only standard email + password login form displays * Customers must enter email and password manually * Traditional login experience (works for all customers) * No Shop Pay integration on login page ### When Enabled * "Sign in with Shop" button appears above or below standard login form * Customers with Shop Pay accounts can click button for one-tap login * Redirects to Shop Pay authentication (biometric or code entry on mobile) * After authentication, customer logged into your store automatically * Standard email/password form still available for non-Shop Pay customers ### How "Sign in with Shop" Works **For customers with Shop Pay:** 1. Customer clicks "Sign in with Shop" button 2. Redirected to Shop Pay (mobile app or web) 3. Authenticates with Shop Pay (Face ID, fingerprint, or one-time code) 4. Shop Pay confirms identity, returns customer to your store (logged in) 5. Faster than typing email + password **For customers without Shop Pay:** * Button still displays, but clicking prompts to set up Shop Pay or use standard login * No disruption to traditional login flow (email/password form always available) ### Benefits of Enabling **Faster login:** * Shop Pay customers log in with one tap (biometric authentication) * Reduces friction vs typing email + password (especially mobile) * Improves conversion (customers more likely to log in if convenient) **Mobile-optimized:** * Biometric auth (Face ID, Touch ID, fingerprint) works seamlessly on mobile * No typing on small keyboards * Familiar experience (customers use Shop Pay across Shopify stores) **Increased trust:** * Shop Pay is Shopify-owned (customers trust Shopify brand) * Secure authentication (no password storage on your site) * Reduces password fatigue (customers don't need to remember your store's password) **Checkout acceleration:** * Customers logged in via Shop Pay have payment info saved * Faster checkout after login (Shop Pay pre-fills payment/shipping) ### Drawbacks of Enabling **Confusion for some customers:** * Customers unfamiliar with Shop Pay may not understand button * Two login options (Shop Pay + email/password) can confuse * May need education ("Sign in with Shop is our fast login method") **Requires Shop Pay account:** * Only useful for customers who've used Shop Pay before (checked out via Shop Pay on any Shopify store) * New customers won't have Shop Pay accounts (must use standard login) **Additional button clutter:** * Adds visual element to login page (more buttons = busier page) * Some merchants prefer clean, minimal login (email/password only) ### Choosing Whether to Enable **Enable when:** * Mobile-heavy traffic (Shop Pay biometric auth perfect for mobile) * Customers likely have Shop Pay (your store or other Shopify stores use Shop Pay checkout) * Priority is conversion optimization (reduce login friction) * Modern, tech-forward customer base (comfortable with one-tap login) **Disable when:** * Minimal, traditional login aesthetic preferred * Customers unfamiliar with Shop Pay (B2B, older demographics, international customers where Shop Pay less common) * Want simplest possible login (one form, one method) * Testing shows Shop Pay button doesn't improve login rate ### Shop Pay Requirements **For customers to use Shop Pay login:** * Customer must have used Shop Pay checkout previously (on your store or any Shopify store) * Shop Pay creates account first time customer uses Shop Pay at checkout * Account linked to customer email + phone number * Available in Shop Pay supported regions (primarily US, UK, Canada—check Shopify docs for current list) ### Testing Shop Pay Login **Steps to test:** 1. Enable "Sign in with Shop" setting 2. Create test customer account (or use existing account) 3. Complete test purchase using Shop Pay checkout (to create Shop Pay account) 4. Log out of customer account 5. Go to `/account/login` page 6. Click "Sign in with Shop" button 7. Authenticate via Shop Pay (app or web) 8. Verify logged into customer account successfully **If button doesn't appear:** * Verify setting enabled in Theme Customizer * Hard refresh browser (Cmd/Ctrl+Shift+R) * Check Shop Pay available in your region * Verify theme supports Shop Pay login (older themes may not) ### Shop Pay Login vs Shop Pay Checkout **Shop Pay Checkout:** * Accelerated checkout at payment step (saves payment/shipping info) * Configured in Shopify Admin → Settings → Payments → Shop Pay * Separate from login page feature **Shop Pay Login:** * Accelerated login to customer accounts (this setting) * Uses Shop Pay authentication for fast sign-in * Requires Shop Pay Checkout to be enabled (customers create Shop Pay account at checkout) **Both work together:** * Customer uses Shop Pay Checkout → Creates Shop Pay account * Later, customer uses Shop Pay Login → Fast authentication * After login, customer proceeds to Shop Pay Checkout → One-tap purchase ### Best Practices **Enable for mobile-first stores:** * Shop Pay biometric auth perfect for mobile (Face ID, fingerprint) * Desktop customers can still use standard login **Keep both options visible:** * Don't hide email/password form if Shop Pay enabled * Customers should always have fallback (if Shop Pay not working or unavailable) **Educate customers:** * Add help text near button ("Sign in with Shop for fast login") * Link to Shopify's Shop Pay info page * Consider tooltip or info icon explaining Shop Pay login **Monitor usage:** * Track login method usage (Shop Pay vs standard) * If Shop Pay button unused, consider disabling (reduces clutter) * If heavily used, keep enabled and promote **Test in your region:** * Shop Pay availability varies by country * Test with customer in your primary market * If Shop Pay unavailable in your region, disable setting **Recommendation:** Enable if your store uses Shop Pay at checkout and has mobile-heavy traffic. Disable for minimal aesthetic or if customers unlikely to have Shop Pay accounts. Test to see if button improves login conversion. ## Best practices Shop Pay login ideal for mobile-first stores. Biometric auth (Face ID, fingerprint) faster than typing password on small keyboard. Always show email + password form even if Shop Pay enabled. Customers need fallback if Shop Pay unavailable or unfamiliar. Create Shop Pay account (checkout with Shop Pay), then test "Sign in with Shop" button. Ensure authentication flow works smoothly. Add help text or tooltip explaining Shop Pay login ("Fast, secure login with biometric authentication"). Reduces confusion. Track login method usage (Shop Pay vs standard). If Shop Pay button unused, consider disabling to simplify page. Shop Pay primarily available in US, UK, Canada. Check if available in your primary market before enabling. If clean, simple login preferred, disable Shop Pay button. Standard email/password sufficient for most stores. Shop Pay Login works best when Shop Pay Checkout enabled (customers create Shop Pay accounts during checkout). ## Login Page Structure ### Default Content **Typical login page includes:** * **Heading** - "Customer Login" or "Sign In" * **Shop Pay button** (if enabled) - "Sign in with Shop" button * **Login form** - Email input, Password input, "Sign In" submit button * **"Forgot password?" link** - Links to password reset page * **"Create account" link** - Links to registration page * **Guest checkout option** (optional) - "Continue as guest" button (if theme supports) ### User Flow **Standard login flow:** 1. Customer enters email + password 2. Clicks "Sign In" button 3. Redirected to account dashboard (`/account`) **Shop Pay login flow:** 1. Customer clicks "Sign in with Shop" button 2. Redirected to Shop Pay authentication (app or web) 3. Authenticates with biometric or one-time code 4. Shop Pay verifies identity, returns to your store 5. Customer logged in, redirected to account dashboard **Failed login:** * Error message displays ("Incorrect email or password") * Customer can retry or use "Forgot password?" link ## Common Use Cases ### Mobile-First Fashion Store **Settings:** Enable "Sign in with Shop" **Setup:** Mobile-heavy traffic, customers use Shop Pay at checkout frequently, Shop Pay login reduces mobile typing friction. **Best for:** Fashion, apparel, beauty stores with mobile shoppers ### Traditional Login (Disable Shop Pay) **Settings:** Disable "Sign in with Shop" **Setup:** Minimal login page, standard email + password form only, clean aesthetic. **Best for:** B2B stores, older demographics, regions where Shop Pay uncommon ### Conversion-Optimized Login **Settings:** Enable "Sign in with Shop" + guest checkout button **Setup:** Multiple login options (Shop Pay biometric, standard email/password, guest checkout). Maximize conversion by offering choice. **Best for:** High-traffic stores prioritizing conversion optimization ### International Store (Shop Pay Unavailable) **Settings:** Disable "Sign in with Shop" **Setup:** Store primarily serves regions where Shop Pay unavailable (e.g., Asia, South America). Shop Pay button wouldn't function. **Best for:** International stores outside Shop Pay supported regions ## Related Sections & Pages * **[Account Dashboard](/themes/mojave/pages-templates/customers/account)** - Customer account page (after login) * **[Registration Page](/themes/mojave/pages-templates/customers/register)** - Customer registration template * **[Password Reset](/themes/mojave/pages-templates/customers/reset-password)** - Forgot password template * **[Header](/themes/mojave/header/header)** - Navigation with "Account" link (triggers login) ## Technical Notes ### Shop Pay Integration **API/Authentication:** * Shop Pay login uses Shopify's authentication API * Customer identity verified by Shop (Shopify's consumer app) * OAuth-like flow: Your store → Shop Pay → Authentication → Return to store * Secure (no passwords stored on your site) **Customer Matching:** * Shop Pay account linked to customer email + phone * When logged in via Shop Pay, matches to customer account in your store by email * If no matching customer account exists, creates new account (if customer registrations enabled) ### Cookie/Session Management **Standard login:** * Email/password form creates session cookie * Cookie stored in browser, grants access to customer-specific pages * Cookie expires on browser close or logout **Shop Pay login:** * Shop Pay authentication creates same session cookie * Functionally identical to standard login (customer logged in, access granted) * Cookie persists until logout or browser close ### Guest Checkout Consideration **Some themes offer "Continue as guest":** * Allows checkout without login/registration * If theme supports, "Continue as guest" button may appear on login page * Bypasses login requirement for one-time purchases ### Backwards Compatibility **Older themes may not support Shop Pay login:** * "Enable Sign in with Shop" setting may not exist * Update theme to latest version for Shop Pay login support * Or manually add Shop Pay login button (requires developer) ### Shop Pay Availability **Supported regions (as of 2024):** * United States * Canada * United Kingdom * Expanding to more regions (check Shopify docs for current list) **International stores:** * If primary market outside supported regions, Shop Pay button won't function * Disable setting (button displays but authentication fails) ## Troubleshooting **"Sign in with Shop" button not displaying:** * Verify "Enable Sign in with Shop" setting enabled in Theme Customizer → Login template * Check theme supports Shop Pay login (older themes may not) * Clear browser cache (Cmd/Ctrl+Shift+R), refresh page * Verify Shop Pay available in your region **Shop Pay authentication failing:** * Check customer has Shop Pay account (used Shop Pay checkout previously) * Verify customer's email matches email used for Shop Pay account * Try standard login (email/password) as fallback * Check Shopify status page for Shop Pay outages **Customers confused by Shop Pay button:** * Add help text or tooltip explaining Shop Pay ("Fast login with biometric authentication") * Link to Shopify's Shop Pay info page * Consider disabling if confusion outweighs benefit **Shop Pay button showing but not working:** * Shop Pay may be unavailable in customer's region * Customer may not have Shop Pay account (must use Shop Pay checkout first to create) * Try creating Shop Pay account (do test checkout with Shop Pay enabled), then test login **Login page redirecting incorrectly:** * Check customer account exists (Admin → Customers) * Verify account not disabled (check customer status in Admin) * Test with different customer account (may be account-specific issue) **Standard login not working:** * Verify email/password correct (case-sensitive) * Check customer account active (not disabled in Admin) * Try "Forgot password?" link to reset password * Contact Shopify Support if persistent (may be account issue) **Shop Pay button doesn't match theme styling:** * Shop Pay button styled by Shopify (limited customization) * Some CSS customization possible (requires developer) * If styling critical, consider disabling Shop Pay button **Mobile Shop Pay authentication not using biometric:** * Customer may not have biometric auth enabled on device (Face ID, Touch ID, fingerprint) * Shop Pay falls back to one-time code via SMS * Ensure customer's phone number linked to Shop Pay account ## Key Takeaways * **One setting only:** "Enable Sign in with Shop" checkbox (enabled = Shop Pay button displays) * **Shop Pay login:** Fast authentication using biometric or one-time code (Shop Pay accounts) * **Standard login always available:** Email + password form displays regardless of Shop Pay setting * **Mobile-optimized:** Shop Pay biometric auth perfect for mobile shoppers (Face ID, Touch ID, fingerprint) * **Requires Shop Pay account:** Customers must have used Shop Pay checkout previously (on your or any Shopify store) * **Regional availability:** Shop Pay primarily US, UK, Canada (check Shopify docs for current regions) * **Enable for mobile stores:** If mobile-heavy traffic and customers use Shop Pay at checkout * **Disable for simplicity:** If minimal login preferred or customers unlikely to have Shop Pay accounts * **Test authentication:** Create Shop Pay account, test "Sign in with Shop" button flow * **Works with Shop Pay Checkout:** Shop Pay Login and Shop Pay Checkout complementary features For more about Shop Pay, see [Shopify's Shop Pay documentation](https://help.shopify.com/en/manual/checkout-settings/shop-pay). # Order Details Source: https://docs.digifist.com/themes/mojave/pages-templates/customers/order Customer order history and details page ## What It Does The **Order Page** template displays when logged-in customers view their order history at `/account` under "Orders" section, or when viewing specific order details at `/account/orders/[order-id]`. This page shows all past orders with details (order number, date, status, items, totals) and allows customers to track shipments and reorder products. This is a **static template section** with no customizable settings. Order display functionality is standard Shopify behavior. Customization requires code editing. ## Template Content ### Order History View **Typical orders list includes:** * **Heading** - "Order History" or "My Orders" * **Order cards/rows** - Each past order displayed as card or table row * **Order number** - Unique order ID (e.g., #1001, #1002) * **Order date** - When order placed * **Order status** - Fulfilled, Unfulfilled, Partially Fulfilled, Cancelled, Refunded * **Order total** - Final amount paid * **View order button** - Links to detailed order page ### Order Details View **Individual order page (`/account/orders/[order-id]`) includes:** * **Order number & date** * **Order status** - Fulfillment and payment status * **Items ordered** - Product names, variants, quantities, prices * **Subtotal, shipping, tax, discounts, total** * **Shipping address** * **Billing address** * **Payment method** (last 4 digits of card, or payment type) * **Tracking information** (if available) - Tracking number, carrier link * **Reorder button** (optional) - Add all items to cart for easy reordering ## User Experience **Viewing orders flow:** 1. Customer logs in, navigates to account dashboard 2. Clicks "Orders" in account navigation 3. Sees list of all past orders (order history) 4. Clicks "View order" on specific order 5. Lands on detailed order page 6. Views items, total, shipping address, tracking info 7. Optionally clicks tracking link to check shipment status 8. Optionally clicks "Reorder" to add items to cart ## Best practices Display order status prominently (Fulfilled, Shipped, Delivered, Cancelled). Customers need immediate status visibility. If tracking available, make tracking number/link prominent. Customers frequently check order pages for tracking. Include "Reorder" button on order details (adds all items to cart). Convenient for repeat purchases. Display order date in readable format ("January 15, 2024" not "2024-01-15"). Improves scannability. Optionally include "Download Invoice" link (PDF invoice). Useful for business customers, expense tracking. Include "Contact us about this order" link. Makes it easy for customers to reach support regarding specific order. Order page sees heavy mobile traffic (customers checking orders on-the-go). Ensure all details readable, buttons tappable. If customer has 20+ orders, paginate order history (10-20 per page). Improves page load and usability. ## Order Status Types ### Fulfillment Status **Unfulfilled:** * Order placed but not shipped yet * Items being prepared/packed * Typical for new orders (first 1-2 days) **Partially Fulfilled:** * Some items shipped, others pending * Multiple shipments (backorder situations) * Tracking available for fulfilled items **Fulfilled:** * All items shipped * Tracking information available * Final fulfillment status (delivered afterwards tracked by carrier) **Cancelled:** * Order cancelled (by customer or merchant) * Payment refunded (if already charged) * Items not shipped **Refunded:** * Order refunded after fulfillment * Items may have been returned * Payment returned to customer ### Payment Status **Pending:** * Payment authorization pending * Manual payment capture required (merchant must capture) **Paid:** * Payment captured * Standard status for most orders **Refunded:** * Full or partial refund issued * Money returned to customer **Voided:** * Payment authorization voided (before capture) * Funds never captured from customer ## Related Pages * **[Account Dashboard](/themes/mojave/pages-templates/customers/account)** - Account hub (links to Orders page, shows recent orders) * **[Login Page](/themes/mojave/pages-templates/customers/login)** - Must be logged in to view orders * **[Addresses](/themes/mojave/pages-templates/customers/addresses)** - Addresses used for shipping (displayed on order page) ## Technical Notes ### Order Object **Liquid access:** ```liquid theme={null} {{ customer.orders }} - All customer's orders {{ order.name }} - Order number (e.g., #1001) {{ order.created_at }} - Order date {{ order.fulfillment_status }} - Status {{ order.line_items }} - Items in order ``` **Order properties available:** * Order number, date, status * Line items (products, variants, quantities, prices) * Totals (subtotal, shipping, tax, discounts, total) * Addresses (shipping, billing) * Tracking info (if fulfilled) ### Tracking Integration **Tracking numbers:** * Added in Shopify Admin when order fulfilled * Admin → Orders → \[Order] → Fulfill items → Enter tracking number + carrier * Automatically appears on customer's order page * Link generated to carrier's tracking page (USPS, UPS, FedEx, etc.) **Tracking email:** * Shopify automatically emails customers when tracking added * Email includes tracking link * Customer can also check tracking on order page ### Reorder Functionality **How reorder works:** 1. Customer clicks "Reorder" button on order details page 2. All items from that order added to cart 3. Quantities match original order 4. Customer redirected to cart page 5. Can adjust quantities or proceed to checkout **Implementation:** * Requires custom code or theme support * Not all themes include reorder button out-of-box * Can be added via apps or custom development ### Order History Limits **No hard limit:** * All customer orders display in order history * Can view orders from years ago (as long as customer account exists) * Shopify retains order data indefinitely **Pagination:** * Themes may paginate for many orders (10-20 per page) * Improves page load for customers with 50+ orders ### Guest Orders **Guest checkout orders:** * Not linked to customer account (no account at time of purchase) * Don't appear in customer's order history (if they create account later) * Accessible only via order status page (emailed after purchase) **Linking guest orders:** * If customer creates account with same email as guest order, Shopify may auto-link * Or customer can contact support to link guest orders to account ## Troubleshooting **Orders not showing:** * Verify logged in to correct account (email used at time of purchase) * Check orders placed with same email (guest orders may not show—see above) * Verify orders actually placed (check order confirmation email) * Contact store support if orders missing (may need manual linking) **Can't view order details:** * Check logged in (session may have expired) * Try hard refresh (Cmd/Ctrl+Shift+R) * Check order ID correct in URL (ensure viewing own order, not someone else's) * Theme bug possible (contact theme support) **Tracking link not working:** * Verify tracking number entered correctly in Admin * Check carrier link (sometimes carrier websites down) * Try copying tracking number, paste in carrier website directly * Allow 24 hours after fulfillment (tracking may not be active immediately) **Order status not updating:** * Status synced from Admin (may take a few minutes to update) * Hard refresh browser (Cmd/Ctrl+Shift+R) * Check Admin status (if Admin shows updated, refresh customer page) * Allow 1-2 hours for third-party fulfillment updates **Reorder button not working:** * Check all products still available (out-of-stock items may prevent reorder) * Product may have been deleted (can't reorder discontinued items) * JavaScript error possible (check browser console) * Try adding items manually if reorder fails **Order page showing wrong orders:** * Verify logged in to correct account (not shared device with someone else's session) * Check email associated with account (Admin → Customers → \[Customer]) * May be seeing another customer's orders (security issue—report immediately) **Mobile order page not loading:** * Check internet connection (require online to load order data) * Try desktop browser (test if mobile-specific issue) * Clear mobile browser cache * Verify logged in on mobile ## Key Takeaways * **No template settings** - Order page is static, no Theme Customizer customization * **View all past orders** - Order history lists all customer orders (no time limit) * **Order details page** - Click order to view detailed breakdown (items, totals, addresses, tracking) * **Order status displayed** - Fulfillment status (Unfulfilled/Fulfilled) and payment status (Paid/Refunded) * **Tracking information** - Tracking numbers and carrier links appear when order fulfilled * **Reorder functionality** - Optionally add "Reorder" button (requires theme support or custom code) * **Guest orders separate** - Guest checkout orders don't appear in account (unless manually linked) * **Mobile usage high** - Customers frequently check orders on mobile (ensure mobile-optimized) * **Customization via code** - Add features (invoices, reorder, custom layouts) via theme editing or apps For custom order page features (invoices, advanced filtering, custom order fields), explore Shopify apps or hire a developer. # Register Source: https://docs.digifist.com/themes/mojave/pages-templates/customers/register Customer account registration page for creating new accounts ## What It Does The **Registration Page** template displays when visitors navigate to `/account/register` to create a new customer account. This page shows a registration form collecting email, password, and optional additional details (name, phone) to create customer login credentials. This is a **static template section** with no customizable settings. Form fields and layout are standard Shopify behavior. Customization requires code editing. ## Template Content ### Default Registration Form **Typical registration page includes:** * **Heading** - "Create Account" or "Register" * **First name** input (optional or required based on Shopify settings) * **Last name** input (optional or required) * **Email** input (required - becomes login username) * **Password** input (required - minimum 5 characters) * **"Create account" button** * **"Already have an account? Sign in" link** - Links to login page ### User Experience **Customer registration flow:** 1. Customer clicks "Create Account" link (header nav or login page) 2. Lands on `/account/register` page 3. Fills out registration form (email, password, name) 4. Clicks "Create account" button 5. Account created, customer logged in automatically 6. Redirected to account dashboard (`/account`) ## Best practices Keep required fields minimal (email + password only). Optional fields reduce friction, increase registrations. Display password requirements clearly (e.g., "Minimum 5 characters"). Reduces form errors. Prominent "Already have an account? Sign in" link. Prevents duplicate account attempts. Registration often happens on mobile. Ensure form inputs large, easy to type on small keyboards. Consider allowing guest checkout (no registration required). Many customers prefer one-time purchase without account. Link to privacy policy near registration form. Builds trust, legal compliance. Optionally enable email verification in Shopify settings (Admin → Settings → Customer accounts → Accounts are required). Consider adding social login buttons (Google, Facebook) via apps. Reduces registration friction. ## Registration Settings (Shopify Admin) ### Configure in Admin **Shopify Admin → Settings → Checkout → Customer accounts:** **Options:** * **Accounts are disabled** - No customer accounts (guest checkout only) * **Accounts are optional** - Customers can checkout as guest or create account * **Accounts are required** - Customers must create account to checkout **Recommendation:** "Accounts are optional" (best for conversion—allows guest checkout, offers account creation) ### Form Field Requirements **Required fields:** * Email (always required) * Password (always required, minimum 5 characters) **Optional fields (configurable in theme code):** * First name * Last name * Phone number * Custom fields (requires code customization) ## Related Pages * **[Login Page](/themes/mojave/pages-templates/customers/login)** - Customer login (for existing accounts) * **[Account Dashboard](/themes/mojave/pages-templates/customers/account)** - Redirected here after registration * **[Activate Account](/themes/mojave/pages-templates/customers/activate-account)** - Email verification page (if enabled) * **[Password Reset](/themes/mojave/pages-templates/customers/reset-password)** - Forgot password page ## Key Takeaways * **No template settings** - Registration form is standard Shopify, no Theme Customizer customization * **Email + password required** - Minimum fields for account creation * **Auto-login after registration** - Customer logged in automatically upon successful registration * **Configure account requirement** - Admin → Settings → Checkout → Customer accounts (optional vs required) * **Guest checkout recommended** - "Accounts optional" setting balances conversion vs customer data * **Email verification optional** - Enable in Admin settings (customers verify email before login) * **Customization via code** - Add custom fields, social login, or styling via theme code or apps For custom registration forms with additional fields or social login, explore Shopify App Store or hire a developer. # Reset Password Source: https://docs.digifist.com/themes/mojave/pages-templates/customers/reset-password Customer password reset page for recovering forgotten passwords ## What It Does The **Password Reset** template displays when customers click "Forgot password?" link on login page and enter their email. This page allows customers to set a new password using a secure reset link emailed to them. This is a **static template section** with no customizable settings. Password reset functionality is standard Shopify behavior. Customization requires code editing. ## Template Content ### Default Password Reset Form **Typical password reset page includes:** * **Heading** - "Reset Password" or "Create New Password" * **New password** input (enter new password) * **Confirm password** input (re-enter new password for verification) * **"Reset password" button** * **Success/error messages** - Confirmation or validation errors ### User Experience **Password reset flow:** 1. Customer clicks "Forgot password?" on login page 2. Enters email, clicks "Submit" 3. Receives password reset email (contains secure reset link) 4. Clicks reset link in email 5. Lands on password reset page (`/account/reset/[token]`) 6. Enters new password (twice for confirmation) 7. Clicks "Reset password" button 8. Password updated, customer logged in automatically 9. Redirected to account dashboard ## Best practices Password reset emails sometimes land in spam. Instruct customers to check spam/junk folders if email doesn't arrive. Display password requirements (minimum 5 characters). Helps customers create valid passwords on first try. Require password entry twice (confirmation field). Reduces typo errors when setting new password. Reset links expire after 24 hours (Shopify default). Customers must request new link if expired. Provide instructions on password reset page ("Enter new password below"). Reduces customer confusion. After successful reset, automatically log customer in. Eliminates extra login step. Include contact support link if customer can't receive reset email. Provide alternative recovery method. Don't allow overly simple passwords ("12345"). Educate customers on strong passwords (mix letters/numbers/symbols). ## Password Reset Process (Full Flow) ### Step 1: Request Reset **Customer on login page:** 1. Clicks "Forgot password?" link 2. Enters email address 3. Clicks "Submit" 4. Sees confirmation "Reset email sent" ### Step 2: Email Sent **Shopify sends automated email:** * Subject: "\[Store Name] - Reset your password" * Contains secure reset link (unique token in URL) * Link expires in 24 hours * Sent from `noreply@shopify.com` (or custom email if configured) ### Step 3: Reset Password **Customer clicks email link:** 1. Lands on password reset page (this template) 2. Enters new password 3. Re-enters password (confirmation) 4. Clicks "Reset password" 5. Password updated in database 6. Customer logged in automatically 7. Redirected to account dashboard ### Step 4: Login with New Password **Future logins:** * Customer uses email + new password * Old password no longer valid ## Related Pages * **[Login Page](/themes/mojave/pages-templates/customers/login)** - Customer login (has "Forgot password?" link) * **[Account Dashboard](/themes/mojave/pages-templates/customers/account)** - Redirected here after password reset * **[Registration](/themes/mojave/pages-templates/customers/register)** - Create new account (if customer doesn't have one) ## Technical Notes ### Reset Link Token **Security:** * Reset link contains unique, cryptographically secure token * Token tied to specific customer account + email * Expires after 24 hours (can't be reused after expiration) * One-time use (token invalidated after successful password reset) **URL structure:** ``` yourstore.com/account/reset/[unique-token] ``` ### Email Delivery **Reset email sent via:** * Shopify's transactional email system * Sent automatically upon reset request * From address: `noreply@shopify.com` (or custom sender if configured in Admin) * Can be customized: Admin → Settings → Notifications → Customer account password reset **If email not received:** * Check spam/junk folder * Verify email address correct (typo in email entry) * Request new reset link (old link may have expired) * Check email provider not blocking Shopify emails ### Password Requirements **Shopify minimum:** * 5 characters minimum length * No complexity requirements (letters/numbers/symbols optional) **Recommendation:** * Encourage 8+ characters * Mix uppercase, lowercase, numbers, symbols * Avoid common passwords ("password", "12345", etc.) ### Auto-Login After Reset **After successful password reset:** * Customer automatically logged in (session cookie created) * No need to manually log in with new password * Redirected to account dashboard * Password reset email link invalidated (can't be reused) ## Troubleshooting **Reset email not received:** * Check spam/junk folder (most common issue) * Verify email address entered correctly (no typos) * Check email provider settings (some block automated emails) * Wait 5-10 minutes (email delivery can be delayed) * Request new reset link (via login page "Forgot password?" again) **Reset link expired:** * Links expire after 24 hours (security measure) * Request new reset link from login page * Use new link within 24 hours **"Invalid token" error:** * Reset link already used (one-time use only) * Link expired (24 hour limit) * Link malformed (email client may have broken URL) * Request new reset link **Password doesn't meet requirements:** * Ensure password at least 5 characters * Check no leading/trailing spaces * Try simple password first (e.g., "password123"), then update to stronger later **New password not working:** * Hard refresh login page (Cmd/Ctrl+Shift+R) * Clear browser cookies, try again * Ensure using correct email (tied to reset link) * Request new password reset (may have been system error) **Customer can't receive any emails from store:** * Check customer's email provider (Gmail, Outlook, etc.) settings * Verify email not in blocked senders list * Try alternative email address * Contact customer via phone/support (manual account recovery) ## Key Takeaways * **No template settings** - Password reset page is standard Shopify, no customization options * **Secure reset link** - Emailed to customer, expires in 24 hours, one-time use * **Minimum 5 characters** - Shopify password requirement (encourage stronger) * **Auto-login after reset** - Customer logged in automatically upon successful password change * **Check spam folder** - Most common issue is reset email in spam/junk * **Request new link if expired** - Links expire after 24 hours (security) * **One-time use** - Reset link can't be reused after successful password change * **Customization via email templates** - Customize reset email content in Admin → Notifications For custom password reset email design or functionality, edit email templates in Shopify Admin → Settings → Notifications → Customer account password reset. # Page Template (main-page) Source: https://docs.digifist.com/themes/mojave/pages-templates/page Configure your basic page template with simple title display control The Page template (main-page) is the simplest template, controlling how standard pages display. It provides minimal customization - primarily controlling page title visibility. Page template overview ## What this section controls * Page title visibility * Page content display (automatic) ## Getting started In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. Use the page selector dropdown to select **Pages** and choose any page to preview. The "Page" section controls the main page template. ## Template settings Controls whether the page title displays at the top of the page content. Disabled by default. **When to enable**: * Standard informational pages (About, FAQ, Policies) * You want clear page identification * Page doesn't have custom sections with title **When to disable** (default): * Custom landing pages where title would be redundant * You're using page banner or other sections with custom titles * Minimalist design where title isn't needed **Note**: Page content always displays regardless of title setting. ## Best practices main-page is ideal for basic content pages. For more complex layouts, add sections above/below or use page-banner section. Keep title disabled (default) when using page-banner or other title-bearing sections to avoid duplication. Enable title for standard pages (About, Contact, Policies) where clear identification helps users orient themselves. Enhance pages by adding sections above/below main-page section in template editor for richer layouts. # Password page Source: https://docs.digifist.com/themes/mojave/pages-templates/password Password protection page template for pre-launch and private storefronts ## What It Does The **Password Page** template displays when your store is password-protected (pre-launch, maintenance mode, or private/exclusive access). This template shows a password entry form, optional message, and branding to visitors before they can access your store. This is a **static template section** with no customizable settings in the section itself. To enable password protection and configure messaging, go to Shopify Admin → Online Store → Preferences → Password protection. ## When Password Page Displays ### Password Protection Enabled **Activate in Shopify Admin:** 1. Online Store → Preferences 2. Enable "Password protection" checkbox 3. Enter password (share with authorized visitors) 4. Add message (optional - appears on password page) 5. Save **Result:** All visitors see password page until correct password entered ### Common Use Cases **Pre-launch (Coming Soon):** * Store under construction, not ready for public * Collect emails, build anticipation * Share password with internal team for testing **Maintenance Mode:** * Site updates in progress * Temporary closure (inventory, system changes) * Prevent orders during downtime **Private/Exclusive Access:** * Wholesale store (password for approved buyers only) * Members-only boutique * Exclusive product drops (password shared with VIPs) **Seasonal Closure:** * Business closed during off-season * Vacation mode for small businesses * Password page informs customers of return date ## Template Structure ### Default Content **Typical password page includes:** * **Logo** - Store logo (configured in Header Password section) * **Heading** - Store name or custom title * **Message** - Custom text from Admin (e.g., "We're launching soon! Enter password to preview.") * **Password form** - Input field and submit button * **Footer** - Optional footer links, social media, copyright ### Customizing Message **In Shopify Admin → Online Store → Preferences:** * **Password:** The password visitors must enter * **Message to your visitors:** Text appearing above password form * Supports plain text (no HTML/formatting) * Typical length: 1-3 sentences **Example messages:** * "Our store is launching soon. Stay tuned!" * "Site under maintenance. We'll be back shortly." * "This is a private store. Contact us for access." * "Invite-only access. Enter password to shop." ## Password Page vs Main Store ### What Visitors See **Before password entry (Password page):** * Simplified header (logo only, from Header Password section) * Password form * Custom message * Basic footer * **No access to:** Products, collections, cart, checkout **After correct password (Main store):** * Full site access (products, collections, cart, checkout) * Standard header with navigation * All store functionality enabled * Password saved in browser cookie (don't need to re-enter during session) ### Session Handling **Cookie saves password:** * Entering correct password sets browser cookie * Cookie expires when browser closed or session ends * Visitors must re-enter password on next visit (unless cookie persists) **Logging out:** * Clear browser cookies to force password page to reappear * Or use private/incognito browsing to test password page ## Best practices Use password page message to build excitement (pre-launch) or inform (maintenance). Include return date if applicable. For pre-launch: Share with team, beta testers, friends/family. For private stores: Only approved customers. Add email signup form to password page (requires app or code). Build launch list during pre-launch. Use secure password (not "password123"). Prevents random access. Change periodically for private stores. Visit store in incognito mode to see public password page. Ensure message, branding, password form work. Remove password protection when ready to launch: Admin → Preferences → Uncheck "Password protection" → Save. Add social links to password page footer. Let pre-launch visitors follow on Instagram, Twitter, etc. Customize Header Password section (logo, positioning, transparency). Match password page to brand aesthetic. ## Customization Options ### Via Shopify Admin **Limited customization available:** * **Password:** Admin → Preferences → Password protection → Password field * **Message:** Admin → Preferences → Password protection → Message to your visitors * **Logo/Header:** Theme Customizer → Header (Password) section → Upload logo, configure styling ### Via Theme Customizer **Header Password section:** * Upload logo (appears on password page) * Set logo width, position (left/center) * Enable transparent header background * Show/hide separator line **Footer section:** * Standard footer appears on password page (configure as normal) * Add social media links, copyright text ### Via Code Editing **For developers:** * Edit `templates/password.json` (JSON template) or `templates/password.liquid` (Liquid template) * Modify section `/sections/section-password.liquid` * Customize background image, colors, typography * Add email signup form, countdown timer, video background * Integrate with Mailchimp/Klaviyo for launch list ### Via Apps **3rd-party apps:** * "Coming Soon" apps for advanced password pages (email collection, timers, animations) * Check Shopify App Store for "password page customization" apps ## Technical Notes ### Password Storage **How it works:** * Password entered → Checked against password in Admin settings * If correct → Browser cookie set with session token * Cookie allows access to full store (bypasses password page) * Cookie expires on browser close (or configurable duration) **Security:** * Password NOT stored in customer account system * Separate from customer login passwords * Single password for all visitors (not individual accounts) ### SEO Implications **Password-protected stores not indexed:** * Search engines can't access password-protected content * No SEO value while password enabled * Remove password protection to allow search engine crawling **Pre-launch SEO prep:** * While password-protected, configure SEO settings (page titles, meta descriptions) * Add products, collections, content (ready to be indexed when password removed) * When password disabled, search engines can immediately crawl full site ### Shopify Staff Bypass **Staff logged in to Shopify Admin:** * Automatically bypass password page * Can preview store without entering password * To see password page (testing): Log out of Shopify Admin or use incognito browsing ### Email Signup (Advanced) **Adding email collection:** * Requires custom code or app * Capture emails during pre-launch * Popular tools: Mailchimp embeds, Klaviyo forms, custom Liquid code * Developers: Add form to `section-password.liquid` template section ## Troubleshooting **Can't find password page settings:** * Shopify Admin → Online Store → Preferences → Scroll to "Password protection" section * Must enable "Restrict access with password" checkbox first **Password page not showing:** * Verify password protection enabled in Admin → Preferences * Check you're logged out of Shopify Admin (staff bypass password page when logged in) * Test in private/incognito browser window **Password not working:** * Check password entered correctly (case-sensitive) * Verify password set correctly in Admin → Preferences * Try clearing browser cookies, re-enter password **Logo/branding not showing:** * Upload logo in Theme Customizer → Header (Password) section * Check Header Password section settings (logo width, position) * Refresh browser after making changes **Custom message not displaying:** * Enter message in Shopify Admin → Preferences → Password protection → "Message to your visitors" * Message supports plain text only (no HTML) * Save changes, refresh password page **Password page shows after disabling:** * Ensure "Password protection" checkbox unchecked in Admin → Preferences * Clear browser cache (Cmd/Ctrl+Shift+R) * May take a few minutes to propagate (Shopify cache) **Email signup form not working:** * Verify form code added correctly (if custom) * Check app configuration (if using app) * Test form submission (receive test email) **Footer links missing:** * Configure footer in Theme Customizer → Footer section * Footer appears on both password page and main store * Add links, social media icons as normal ## Common Scenarios ### Pre-Launch Store **Setup:** Enable password protection, message "Launching Spring 2024! Enter password for preview.", share password with team/testers\ **Purpose:** Build store privately, test before public launch ### Maintenance Mode **Setup:** Enable password protection, message "We're updating our store. Back in 24 hours!", share password with staff only\ **Purpose:** Prevent customer orders during maintenance ### VIP/Exclusive Access **Setup:** Enable password protection, message "Exclusive access for VIP members. Contact us for password.", share password with approved customers\ **Purpose:** Private store for wholesale, members-only boutique ### Seasonal Closure **Setup:** Enable password protection, message "We're closed for the season. Reopening October 1st. Follow us on Instagram for updates."\ **Purpose:** Inform customers of closure, maintain brand presence ### Product Drop Hype **Setup:** Enable password protection week before drop, message "New collection drops Friday! Password will be emailed to subscribers."\ **Purpose:** Build anticipation, reward subscribers with early access ## Related Documentation * **[Header (Password)](/themes/mojave/header-password)** - Password page header section (logo, styling) * **[Footer](/themes/mojave/footer/footer)** - Footer section (appears on password page) * **[404 Page](/themes/mojave/pages-templates/404)** - Error page template * **Shopify Admin** - [Password protection settings](https://help.shopify.com/en/manual/online-store/themes/password-page) ## Key Takeaways * **No section settings** - Password page section itself has no customizable settings * **Enable in Admin** - Shopify Admin → Preferences → Password protection * **Custom message** - Add 1-3 sentence message in Admin (appears on password page) * **Header customization** - Use Header (Password) section for logo, styling * **Pre-launch use** - Perfect for building store before public launch * **Private store use** - Restrict access to approved customers only * **SEO blocked** - Password-protected content not indexed by search engines * **Cookie-based access** - Correct password sets cookie, bypasses password page during session * **Code customization** - Advanced features (email signup, timers) require code editing or apps For custom password page designs with email collection, countdown timers, or advanced features, explore Shopify App Store "Coming Soon" apps or hire a developer. # Gift Card Source: https://docs.digifist.com/themes/mojave/products/gift-card Gift card template section for customizing gift card page branding with logo images or SVG code ## What It Does The **Gift Card** section controls the branding and visual appearance of Shopify gift card pages. Customize the logo displayed at the top of gift card pages and on the printable gift card itself, using either uploaded images or SVG code for sharp, scalable graphics. ## Getting Started Navigate to **Online Store > Themes > Customize > Gift Cards** template (automatic template for gift card purchases) Add your store logo using the Logo Image picker, or use SVG Code for vector graphics Add a separate logo for the gift card graphic itself, or leave empty to use main logo Test by creating a test gift card product and purchasing it to see the full gift card experience ## Settings **Type:** Image picker\ **Default:** Empty Your store logo displayed at the **top of the gift card page** (the page customers see when they receive/redeem a gift card). ### What This Logo Controls This logo appears on the **gift card landing page**: * Top of page (header area) * Visible when customer clicks gift card link in email * Shown when customer views gift card to check balance * Brand identifier for gift card redemption experience **Does NOT appear:** * On the gift card graphic itself (use Logo Card Image for that) * In email notifications (controlled by email settings) * On printed receipts ### Image Specifications **Recommended dimensions:** * **Width:** 200-400px (optimal) * **Height:** 60-120px (optimal) * **Aspect ratio:** Horizontal logos work best (landscape orientation) * **File format:** PNG with transparent background (recommended) or JPG * **File size:** Under 100KB (page header images should load quickly) ### Image Guidelines **Best practices:** * Use your standard store logo (maintains brand consistency) * Transparent background PNG for professional appearance * High resolution for retina displays (2x actual display size) * Horizontal orientation (vertical logos may appear too large) * Simple, recognizable logo (avoids complexity at small sizes) **Avoid:** * Extremely small images (will appear blurry when scaled up) * Very tall logos (can dominate header, push content down) * Complex logos with fine details (may not be legible at header size) * Text-heavy logos (hard to read at smaller sizes) **Type:** Textarea\ **Default:** Empty\ **Info:** "Overwrites logo image" Paste SVG (Scalable Vector Graphics) code for your logo instead of using an uploaded image. Provides perfectly sharp logos at any size and typically loads faster than image files. ### SVG vs Image **Why use SVG instead of image?** * **Perfect scaling:** Looks crisp at any resolution (retina, 4K, print) * **Smaller file size:** Typically 20-80% smaller than equivalent PNG/JPG * **Faster loading:** Inline SVG requires no HTTP request * **Color flexibility:** Can be dynamically styled with CSS * **Print quality:** Perfect for any DPI **When to use Image instead:** * Logo has photographic elements or gradients * Logo uses special fonts not web-safe * You don't have SVG version of logo * Logo is complex with many paths (very large SVG code) ### How to Get SVG Code **Method 1: Export from design software** 1. Open logo in Adobe Illustrator, Figma, or Sketch 2. Export as SVG (optimize for web if option available) 3. Open exported .svg file in text editor 4. Copy all code (starts with ``) 5. Paste into this field **Method 2: Convert image to SVG** 1. Use online converter (e.g., vectormagic.com, autotracer.com) 2. Upload your logo image 3. Download SVG file 4. Open in text editor and copy code **Note:** Traced SVGs from complex images may have large code (10,000+ characters). Hand-crafted SVGs from design software are usually cleaner. ### SVG Code Example ```svg theme={null} STORE ``` ### Important: Overwrites Logo Image When SVG code is present, it **completely replaces** the Logo Image: * Logo Image setting is ignored * SVG code takes priority * To revert to image, clear SVG code field entirely **Best practice:** Use either Logo Image OR Logo SVG Code, not both. Choose based on logo type and quality requirements. ### SVG Code Tips **Do:** * Use `viewBox` attribute for responsive scaling * Set reasonable `width` and `height` attributes * Optimize SVG code (remove unnecessary attributes, comments) * Test SVG displays correctly after pasting **Don't:** * Include external stylesheet references (may not load) * Use JavaScript in SVG (security risk, won't execute) * Paste very complex SVGs (5000+ lines of code—use image instead) * Forget closing `` tag (will break rendering) ### Validating SVG Code Before pasting: 1. Open SVG code in browser to verify it displays correctly 2. Check code starts with `` 3. Confirm no external dependencies (fonts, images, stylesheets) 4. Test on different screen sizes (SVG should scale properly) **Type:** Image picker\ **Default:** Empty\ **Info:** "Defaults to logo image" Logo displayed **on the gift card graphic itself**—the visual card representation customers see and can print. If empty, uses the main Logo Image. ### What This Logo Controls This logo appears on the **gift card graphic**: * Visual gift card design (the "card" customers see) * Printable gift card version * Email attachments (if theme includes card preview) * Balance-check view **Separate from:** * Page header logo (controlled by Logo Image) * Email logo (controlled by email settings in Shopify Admin) ### When to Use Separate Card Logo **Use separate Logo Card Image when:** **Different branding for gift cards:** * Page header: Standard color logo * Gift card: White/inverted logo (for dark card background) **Size optimization:** * Page header: Wide horizontal logo * Gift card: Square or vertical logo (fits card dimensions better) **Seasonal variations:** * Page header: Year-round logo * Gift card: Holiday-themed logo for gift-giving season **Print considerations:** * Page header: Standard screen logo * Gift card: High-contrast logo optimized for printing **Leave empty (use default) when:** * Same logo works for both page and card * Logo is already versatile (works on any background) * Simpler management (one logo to maintain) * Brand consistency is priority ### Card Logo Image Specifications Gift cards have constrained space, so logo sizing differs from page header: **Recommended dimensions:** * **Width:** 200-300px (smaller than page header logo) * **Height:** 80-150px (or proportional to width) * **Aspect ratio:** Square or near-square works best on card * **File format:** PNG with transparent background (essential) * **File size:** Under 100KB **Key difference from page logo:** * **Smaller overall size** (card has limited space) * **Transparent background required** (card has its own background) * **High contrast** (needs to show clearly on card background) ### Background Considerations Gift card templates use **background images or colors**. Your card logo must work with: * Dark backgrounds (use light/white logo) * Light backgrounds (use dark logo) * Patterned backgrounds (use solid logo with contrast) **Tip:** Check your theme's gift card background design, then choose logo color/style that provides sufficient contrast. **Type:** Textarea\ **Default:** Empty\ **Info:** "Overwrites logo card image and defaults to logo SVG code" SVG code for the gift card graphic logo. Provides the same benefits as Logo SVG Code but specifically for the card design. ### Fallback Hierarchy This setting has a **multi-level fallback**: 1. **If Logo Card SVG Code is present:** Uses this SVG (highest priority) 2. **Else if Logo SVG Code is present:** Uses main Logo SVG Code 3. **Else if Logo Card Image is present:** Uses Logo Card Image 4. **Else:** Uses main Logo Image **In simple terms:** * Card SVG > Main SVG > Card Image > Main Image This allows flexible logo management: * Set all four: Maximum customization (separate vector graphics for page and card) * Set only main logo (image or SVG): Same logo everywhere (simplest) * Set main logo + card logo: Different styles for page vs card * Mix and match as needed ### When to Use Separate Card SVG **Use separate Logo Card SVG Code when:** **Color variations:** ```svg theme={null} ``` **Size/detail variations:** * Page header: Detailed logo with tagline * Gift card: Simplified logo icon only (fits card space) **Print optimization:** * Card SVG: Simplified paths for clean printing * Page SVG: More complex with gradients (screen-only effects) **Leave empty (use fallback) when:** * Main Logo SVG works for both page and card * Simplicity is priority (fewer settings to manage) * Logo is monochrome and versatile ### SVG Code Requirements for Cards Same technical requirements as Logo SVG Code: * Complete SVG code (`` to ``) * Responsive `viewBox` attribute * No external dependencies * Optimized file size (under 5KB ideally) **Additional considerations for cards:** * **High contrast:** Ensure paths have strong color (card backgrounds vary) * **Simplicity:** Gift cards are smaller visual space than page headers * **Test printing:** View in print preview to confirm logo looks good printed ### Managing Multiple Logo Variants **Strategy 1: Minimal (Easiest)** * Set only Logo Image: One logo everywhere * **Pros:** Simplest management, consistent branding * **Cons:** May not be optimized for all contexts **Strategy 2: Page vs Card (Balanced)** * Set Logo Image (page header) * Set Logo Card Image (gift card) * **Pros:** Customized for each context * **Cons:** Two logos to maintain **Strategy 3: Vector Everywhere (Best Quality)** * Set Logo SVG Code (page header) * Set Logo Card SVG Code (card) * **Pros:** Perfect quality, fast loading * **Cons:** Requires SVG versions of logo **Strategy 4: Hybrid (Flexible)** * Set Logo SVG Code (page header, vector) * Set Logo Card Image (card, image) * **Pros:** Optimized page, simple card * **Cons:** Mixed file types to manage ## Best practices Always use PNG images with transparent backgrounds for logos. Opaque backgrounds (white boxes around logo) look unprofessional on gift card pages. Use SVG code for page header logo when possible. Provides perfect sharpness on all devices and loads faster than images. Create a test gift card product, purchase it (free in test mode), and view the actual gift card page to verify logos display correctly. Gift cards are often printed. Ensure logos have sufficient resolution and contrast to look good printed on paper. Check your gift card template's background color/image. Ensure logo has enough contrast to be clearly visible against that background. Gift cards have limited space. Use simplified logo versions (icon only, no tagline) on cards if your full logo is complex. Unless you have specific reason for different logos, use the same logo on page and card for brand consistency and simpler management. Optimize logo images to under 100KB. Use tools like TinyPNG or ImageOptim. Smaller files load faster without visible quality loss. ## Common Use Cases ### Standard Setup (Same Logo Everywhere) **Settings:** * Logo Image: Store logo PNG (transparent background) * Logo SVG Code: Empty * Logo Card Image: Empty (defaults to Logo Image) * Logo Card SVG Code: Empty (defaults to Logo Image) **Result:** Simple management, same logo on page header and gift card graphic **Best for:** Most stores, consistent branding, straightforward logo usage ### Premium Setup (SVG Everywhere for Quality) **Settings:** * Logo Image: Empty (not used) * Logo SVG Code: Store logo SVG (page header) * Logo Card Image: Empty * Logo Card SVG Code: Same SVG as Logo SVG Code (or leave empty to use Logo SVG Code) **Result:** Perfect logo quality on all devices and screen resolutions, fastest loading **Best for:** Brands with vector logo assets, quality-focused stores, performance optimization ### Dark Gift Card Background (Inverted Logo) **Settings:** * Logo Image: Black logo PNG (page header, light background) * Logo SVG Code: Empty * Logo Card Image: White logo PNG (gift card, dark background) * Logo Card SVG Code: Empty **Result:** Logo color adapts to background—dark on light page, light on dark card **Best for:** Gift card templates with dark backgrounds, high-contrast branding ### Seasonal Gift Card Branding **Settings:** * Logo Image: Standard year-round logo (page header) * Logo SVG Code: Empty * Logo Card Image: Holiday-themed logo or badge (October-December) * Logo Card SVG Code: Empty **Result:** Standard logo on page, special holiday version on gift card graphic **Best for:** Gift-giving seasons (holidays, Mother's Day, Valentine's), special promotions **Note:** Remember to update Logo Card Image back to standard after seasonal period. ### Simplified Card Logo for Space **Settings:** * Logo Image: Full logo with text and tagline (page header) * Logo SVG Code: Empty * Logo Card Image: Logo icon only, no text (fits card better) * Logo Card SVG Code: Empty **Result:** Detailed logo on page where space allows, simplified version on constrained gift card **Best for:** Complex logos, logos with long text, maximizing card design space ## Layout Behavior ### Gift Card Page Structure When a customer views a gift card, the page structure is: ``` [Page Header with Logo Image/SVG] ↓ [Gift Card Graphic with Logo Card Image/SVG] ↓ [Gift Card Code] ↓ [Balance Information] ↓ [Apply to Order / Print Buttons] ``` ### Logo Sizing on Page **Page Header Logo:** * Automatically scales to fit header height (typically 60-80px tall) * Maintains aspect ratio (width scales proportionally) * Centered or left-aligned depending on theme design * Responsive (smaller on mobile devices) **Gift Card Graphic Logo:** * Sized to fit card design (varies by theme) * Typically smaller than page header logo (limited card space) * Positioned on card graphic (top-center usually) * May adjust position based on card template design ### Mobile Behavior On mobile devices: * **Page header logo:** Scales down to fit mobile header (typically 40-50px tall) * **Gift card graphic:** Scales to fit mobile screen width while maintaining aspect ratio * **Gift card logo:** Scales proportionally with gift card graphic Both image and SVG logos are fully responsive and adapt to screen size. ### Print Behavior When customers print gift cards: * **Logo Card Image/SVG** renders at high resolution for print quality * SVG logos print perfectly at any DPI * Image logos print at uploaded resolution (why high-res images matter) * Page header logo is typically hidden in print view (only card prints) **Print recommendation:** Test print preview to verify logo quality before publishing. ## Related Sections * **Header** - Main site header logo (separate from gift card logo) * **Footer** - Footer branding (separate from gift card logo) * Email templates - Gift card email notifications (configured in Shopify Admin, not theme) **Note:** Gift Card section is **isolated** to the gift card template. It doesn't affect other templates or store branding. ## Technical Notes ### Gift Card Template Isolation The Gift Card section only affects the **gift card template** (gift\_card.liquid). It has no impact on: * Main store templates (homepage, product pages, collections) * Email notifications (controlled separately in Shopify Admin > Settings > Notifications) * Checkout (controlled by Shopify, not theme) * Admin interfaces ### Image vs SVG Rendering **Image rendering (PNG/JPG):** ```html theme={null} ``` * HTTP request to load image file * Width/height attributes set via CSS * May appear blurry on high-DPI screens if not 2x resolution **SVG rendering:** ```html theme={null} ``` * Inline SVG, no HTTP request * Perfect at any resolution * Slightly larger HTML payload (SVG code in page source) ### Fallback Logic Implementation The theme checks settings in this priority order: ```liquid theme={null} {% if settings.logo_card_svg_code != blank %} {% elsif settings.logo_svg_code != blank %} {% elsif settings.logo_card_image != blank %} {% else %} {% endif %} ``` This means **any higher-priority setting** overrides lower-priority settings. ### SVG Security and Sanitization Shopify **sanitizes SVG code** to prevent security issues: * JavaScript removed (SVG animations may not work) * External resource references removed (linked fonts, images) * Script tags stripped * Event handlers removed (onclick, onload, etc.) **Safe SVG features:** * Paths, shapes, text * Fill and stroke colors * Transforms and basic styling * ViewBox and dimensions ### File Size Recommendations **Logo Image (PNG/JPG):** * **Target:** 50-100KB * **Maximum:** 200KB (larger files slow gift card page loading) * **Optimization:** Use TinyPNG, ImageOptim, or Shopify's automatic optimization **Logo SVG Code:** * **Target:** Under 5KB (well-optimized SVG) * **Maximum:** 20KB (very complex logos may reach this) * **Optimization:** Use SVGO, SVGOMG.com, or export optimizer in design software **Larger files impact:** * Slower gift card page loading * Longer time for customers to view gift card * Poor experience on slow connections * Unnecessary bandwidth usage ### Accessibility Considerations **Logo images:** * Automatically include `alt` text (uses store name or "Gift card logo") * Screen readers announce logo presence * Decorative role (not critical content) **Logo SVG:** * May include `` tag for screen reader context * Aria attributes for accessibility * Semantically equivalent to image logo **Best practice:** Ensure logo communicates brand visually, but page functions without logo for accessibility. ### Testing Gift Cards **How to test:** 1. Create gift card product in Shopify Admin 2. In test mode, purchase gift card (no actual charge) 3. Check email for gift card link 4. Click link to view gift card page 5. Verify logos display correctly on page and card graphic 6. Test print preview 7. Test on mobile device **Test checklist:** * Page header logo loads and displays correctly * Gift card graphic logo loads and displays correctly * Logos have appropriate size/scale * Logos have sufficient contrast against backgrounds * Print preview shows logo clearly * Mobile view displays logos properly * SVG logos (if used) render without errors ## Troubleshooting **Logo not displaying on gift card page:** * Verify Logo Image is uploaded (or Logo SVG Code is pasted) * Check image file uploaded successfully (re-upload if necessary) * Confirm you're viewing an actual gift card page (not Theme Customizer preview) * Clear browser cache and hard refresh (Cmd/Ctrl + Shift + R) * Check image file isn't corrupted (open directly in browser) **SVG logo not appearing:** * Verify SVG code starts with `<svg` and ends with `</svg>` * Check for syntax errors in SVG code (missing tags, unclosed elements) * Ensure SVG doesn't require external resources (fonts, images) * Test SVG code in a separate HTML file to verify it's valid * Try simplifying SVG code (remove animations, complex effects) **Logo card image not showing (page logo shows instead):** * Verify Logo Card Image is actually uploaded (check field isn't empty) * Confirm Logo Card SVG Code isn't set (it overrides Logo Card Image) * Check card template includes card logo rendering (theme code issue if missing) * View actual gift card (not Theme Customizer) to confirm **Logo looks blurry or pixelated:** * Upload higher resolution image (2x display size minimum) * Use SVG instead of image for perfect quality * Check theme isn't forcing small image to scale up excessively * Verify image format is PNG (not overly-compressed JPG) **Logo has wrong colors on gift card:** * Check if gift card background is different than expected (dark vs light) * Use separate Logo Card Image with appropriate color (white for dark backgrounds, dark for light backgrounds) * Test SVG with `fill` color appropriate for card backgrounds * Preview actual gift card page to verify background color **Logo too large or too small:** * Theme controls logo sizing via CSS (not editable in Customizer) * Try different logo dimensions (theme may have optimized size) * For card logo, ensure dimensions are appropriate for constrained card space * Advanced: Edit theme code to adjust logo size CSS **Print preview shows no logo or low-quality logo:** * Ensure Logo Card Image is high resolution (higher than screen display) * Use SVG for perfect print quality at any size * Check browser print preview settings (some browsers reduce image quality) * Test on different browsers (Safari, Chrome, Firefox vary in print handling) **Changes not taking effect:** * Click "Save" in Theme Customizer after making changes * Refresh gift card page (not Theme Customizer) * Clear browser cache completely * Check you're editing the correct theme (published vs draft) * View in incognito/private browser window to rule out caching # Product Page (PDP) Source: https://docs.digifist.com/themes/mojave/products/product-page Configure your product detail page with flexible media galleries, variant pickers, and dynamic content blocks The Product information template (main-product) controls how individual products display on your store. It provides extensive customization for media galleries, product details, purchasing options, and informational content through a flexible block system. <Frame> <img alt="Product page overview" /> </Frame> ## What this section controls * Product media gallery layouts (grid, slider, mobile carousel) * Video autoplay and controls * Sticky product information behavior * Product title, price, SKU, and variants * Add to cart and dynamic checkout buttons * Collapsible product details and pop-ups * Related products and ratings * Inventory notices and pickup availability * Media description metadata block ## Getting started <Steps> <Step title="Open Theme Customizer"> In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. </Step> <Step title="Navigate to a product page"> Use the page selector dropdown at the top center to select **Products** and choose any product to preview. </Step> <Step title="Locate the template"> The "Product information" section controls the main product template. Additional sections can be added above or below it in the product template. </Step> </Steps> <Frame> <img alt="Product information section location" /> </Frame> ## Template settings <Tabs> <Tab title="Media Gallery"> <AccordionGroup> <Accordion title="Gallery layout on desktop"> Choose how product images display on desktop devices: * **Grid**: All images displayed in a grid layout, supporting the media description block * **Slider with thumbnails**: Main large image with thumbnail navigation below * **Grid with large first item**: First image displayed large, remaining images in grid below **Selection guidance**: * **Grid**: Best for showcasing multiple detailed product views, allows media description * **Slider**: Traditional e-commerce layout, familiar user experience * **Grid with large first item**: Emphasizes hero image while showing additional views </Accordion> <Accordion title="Gallery layout on mobile"> Control mobile gallery behavior independently from desktop: * **Carousel** (default): Swipeable horizontal carousel with dots or thumbnails * **Slider**: Vertical sliding with pagination controls Mobile layouts automatically optimize for touch interaction and smaller screens. </Accordion> <Accordion title="Gallery pagination style on mobile"> Choose pagination indicators for mobile gallery: * **Thumbnails**: Small thumbnail images for navigation * **Progress bar** (default): Linear progress indicator showing scroll position * **Navigation**: Arrow buttons for advancing through images Progress bar provides the cleanest, least intrusive experience. </Accordion> <Accordion title="Gallery size on desktop"> Control the width ratio between media gallery and product information: * **Extra Large**: Maximum width for media, narrow info column * **Large** (default): Balanced 60/40 or 65/35 split * **Half-sized**: Even 50/50 split between media and info **Sizing considerations**: * Large product catalogs with many images → Extra Large or Large * Detailed product information → Half-sized for more info space * Apparel/visual products → Extra Large emphasizes imagery </Accordion> <Accordion title="Adaptive media ratio"> When enabled, the media container adjusts to match each image's natural aspect ratio instead of using a fixed ratio for all images. **Benefits**: Displays images at their intended proportions without cropping **Considerations**: Can create uneven gallery appearance if images have varying ratios Recommended when all product images share similar aspect ratios. </Accordion> <Accordion title="Media autoplay"> Control automatic video playback behavior: * **None** (default): Videos require manual play * **First video**: Only the first video autoplays * **All videos**: Every video autoplays when scrolled into view **Important limitations**: * Autoplaying all videos impacts page performance and site speed * YouTube/Vimeo don't allow multiple videos from same host playing simultaneously * If you have multiple videos from one host, use "None" or "First video" only **Best practices**: Use "First video" if hero video is critical, otherwise use "None" for performance. </Accordion> <Accordion title="Loop video"> Makes videos repeat continuously after finishing. Enable this when autoplay is set to "First video" or "All videos" for seamless playback. Looping works best with short product demonstration videos under 30 seconds. </Accordion> <Accordion title="Video controls"> Shows play/pause and timeline controls for videos. **Note**: Only works for videos hosted on Shopify, not external YouTube or Vimeo embeds. Disable for cleaner autoplay experience, enable for customer control over playback. </Accordion> </AccordionGroup> </Tab> <Tab title="Product Info"> <AccordionGroup> <Accordion title="Enable sticky product info on scroll"> When enabled (default), the shorter area between media gallery and product information stays fixed while scrolling. **Behavior logic**: * If media gallery is shorter → media sticks while scrolling * If product info is shorter → info sticks while scrolling **Benefits**: * Keeps add to cart button always visible on long pages * Maintains context while viewing extensive product images * Improves conversion by keeping purchase options accessible Highly recommended to keep enabled for better user experience. </Accordion> <Accordion title="Show price when sold out"> Controls whether price displays for sold-out products. Disabled by default. **When to enable**: * You want to show pricing even when unavailable * Price context helps customers decide to sign up for back-in-stock notifications * Transparency about pricing regardless of availability **When to disable**: * Focus attention on "Sold Out" status rather than price * Reduce customer frustration seeing price of unavailable items </Accordion> <Accordion title="Details style"> Choose between Style 1 (default) or Style 2 for visual presentation of product information area. Style variants affect spacing, typography, and layout of product details. Test both to see which better matches your brand aesthetic. </Accordion> </AccordionGroup> </Tab> <Tab title="Media Description"> <AccordionGroup> <Accordion title="About media descriptions"> The media description block displays metadata about your product images below the gallery. **Only visible when gallery layout is set to "Grid"** (not available with slider layouts). Use this feature to provide technical specifications, material information, or photography credits alongside product images. </Accordion> <Accordion title="Media description"> Main heading or introductory text for the media description block. Example: "Product Specifications" or "Material & Care Details" </Accordion> <Accordion title="Description items (1-5)"> Add up to 5 label/value pairs to display structured information: **Each item has two fields**: * **Label**: The descriptor (e.g., "Material:", "Dimensions:", "Weight:") * **Value**: The corresponding information (e.g., "100% Organic Cotton", "12" x 8" x 4"", "2.5 lbs") **Common use cases**: * Material composition and care instructions * Product dimensions and weight * Color accuracy notes * Photography credits or model information * Manufacturing origin or certifications **Item 1**: Label + Value\ **Item 2**: Label + Value\ **Item 3**: Label + Value\ **Item 4**: Label + Value\ **Item 5**: Label + Value Leave unused items blank - they won't display. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block settings Build your product page by adding blocks for different types of content. Blocks can be dragged to reorder. <Tabs> <Tab title="Core Content Blocks"> <AccordionGroup> <Accordion title="Title block"> Displays the product title/name. Limit 1 per product page. No configuration required - automatically pulls from product.title field. Position this block where you want the product name to appear, typically at the top of the product info column. </Accordion> <Accordion title="SKU block"> Shows the product SKU (Stock Keeping Unit) code. Limit 1 per product page. Automatically displays the selected variant's SKU. Useful for customer reference, inventory tracking, or B2B stores where SKU visibility is important. </Accordion> <Accordion title="Text block"> Add custom text content with styling options. Unlimited blocks allowed. **Configuration**: * **Text**: Enter your content (default: "Text block") * **Text style**: Choose appearance: * **Link**: Styled as clickable link * **Body**: Standard body text * **Uppercase**: All caps text * **Link to products**: Optionally link to filtered collection: * **None**: Plain text * **Type**: Links to all products of same type * **Vendor**: Links to all products from same vendor **Use cases**: * Brand name or designer attribution * Product category or collection reference * Short promotional taglines * Custom badges or labels </Accordion> <Accordion title="Price block"> Displays product pricing including compare-at prices and sale indicators. Limit 1 per product page. **Automatic features**: * Regular and sale price display * Strike-through for compare-at pricing * Discount percentage calculation * Currency formatting * Unit pricing (when applicable) **Note**: If an @app block (like product ratings) is placed directly after the price block, it will be right-aligned alongside the price (except when subscription options are present). </Accordion> <Accordion title="Product rating block"> Shows product star rating and review count. Limit 1 per product page. **Configuration**: * **Rating**: Set default rating (0-5 stars, 0.5 increments, default: 3.5) * Set to 0 to hide the default rating display **Requirements**: Install a product rating/review app for live ratings. Without an app, displays the configured default rating. Popular rating apps: Judge.me, Loox, Stamped.io, Yotpo Learn more: [Product rating block documentation](https://help.shopify.com/manual/online-store/themes/theme-structure/page-types#product-rating-block) </Accordion> <Accordion title="@app block"> Integration point for third-party app blocks. Unlimited blocks allowed. Apps that support product page blocks will appear in the block list. Common examples: * Review and rating apps (Judge.me, Loox) * Wishlist apps * Size recommendation tools * 3D viewers or AR apps * Custom product options apps * Subscription apps No configuration needed - added automatically when compatible apps are installed. </Accordion> </AccordionGroup> </Tab> <Tab title="Purchase Blocks"> <AccordionGroup> <Accordion title="Variant picker block"> Displays product options/variants (size, color, style, etc.). Limit 1 per product page. **Configuration**: * **Title**: Internal name for the block (default: "Variant picker") - helps identify it in the block list * **Make variants clickable**: When enabled, customers can click sold-out variants * Useful for back-in-stock notification integrations * Allows customers to select and sign up for alerts on specific variants * **Size guide page**: Select a page containing size guide content * Opens in a modal popup when customers click the size guide link * **Requirement**: Must configure "Size name" in **Theme Settings → Products → Size guide** * Create a dedicated page with size chart information **Variant display**: Automatically renders all product options as dropdowns, swatches, or buttons based on theme settings. </Accordion> <Accordion title="Buy buttons block"> Add to cart button and dynamic checkout options. Limit 1 per product page. **Configuration**: * **Show quantity**: Display quantity selector (enabled by default) * **Show quantity label**: Add "Quantity:" label text above selector * **Quantity type**: Layout style: * **Inline** (default): Quantity selector integrated with add to cart button * **Separate**: Quantity selector on separate line above button * **Show dynamic checkout buttons**: Display express checkout options (enabled by default) * Shows PayPal, Apple Pay, Google Pay, Shop Pay based on enabled payment methods * Customers skip cart and go directly to checkout * [Learn more about dynamic checkout](https://help.shopify.com/manual/using-themes/change-the-layout/dynamic-checkout) * **Show recipient information form for gift cards**: Enable gift card scheduling features * Allows buyers to schedule gift card delivery * Add personal message * Specify recipient email * Only appears for gift card products * [Learn more about gift card recipient fields](https://help.shopify.com/manual/online-store/themes/customizing-themes/add-gift-card-recipient-fields) </Accordion> <Accordion title="Inventory notice block"> Display low stock warnings to create urgency. Limit 1 per product page. **Configuration**: * **Inventory threshold**: Set stock level for notice (1-50 products, default: 5) * Shows "Only X left in stock!" when inventory drops below threshold * Only displays when inventory is tracked and below threshold * Doesn't show for products with inventory not tracked **Best practices**: * Set threshold based on your typical order volume (5-10 works for most stores) * Position near buy buttons to create urgency * Honest scarcity messaging builds trust and encourages purchases </Accordion> <Accordion title="Pickup availability block"> Show local pickup availability at retail locations. Limit 1 per product page. **Configuration**: * **Boxed**: Display in boxed visual style **Requirements**: * Local pickup must be configured in Shopify Settings → Shipping * Store locations must be added with inventory Automatically displays available pickup locations and current stock levels at each location. </Accordion> </AccordionGroup> </Tab> <Tab title="Information Blocks"> <AccordionGroup> <Accordion title="Collapsible row block"> Create expandable/collapsible sections for product details. Unlimited blocks allowed. **Configuration**: * **Open by default**: Start expanded (enabled by default) * **Hide on Gift card products**: Don't show for gift cards (enabled by default) * **Heading**: Section title (e.g., "Shipping Information", "Care Instructions") * **Show content from product description**: Pull from product description field * Overwrites manual content and page content when enabled * **Content from product - Type**: Choose which part of description to use: * **All product content**: Everything from product description * **Content above the delimiter**: Everything before `----` in description * **Content below the delimiter**: Everything after `----` in description * Requires adding `----` delimiter in product description field * **Content**: Manual rich text content (overridden if using product description) * **Content from page**: Pull content from a dedicated page **Common uses**: * Shipping & Returns policy * Size & Fit guide * Care Instructions * Materials & Sustainability * Warranty Information **Content strategy**: Use the `----` delimiter in product descriptions to split content between multiple collapsible rows automatically. </Accordion> <Accordion title="Pop-up block"> Create clickable link that opens content in modal popup. Unlimited blocks allowed. **Configuration**: * **Link label**: Text for clickable link (e.g., "Size Guide", "Shipping Details") * **Show content from product description**: Pull from product description * **Content from product - Type**: Same delimiter options as collapsible rows * **Content**: Manual rich text content * **Content from page**: Pull from dedicated page **Difference from collapsible rows**: * Pop-ups open in modal overlay (take focus, dim background) * Collapsible rows expand inline (stay in page flow) **Use pop-ups for**: * Detailed size charts or measurement guides * Extensive care or warranty information * Content that would disrupt page flow if expanded inline * Information that benefits from focused attention </Accordion> <Accordion title="Related products block"> Display complementary/recommended products. Limit 1 per product page. **Configuration**: * **Title**: Heading for related products section (e.g., "You may also like", "Complete the look") **Product selection**: Uses Shopify's Recommendations API with complementary products algorithm. **Customization**: Products can be customized through the **Search & Discovery** app in Shopify admin. * Manually select specific products * Adjust algorithm parameters * Control recommendation logic [Learn more about complementary products](https://help.shopify.com/en/manual/online-store/search-and-discovery/product-recommendations#complementary-products) </Accordion> <Accordion title="Custom liquid block"> Add custom Liquid code for advanced customizations. Unlimited blocks allowed. **Configuration**: * **Custom liquid**: Enter Liquid code or app snippets **Use cases**: * Embed app snippets that don't have dedicated blocks * Create custom product badges or labels * Display metafields or custom product data * Build unique product page features * Add tracking or analytics code **Requirements**: Understanding of Liquid templating language and Shopify's product object structure. [Liquid documentation](https://shopify.dev/docs/api/liquid) </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Optimize gallery layout" icon="image"> Use Grid layout when showcasing detailed product features with media descriptions. Use Slider for traditional e-commerce clean look with many images. </Card> <Card title="Enable sticky product info" icon="thumbtack"> Keep this enabled so add to cart button stays visible while customers scroll through product images. Significantly improves mobile conversion. </Card> <Card title="Strategic video autoplay" icon="play"> Use "First video" autoplay sparingly for critical product demos. Avoid "All videos" due to performance impact. Always enable loop with autoplay. </Card> <Card title="Organize with collapsible rows" icon="bars-staggered"> Use 3-5 collapsible rows for detailed information (Shipping, Returns, Care, Materials, Warranty). Start with most important open by default. </Card> <Card title="Leverage product description delimiter" icon="scissors"> Add `----` in product descriptions to split content across multiple collapsible rows automatically. Reduces manual content entry per product. </Card> <Card title="Position blocks strategically" icon="layer-group"> Standard order: Title → Price → Rating → Variant Picker → Buy Buttons → Collapsible Rows. Drag to reorder based on your priorities. </Card> <Card title="Use inventory notices wisely" icon="triangle-exclamation"> Set threshold to 5-10 items. Too high seems inauthentic, too low may not trigger often enough. Position near buy buttons for maximum urgency. </Card> <Card title="Provide size guides" icon="ruler"> Add size guide page for apparel. Reduces returns significantly. Use popup instead of collapsible row for detailed charts requiring focus. </Card> <Card title="Enable dynamic checkout" icon="bolt"> Keep dynamic checkout buttons enabled. Customers using PayPal/Apple Pay prefer direct checkout. Improves conversion for express checkout users. </Card> <Card title="Configure related products" icon="link"> Use Search & Discovery app to curate complementary products. Manual curation performs better than algorithm alone for cross-selling. </Card> </CardGroup> # About Source: https://docs.digifist.com/themes/mojave/sections/about Split-screen about section with image and content in two visual styles ## What It Does The **About** section creates a visually balanced split-screen layout featuring an image on one side and your brand story on the other. Choose between two style variations and customize the layout to create compelling about pages, team introductions, or brand story sections. ## Getting Started <Steps> <Step title="Add the Section"> Add the About section to your **About** page or any page template where you want to share your story </Step> <Step title="Choose Your Style"> Select between Style 1 (minimal) or Style 2 (with background) to match your aesthetic </Step> <Step title="Add Content"> Write your heading and story content using the rich text editor for formatting flexibility </Step> <Step title="Upload Image"> Add an image (recommended 1440x1200px) that represents your brand, team, or story </Step> </Steps> ## Settings <AccordionGroup> <Accordion title="Style" icon="palette"> **Type:** Select dropdown\ **Options:** Style 1, Style 2\ **Default:** Style 1 Choose between two visual style variations for the split-screen layout. ### Style 1 (Minimal) Clean split-screen layout with image and content on simple background. Content appears directly on page background color. Ideal for modern, minimalist aesthetics. **Best for:** * Modern, clean brands * Photography-first layouts * Minimalist design systems * When image is the primary focus ### Style 2 (With Background) Content side has a subtle background color or treatment distinguishing it from the image side. Creates more visual separation between content and image. **Best for:** * Need for content emphasis * Complex backgrounds * Hierarchical visual distinction * Traditional or classic aesthetics **Switching Styles:** Styles maintain the same content but render differently. You can switch between them without losing content to preview both options. </Accordion> <Accordion title="Flip Image/Content Position" icon="left-right"> **Type:** Checkbox\ **Default:** Unchecked (image left, content right) Swap the position of the image and content columns. * **Unchecked (Default):** Image on left, content on right * **Checked:** Content on left, image on right ### When to Flip **Keep Default (Image Left):** * Standard reading flow (Western audiences read left-to-right, encounter image first) * Image is your primary attention-grabber * Multiple sections on page (alternate flip for visual variety) **Use Flip (Content Left):** * Text is more important than imagery * When you have multiple about sections (alternate placement) * Design balance with surrounding sections (vary layout) * When image features directional elements pointing right **Best Practice:** If using multiple About sections on one page, alternate the flip setting to create visual rhythm and prevent monotony. </Accordion> <Accordion title="Center Text" icon="align-center"> **Type:** Checkbox\ **Default:** Unchecked (left-aligned) Center-align the heading and content text within the content column. * **Unchecked (Default):** Left-aligned text (standard readability) * **Checked:** Center-aligned text (formal or symmetric layouts) ### Alignment Guidelines **Left-Aligned (Default):** * **Better readability** for longer content (easier for eyes to track) * Standard web convention * Professional, editorial style * When content exceeds 3-4 paragraphs **Center-Aligned:** * Short, impactful statements * Luxury or boutique brand aesthetics * Formal or ceremonial tone * 1-2 paragraph maximum (longer text harder to read when centered) * Symmetrical page designs **Recommendation:** Keep left-aligned unless you have short content (under 150 words) or a specific aesthetic reason to center. </Accordion> <Accordion title="Heading" icon="heading"> **Type:** Text area\ **Default:** "Meet the designer" Main heading for the about section. Can be single-line or multi-line for longer titles. **Examples by Context:** **Brand Story:** * "Our Story" * "How We Started" * "The Beginning" **Team Introduction:** * "Meet Our Team" * "The People Behind \[Brand]" * "Who We Are" **Founder Focus:** * "Meet the Designer" * "About the Founder" * "From the Creator" **Values/Mission:** * "What We Stand For" * "Our Mission" * "Why We Exist" **Tip:** Keep headings concise (2-6 words). If you need more context, include it in the content rather than making the heading too long. </Accordion> <Accordion title="Content" icon="paragraph"> **Type:** Rich text editor\ **Default:** Sample paragraph Main body content telling your story, mission, or introducing your team. Supports rich text formatting including bold, italic, links, and paragraphs. ### Content Guidelines **Length Recommendations:** * **Minimum:** 50-75 words (too short feels incomplete) * **Optimal:** 150-250 words (2-3 paragraphs, sufficient depth without overwhelming) * **Maximum:** 400 words (beyond this, consider breaking into multiple sections) ### Effective About Content Structure **Paragraph 1: Hook** Open with your unique perspective, founding moment, or what makes you different. **Paragraph 2: Story/Details** Expand on your journey, values, or approach. Make it personal and authentic. **Paragraph 3: Present/Future** Where you are today and what drives you forward. Optional call-to-action. ### Content Tips * **Be specific:** "Started in my Brooklyn apartment" beats "Started small" * **Show personality:** Let your brand voice come through * **Focus on 'why':** Why you do what you do, not just what you do * **Make it scannable:** Use paragraph breaks, bold key phrases * **Include a subtle CTA:** "Explore our collection" or "See how we work" </Accordion> <Accordion title="Link Label" icon="link"> **Type:** Text field\ **Default:** "Show now" Text for the optional call-to-action button/link at the bottom of the content. Leave empty to hide the link entirely. **Common Link Labels:** * "Shop the Collection" (link to collections) * "Learn More" (link to detailed about page) * "Meet the Team" (link to team page) * "See Our Work" (link to portfolio/lookbook) * "Read Our Story" (link to blog post) * "Get in Touch" (link to contact page) **When to Omit:** If this About section appears on your main about page, you may not need a link (customer is already at destination). Use links when About section appears on homepage or other pages where there's a logical next step. </Accordion> <Accordion title="Link URL" icon="globe"> **Type:** URL field\ **Default:** Empty Destination for the call-to-action link. Only relevant if Link Label is populated. **Common Destinations:** * `/collections/all` - Shop all products * `/pages/about` - Full about page (if this section is teaser) * `/pages/team` - Team page * `/pages/contact` - Contact page * `/blogs/news` - Brand blog * `/collections/featured` - Featured collection **External Links:** Can link to external sites like Instagram, press coverage, or portfolio sites. Use full URL including `https://`. </Accordion> <Accordion title="Image" icon="image"> **Type:** Image picker\ **Recommended Size:** 1440x1200px (6:5 aspect ratio) Image displayed on one half of the split-screen layout (left or right depending on flip setting). ### Image Selection Guidelines **Effective About Images:** * **Founder/team photo:** Personal connection (best for small brands) * **Workspace/studio:** Behind-the-scenes authenticity * **Product in context:** Shows what you make while being lifestyle-focused * **Brand imagery:** Abstract representation of values/aesthetic * **Process/craft:** Hands working, creation in progress **Image Specifications:** * **Minimum size:** 1440x1200px (72 DPI for web) * **Aspect ratio:** 6:5 (horizontal orientation) - maintains consistency * **File format:** JPG (photographs) or PNG (graphics with transparency) * **File size target:** Under 200KB for fast loading ### Image Quality Tips * **High resolution:** Use retina-ready images (2x the display size) * **Professional:** Well-lit, in-focus, high-quality photography * **On-brand:** Match your overall aesthetic and color palette * **Authentic:** Real photos beat stock imagery for about sections * **Optimized:** Compress images using tools like TinyPNG before uploading **Avoid:** * Generic stock photos (customers see through them) * Text-heavy images (hard to read at responsive sizes) * Busy/chaotic compositions (content side provides detail, image should be clean) </Accordion> <Accordion title="Spacing (Desktop)" icon="up-down"> **Type:** Select dropdown\ **Options:** Default, Medium, Compact, None\ **Default:** Default Controls vertical spacing (padding) above and below the section on desktop screens. * **None:** 0px spacing (section directly touches adjacent content) * **Compact:** Minimal spacing (\~20-30px) * **Default:** Standard spacing (\~40-60px) ← **Recommended** * **Medium:** Generous spacing (\~80-100px) ### Desktop Spacing Guidelines **Use Default:** * Standard page layouts * When section is surrounded by other content sections * Most common use case **Use Medium:** * Hero-like prominence for about section * When section is only/primary content on page * Extra breathing room for luxury/minimalist aesthetics **Use Compact:** * Page has many stacked sections (reduce cumulative whitespace) * Tighter, more content-dense layouts * When sections are closely related conceptually **Use None:** * Rarely recommended (sections feel cramped) * Only when intentionally creating continuous visual flow * Advanced design scenarios with custom spacing </Accordion> <Accordion title="Spacing (Mobile)" icon="mobile"> **Type:** Select dropdown\ **Options:** Default, Compact, None\ **Default:** Compact Controls vertical spacing above and below the section on mobile devices. * **None:** 0px spacing * **Compact:** Minimal spacing (\~15-20px) ← **Default** * **Default:** Standard spacing (\~30-40px) ### Mobile Spacing Considerations Mobile screens have limited vertical space, so the theme defaults to **Compact** spacing (tighter than desktop Default) to reduce scrolling. **Compact (Recommended Default):** * Reduces unnecessary scrolling on mobile * Still provides visual separation between sections * Matches mobile UX best practices **Default:** * When about section is hero/primary feature * More breathing room for simpler page layouts * Luxury brands prioritizing whitespace over efficiency **None:** * Very rarely appropriate * Only for intentional continuous layouts * Can make content feel cramped on small screens **Best Practice:** Keep mobile spacing at Compact unless you have specific reason for more space. Mobile users scroll readily, but excessive whitespace adds friction. </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Use Authentic Photography" icon="camera"> Real photos of your team, workspace, or process create stronger connections than stock imagery. Customers value authenticity in about sections. </Card> <Card title="Keep Content Scannable" icon="eye"> Break content into 2-3 short paragraphs. Use bold text for key phrases. Long text blocks discourage reading, especially on mobile. </Card> <Card title="Optimize Image Size" icon="gauge-high"> Compress images to under 200KB without visible quality loss. Large images slow page loading, especially impactful on mobile connections. </Card> <Card title="Alternate Flip on Multi-Section Pages" icon="repeat"> If using multiple About sections, alternate the flip setting (image left, then image right) to create visual rhythm and prevent monotony. </Card> <Card title="Match Style to Brand Voice" icon="swatchbook"> Style 1 suits modern/minimal brands, Style 2 suits traditional/classic. Choose the style that reinforces your brand aesthetic. </Card> <Card title="Left-Align for Readability" icon="align-left"> Unless content is very short (under 100 words), use left-aligned text for better readability. Center alignment works for brief, impactful statements only. </Card> <Card title="Write Specific, Not Generic" icon="pen"> "Started in my Brooklyn apartment in 2018" is more memorable than "Started small with a big dream." Specificity creates authenticity. </Card> <Card title="Use Responsive Spacing" icon="arrows-up-down"> Default spacing on desktop with Compact on mobile balances aesthetics with mobile usability. Adjust only if you have specific design needs. </Card> </CardGroup> ## Common Use Cases ### Homepage Brand Introduction * Heading: "Our Story" * Content: 150-200 word brand origin story * Image: Founder or workspace photo * Style 1, Default spacing * Link: "Shop the Collection" → `/collections/all` * **Best for:** Homepage teaser driving to full about page or shop ### Full About Page (Primary Section) * Heading: "How We Started" * Content: 250-300 word detailed brand story * Image: Founding moment or team photo (1440x1200px high-quality) * Style 2, Medium desktop spacing, Default mobile spacing * No link (already on destination page) * **Best for:** Main about page as primary content section ### Team Introduction * Heading: "Meet Our Team" * Content: 150 words about team values, expertise, approach * Image: Team photo or studio environment * Flip enabled (content left for text emphasis) * Link: "See Our Work" → portfolio or collections * **Best for:** Team/about pages, B2B sites, service-based businesses ### Founder/Designer Profile * Heading: "Meet the Designer" * Content: 200 words about designer background, inspiration, process * Image: Portrait or action shot of designer working * Style 1, Default spacing * Link: "Read the Full Story" → blog post with detailed interview * **Best for:** Maker brands, artisan products, personality-driven brands ### Values/Mission Statement * Heading: "What We Stand For" * Content: 100-150 words (shorter, punchier for values) * Image: Abstract brand imagery or impact photography * Center text enabled (shorter content allows centered alignment) * Style 2 for emphasis * Link: "Our Impact" → sustainability or impact page * **Best for:** Mission-driven brands, ethical fashion, cause-oriented businesses ### Product Philosophy * Heading: "How We Create" * Content: 200 words about materials, process, quality standards * Image: Product crafting process or materials close-up * Style 1, Compact spacing (part of multi-section page) * Link: "Explore Materials" → collection or dedicated craftsmanship page * **Best for:** Artisan brands, handmade products, quality-focused messaging ## Layout Behavior ### Desktop Layout (Typically 1200px+ screens) The section displays as a **true split-screen:** * **50/50 split:** Image occupies one half, content occupies the other half * **Vertical centering:** Content is vertically centered within its column for balanced appearance * **Full-height sections:** Each side extends to full section height (typically 500-700px depending on content) * **Flip toggle:** Swaps which side has image vs content ### Tablet Layout (768px - 1199px) * Maintains split-screen layout but with adjusted proportions * Content column may be slightly wider than image column for readability * Spacing reduces slightly to accommodate smaller viewport ### Mobile Layout (Under 768px) The layout **stacks vertically:** 1. **Image first** (top) - Full width, maintains aspect ratio 2. **Content below** - Full width, heading and text stack 3. **Link button** (if present) - Full width below content **Mobile Optimizations:** * Image height reduces to prevent excessive scrolling * Text size and line height adjust for mobile readability * Spacing compresses (Compact default for mobile setting) * Center-align toggle applies to mobile stacked layout ### Style Differences in Layout **Style 1 Appearance:** * Clean split with no additional visual treatments * Image and content directly on page background * Minimal aesthetic **Style 2 Appearance:** * Content column has subtle background color or treatment * Creates visual card-like effect separating content from image * More distinct visual hierarchy Both styles maintain identical layout structure; difference is purely visual styling. ## Related Sections * **[Page](/themes/mojave/page)** - Combine with rich text for comprehensive about pages * **[Rich Text](/themes/mojave/richtext)** - Add detailed text sections above/below About section * **[Team](/themes/mojave/team)** - If available, dedicated team member profiles (more detailed than single about section) * **[Images with Text](/themes/mojave/images-with-text)** - Alternative split-screen layout with more content flexibility * **[Hero](/themes/mojave/hero)** - Use as alternative to hero banner for about-focused homepages * **[Testimonials](/themes/mojave/testimonials)** - Add below about section to build credibility with social proof * **[Contact Form](/themes/mojave/contact-form)** - Natural next step after about content on about pages ## Technical Notes ### Content Length and Scrolling The content side **does not scroll independently**. If content exceeds the available vertical space, the entire section height increases to accommodate it. This means: * Very long content (400+ words) creates very tall sections * On desktop, image stretches/scales to match content height * Consider breaking excessive content into multiple sections or separate pages ### Image Aspect Ratio Handling The theme is optimized for **6:5 aspect ratio (1440x1200px)**, but handles other ratios: * **Taller images (portrait):** Cropped top/bottom to fit split-screen height * **Wider images (landscape):** May letterbox or crop depending on content height * **Square images:** Work well but may have slight vertical cropping **Best practice:** Stick to 1440x1200px (6:5) for predictable, optimized rendering. ### Rich Text Formatting Support The Content field supports these rich text features: * **Paragraphs:** Natural breaks between text blocks * **Bold/Italic:** Emphasis and variation * **Links:** Inline text links (separate from main CTA button) * **Lists:** Bullet or numbered lists (use sparingly) * **Line breaks:** Manual `<br>` breaks **Avoid in rich text:** * Headings (use the dedicated Heading field) * Images (section already has dedicated image) * Tables (poor mobile rendering in this layout) ### Link vs Button Styling The Link Label creates a **styled button/link** (not plain text link). Styling depends on your theme's button styles. Typical rendering: * Primary button styling (filled background, brand color) * Positioned below content text * Full width on mobile, auto-width on desktop If you need a plain text link instead, add it inline within the Content field using rich text link formatting. ### Performance Considerations * **Image lazy loading:** The image uses native lazy loading (doesn't load until scrolled into view) * **Content rendering:** Text renders immediately; no JavaScript dependencies * **Target load time:** Section (with optimized image under 200KB) should render in under 1 second on average connections ### Accessibility Features The section includes semantic HTML and accessibility features: * Heading uses proper heading hierarchy (`<h2>` typically) * Image includes alt text (automatically populated from image alt field in media library) * Sufficient color contrast for text readability * Link button is keyboard-navigable **Recommendation:** Always add descriptive alt text to images in Shopify's media library for screen reader users and SEO. # Accordions Source: https://docs.digifist.com/themes/mojave/sections/accordions Create expandable/collapsible FAQ sections and content panels with flexible width options and rich text support ## What this section does The **Accordions** section creates collapsible content panels perfect for FAQs, shipping information, product details, or any content that benefits from progressive disclosure. Features include: * **Unlimited accordion items** with individual expand/collapse * **Rich text content** with formatting, links, images * **Page content integration**: Pull content directly from a Shopify page * **Flexible section width**: Narrower (default), Page, Narrow, or Fullwidth * Section title/heading * Only one panel opens at a time (mutual exclusivity) Perfect for FAQs, shipping policies, size guides, product care instructions, or any lengthy content that benefits from organization. <Frame> <img alt="Accordions Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Accordions** </Step> <Step title="Set section title"> Add a heading (e.g., "Frequently Asked Questions", "Shipping Information") </Step> <Step title="Add accordion items"> Click **Add accordion** block. Each block creates one collapsible panel. Add as many as needed. </Step> <Step title="Configure each item"> For each accordion: Add title, then either write content directly OR select a page to pull content from </Step> </Steps> ## Section settings <AccordionGroup> <Accordion title="Title" icon="heading"> **Text field** (default: "Place title here") Main heading displayed above all accordion items. Examples: "Frequently Asked Questions", "Shipping & Returns", "Product Care", "Size Guide" Leave blank for no section heading. </Accordion> <Accordion title="Section width" icon="arrows-left-right"> **Dropdown** (default: Narrower) Controls the container width of the entire section: * **Narrower**: Tightest width, optimal for readability (default) * **Page**: Standard page width * **Narrow**: Medium width * **Fullwidth**: Edge-to-edge, full browser width **Narrower** is recommended for text-heavy content (FAQs). It creates optimal line length for reading. </Accordion> </AccordionGroup> ## Block: Accordion **Type**: accordion (unlimited blocks allowed) Each block creates one collapsible panel with a title and content area. <AccordionGroup> <Accordion title="Title" icon="text"> **Text field** (default: "Place block title here") The clickable heading for this accordion item: * Always visible (never hidden) * Clicking toggles the panel open/closed * Should be a clear question or topic label Examples: * "What is your return policy?" * "How long does shipping take?" * "What sizes do you offer?" * "Care Instructions" Keep titles concise (under 10 words) for better scannability. </Accordion> <Accordion title="Content" icon="file-text"> **Rich text editor** (default: "<p>Place block content here</p>") The collapsible content displayed when panel is expanded: * Supports rich text formatting (bold, italic, lists, links) * Can include paragraphs, headings, lists, images * Hidden by default, revealed when user clicks item title <Note>If a **Page** is selected (below), that page's content will override this field.</Note> Use rich text for custom answers. Use page integration for reusable content (e.g., standard shipping policy used in multiple places). </Accordion> <Accordion title="Page" icon="file-lines"> **Page picker** (optional) Select a Shopify page to pull content from: * **Overwrites the Content field** with selected page's content * Useful for maintaining consistent policies across multiple locations * Updates automatically when page content changes **Info**: "Overwrites content field with the selected page content." **Use cases**: * Link to "Shipping Policy" page instead of duplicating text * Pull content from "Returns" page * Reference "Size Guide" page content **Leave blank** to use the manual Content field above. </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Narrower width for readability" icon="align-center"> Use default "Narrower" width for FAQ sections. Optimal line length (50-75 characters) improves reading comprehension. </Card> <Card title="Question format for titles" icon="circle-question"> For FAQs, phrase titles as questions customers actually ask. Use "How do I...?" and "What is...?" formats for clarity. </Card> <Card title="Prioritize top questions" icon="arrow-up-1-9"> Place most frequently asked questions first. Use analytics or customer service data to identify top concerns. </Card> <Card title="Keep answers concise" icon="compress"> Aim for 2-4 paragraphs per answer. Long content defeats the purpose of progressive disclosure. Link to full pages if needed. </Card> <Card title="Use page integration wisely" icon="link"> Link to pages for policies that need legal accuracy (returns, privacy). Use manual content for quick FAQs. </Card> <Card title="5-10 items optimal" icon="list"> Too few (1-3) makes accordions unnecessary. Too many (15+) overwhelms users. Group into multiple sections if needed. </Card> <Card title="Descriptive section titles" icon="heading"> "FAQs" is vague. Use "Shipping & Returns Questions" or "Product Care Guide" to set expectations. </Card> <Card title="Rich text formatting" icon="bold"> Use bold for emphasis, lists for steps, and links for additional resources. Formatting improves content scannability. </Card> </CardGroup> ## Common use cases **Homepage FAQs** — Answer common objections and questions before users reach PDP (shipping times, returns, materials) **Product page FAQs** — Product-specific questions below product info (size guide, care instructions, materials, dimensions) **Shipping information** — Detailed shipping methods, times, costs, and policies in collapsible format **Return policy** — Comprehensive return/exchange process broken into logical sections (eligibility, process, timeframes) **Size guide** — Expandable sizing information per product category (shirts, pants, shoes) with measurement instructions **About/Company page** — Company history, values, team info as collapsible sections for lengthy content ## Layout behavior **Desktop**: * All accordion items stacked vertically * Section title centered above items (if present) * One item opens at a time (clicking new item closes previous) * Smooth expand/collapse animation * Section width determined by Section width setting **Mobile**: * Same behavior as desktop (vertical stack) * Full-width panels regardless of Section width setting * Touch-optimized click targets for titles * Content stays within mobile viewport **Interaction**: * **Closed state**: Only title visible * **Open state**: Title + content visible * **Auto-close**: Opening one item automatically closes others * **Default state**: All items closed on page load ## Accordion behavior **Opening/closing**: * Click any title to expand that panel * Click same title again to collapse * Opening a new panel automatically closes the previously open panel * Only one panel open at a time (mutual exclusivity) **Content display**: * Closed: Title only (clickable) * Open: Title + full content below * Content appears with smooth slide-down animation * Visual indicator (icon/chevron) shows open/closed state **Page content integration**: * When Page is selected, Content field is ignored * Page content rendered with full Shopify page formatting * Updates automatically if page content changes * No manual synchronization needed ## Customization tips **For product FAQs (PLP/PDP)**: * Use "Narrower" or "Narrow" width * Keep 5-8 questions focused on product specifics * Place after product description on PDP * Examples: sizing, materials, care, shipping time, warranty **For policy pages**: * Use "Page" width or "Fullwidth" for prominence * Link to official policy pages via Page picker * Groups: Shipping, Returns, Privacy, Terms * Section titles: "Shipping & Delivery", "Return Policy Details" **For homepage trust-building**: * Place after hero/featured products * 3-5 top questions that remove purchase barriers * Section title: "Common Questions" or "Why Shop With Us" * Focus on shipping speed, return ease, quality assurance **For educational content**: * Use "Narrower" for optimal reading * Group related topics (e.g., "Care Instructions" with wash/dry/store) * Use rich text formatting (lists, bold) for instructional steps ## Related sections * **Rich Text** — Alternative for non-collapsible content presentation * **Content Tiles** — Grid-based content blocks for visual FAQ alternatives * **Multi Column Text** — Side-by-side content organization without collapse * **Product Recommendations** — Often paired with product FAQs on PDP ## Technical notes **One open at a time**: Accordions use mutual exclusivity—opening one item automatically closes others. This prevents content overload and maintains focus. **Accessibility**: Accordion titles are keyboard-navigable, and screen readers announce open/closed states. Content remains accessible to assistive technology. **SEO**: Accordion content is fully crawlable by search engines even when collapsed. No negative SEO impact from hiding content. **Page integration**: The Page picker dynamically pulls content from Shopify pages. Changes to the source page automatically reflect in the accordion without manual updates. # Age Verification Popup Source: https://docs.digifist.com/themes/mojave/sections/age-verification-popup Modal popup requiring age confirmation before site access ## What It Does The **Age Verification Popup** displays a full-screen modal overlay requiring visitors to confirm their age before accessing your storefront. Essential for stores selling age-restricted products like alcohol, tobacco, CBD, or adult content, this popup ensures compliance with age restrictions while maintaining a professional user experience. Visitors who confirm their age can proceed to browse, while those who decline are redirected to another URL. The popup appears once per browser session—after confirmation, the visitor won't see it again until they close their browser or clear cookies. ## Getting Started <Steps> <Step title="Add the Section"> Add the Age Verification Popup section to your theme (typically added once in theme settings, not per-page) </Step> <Step title="Configure Message"> Set your heading ("Verify your age") and verification message explaining your age requirements </Step> <Step title="Set Button Labels & Decline URL"> Customize button text ("Yes"/"No" or "I'm 21+"/"Under 21") and set where declined visitors go (homepage, exit page, or external URL) </Step> <Step title="Optional Background Image"> Upload a background image to enhance the popup's visual appearance (optional but recommended for brand consistency) </Step> </Steps> ## Settings <AccordionGroup> <Accordion title="Image" icon="image"> **Type:** Image picker\ **Default:** Empty (no image) Upload a background image displayed behind the verification content. ### Image Purpose The background image enhances visual appeal and reinforces brand identity: * **Product photography:** Show your products (wine bottles, craft beer, luxury items) * **Brand lifestyle:** Lifestyle imagery that reflects your brand values * **Abstract/texture:** Subtle patterns or textures for minimal distraction * **Logo/branding:** Large logo or brand mark for recognition ### Image Specifications **Recommended size:** 800x1200px to 1200x1600px (portrait orientation) * **Aspect ratio:** 2:3 or 3:4 works well for mobile-first display * **File format:** JPG (photographs), PNG (graphics with transparency) * **File size:** Under 300KB for fast loading (visitors must wait for popup to load) * **Content safe area:** Keep important content centered—text overlays on top ### Without Image If no image uploaded: * Popup displays content on solid background color (from theme settings) * Simpler, faster-loading popup * More focus on text message **Recommendation:** Use image for premium/lifestyle brands, skip for minimal/functional stores. </Accordion> <Accordion title="Heading" icon="heading"> **Type:** Inline rich text\ **Default:** "Verify your age" Main heading displayed at top of popup. Brief, direct, and clear about the requirement. ### Heading Examples **Standard age verification:** * "Verify your age" * "Age verification required" * "Confirm your age" **Specific age requirements:** * "Are you 21 or older?" * "Must be 18+ to enter" * "21+ only" **Brand-friendly:** * "Welcome! Let's verify your age" * "Age check" * "Please confirm you're of legal age" ### Best Practices **Keep it short:** 2-5 words ideal (scans quickly on mobile) **Be direct:** Clear about what's being asked **Match your tone:** Professional for alcohol/tobacco, friendlier for other products **Include age if specific:** "21+" more specific than "of age" ### Rich Text Formatting Supports bold and italic: * **Bold:** "Verify **your** age" (emphasis) * *Italic:* Less common, use sparingly **Recommendation:** Keep unformatted for maximum clarity and readability. </Accordion> <Accordion title="Subheading (Text)" icon="align-left"> **Type:** Rich text (multiple paragraphs supported)\ **Default:** "You must be 18 years of age or older to enter this site. Please verify your age." Detailed verification message explaining age requirements. Supports multiple paragraphs and formatting. ### Message Components A complete verification message typically includes: 1. **Age requirement:** Specific age threshold (18, 19, 21 depending on jurisdiction) 2. **Reason:** What's being protected (site access, product purchase) 3. **Action:** What visitor needs to do (confirm, verify) ### Message Examples **Alcohol (US - 21+):** "You must be 21 years of age or older to purchase alcohol. By entering this site, you agree to our terms of use and privacy policy." **Alcohol (International - 18+):** "This website sells alcoholic beverages. You must be 18 or older to access this content. Please verify your age to continue." **CBD products:** "Our CBD products are intended for adults 21 and over. By clicking 'Yes,' you confirm you meet the legal age requirement in your jurisdiction." **Adult content:** "This site contains mature content. You must be 18+ to enter. By confirming, you acknowledge you are of legal age in your location." **Multiple jurisdictions:** "You must meet the legal drinking age in your country to enter this site. Legal age varies by jurisdiction (18-21 years). Please verify your age." ### Legal Considerations **Include:** * Specific age (18, 21, etc.) * Reference to jurisdiction ("in your state," "in your country") * Action being confirmed ("access site," "purchase products") **Consider adding:** * Link to terms of use or privacy policy * Reference to local laws * Disclaimer about self-attestation ### Rich Text Formatting **Bold for emphasis:** "You must be **21 years of age or older** to enter this site." **Multiple paragraphs:** ``` You must be 21 or older to purchase alcohol. By entering, you agree to our Terms of Service. ``` **Links (if needed):** "Read our [Terms of Service](/policies/terms-of-service) for more information." **Keep readable:** 2-3 sentences max. Too much text reduces compliance. </Accordion> <Accordion title="Confirmation Button Label" icon="check"> **Type:** Text\ **Default:** "Yes" Label for the button visitors click to confirm they meet age requirements and proceed to site. ### Button Label Options **Simple confirmation:** * "Yes" (default, clear and direct) * "Enter" * "Confirm" * "I agree" **Specific age confirmation:** * "I'm 21+" * "I'm 18 or older" * "Yes, I'm of legal age" * "21+ Enter site" **Action-oriented:** * "Enter site" * "Continue" * "Proceed" * "Shop now" ### Best Practices **Keep short:** 1-3 words (button space is limited) **Be clear:** No ambiguity about what action does **Match heading:** If heading asks "Are you 21+?", button should be "Yes" or "I'm 21+" **Positive action:** Confirming should feel straightforward, not tricky **Avoid:** * "No" (confusing—negative answer to positive action) * Long phrases ("Yes, I confirm I am 21 years old") * Vague terms ("Maybe," "Not sure") **Recommendation:** Stick with "Yes" or specify age ("I'm 21+") for maximum clarity. </Accordion> <Accordion title="Decline Button Label" icon="xmark"> **Type:** Text\ **Default:** "No" Label for the button visitors click if they don't meet age requirements or wish to decline entry. ### Button Label Options **Simple decline:** * "No" (default, clear opposite of "Yes") * "Exit" * "Leave" * "Cancel" **Specific age decline:** * "I'm under 21" * "Under 18" * "Not of age" **Action-oriented:** * "Exit site" * "Go back" * "Leave site" ### Best Practices **Mirror confirmation button:** If confirm is "Yes," decline should be "No" **Clear consequence:** Label should indicate action (leaving site) **Short:** 1-2 words preferred **No guilt:** Avoid judgmental language ("I'm too young," "I don't belong here") **Pairing examples:** * Confirm "Yes" → Decline "No" * Confirm "I'm 21+" → Decline "Under 21" * Confirm "Enter" → Decline "Exit" * Confirm "Continue" → Decline "Leave" **Recommendation:** Use "No" (matches default "Yes") or "Exit" (action-focused). </Accordion> <Accordion title="Decline Button URL" icon="link"> **Type:** URL\ **Default:** "/" (homepage) Where visitors are redirected if they click the decline button. ### URL Options **Redirect to homepage:** * **URL:** `/` * **Reason:** Default option, sends declined visitors to your homepage * **Use when:** You want to keep declined visitors in ecosystem but away from age-restricted content * **Note:** Only works if homepage itself doesn't require age verification **Redirect to external site:** * **URL:** `https://www.google.com` or similar * **Reason:** Sends declined visitors away from your site entirely * **Use when:** Site exclusively sells age-restricted products (entire site requires verification) * **Common choices:** Google, educational resource about age restrictions **Redirect to specific page:** * **URL:** `/pages/underage` or `/pages/age-restricted` * **Reason:** Custom page explaining age policy * **Use when:** You want to provide more information to declined visitors * **Content ideas:** Explanation of policy, contact info, appeal process **Redirect to info page:** * **URL:** `/pages/alcohol-policy` * **Reason:** Educational page about your products and age restrictions * **Use when:** Building trust around compliance ### Best Practices **Consider your business model:** * **Entire site age-restricted** (alcohol-only store): External redirect (Google) * **Mixed products** (some age-restricted, some not): Homepage redirect * **Want to educate:** Custom informational page **Legal compliance:** * Check if your jurisdiction requires specific decline destination * Some regions may require visitors to exit site entirely **User experience:** * **External redirects feel harsh** but are appropriate for fully restricted sites * **Homepage redirects feel friendlier** but only work if homepage accessible * **Info pages build trust** but require creating additional content **Testing:** Make sure decline URL is live and accessible (broken URL creates bad experience). **Recommendation:** Use `/` (homepage) for mixed stores, external URL (Google) for age-restricted-only stores. </Accordion> <Accordion title="Show Popup on Customizer" icon="eye"> **Type:** Checkbox\ **Default:** Unchecked (hidden in customizer) Controls whether the popup displays when you're editing the theme in the Shopify customizer. ### When to Enable **Enable (check) when:** * You're actively editing popup content or styling * You want to preview popup appearance immediately * You need to test popup layout with different content * You're setting up popup for the first time **Disable (uncheck) when:** * You're editing other sections (popup blocks view) * You've finished customizing popup * You're working on navigation or other theme elements that popup would obscure * You want to see page layout without popup interference ### How It Works **Enabled (checked):** * Popup displays immediately when you open Theme Customizer * Popup refreshes/updates when you change settings * You can see live preview of changes * Blocks view of other sections **Disabled (unchecked):** * Popup hidden in editor (but still shows on live site) * You can edit other sections without popup in the way * Popup settings still accessible in section list ### Best Practice Workflow 1. **Enable** popup visibility in customizer 2. Edit content, colors, image, buttons 3. Preview and refine appearance 4. **Disable** popup visibility when done 5. Continue editing other sections 6. Test popup on live site (preview theme in new tab, use incognito mode) **Important:** This setting only affects Theme Customizer visibility. Live site always shows popup to unverified visitors regardless of this setting. **Recommendation:** Enable only while actively editing popup, disable after to avoid blocking other work. </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Clear Age Requirement" icon="calendar"> Specify exact age (18, 21, etc.) in your message. Generic "of age" creates confusion across jurisdictions with different legal ages. </Card> <Card title="Test Decline Destination" icon="arrow-right-from-bracket"> Verify your decline URL works and leads to appropriate page. Broken link creates poor experience and potential compliance issues. </Card> <Card title="Use Background Image" icon="image"> Background image enhances professionalism and brand recognition. Choose image that reflects your products without distracting from message. </Card> <Card title="Keep Message Concise" icon="compress"> 2-3 sentences maximum. Visitors won't read lengthy legal text. Focus on: age requirement, what's being verified, confirmation action. </Card> <Card title="Match Button Labels" icon="arrows-left-right"> Confirm/decline buttons should mirror each other logically. "Yes"/"No", "Enter"/"Exit", "I'm 21+"/"Under 21". Avoid mismatched pairs. </Card> <Card title="Consider Legal Requirements" icon="scale-balanced"> Consult legal counsel about age verification requirements in your jurisdiction. Popup provides basic gate but may not satisfy all regulations. </Card> <Card title="Test in Incognito Mode" icon="user-secret"> Test popup behavior in private/incognito browser window to simulate first-time visitor experience. Check appearance, message clarity, buttons. </Card> <Card title="Mobile-First Design" icon="mobile"> Preview popup on mobile devices. Ensure text readable, buttons tappable, image doesn't obscure message. Most visitors use mobile. </Card> </CardGroup> ## Common Use Cases ### Alcohol Store (US, 21+) **Message:** "You must be 21 years of age or older to purchase alcohol. By entering, you agree to our Terms of Service." **Buttons:** "I'm 21+" (confirm), "Under 21" (decline) **Decline URL:** `https://www.google.com` (external redirect since entire store is age-restricted) **Image:** Product photography of wine/beer bottles, or lifestyle image of social gathering **Best for:** Dedicated alcohol retailers, wine shops, breweries ### CBD/Hemp Products (21+) **Message:** "Our CBD products are for adults 21 and over. By clicking 'Enter,' you confirm you meet the legal age requirement in your jurisdiction." **Buttons:** "Enter" (confirm), "Exit" (decline) **Decline URL:** `/pages/cbd-policy` (info page explaining regulations) **Image:** Hemp leaf imagery, product photography, or natural/botanical visuals **Best for:** CBD stores, wellness shops, dispensaries ### Tobacco/Vaping (18+) **Message:** "This website sells tobacco and vaping products. You must be 18 or older to access this site. Please verify your age." **Buttons:** "Yes, I'm 18+" (confirm), "No, I'm under 18" (decline) **Decline URL:** `https://www.cdc.gov/tobacco/` (educational resource) **Image:** Product photography (vapes, accessories), abstract smoke textures **Best for:** Vape shops, tobacco retailers ### Adult Content or Mature Products (18+) **Message:** "This site contains mature content intended for adults. You must be 18 years or older to enter. By confirming, you acknowledge you are of legal age." **Buttons:** "I'm 18+" (confirm), "Under 18" (decline) **Decline URL:** `/` (homepage redirect, or external if site is entirely adult-oriented) **Image:** Subtle, tasteful imagery that conveys maturity without explicit content **Best for:** Adult novelty stores, mature gaming, collectibles with adult themes ### International Store (Variable Ages) **Message:** "This site sells age-restricted products. You must meet the legal age in your country to enter (typically 18-21 years). Please confirm your age." **Buttons:** "Confirm" (confirm), "Cancel" (decline) **Decline URL:** `/pages/age-policy` (page explaining international age variations) **Image:** Global/international imagery, or neutral product photos **Best for:** International retailers with customers across multiple jurisdictions ### Luxury/High-Value Items (Not Age-Restricted, but Exclusive) **Message:** "Welcome to our exclusive collection. Please confirm you wish to explore our luxury offerings." **Buttons:** "Enter" (confirm), "Not interested" (decline) **Decline URL:** `/` (homepage) **Image:** Luxury product photography, elegant lifestyle imagery **Best for:** High-end retailers using popup for exclusivity rather than age verification (note: not for legal compliance) ## Layout Behavior ### Desktop Layout The popup displays centered on screen: * **Full viewport overlay:** Dark semi-transparent background covers entire page * **Popup dimensions:** Approximately 750px max width, auto height * **Content layout:** Two-column layout on desktop (if image present) * **Left (30%):** Background image * **Right (70%):** Content (heading, message, buttons) * **No image:** Content centered with padding ### Mobile Layout Optimized for mobile screens: * **Full screen:** Popup occupies full viewport height * **Single column:** Image (if present) stacked above content * **Image height:** \~16rem (160px) fixed height on mobile * **Content:** Full-width below image * **Buttons:** Full-width stacked (confirm above decline), \~2.4rem gap between buttons * **Scrollable:** Content scrolls if message is lengthy ### Visual Effects **Entrance animation:** * Desktop: Fade + scale from 0 to 100% * Mobile: Slide up from bottom of screen * Duration: \~300ms **Background overlay:** * Semi-transparent black (50% opacity) * Blurs page content behind popup (subtle \~1.2rem blur) * Prevents interaction with page until verified ## Related Sections * **[Newsletter Modal](/themes/mojave/newsletter-modal)** - Another modal popup (newsletter signup) * **[Header](/themes/mojave/header/header)** - Navigation that appears after age verification * **[Footer](/themes/mojave/footer/footer)** - Legal links (Terms, Privacy) often referenced in age verification ## Technical Notes ### Session Storage & Cookies The popup uses browser **session storage** to remember verification: **On confirmation:** * Sets `age-verified: true` in session storage * Popup won't show again during current browser session * Session ends when user closes browser (all tabs) **Cookie expiration:** * No persistent cookies created (unlike Newsletter Modal) * Each new browser session requires re-verification * Private/incognito mode always shows popup **Across devices:** * Verification is per-browser, per-device * User on phone must verify separately from desktop * Not tied to customer account ### Interaction Blocking When popup is open: * **Page content unclickable:** All links, buttons below popup disabled * **Pointer events blocked:** CSS `pointer-events: none` on body * **Scroll locked:** Page scroll disabled on some implementations * **Keyboard focus trapped:** Tab key cycles through popup elements only ### Priority Over Other Popups Age verification takes priority: * **Newsletter popup:** If both age verification and newsletter modal active, age verification shows first * **Only after verification:** Newsletter modal appears (if configured with delay) * **JavaScript coordination:** Newsletter modal checks for `age-verified` flag before displaying ### Performance **Popup loading:** * HTML renders immediately (no JavaScript delay) * Background image lazy loads (doesn't block popup appearance) * Minimal CSS (\~5KB) * Total load time: \< 100ms typical **Page blocking:** * Body `pointer-events: none` until verification * Ensures popup can't be bypassed by clicking behind it * Re-enables after confirmation ### Design Mode Behavior **In theme customizer:** * Popup only shows if "Show popup on customizer" enabled * Otherwise hidden but section accessible in editor sidebar * Preview changes live when customizer toggle enabled **On live site:** * Always shows to unverified visitors * Ignores customizer toggle setting * Session storage determines visibility ## Troubleshooting **Popup not appearing on live site:** * Check if you've already verified age in current browser session * Test in incognito/private browsing mode (fresh session) * Verify section is enabled in theme customizer * Check browser console for JavaScript errors **Popup shows every page load:** * Session storage may be disabled in browser settings * Privacy mode / incognito resets session on each tab * Browser extension may be blocking session storage * Expected behavior: User should verify once per session **Decline button doesn't work:** * Verify "Decline Button URL" is valid (not empty) * Check for typos in URL field * Test decline destination URL directly (paste in browser) * Ensure URL is relative (`/page`) or full (`https://...`) **Background image not displaying:** * Confirm image uploaded successfully in customizer * Check image file size (keep under 500KB) * Try different image format (JPG vs PNG) * Verify image isn't corrupted (open directly) **Buttons overlap or layout broken:** * Test on actual mobile device (not just browser resize) * Check message length (very long text can break layout) * Ensure button labels are short (1-3 words) * Clear browser cache and hard reload **Can't edit other sections in customizer:** * Disable "Show popup on customizer" checkbox * Popup blocks view when enabled in editor * After disabling, popup hidden in editor but still editable in section list **Popup appears behind other content:** * Check for theme CSS conflicts (high z-index on other elements) * Age verification should have z-index 1000+ * Contact theme support if popup is consistently overlaid **Text hard to read over image:** * Choose image with darker/lighter area for text * Consider adding semi-transparent overlay (theme-level customization) * Test on mobile where text area is smaller * Alternatively, remove image and use solid background # Announcement bar Source: https://docs.digifist.com/themes/mojave/sections/announcement-bar Display site-wide messages and promotional content with flexible carousel and positioning options The Announcement bar displays important messages, promotions, or notifications across your entire website. It supports multiple display modes including static display and automatic carousel rotation, with unique positioning options and utility menu integration for enhanced functionality. <Frame> <img alt="Announcement bar overview" /> </Frame> ## What this section controls * Announcement message content and styling * Carousel behavior and autoplay timing * Device-specific typography settings * Bar positioning relative to header * Utility menu integration * Homepage transparency effects ## Getting started <Steps> <Step title="Open Theme Customizer"> In your Shopify admin, go to **Online Store > Themes** and click **Customize** on your active theme. </Step> <Step title="Locate the section"> The Announcement bar section is located at the very top of your site, above or below the header depending on your positioning settings. </Step> </Steps> <Frame> <img alt="Announcement bar location in Theme Customizer" /> </Frame> ## Display behavior The announcement bar automatically adapts its display mode based on the number of messages: <AccordionGroup> <Accordion title="Static display (1-3 messages)"> When you have 3 or fewer announcement blocks, messages display side-by-side statically across the bar. You can disable this behavior with the "Disable blocks carousel on desktop" setting to force carousel mode even with fewer messages. </Accordion> <Accordion title="Carousel mode (4+ messages or forced)"> With 4 or more blocks, the bar automatically rotates through messages using carousel functionality. The "Carousel Interval" setting controls how long each message displays before transitioning to the next (1-10 seconds). **Note**: When you have more than 3 blocks, carousel mode activates automatically regardless of the "Disable blocks carousel on desktop" setting. </Accordion> </AccordionGroup> ## Key settings <Tabs> <Tab title="Content & Behavior"> <AccordionGroup> <Accordion title="Utility menu"> Add a navigation menu to the announcement bar for quick access links, language selectors, or currency switchers. Select from your existing menus in **Navigation** settings. This feature makes the Mojave announcement bar particularly versatile by combining promotional messaging with functional navigation elements. </Accordion> <Accordion title="Disable blocks carousel on desktop"> Control whether messages rotate automatically on desktop devices. When enabled, all announcement messages display statically side-by-side instead of rotating. **Important**: This setting is automatically bypassed when you have more than 3 announcement blocks - carousel mode will activate regardless to accommodate the additional content. </Accordion> <Accordion title="Carousel Interval"> Set the duration (1-10 seconds) each announcement message displays before rotating to the next. Only applies when carousel mode is active. Recommended intervals: * **Quick messages**: 3-4 seconds for short promotional text * **Detailed content**: 6-8 seconds for longer announcements * **Multiple offers**: 5-6 seconds for balanced rotation </Accordion> </AccordionGroup> </Tab> <Tab title="Positioning & Layout"> <AccordionGroup> <Accordion title="Position the bar below header"> Move the announcement bar from its default position above the header to below it. This creates a different visual hierarchy and works particularly well with transparent header designs. **Note**: You must save your theme settings after changing this option to see the results in the preview. </Accordion> <Accordion title="Enable transparency on Homepage"> Makes the announcement bar background transparent on your homepage, allowing hero images or videos to show through. **Best practices for transparency**: * Enable transparency in Header section settings as well for cohesive design * Position the announcement bar below the header for optimal visual integration * Ensure sufficient contrast between announcement text and background images * Test visibility with all hero section backgrounds you use </Accordion> </AccordionGroup> </Tab> <Tab title="Typography"> <AccordionGroup> <Accordion title="Font size (Desktop)"> Control the text size of announcement messages on desktop devices using the range slider (13-24 pixels). Recommended sizes: * **Standard announcements**: 16-18px for comfortable reading * **Prominent messaging**: 20-22px for high-visibility promotions * **Subtle notifications**: 13-15px for non-intrusive updates </Accordion> <Accordion title="Font size (Mobile)"> Independently control text size for mobile devices (10-16 pixels). This allows you to optimize readability on smaller screens without affecting desktop design. Mobile sizing tips: * Typically 2-4px smaller than desktop for proportional appearance * Minimum 12px recommended for accessibility * Test across device sizes to ensure legibility </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block settings Add announcement messages by adding "Text" blocks. Each block represents one announcement that will display in the bar. <Tabs> <Tab title="Text Block"> <AccordionGroup> <Accordion title="Text"> The announcement message content. Supports inline rich text formatting including **bold**, *italic*, and text styling. Keep messages concise - announcement bars are designed for brief, scannable content rather than detailed information. </Accordion> <Accordion title="Link URL"> Make the entire announcement message clickable by adding a URL. When visitors click the announcement, they'll navigate to the specified link. **Link best practices**: * Use descriptive announcement text that indicates where the link leads * Link to relevant landing pages, collection pages, or promotional content * Ensure linked pages provide the value promised in the announcement * Test links after adding to verify correct destinations </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Keep messages concise" icon="message"> Announcement bars work best with brief, scannable text. Aim for 5-10 words per message to ensure readability across all devices. </Card> <Card title="Use carousel strategically" icon="arrows-spin"> For 2-3 key messages, consider disabling carousel to show all simultaneously. Reserve automatic rotation for 4+ announcements or time-sensitive offers. </Card> <Card title="Optimize rotation timing" icon="clock"> Balance message visibility with user experience. Very fast rotations (1-2s) can be distracting, while very slow ones (9-10s) may prevent users from seeing all messages. </Card> <Card title="Test transparency carefully" icon="eye"> When using transparent background on homepage, test with various hero images to ensure announcement text remains readable against all backgrounds. </Card> <Card title="Leverage utility menu" icon="bars"> Use the utility menu feature to combine promotions with functional links like language selection or customer service, maximizing the bar's value. </Card> <Card title="Consider mobile typography" icon="mobile"> Mobile font sizes should prioritize legibility. Don't go too small - 12px is typically the minimum for comfortable reading on mobile devices. </Card> <Card title="Strategic positioning" icon="location-dot"> Below-header positioning works exceptionally well for stores using transparent headers with hero sections, creating an integrated visual experience. </Card> <Card title="Update regularly" icon="calendar"> Keep announcement content fresh and relevant. Rotate messages seasonally or with promotional campaigns to maintain customer engagement. </Card> </CardGroup> # Apps Source: https://docs.digifist.com/themes/mojave/sections/apps App embed section for integrating Shopify app content blocks into theme templates ## What It Does The **Apps** section provides a dedicated area in your theme for embedding **Shopify App Blocks**—content from third-party apps that integrate directly into your theme. Instead of apps injecting code throughout your theme, this section gives you control over where app content appears. ## Getting Started <Steps> <Step title="Add the Section"> Add the Apps section to templates where you want app content to appear (homepage, product page, etc.) </Step> <Step title="Add App Blocks"> Click "Add block" and select from installed apps that support app blocks </Step> <Step title="Configure App Block"> Each app block has its own settings provided by the app—configure as needed </Step> <Step title="Arrange App Blocks"> Drag blocks to reorder how multiple app blocks appear in the section </Step> </Steps> ## Settings ### Section Settings The Apps section has **no section-level settings**. All configuration happens at the block level (individual app blocks have their own settings provided by each app). ### App Blocks <AccordionGroup> <Accordion title="App Blocks" icon="puzzle-piece"> **Block Type:** @app (Shopify App Blocks)\ **Limit:** Unlimited App blocks are content modules provided by third-party Shopify apps. When you install an app that supports **theme app extensions** (app blocks), those blocks become available to add to this section. ### What Are App Blocks? App blocks allow apps to integrate their functionality directly into your theme without modifying theme code. Examples include: * **Review apps:** Product review displays (Judge.me, Loox, Stamped.io) * **Bundle apps:** Product bundle builders * **Quiz apps:** Product recommendation quizzes * **Customization apps:** Product personalization widgets * **Size chart apps:** Dynamic size guides * **Inventory apps:** Back-in-stock notifications * **Loyalty apps:** Rewards point displays * **FAQ apps:** Collapsible question sections ### How to Add App Blocks 1. **Install an app** from the Shopify App Store that supports app blocks 2. **Open Theme Customizer** and navigate to template where you want app content 3. **Add Apps section** (if not already present) 4. **Click "Add block"** within Apps section 5. **Select app** from the list of installed apps (only apps with blocks appear) 6. **Configure app block** using settings provided by that specific app ### App Block Settings Each app provides its own unique settings for its blocks: * **Review apps:** Display style, review count, rating colors * **Bundle apps:** Bundle type, discount type, product selections * **Quiz apps:** Question flow, result pages, styling * **Size chart apps:** Size chart content, display conditions **Settings vary completely by app**—refer to each app's documentation for block configuration details. ### Multiple App Blocks You can add **multiple app blocks** from different apps in one Apps section: ``` [Apps Section] → Product Review Block (Judge.me) → Size Chart Block (Kiwi Sizing) → Back in Stock Block (Back In Stock) ``` Blocks stack vertically in the order you arrange them. Drag blocks to reorder. ### App Block Availability **Only apps with Theme App Extensions (App Blocks) appear:** * Modern apps (2021+) increasingly support app blocks * Legacy apps may only provide snippet code (not app blocks) * Check app documentation or App Store listing: "Works with Online Store 2.0 themes" **If an app doesn't appear:** * App may not support app blocks (use Custom Liquid section instead) * App may need to be reinstalled or updated * App may only work in specific templates (e.g., product page only) ### Template Context Some app blocks are **template-specific**: * **Product reviews:** Only appear in product page templates (require product context) * **Cart upsells:** Only appear in cart templates * **Collection badges:** Only appear in collection templates If you add an app block to an incompatible template, it may: * Not appear (gracefully hidden) * Show an error message * Display placeholder content **Best practice:** Add Apps section to templates where your apps are designed to work (check app documentation for template requirements). </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Use Apps Section for Control" icon="sliders"> Apps section gives you control over app placement rather than apps injecting code everywhere. Prefer app blocks over snippet-based apps when possible. </Card> <Card title="Limit Apps Per Section" icon="layer-group"> Adding 5+ app blocks in one section creates visual clutter. Use 2-3 apps maximum per Apps section for clean layouts. </Card> <Card title="Check Template Compatibility" icon="check-square"> Verify app blocks work in your target template. Product-specific apps won't function on homepages; cart apps won't work on product pages. </Card> <Card title="Test After Adding Blocks" icon="vial"> Preview pages after adding app blocks to ensure they display correctly and don't conflict with theme styling or other apps. </Card> <Card title="Organize Multiple Apps Sections" icon="list"> You can add multiple Apps sections to one template. Use separate sections for grouped functionality (reviews + Q\&A in one, upsells in another). </Card> <Card title="Update Apps Regularly" icon="rotate"> Apps update their blocks with new features. Check app settings occasionally for new block options or improved functionality. </Card> <Card title="Remove Unused App Blocks" icon="trash"> If you uninstall an app, remove its blocks from Apps sections. Orphaned blocks may show errors or take up space unnecessarily. </Card> <Card title="Document App Usage" icon="memo"> If using multiple apps, note which blocks are in which templates. Makes troubleshooting and future updates easier. </Card> </CardGroup> ## Common Use Cases ### Product Page Reviews and Q\&A **Setup:** Apps section on product template * **App Block 1:** Product reviews display (Judge.me or similar) * **App Block 2:** Questions & Answers widget (Fera Q\&A or similar) **Result:** Customers see reviews and questions below product details, increasing confidence and conversion **Best for:** Any store selling products with reviews and common questions ### Homepage Social Proof **Setup:** Apps section on homepage template * **App Block:** Instagram feed or user-generated content (Instafeed, Foursixty) * **Placement:** Below featured products or near footer **Result:** Dynamic social content updates automatically, building trust and engagement **Best for:** Fashion, lifestyle, food & beverage brands with active social media ### Cart Page Upsells **Setup:** Apps section on cart template * **App Block 1:** Free shipping progress bar (Shipping Bar) * **App Block 2:** Product recommendations/frequently bought together (ReComlete, LimeSpot) **Result:** Increase average order value with contextual cart-based recommendations **Best for:** All stores wanting to maximize cart value before checkout ### Product Page Customization **Setup:** Apps section on product template (above/below add-to-cart button) * **App Block:** Product customizer (Zepto, Product Personalizer) **Result:** Customers personalize products (engraving, monograms, custom text) directly on product page **Best for:** Gift shops, jewelry, apparel with customization options ### Size Guide on Product Pages **Setup:** Apps section on product template * **App Block:** Dynamic size chart (Kiwi Sizing, Size Chart) * **Placement:** Near size selector or below product description **Result:** Reduces returns by helping customers select correct sizes **Best for:** Apparel, footwear, accessories with sizing variations ### Loyalty Points Display **Setup:** Apps section on multiple templates (product, cart, account pages) * **App Block:** Loyalty program widget (Smile.io, Yotpo) **Result:** Customers see points earned/redeemable across shopping journey **Best for:** Stores with repeat customers and loyalty programs ## Layout Behavior ### Desktop Layout The Apps section displays app blocks as **stacked content**: ``` [App Block 1] ↓ [App Block 2] ↓ [App Block 3] ``` Each app block controls its own layout, styling, and spacing. The Apps section is simply a container—visual appearance depends entirely on the apps. **Section width:** Full page width (or constrained by template). Individual app blocks may have their own width settings. ### Mobile Layout On mobile, app blocks stack vertically: * Full-width display (blocks span mobile screen) * Apps control their own mobile responsiveness * Order matches desktop (blocks don't reorg for mobile) **Mobile optimization:** Each app is responsible for mobile-friendly rendering. Well-designed app blocks automatically adapt to mobile screens. ### Empty Section Behavior If the Apps section has **no app blocks added**, it displays **empty** (no placeholder or error)—essentially invisible on the page. **Why this matters:** You can add Apps sections preemptively to templates before installing apps. Section remains hidden until blocks are added. ### Block Spacing Vertical spacing between app blocks depends on: * **Theme CSS:** Theme may add default spacing between blocks * **App CSS:** Some apps add their own top/bottom margins * **Result:** Typically 20-40px between consecutive app blocks If spacing looks off, check individual app block settings (some apps have spacing controls). ## Related Sections * **[Custom Liquid](/themes/mojave/custom-liquid)** - For apps that don't support app blocks, use Custom Liquid to render app snippets * **[Product Recommendations](/themes/mojave/product-recommendations)** - Theme's built-in recommendations (alternative to app-based recommendations) * **[Reviews](/themes/mojave/reviews)** (if theme has built-in reviews) - Alternative to review apps ## Technical Notes ### Theme App Extensions (App Blocks) The Apps section uses Shopify's **Theme App Extensions API** (introduced with Online Store 2.0 in 2021). This allows apps to: * Register blocks that appear in Theme Customizer * Provide block settings (configured by merchants) * Render content dynamically based on page context * Update independently without theme code modifications **Requirements:** * Theme must be Online Store 2.0 compatible (Dawn-based or updated) * Apps must be built using App Extensions (not all apps support this yet) ### App Block Rendering When a page loads: 1. **Theme renders section HTML** (container) 2. **Shopify injects app block content** (from app extension) 3. **App styles/scripts load** (CSS/JavaScript from app) 4. **App block renders dynamically** (may fetch data via API) **Performance consideration:** Multiple app blocks can slow page load if apps load heavy resources. Monitor page speed after adding app blocks. ### App Block Data Access App blocks have access to: * **Template context:** Product data (on product pages), collection data (on collection pages), cart data (on cart pages) * **Customer data:** Login status, customer metafields (if app has permissions) * **Storefront API:** Apps can fetch additional data via GraphQL **Privacy:** Apps only access data they've requested permissions for during installation. ### Block Settings Persistence App block settings are saved **per-section instance**: * Same app can be added to multiple templates with different settings * Moving/removing section doesn't affect app data elsewhere * Uninstalling app orphans blocks (shows error or empty space until removed) ### Liquid vs App Blocks **Traditional apps (Liquid snippets):** ```liquid theme={null} {% render 'app-snippet' %} ``` * Requires Custom Liquid section or theme code editing * Harder to move or remove * May conflict with theme updates **Modern apps (App Blocks):** ``` [Add block → Select app] ``` * No code editing required * Drag-and-drop in Theme Customizer * Update-safe (doesn't modify theme files) **Recommendation:** Prefer apps with app block support for easier management and future-proofing. ### App Block Limits The Apps section has **no limit** on number of app blocks, but practical considerations: * **Performance:** 5+ app blocks may slow page loading * **Visual clutter:** Too many apps create overwhelming pages * **Conflicts:** Some apps may conflict if they manipulate same elements **Best practice:** Use 3-4 app blocks maximum per Apps section. ### App Uninstallation When you **uninstall an app**: * App blocks remain in Theme Customizer (orphaned) * Blocks show "App not installed" or render empty * **You must manually remove blocks** from Apps sections **Workflow:** 1. Uninstall app from Shopify Admin 2. Go to Theme Customizer 3. Find apps sections using that app's blocks 4. Delete orphaned blocks 5. Save changes ### Cross-Template App Blocks You can add the **same app block** to multiple templates: * Product reviews on product template * Product reviews on cart template (for cart item reviews) * Each instance can have different settings **Settings are isolated per template**—changing block settings in one template doesn't affect other templates. ## Troubleshooting **App doesn't appear in block selection:** * Verify app is installed and active (check Shopify Admin > Apps) * Confirm app supports Online Store 2.0 / App Blocks (check App Store listing: "Works with Online Store 2.0") * Check that you're in correct template (some apps only work in specific templates like Product or Cart) * Try refreshing Theme Customizer (Theme Customizer may need reload after app installation) * Contact app support to confirm they offer app blocks **App block shows "App not installed" error:** * App was uninstalled but block remains in theme * **Solution:** Delete the orphaned app block from the Apps section **App block not displaying content:** * Check template context (product blocks won't work on homepage, cart blocks won't work on product pages) * Verify app block settings are configured correctly (app may require configuration) * Check app is active/not paused (some apps have activation requirements) * Test on live storefront (some apps don't preview in Theme Customizer) * Check app documentation for setup requirements **Multiple app blocks conflict (styling issues):** * Some apps use conflicting CSS or JavaScript * Try reordering blocks (different order may resolve issues) * Contact both app developers about compatibility * Consider using apps in separate Apps sections or templates * As last resort, choose one app and uninstall the conflicting one **App block slows page loading:** * Check app loads heavy resources (large images, videos, many scripts) * Contact app support about performance optimization * Consider lazy-loading the Apps section (advanced, requires theme customization) * Test page speed with and without app to confirm it's the culprit * Evaluate if app's functionality justifies performance impact **App block styling doesn't match theme:** * Most apps use their own styles (may not perfectly match theme) * Check if app has style/color settings in block configuration * Some apps offer "inherit theme styles" options * For advanced customization, use theme's custom CSS (requires coding) * Contact app support about theme styling compatibility **Can't remove app block:** * Ensure you're clicking "Remove block" (not just unchecking settings) * Try refreshing Theme Customizer if deletion isn't saving * Check that theme isn't locked/published (may need to create draft) * As workaround, hide block with CSS if deletion fails (contact Shopify support) **App block shows different content on live site vs editor:** * Some apps don't fully preview in Theme Customizer (need live view) * Check if app has "preview mode" toggle in settings * Test on live storefront or use theme preview with ?preview\_theme\_id= * Contact app support if preview behavior is unexpected # Full Width Banner Source: https://docs.digifist.com/themes/mojave/sections/banner-fullwidth Create edge-to-edge promotional banners with optional product hotspots, customizable height, and split-screen or background image layouts ## What this section does The **Banner - Fullwidth** section creates prominent fullwidth promotional banners perfect for campaigns, collections, or storytelling. Features include: * **Edge-to-edge fullwidth** design spans entire viewport * **Adjustable height**: 35-100% of viewport height * **Two image styles**: Background (overlay) or Aside (split-screen) * **Two layouts**: Content at Top or Bottom * **Responsive images**: Separate desktop (2880x1400px) and mobile (720x1140px) * **Overlay opacity control** for background images (0-100%) * **Product hotspots**: Up to 3 positioned product links (x/y coordinates) * Heading, link/CTA button * Optional primary/secondary product references Perfect for homepage heroes, collection promotions, campaign landings, or any fullwidth visual messaging. <Frame> <img alt="Banner Fullwidth Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Banner - Fullwidth** </Step> <Step title="Upload images"> Add desktop (2880x1400px) and mobile (720x1140px) images for optimal quality across devices </Step> <Step title="Choose image style"> Select **Background** for text overlay or **Aside** for split-screen layout </Step> <Step title="Add content"> Configure heading, link text/URL, and adjust banner height, layout position, and overlay opacity </Step> <Step title="Optional: Add product hotspots"> Add up to 3 **Link product** blocks to create clickable product hotspots on the image </Step> </Steps> ## Section settings <Tabs> <Tab title="Layout"> <AccordionGroup> <Accordion title="Banner Height" icon="arrows-up-down"> **Range**: 35-100% (step: 5%, default: 100%) Controls banner height as percentage of viewport height: * **35%**: Shortest (compact banner) * **65%**: Medium-tall (balanced) * **100%**: Full viewport height (default, maximum impact) **Info**: "Set the height of the banner to change the height of the slide" Higher percentages create more dramatic, immersive banners. Use 50-75% for mid-page sections. </Accordion> <Accordion title="Image style" icon="image"> **Dropdown** (default: Background) Controls how image relates to content: * **Background**: Image fills entire banner, content overlays (default) * **Aside**: Split-screen layout with image on one side, content on other **Background** creates overlays/hero effects. **Aside** creates clean split-screen editorial layouts. </Accordion> <Accordion title="Layout" icon="align-left"> **Dropdown** (default: Bottom) Controls vertical position of content: * **Top**: Content positioned at top of banner * **Bottom**: Content positioned at bottom of banner (default) Most relevant for Background image style. With Aside style, determines which side content appears. </Accordion> <Accordion title="Overlay opacity" icon="circle-half-stroke"> **Range**: 0-100% (step: 10%, default: 50%) Controls darkness of overlay between image and content: * **0%**: No overlay (content directly on image) * **50%**: Medium overlay (default, balanced readability) * **100%**: Full black overlay (maximum contrast) Higher opacity improves text readability on busy images. Only affects Background image style. </Accordion> </AccordionGroup> </Tab> <Tab title="Media"> <AccordionGroup> <Accordion title="Image" icon="image"> **Image picker** (required) Main banner image for desktop: * **Recommended size**: 2880x1400px * Fullwidth, high-resolution for edge-to-edge display * Use high-quality lifestyle or product photography **Info**: "Recommended sizes: 2880x1400px" 2880px width ensures sharp display on large screens and retina displays. </Accordion> <Accordion title="Image - Mobile" icon="mobile"> **Image picker** (optional) Mobile-specific banner image: * **Recommended size**: 720x1140px * Portrait orientation optimized for mobile screens * If not provided, desktop image is cropped/scaled for mobile **Info**: "Recommended sizes: 720x1140px" Use mobile-specific images when desktop image doesn't work well cropped (wrong focal point, horizontal composition). </Accordion> </AccordionGroup> </Tab> <Tab title="Content"> <AccordionGroup> <Accordion title="Heading" icon="heading"> **Textarea** (default: "Tell your brand's story through images") Main banner heading/title: * Supports multiple lines (use Shift+Enter) * Large, prominent display * Position determined by Layout setting (Top/Bottom) Examples: "Summer Collection 2024", "50% Off Everything", "New Arrivals", "The Ultimate Guide To..." </Accordion> <Accordion title="Link text & URL" icon="link"> **Link text** (text field, default: "Shop all") * CTA button label **Link URL** (URL field, default: /collections) * Button destination Use action-oriented link text: "Shop now", "Explore collection", "Learn more", "Get started". </Accordion> <Accordion title="Product - primary & secondary" icon="box"> **Product - primary** (product picker, optional) * Reference to primary featured product **Product - secondary** (product picker, optional) * Reference to secondary featured product These product references can be used for dynamic content or structured data. Not visually displayed unless theme includes custom functionality. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block: Link product **Type**: product\_showcase (limit: 3 blocks) Create interactive product hotspots positioned anywhere on the banner image. <AccordionGroup> <Accordion title="Product" icon="tag"> **Product picker** (required) Select product to link from this hotspot: * Clicking hotspot navigates to product page (PDP) * Product info (title, price) displayed in tooltip/popup on hover Use for "Shop the Look" style banners showcasing products in lifestyle context. </Accordion> <Accordion title="Position X & Y" icon="crosshairs"> **Position X** (range: 0-100%, default: 25%) * Horizontal position from left edge (0% = far left, 100% = far right) **Position Y** (range: 0-100%, default: 25%) * Vertical position from top edge (0% = top, 100% = bottom) **Header**: "Position" Position hotspot over the product in the lifestyle image. Fine-tune coordinates to place pin exactly on product. **Example**: Product at center-right of image → X: 75%, Y: 50% </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="High-res images" icon="image"> Use 2880x1400px desktop images minimum. Fullwidth banners display very large—low-res images look pixelated. </Card> <Card title="Mobile-specific images" icon="mobile"> Always upload mobile images (720x1140px). Desktop horizontal crops don't work well on portrait mobile screens. </Card> <Card title="Overlay for readability" icon="circle-half-stroke"> Set 40-60% overlay for Background style with busy images. Ensures text remains readable across all image areas. </Card> <Card title="Hero placement" icon="star"> Use 100% height for homepage hero (first section). Use 50-75% for mid-page promotional banners. </Card> <Card title="Aside for clarity" icon="columns"> Use Aside image style when text content is lengthy (multiple paragraphs). Provides dedicated readable space. </Card> <Card title="3 hotspots maximum" icon="location-dot"> Limit is 3 product hotspots. More creates clutter—use Collections or Shop the Look section for more products. </Card> <Card title="Action-oriented CTAs" icon="hand-pointer"> Use urgent, specific link text: "Shop Spring Sale" not "Click here". "Explore Collection" not "Learn more". </Card> <Card title="Strategic product placement" icon="bullseye"> Position hotspots directly over products in lifestyle images. Accurate placement creates intuitive "shop this item" experience. </Card> </CardGroup> ## Common use cases **Homepage hero** — Height 100%, Background style, Bottom layout, prominent heading + CTA, no hotspots **Collection promotion** — Height 65%, Aside style, lifestyle image showing product in use + collection description + button **Campaign landing** — Height 75%, Background style, 60% overlay, large sale messaging with urgency ("50% Off - Today Only") **Shop the look** — Height 50-75%, Background style, lifestyle image with 2-3 product hotspots positioned over featured items **Seasonal announcement** — Height 50%, Background style, Top layout, seasonal imagery with "New Spring Collection" messaging **Editorial storytelling** — Height 65%, Aside style, brand story image + multi-line text about values/mission + "About Us" link ## Layout behavior **Background image style**: * Image fills entire banner (edge-to-edge) * Content overlays on image with dark overlay (configurable opacity) * Layout determines vertical position: Top (content at top) or Bottom (content at bottom, default) * Horizontal: Content always centered **Aside image style**: * Split-screen layout * Layout determines which side content appears: * **Top**: Image right, content left (or vice versa based on theme defaults) * **Bottom**: Image left, content right (or vice versa) * Each side: 50% width on desktop * No overlay (content has solid background separate from image) **Desktop**: * Fullwidth edge-to-edge display * Height = Banner Height setting × viewport height * Product hotspots displayed as interactive pins/dots * Hover: Product title/price tooltip **Mobile**: * Stacks vertically (even with Aside style) * Image at top, content below * Uses mobile-specific image if provided, otherwise crops/scales desktop image * Product hotspots hidden on mobile (optional theme behavior) or repositioned ## Image guidelines **Desktop image (2880x1400px)**: * Aspect ratio: \~2:1 (landscape) * Focal point: Center-aware composition (content may overlay anywhere) * High resolution: 2880px width ensures sharpness on 4K displays * File size: Optimize to \< 500KB (use JPG, quality 80-85%) **Mobile image (720x1140px)**: * Aspect ratio: \~9:16 (portrait) * Focal point: Top or center (content overlays bottom by default) * Resolution: 720px width = 2x pixel density for 360px mobile screens * File size: Optimize to \< 150KB for fast mobile loading **Background style images**: * Avoid busy/complex backgrounds where text overlays * Ensure even lighting—high contrast areas make overlays harder * Test with different overlay opacities (40-70% typically works) **Aside style images**: * Focus product/subject toward center of image half * Less critical for text readability (content doesn't overlay) * Can use more complex, detailed imagery ## Product hotspot behavior **When to use**: * Lifestyle images showing products in context * "Shop the Look" campaigns with 2-3 featured items * Editorial content where specific products are highlighted **Interaction**: * Hotspots appear as pins/dots on image * Hover: Tooltip with product title, price, "Shop now" * Click: Navigate to product page (PDP) **Positioning best practices**: * Place pin directly over product in image (use X/Y sliders) * Test on different screen sizes—hotspots may shift slightly * Space hotspots apart (not clustered)—easier to click **Mobile behavior**: * Some themes hide hotspots on mobile (ambiguous touch targets) * Other themes show hotspots but may reposition for responsive images * Test mobile experience—consider mobile-specific product positioning ## Customization tips **For homepage hero**: * Height: 100% * Image style: Background * Layout: Bottom (default) * Overlay: 50-60% for readability * Heading: Large, bold claim ("Premium Quality, Affordable Prices") * Link: Strong CTA ("Shop Now", "Explore") **For mid-page promotion**: * Height: 50-65% * Image style: Aside for text-heavy content, Background for succinct messaging * Heading: Specific offer ("Free Shipping on Orders \$50+") * Link: Relevant collection or page **For shop the look**: * Height: 65-75% * Image style: Background * Overlay: 30-40% (lighter, image-focused) * Add 2-3 product hotspots positioned over products in lifestyle shot * Heading: "Shop This Look" or "Get The Look" **For editorial/storytelling**: * Height: 50-75% * Image style: Aside (provides space for longer text) * Layout: Experiment with Top vs Bottom for visual variety * Heading: Story-driven ("Our Commitment to Sustainability") * Link: "Read Our Story", "Learn More" ## Related sections * **Hero** — Multi-slide carousel alternative with more layout options * **Featured Collections Links** — Multi-collection grid with similar hotspot functionality * **Images with Text** — Split-screen alternative without fullwidth constraint * **Content Tiles** — Grid-based layouts for multiple banners/content blocks ## Technical notes **Viewport height units**: Height setting uses `vh` (viewport height). 100% = 100vh = full browser window height. Adjusts dynamically to screen size. **Fullwidth always**: This section always spans edge-to-edge regardless of theme container settings. Designed for maximum visual impact. **Overlay implementation**: Overlay is a semi-transparent dark layer (typically black with alpha transparency) between image and content. Improves contrast without requiring image darkening. **Product hotspot coordinates**: X/Y positioning uses absolute percentage positioning within image container. X=0%, Y=0% = top-left corner. X=100%, Y=100% = bottom-right corner. **Mobile image fallback**: If no mobile image provided, theme crops/scales desktop image. Cropping typically centers or uses focal point detection. Always test—provide mobile images for best results. **Product references**: Primary/secondary product settings are metadata fields. Not automatically displayed but available for custom Liquid code, structured data, or future theme features. **Aside layout variance**: "Aside" implementation varies by theme. Some themes flip image left/right based on Layout setting. Others use alternate methods. Test both Layout options to see behavior. # Card Callout Source: https://docs.digifist.com/themes/mojave/sections/card-callout Centered callout card section for announcements, promotions, or key messages ## What It Does The **Card Callout** section creates a visually distinct, centered card perfect for highlighting important messages, announcements, promotions, or calls-to-action. The card stands out from regular content with elevated styling, drawing attention to your key message. ## Getting Started <Steps> <Step title="Add the Section"> Add the Card Callout section to any template where you want a prominent, standalone message </Step> <Step title="Write Your Message"> Add a title and supporting content text for your callout </Step> <Step title="Add Call-to-Action"> Set button text and URL to direct customers to a specific action or page </Step> <Step title="Adjust Width"> Choose section width (Narrower, Page, Narrow, or Fullwidth) based on design preference </Step> </Steps> ## Settings <AccordionGroup> <Accordion title="Title" icon="heading"> **Type:** Text field\ **Default:** "Callout title text" Main heading displayed prominently on the callout card. Should be concise and attention-grabbing. **Examples by Use Case:** **Promotion:** * "Limited Time: 25% Off Sitewide" * "Spring Sale Ends Sunday" * "Free Shipping Over \$50" **Announcement:** * "We've Moved!" * "New Collection Dropping Friday" * "Holiday Hours: Dec 24-26" **Value Proposition:** * "100% Organic Materials" * "Handcrafted in Portland" * "30-Day Money-Back Guarantee" **Call-to-Action:** * "Not Sure What to Buy?" * "Looking for a Gift?" * "Want 10% Off Your First Order?" **Best practices:** * **Keep short:** 3-8 words ideal (longer titles may wrap awkwardly) * **Front-load value:** Put key benefit first ("Free Shipping" not "Get Free Shipping") * **Create urgency:** Use time-sensitive language when appropriate * **Be specific:** "25% Off" beats "Big Sale" </Accordion> <Accordion title="Content" icon="paragraph"> **Type:** Textarea\ **Default:** "Callout content text" Supporting text below the title. Provides additional context, details, or persuasive copy to complement the headline. **Content Guidelines:** **Length:** * **Minimum:** 10-20 words (too short feels incomplete) * **Optimal:** 20-40 words (1-2 sentences, easily scannable) * **Maximum:** 60 words (longer text diminishes "callout" impact) **Tone by Purpose:** **Promotional:** * "Use code SPRING25 at checkout. Offer valid through Sunday, April 30. Cannot be combined with other discounts." **Informational:** * "Our team will be offline December 24-26 for the holidays. Orders placed during this time will ship starting December 27." **Value-driven:** * "Every product is handmade in our Portland studio using sustainably-sourced organic materials. Quality you can feel, values you can trust." **Action-oriented:** * "Take our 2-minute quiz and we'll recommend the perfect products for your needs. Free shipping on all quiz orders!" **Best practices:** * **Complement title:** Don't repeat title verbatim; expand on it * **Add specifics:** Include dates, codes, conditions the title doesn't cover * **End with benefit:** Last sentence should reinforce value ("Ships same-day!") * **Keep scannable:** Short sentences, clear language </Accordion> <Accordion title="Button Text" icon="hand-pointer"> **Type:** Text field\ **Default:** "Button text" Label for the call-to-action button. Should be action-oriented and clearly indicate what happens when clicked. **Effective Button Text Examples:** **Shopping Actions:** * "Shop Now" * "Shop the Sale" * "Browse Collection" * "View Products" * "Start Shopping" **Information Actions:** * "Learn More" * "Read Details" * "See Our Story" * "Get Answers" **Interactive Actions:** * "Take the Quiz" * "Contact Us" * "Get Started" * "Sign Up" **Urgency Actions:** * "Claim Offer" * "Get 25% Off" * "Don't Miss Out" **Best practices:** * **Use verbs:** Start with action words (Shop, Browse, Claim, Get) * **Be specific:** "Shop Spring Sale" beats generic "Click Here" * **Create urgency:** "Claim Offer" implies scarcity more than "Learn More" * **Match title tone:** Playful titles need playful buttons, serious titles need serious buttons * **Keep short:** 1-3 words ideal, 4-5 words maximum **Avoid:** * Generic "Click Here" or "Submit" (no context) * Overly long "Browse Our Entire Collection of Products" (too wordy) * Confusing "Maybe Later" or "Skip" (negative/ambiguous actions) </Accordion> <Accordion title="Button URL" icon="link"> **Type:** URL field\ **Default:** "/" (homepage) Destination page when customers click the button. Can link to any page on your site or external URLs. **Common Link Destinations:** **Collections:** * `/collections/sale` - Sale collection * `/collections/new-arrivals` - New products * `/collections/best-sellers` - Popular products * `/collections/all` - All products **Pages:** * `/pages/about` - About page * `/pages/contact` - Contact form * `/pages/shipping` - Shipping policy * `/pages/quiz` - Custom quiz page **Products:** * `/products/product-handle` - Specific product * Useful for featured product promotions **Blog:** * `/blogs/news` - Blog homepage * `/blogs/news/article-title` - Specific article **Cart/Discount:** * `/cart` - Cart page * `/discount/CODENAME` - Auto-apply discount code **External:** * `https://yourapp.com/quiz` - External quiz platform * `https://instagram.com/yourstore` - Social media **Best practices:** * **Test links:** Verify URLs work before publishing * **Use relative paths:** `/collections/sale` instead of full URL when possible * **Match button text:** If button says "Shop Sale", link to sale collection * **Consider mobile:** Ensure destination is mobile-friendly </Accordion> <Accordion title="Section Width" icon="arrows-left-right"> **Type:** Select dropdown\ **Options:** Narrower, Page, Narrow, Fullwidth\ **Default:** Narrower (container--sm) Controls the maximum width of the callout card, affecting how prominent and spacious it appears. ### Width Options **Narrower (container--sm)** ← **Default** * **Max width:** \~600-700px * **Use when:** Short, punchy messages (promotional callouts, single CTAs) * **Effect:** Very focused, card "floats" prominently in center with significant whitespace * **Best for:** * "Free Shipping Over \$50" promotions * Single-sentence announcements * Minimalist designs * Mobile-optimized layouts (minimal horizontal scrolling concern) **Page (container--default)** * **Max width:** \~1000-1200px * **Use when:** Moderate content length, balanced between focus and readability * **Effect:** Card doesn't feel cramped but maintains focus * **Best for:** * 2-3 sentence content * Value propositions with detail * Standard informational callouts **Narrow (container--md)** * **Max width:** \~1400px * **Use when:** Longer content that needs breathing room * **Effect:** Wider card, content has more horizontal space * **Best for:** * Announcements with multiple details * Callouts with longer explanatory text * When adjacent to other fullwidth sections (maintain consistency) **Fullwidth (container--fullwidth)** * **Max width:** Full page width (minus page margins) * **Use when:** Want maximum visual impact and horizontal space * **Effect:** Card spans nearly entire page, very prominent * **Best for:** * Homepage hero-style callouts * Bold promotional banners * When you need maximum horizontal content space * Below fullwidth sections (visual consistency) ### Choosing the Right Width **Consider content length:** * **Short title + 1 sentence:** Narrower or Page * **Title + 2-3 sentences:** Page or Narrow * **Title + 3+ sentences:** Narrow or Fullwidth **Consider page layout:** * **Standalone section:** Narrower (creates strong focal point) * **Between narrow sections:** Narrower or Page (match adjacent widths) * **Between fullwidth sections:** Narrow or Fullwidth (maintain visual rhythm) **Consider aesthetic:** * **Minimalist:** Narrower (emphasizes whitespace) * **Balanced:** Page or Narrow (standard layouts) * **Bold:** Fullwidth (maximum impact) **Mobile behavior:** All widths become full-screen on mobile (minus margins), so width choice primarily affects desktop appearance. </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Keep It Concise" icon="minimize"> Callouts lose impact if too wordy. Aim for short title (under 8 words) and brief content (1-3 sentences). Length defeats "callout" purpose. </Card> <Card title="Use Strategic Placement" icon="location-dot"> Place callouts where they add value without disrupting flow: between major page sections, above footer, or after key content. Avoid mid-paragraph breaks. </Card> <Card title="Create Visual Hierarchy" icon="layer-group"> Don't use multiple callout cards on one page—dilutes attention. Use one prominent callout, or space multiple callouts far apart (different page sections). </Card> <Card title="Match Button to Message" icon="link"> Button text and URL must align logically. "Shop Sale" should link to sale collection, not homepage. Mismatched CTAs confuse customers. </Card> <Card title="Test Urgency Language" icon="clock"> Time-sensitive callouts ("Ends Sunday") drive action but must be accurate. Update or remove expired promotions immediately to maintain trust. </Card> <Card title="Use Consistent Width" icon="ruler"> If your page has multiple sections with specific widths (narrow, fullwidth), choose callout width that matches adjacent sections for visual cohesion. </Card> <Card title="Highlight Value, Not Features" icon="star"> Focus on customer benefits ("Free Shipping", "30-Day Returns") rather than features ("We offer shipping", "Returns available"). Benefits drive action. </Card> <Card title="Preview on Mobile" icon="mobile"> Callouts are often viewed on mobile. Ensure text is readable at mobile sizes and button is easily tappable (not too small or close to other elements). </Card> </CardGroup> ## Common Use Cases ### Free Shipping Promotion **Settings:** * Title: "Free Shipping Over \$50" * Content: "Add \$50 to your cart and get free standard shipping to the continental US. No code needed—discount applies automatically at checkout." * Button text: "Shop Now" * Button URL: `/collections/all` * Section width: Narrower **Best for:** E-commerce sites wanting to increase average order value with free shipping threshold ### Limited-Time Sale **Settings:** * Title: "Spring Sale: 25% Off Ends Sunday" * Content: "Use code SPRING25 at checkout. Offer valid through April 30. Cannot be combined with other discounts." * Button text: "Shop the Sale" * Button URL: `/collections/sale` * Section width: Page **Best for:** Seasonal promotions, holiday sales, clearance events ### Business Announcement **Settings:** * Title: "We've Moved to a Bigger Space!" * Content: "Visit us at our new location: 123 Main Street, Portland. Same team, same quality, more room for you. Stop by for a grand opening celebration May 1-7." * Button text: "Get Directions" * Button URL: `/pages/contact` (page with map/address) * Section width: Narrow **Best for:** Physical retailers announcing location changes, events, or milestones ### Value Proposition Callout **Settings:** * Title: "Handcrafted with Care" * Content: "Every piece is made-to-order in our Portland studio using sustainably-sourced materials. We never cut corners, and we never compromise on quality." * Button text: "Our Story" * Button URL: `/pages/about` * Section width: Page **Best for:** Artisan brands, sustainable products, craft-focused businesses ### Interactive Quiz CTA **Settings:** * Title: "Not Sure What to Order?" * Content: "Take our 2-minute quiz and we'll recommend the perfect products for your needs. Plus, get 10% off your first quiz order!" * Button text: "Take the Quiz" * Button URL: `/pages/quiz` or external quiz app URL * Section width: Narrower **Best for:** Stores with complex product lines, personalized products, or quiz apps ### Holiday Hours **Settings:** * Title: "Holiday Hours: Dec 24-26" * Content: "Our team will be offline December 24-26 celebrating with family. Orders placed during this time will ship starting December 27. Happy holidays!" * Button text: "Contact Us" * Button URL: `/pages/contact` * Section width: Page **Best for:** Seasonal closures, holiday schedules, temporary service changes ## Layout Behavior ### Desktop Layout (1200px+) The callout card displays as a **centered, elevated card**: * **Card styling:** Subtle background, border, or shadow (depends on theme design) * **Text alignment:** Center-aligned (title, content, button all centered) * **Width:** Constrained by Section Width setting (Narrower to Fullwidth) * **Spacing:** Significant whitespace around card creates "floating" effect **Visual hierarchy:** 1. Title (large, bold) 2. Content (medium, regular weight) 3. Button (prominent, theme button styling) ### Mobile Layout (Under 768px) On mobile, the card adjusts: * **Full-width:** Card spans mobile screen (minus standard margins) * **All width options behave similarly** on mobile (no horizontal space for width variation) * **Stacked content:** Title, content, button stack vertically * **Touch-optimized:** Button sized for easy tapping (minimum 44px tap target) **Mobile spacing:** Padding/margins reduce to prevent card from feeling cramped on small screens. ### Card Design Elements The callout card typically includes: * **Background:** Light background color or subtle pattern (distinguishes from page background) * **Border/Shadow:** Subtle border or drop shadow for elevation effect * **Padding:** Generous internal padding around content (prevents text from touching edges) * **Button:** Styled with theme's primary button colors **Theme variation:** Exact card appearance depends on theme's design system. Some themes use bold shadows, others use subtle borders. ### Responsive Breakpoints The section adapts across three responsive ranges: * **Desktop (1200px+):** Full section width variation visible, generous spacing * **Tablet (768px - 1199px):** Moderate width, balanced spacing * **Mobile (under 768px):** Full-width cards, compressed spacing ## Related Sections * **[Newsletter](/themes/mojave/newsletter)** - Alternative CTA for email signups (more specific than general callout) * **[Banner Fullwidth](/themes/mojave/banner-fullwidth)** - Fullwidth banner with image (more visual than card callout) * **[Rich Text](/themes/mojave/richtext)** - For longer announcements or informational content without card styling * **[Countdown Timer](/themes/mojave/countdown-timer)** - Add urgency to time-sensitive callouts with countdown ## Technical Notes ### Center Alignment The Card Callout section uses **CSS center alignment** for all content: * `text-align: center` on title and content * `margin: 0 auto` on button (centered within card) * `display: flex` with `justify-content: center` for overall card positioning This creates consistent, symmetrical presentation regardless of content length. ### Section Width Implementation Width options use CSS classes: * `container--sm`: \~600-700px max-width * `container--default`: \~1000-1200px max-width * `container--md`: \~1400px max-width * `container--fullwidth`: Full width (no max-width constraint) These classes apply `max-width` values and `margin: 0 auto` for centering when below max-width. ### Responsive Behavior The card uses CSS media queries to adjust: ```css theme={null} @media (max-width: 768px) { .card-callout { padding: 20px; /* Reduce padding on mobile */ margin: 15px; /* Reduce margins */ } } ``` Mobile breakpoints ensure card doesn't feel cramped or excessively padded on small screens. ### Button Styling The button inherits theme's button styles: * Colors from theme settings (primary button color) * Hover effects (color change, shadow, transform) * Font sizing and weight from theme typography * Border radius from theme's button radius setting **Customization:** To change button appearance beyond theme settings, use theme's custom CSS. ### Text Overflow Handling **Long titles:** * Automatically wrap to multiple lines if needed * No character limit enforced (but readability suffers past \~12 words) * Font size doesn't reduce (maintains readability) **Long content:** * Wraps naturally within card width * No truncation (all text displays) * Consider visual balance—very long content makes card too tall **Best practice:** Keep content concise to avoid excessive card height. ### Accessibility Features The section includes accessibility considerations: * **Semantic HTML:** Card uses `<section>` element * **Heading hierarchy:** Title uses appropriate heading level * **Button accessibility:** Button is keyboard-navigable with focus styles * **ARIA labels:** Button includes descriptive label (button text) * **Color contrast:** Theme ensures sufficient contrast for readability **Screen readers:** Announce title, content, and button sequentially, providing complete context before action option. ### Performance The Card Callout section has minimal performance impact: * **No images:** Pure text/button (fast loading) * **Minimal HTML:** Simple DOM structure * **CSS-only styling:** No JavaScript dependencies * **Fast render:** Displays immediately (no data fetching or delays) **Mobile performance:** Lightweight design ensures fast loading on slow connections. ## Troubleshooting **Button not clickable/not working:** * Verify Button URL is set (check it's not empty) * Test URL directly in browser address bar (ensure it's valid) * Check for typos in URL (extra spaces, missing slashes) * Ensure URL starts with `/` for internal links or `https://` for external **Card looks cut off or too wide:** * Check Section Width setting (try different width options) * Preview on actual screen size (editor may not show exact breakpoints) * If issue persists on mobile, may be theme CSS issue (contact theme support) **Text is hard to read (poor contrast):** * Card background/text colors controlled by theme settings * Try changing theme's color scheme (Theme settings > Colors) * For specific fixes, use custom CSS (requires theme code editing) **CTA button text truncated:** * Keep button text short (1-4 words ideal) * Check mobile preview (longer text may wrap awkwardly on small screens) * Rephrase button with shorter synonym ("Shop Now" vs "Browse Full Collection") **Card appears multiple times or in wrong location:** * Check you haven't added same section multiple times to template * Verify you're editing correct template (Home vs Page vs Product) * Remove duplicate sections if found **Changes not saving:** * Click "Save" in theme customizer before exiting * Hard refresh browser (Cmd/Ctrl + Shift + R) to clear cache * Check you're editing live theme (not draft theme) * Try incognito/private window to rule out cache issues **Section doesn't stand out visually:** * Relies on theme's card styling (some themes have subtle card designs) * Check theme settings for card shadow/border options * Consider using Banner Fullwidth section if you need more visual impact * For custom styling, add CSS (requires theme code editing) # Cart Drawer Source: https://docs.digifist.com/themes/mojave/sections/cart-drawer Slide-out drawer cart configuration for quick shopping and checkout ## What It Does The **Cart Drawer** section controls the slide-out cart drawer that appears when customers click the cart icon in your header. This drawer provides a quick view of cart contents, allows quantity adjustments, and offers express checkout options—all without leaving the current page. Configure drawer width, empty cart message position, and checkout button layout for optimal mobile and desktop shopping experiences. <Note> This section controls drawer **configuration** only (size, layout, empty state). Cart items rendering and cart functionality handled by separate components. Changes here affect drawer appearance/behavior globally sitewide. </Note> ## Getting Started <Steps> <Step title="Locate Cart Drawer Settings"> In Theme Customizer, go to header or search "Cart Drawer" section. This section typically lives in header area but affects drawer that appears sitewide. </Step> <Step title="Choose Drawer Size"> Select drawer width (Small, Medium, Large) based on your products and customer device usage. Medium works for most stores. </Step> <Step title="Set Empty Cart Position"> Choose where empty cart message displays vertically (Top, Center, Bottom). Center is most balanced. </Step> <Step title="Configure Button Layout (Desktop)"> Select checkout button layout for desktop: Inline (side-by-side) or Column (stacked). Inline saves vertical space. </Step> </Steps> ## Settings <Tabs> <Tab title="Section Settings"> <AccordionGroup> <Accordion title="Empty Cart Content Vertical Position" icon="arrow-up-arrow-down"> **Type:** Select dropdown\ **Options:** Top, Center, Bottom\ **Default:** Center Controls where the "Your cart is empty" message displays when cart has no items. ### Position Options **Top:** * Message appears near top of drawer * Below cart title ("Shopping Cart"), above drawer middle * Creates bottom whitespace in drawer **Center (Default):** * Message vertically centered in drawer * Balanced, natural reading position * Equal whitespace above and below **Bottom:** * Message appears near bottom of drawer * Creates top whitespace in drawer * Unusual, typically avoid unless design requirement ### Choosing Position **Center when:** (Recommended for most stores) * Standard design, no specific branding requirements * Want balanced, professional appearance * Empty state message is 1-2 lines **Top when:** * Custom design pushes primary content upward * Want consistent top alignment with other drawer states * Empty message includes additional content (images, links below text) **Bottom when:** * Specific brand aesthetic (e.g., footer focus) * Testing unusual layout for differentiation * Generally avoid—feels awkward for users expecting centered content ### Best Practices **Message content:** * Default message usually "Your cart is empty" (editable in theme translation files) * Keep concise (1-2 sentences max) * Consider adding "Continue Shopping" link below message (requires theme customization) **Mobile consideration:** * On mobile, drawer is smaller height * Top/Center/Bottom spacing compresses * Center tends to work best across device sizes **Testing:** * Empty cart (remove all items) * Open cart drawer * Check message position—should feel natural, not awkward **Recommendation:** Use Center (default) unless you have specific design reason to change. Top is secondary option; Bottom rarely ideal. </Accordion> <Accordion title="Cart Drawer Size" icon="maximize"> **Type:** Select dropdown\ **Options:** Small, Medium, Large\ **Default:** Medium Controls the width of the cart drawer when opened. ### Size Options **Small:** * **Width:** \~300-350px (approximate) * **Best for:** Minimal carts, simple products * **Pro:** More browsing space remains visible behind drawer * **Con:** Cramped for products with long names or large images * **Use when:** Products simple (digital goods, services), mobile-first audience **Medium (Default):** * **Width:** \~400-450px (approximate) * **Best for:** Most stores, standard products * **Pro:** Balance between cart detail and page visibility * **Con:** None—versatile for most use cases * **Use when:** Standard e-commerce (apparel, home goods, general retail) **Large:** * **Width:** \~500-600px (approximate) * **Best for:** Complex products, detailed cart info * **Pro:** Maximum space for product images, descriptions, upsells * **Con:** Covers more browsing area, feels heavy on smaller screens * **Use when:** Products need detail (variants, customizations), desktop-heavy traffic ### Choosing Drawer Size **Consider product complexity:** * Simple products (t-shirts, basic items): Small or Medium * Products with variants (sizes, colors): Medium * Complex products (customizable, bundles): Medium or Large **Consider product names:** * Short names ("Classic Tee"): Small works * Medium names ("Men's Organic Cotton T-Shirt"): Medium * Long names with details: Large (avoids truncation) **Consider cart images:** * No images in cart: Small sufficient * Small product thumbnails: Small or Medium * Large product images: Medium or Large **Consider audience device:** * Mobile-heavy: Small or Medium (leaves more screen visible) * Desktop-heavy: Medium or Large (utilize screen space) * Balanced: Medium (works well both) ### Testing Process 1. Add 2-3 products to cart (mix of simple and complex) 2. Open cart drawer 3. Check readability of product names, image clarity, button spacing 4. Test on desktop and mobile (drawer behavior may differ) 5. Choose size where everything feels comfortable, not cramped or overly spacious ### Best Practices **Mobile behavior:** * On mobile (\< 768px), drawer often becomes full-screen or near-full regardless of setting * This setting primarily affects desktop/tablet experience * Still test on mobile—sizing may affect internal cart spacing **Don't go too large:** * Large drawer covers significant browsing area * Users may want to continue shopping while cart open * Balance drawer utility vs page access **Match brand aesthetic:** * Minimal brands: Small (airy, unobtrusive) * Standard brands: Medium (professional) * Luxury/detailed brands: Large (showcase cart contents) **Recommendation:** Start with Medium (default), adjust to Small for minimal products or Large for complex products with details. Test with actual products in cart. </Accordion> <Accordion title="Buttons Layout Type" icon="table-columns"> **Type:** Select dropdown\ **Options:** Inline, Column\ **Default:** Inline\ **Info:** "This layout is only for desktop" Controls checkout button layout on desktop (does not affect mobile). ### Layout Options **Inline (Default):** * Buttons displayed side-by-side horizontally * Example: `[View Cart] [Checkout]` (two buttons in same row) * **Pro:** Compact, saves vertical space in drawer * **Con:** Less prominent call-to-action **Column:** * Buttons stacked vertically * Example: ``` [Checkout] [View Cart] ``` * **Pro:** More prominent, especially primary "Checkout" button * **Con:** Takes more vertical space ### Choosing Layout **Inline when:** * Want compact drawer (vertical space constrained) * Both buttons equally important (View Cart and Checkout) * Drawer already tall (many items in cart) * Minimal aesthetic preference **Column when:** * Want prominent call-to-action ("Checkout" button stands out) * Guiding customers to checkout over viewing full cart page * Drawer has vertical space to spare * Primary/secondary button hierarchy desired ### Desktop vs Mobile **Important:** This setting **only affects desktop** (per info text). **Desktop:** * Inline or Column layout as selected * Wide drawer accommodates both layouts comfortably **Mobile:** * Layout determined by mobile-specific styling (usually stacked/column) * This setting ignored on mobile * Mobile drawers typically full-screen, buttons always stacked ### Button Types **Typical cart drawer buttons:** 1. **Checkout** (primary action) - Proceeds to checkout page 2. **View Cart** (secondary action) - Goes to full cart page 3. Sometimes **Continue Shopping** (close drawer, return to browsing) ### Best Practices **Inline layout:** * Ensure both buttons legible (not too narrow/cramped) * Primary button (Checkout) should have more prominent styling (color, bold) * Test with longest button text ("Continue Shopping" vs "Checkout") **Column layout:** * Primary button (Checkout) displays first/top (most prominent position) * Secondary actions below (View Cart, Continue Shopping) * Consistent button width (full-width stacked looks cleaner) **CTA hierarchy:** * Regardless of layout, make Checkout button most prominent (color, size, weight) * View Cart button secondary styling (outline, less vibrant) * Continue Shopping tertiary (text link or subtle button) **Mobile testing:** * Even though setting is desktop-only, test mobile to see default mobile layout * Ensure mobile buttons easily tappable (48x48px minimum touch target) **Recommendation:** Use Inline (default) for clean, compact drawer. Switch to Column if you want prominent "Checkout" CTA or have drawer vertical space to utilize. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Medium Drawer for Most Stores" icon="compress"> Start with Medium drawer size—works for 80% of stores. Adjust to Small for simple products or Large for complex products with variants/customizations. </Card> <Card title="Center Empty Message" icon="align-center"> Keep empty cart message vertically centered (default). Creates balanced, professional appearance when cart is empty. Top/Bottom rarely needed. </Card> <Card title="Inline Buttons Save Space" icon="grip-lines"> Use Inline button layout (default) for compact drawer. Switch to Column only if emphasizing "Checkout" CTA or have vertical space to spare. </Card> <Card title="Test with Real Products" icon="cart-shopping"> Add 2-3 actual products to cart and test drawer on desktop and mobile. Check product name readability, image clarity, button spacing before launching. </Card> <Card title="Mobile Goes Full-Screen" icon="mobile-screen"> On mobile, drawer often full-screen regardless of size setting. Settings primarily affect desktop/tablet. Always test mobile separately. </Card> <Card title="Prominent Checkout Button" icon="circle-check"> Ensure "Checkout" button visually stands out (color, size) regardless of Inline or Column layout. Primary CTA should be unmistakable. </Card> <Card title="Fast Checkout Experience" icon="bolt"> Cart drawer purpose is quick checkout without page navigation. Keep it fast—avoid heavy images, excessive upsells that slow drawer load. </Card> <Card title="Accessibility Matters" icon="universal-access"> Ensure drawer keyboard-navigable (Tab through items/buttons, Esc to close). Test with screen reader—all cart items and totals should be announced. </Card> </CardGroup> ## Common Use Cases ### Standard Retail Drawer **Settings:** Medium drawer, Center empty message, Inline buttons **Setup:** Default configuration works for most general retail (apparel, home goods, accessories). Balanced space, professional appearance. **Best for:** Most e-commerce stores without special requirements ### Simple Digital Products **Settings:** Small drawer, Center empty message, Inline buttons **Setup:** Small drawer for digital goods (courses, ebooks, software). Product names short, no physical details needed, minimal cart. **Best for:** Digital downloads, services, memberships, simple SKUs ### Complex Customizable Products **Settings:** Large drawer, Center empty message, Column buttons **Setup:** Large drawer for products with variants, customizations (engraved jewelry, custom apparel). Column buttons emphasize checkout CTA. **Best for:** Customizable products, bundles, products with many options ### Mobile-First Fashion Store **Settings:** Small drawer, Center empty message, Inline buttons **Setup:** Small drawer leaves more browsing space on tablets/small desktops. Fashion brands benefit from keeping product grid visible behind drawer. **Best for:** Fashion, apparel, mobile-heavy traffic ### Conversion-Optimized Layout **Settings:** Medium drawer, Center empty message, Column buttons **Setup:** Column buttons make "Checkout" prominent (full-width, top position). Optimized for pushing customers to checkout page immediately. **Best for:** High-conversion focus, impulse purchases, limited-time sales ## Layout Behavior ### Desktop Layout **Drawer appearance:** * Slides in from right side of screen * Overlays current page (doesn't push content left) * Semi-transparent overlay darkens page behind drawer * Close by clicking overlay, X button, or Esc key **Size variations:** * Small: \~300-350px wide (\~20-25% of 1440px screen) * Medium: \~400-450px wide (\~30% of 1440px screen) * Large: \~500-600px wide (\~35-40% of 1440px screen) **Button layouts:** * Inline: Buttons side-by-side (e.g., `[View Cart] [Checkout]`) * Column: Buttons stacked vertically ### Mobile Layout **Drawer appearance:** * Full-screen or near-full-screen (90-100% width) * Slides up from bottom or in from right (theme-dependent) * Buttons always stacked (Column layout), regardless of setting **Size setting:** * Limited impact on mobile (drawer uses most/all screen width) * May affect internal spacing/padding ### Empty vs Filled States **Empty cart:** * "Your cart is empty" message displays * Position controlled by "Empty cart content vertical position" setting * No items, subtotal, or checkout buttons **Filled cart:** * Cart items list (product images, names, quantities, prices) * Subtotal/total display * Checkout buttons (View Cart, Checkout) * Optional: Shipping estimate, discount codes, cart notes ## Related Sections * **[Header](/themes/mojave/header/header)** - Contains cart icon that triggers drawer * **[Cart Page (Template)](/themes/mojave/pages-templates/cart)** - Full cart page (accessed via "View Cart" button) * **[Cart Recommendations](/themes/mojave/cart-recommendations)** - Upsell products in cart drawer/page * **[Checkout Settings](https://admin.shopify.com/settings/checkout)** - Shopify Admin checkout configuration ## Technical Notes ### Drawer Trigger Cart drawer opens when customer clicks: * Cart icon in header (shopping bag/cart icon with item count badge) * "Add to Cart" button (theme setting—can open drawer or go to cart page) **Configuring trigger:** * Theme settings → Cart → "Cart type" → Select "Drawer" (vs "Page") * If set to "Page," cart button redirects to `/cart` page instead of opening drawer ### Drawer Close Methods **User actions that close drawer:** * Click X (close button) in drawer * Click semi-transparent overlay outside drawer * Press Esc key (keyboard accessibility) * Click "Continue Shopping" link (if theme includes it) **Programmatic close:** ```javascript theme={null} // JavaScript to close cart drawer document.querySelector('.cart-drawer__overlay').click(); ``` ### CSS Classes (Common Patterns) ```css theme={null} .cart-drawer { /* Main drawer container */ } .cart-drawer--small { /* Small size modifier */ } .cart-drawer--medium { /* Medium size modifier */ } .cart-drawer--large { /* Large size modifier */ } .cart-drawer__buttons--inline { /* Inline button layout */ } .cart-drawer__buttons--column { /* Column button layout */ } .cart-drawer__empty { /* Empty cart state */ } .cart-drawer__empty--top { /* Empty message top position */ } .cart-drawer__empty--center { /* Empty message center position */ } .cart-drawer__empty--bottom { /* Empty message bottom position */ } ``` ### Performance Considerations **Drawer content:** * Cart items load asynchronously (Ajax) when drawer opens * Heavy product images in cart can slow drawer open animation * Recommendation: Optimize cart product images (200-300px width sufficient) **Cart recommendations:** * If using Cart Recommendations section, these load after drawer opens * Can add 500ms-1s to perceived drawer open time * Consider lazy-loading recommendations for faster initial drawer display ### Accessibility **Keyboard navigation:** * Tab: Cycles through cart items, quantity inputs, buttons * Shift+Tab: Reverse cycle * Esc: Closes drawer * Enter/Space: Activates buttons **Screen reader:** * Drawer announces "Shopping cart, dialog" when opened * Cart item count announced ("3 items in cart") * Each product name, quantity, price announced * Checkout button clearly labeled **Focus management:** * Opening drawer moves focus to drawer container (allows immediate keyboard nav) * Closing drawer returns focus to cart icon (trigger) ### Mobile Behavior **Responsive breakpoints:** * Desktop: Above \~768px (drawer size setting applies) * Mobile: Below \~768px (drawer typically full-screen/near-full) **Swipe gestures:** * Many themes support swipe-right to close drawer on mobile * Swipe-left to open not standard (cart icon click more common) ### Ajax Cart Updates **Quantity changes:** * Updating quantity in drawer sends Ajax request to `/cart/change.js` * Cart totals update without page reload * Smooth UX compared to full page refresh **Item removal:** * Removing item sends Ajax request to `/cart/change.js` with quantity 0 * Item fades out, cart recalculates ## Troubleshooting **Drawer not opening when cart icon clicked:** * Check Theme Settings → Cart → "Cart type" set to "Drawer" (not "Page") * Browser console errors? May be JavaScript conflict with apps * Try disabling apps one-by-one to identify conflict * Hard refresh (Cmd/Ctrl+Shift+R) to clear cache **Drawer too narrow/wide on desktop:** * Adjust "Cart drawer size" setting (Small/Medium/Large) * Check browser zoom level (should be 100%) * Inspect CSS—custom theme code may override size settings **Buttons layout not changing:** * "Buttons layout type" only affects desktop (mobile always stacked) * Test on desktop screen width >768px * Hard refresh browser to clear CSS cache * Check theme code for CSS overrides **Empty cart message in wrong position:** * Ensure items removed from cart (drawer truly empty) * Change "Empty cart content vertical position" setting * Preview/refresh to see changes * May need to close/reopen drawer for changes to apply **Drawer content cut off/scrolling weird:** * Too many items in cart (drawer has max-height, scrolls vertically—expected) * Cart recommendations section may push content down (consider removing or simplifying) * Test drawer height with 1, 5, 10 items to see scroll behavior **Mobile drawer covers entire screen:** * Expected behavior on mobile (drawer usually 90-100% screen width) * "Cart drawer size" setting mostly affects desktop * Check mobile-specific styles in theme code if adjustment needed **Checkout button not working:** * Check browser console for JavaScript errors * Verify checkout not disabled in Shopify settings (Admin → Settings → Checkout) * Test in private/incognito window (browser extensions may interfere) * Some apps modify checkout button—try disabling cart-related apps **Drawer animation janky/slow:** * Heavy product images slow rendering—optimize images (\< 100KB) * Too many cart items (10+ products can slow drawer) * Cart recommendations with many products add load time * Check browser performance tab for render bottlenecks **Drawer not showing updated cart count:** * Ajax cart not updating properly—check JavaScript console * May be caching issue—hard refresh browser * Theme may need cart drawer snippet update (older themes) **Accessibility issues (keyboard/screen reader):** * Ensure theme up-to-date (accessibility improvements in newer versions) * Test with browser's accessibility inspector (Chrome DevTools → Lighthouse) * drawer should be `<dialog>` or have `role="dialog"` * Focus trap should keep Tab within drawer when open # Cart Drawer Product (Component) Source: https://docs.digifist.com/themes/mojave/sections/cart-drawer-product Automatic component rendering individual cart items in cart drawer ## What It Does The **Cart Drawer Product** component automatically renders each individual product line item inside the cart drawer. Displays product image, title, variant, quantity selector, price, and remove button for each item added to cart. <Note> This is an **automatic component** with no customizable settings. Renders automatically for each cart item when cart drawer opens. Cannot be configured in Theme Customizer. </Note> ## How It Works ### Automatic Rendering **Component renders when:** * Customer opens cart drawer (clicks cart icon in header) * Cart contains one or more items * Component loops through `cart.items` array, rendering one cart item per loop iteration **Component structure:** * Cart drawer loops through items * For each item, renders cart-drawer-product component * Displays product details (image, title, variant, quantity, price) * Provides interaction (quantity update, remove item) ### Display Content **Each cart item shows:** * **Product image** - Thumbnail of product variant * **Product title** - Clickable link to product page * **Variant** - Selected options (e.g., "Size: M, Color: Blue") * **Quantity selector** - +/- buttons or input to adjust quantity * **Line price** - Price × quantity (e.g., $50.00 × 2 = $100.00) * **Remove button** - "X" or "Remove" to delete item from cart ### User Interactions **Quantity adjustment:** * Customer clicks "+" to increase quantity * Clicks "-" to decrease quantity (minimum 1) * Or types quantity directly in input field * Cart updates via Ajax (no page reload) * Cart total recalculates automatically **Remove item:** * Customer clicks "Remove" or "X" button * Item deleted from cart * Cart drawer updates (item fades out) * Cart total recalculates **Click product:** * Clicking product image or title → Redirects to product page * Allows customer to review product details without closing cart ## Cart Item Data ### Product Properties **Each cart item includes:** * `item.title` - Product title * `item.variant.title` - Variant name (e.g., "Medium / Blue") * `item.image` - Product variant image * `item.quantity` - Quantity in cart * `item.line_price` - Total for this line (price × quantity) * `item.original_line_price` - Pre-discount price (if discount applied) * `item.url` - Link to product page * `item.properties` - Custom properties (engraving, gift message, etc.) ### Variant Details **Displayed if applicable:** * Size * Color * Material * Other options (configured in product variants) * Custom property data (e.g., engraving text) ## Best practices <CardGroup> <Card title="Clear Product Images" icon="image"> Ensure cart item images clear and recognizable. Customers use images to verify correct items in cart. </Card> <Card title="Variant Details Visible" icon="list"> Display variant options prominently (Size, Color, etc.). Prevents confusion when multiple variants in cart. </Card> <Card title="Quantity Selectors Accessible" icon="plus-minus"> Ensure +/- buttons large enough to tap on mobile. Minimum 44x44px touch target. </Card> <Card title="Remove Button Clear" icon="xmark"> "Remove" button should be obvious but not accidentally clickable. Confirmation modal optional for safety. </Card> </CardGroup> ## Related Components * **[Cart Drawer](/themes/mojave/cart-drawer)** - Cart drawer container (configures drawer size, layout) * **[Cart Page](/themes/mojave/pages-templates/cart)** - Full cart page (similar cart item rendering) * **[Product Page](/themes/mojave/products/product-page)** - Where products added to cart ## Technical Notes ### Ajax Cart Updates **Quantity changes:** * Sends POST request to `/cart/change.js` * Updates cart object on server * Returns updated cart data (JSON) * Cart drawer re-renders with new quantities/totals **Item removal:** * Sends POST to `/cart/change.js` with `quantity: 0` * Removes item from cart * Cart drawer re-renders without deleted item ### Cart Item Loop **Liquid code structure:** ```liquid theme={null} {% for item in cart.items %} {% render 'cart-drawer-product', item: item %} {% endfor %} ``` **Component receives:** * `item` object (product data) * Renders HTML for that specific cart item * Repeated for each item in cart ### Custom Properties **If product has custom fields:** * Properties display below variant (e.g., "Engraving: John") * Configured on product page (custom input fields) * Stored in `item.properties` * Rendered in cart item component ## Key Takeaways * **Automatic component** - No settings, renders for each cart item automatically * **Loops through cart items** - One component instance per cart item * **Shows product details** - Image, title, variant, quantity, price * **Interactive** - Quantity adjustment and remove item functionality * **Ajax updates** - Cart updates without page reload (smooth UX) * **No Theme Customizer control** - Cannot customize without code editing * **Mobile-optimized** - Touch-friendly buttons essential for mobile cart drawer Cart drawer product component configured automatically by theme. For customization (styling, layout, custom fields), edit theme code. # Contact Form Source: https://docs.digifist.com/themes/mojave/sections/contact-form Contact form section with Google Maps integration and customizable information blocks ## What It Does The **Contact Form** section creates a comprehensive contact page combining a submission form with optional Google Maps location display and customizable information blocks. Customers can send messages while viewing your location and additional contact details like hours, phone, or email. ## Getting Started <Steps> <Step title="Add the Section"> Add the Contact Form section to your **Contact** page template through the Theme Customizer </Step> <Step title="Configure Basic Settings"> Set your heading and introductory content to guide customers through form submission </Step> <Step title="Set Up Google Maps (Optional)"> Add your Google Maps API key and location coordinates to display an embedded map </Step> <Step title="Add Information Blocks"> Create blocks for hours, phone, email, or other contact details to supplement the form </Step> </Steps> ## Settings <Tabs> <Tab title="Section Settings"> <AccordionGroup> <Accordion title="Title" icon="heading"> **Type:** Text field\ **Default:** "Contact us" Main heading displayed above the contact form. Sets expectations for customer inquiries. **Examples:** * "Get In Touch" * "We're Here to Help" * "Contact Our Team" * "Send Us a Message" </Accordion> <Accordion title="Content" icon="paragraph"> **Type:** Rich text editor\ **Default:** Response time message Introductory paragraph below the heading. Use this to set response time expectations, explain what types of inquiries you handle, or provide pre-form guidance. **Common Uses:** * Response timeframe ("We'll respond within 24 hours") * Business hours context * Alternative contact methods * Privacy/data handling notice * Department routing instructions </Accordion> <Accordion title="Google Maps API Key" icon="key"> **Type:** Text field\ **Default:** Empty Your Google Maps API key required to display the embedded map. Without this, the map won't render even if coordinates are provided. **How to Get an API Key:** 1. Visit [Google Cloud Console](https://console.cloud.google.com/) 2. Create a new project or select existing 3. Enable "Maps JavaScript API" 4. Create credentials (API Key) 5. Restrict key to your domain for security 6. Copy and paste the key here **Security Note:** Always restrict your API key to your store's domain to prevent unauthorized usage and unexpected charges. </Accordion> <Accordion title="Latitude" icon="location-dot"> **Type:** Text field\ **Default:** "51.2163125745749" (Antwerp example) Latitude coordinate for your business location. Determines the north-south position on the map. **Finding Coordinates:** * Open Google Maps * Right-click your location * Click "What's here?" * Copy the first number (latitude) **Format:** Decimal degrees (e.g., 40.7128 for New York) </Accordion> <Accordion title="Longitude" icon="map-pin"> **Type:** Text field\ **Default:** "4.407547635829268" (Antwerp example) Longitude coordinate for your business location. Determines the east-west position on the map. **Finding Coordinates:** * Open Google Maps * Right-click your location * Click "What's here?" * Copy the second number (longitude) **Format:** Decimal degrees (e.g., -74.0060 for New York) </Accordion> <Accordion title="Zoom Level" icon="magnifying-glass"> **Type:** Range slider\ **Range:** 0-21\ **Default:** 10 Controls how close the map view is to your location. Lower numbers show wider area context, higher numbers show street-level detail. **Zoom Guidelines:** * **1-5:** World/continent view (too wide for contact pages) * **6-8:** Country/state view (regional context) * **9-11:** City view (shows surrounding area) ← **Most common** * **12-14:** Neighborhood view (local streets visible) * **15-17:** Street view (building level detail) * **18-21:** Extreme close-up (rarely useful) **Recommended:** 10-13 for most businesses (shows location with sufficient context) </Accordion> </AccordionGroup> </Tab> <Tab title="Information Blocks"> <AccordionGroup> <Accordion title="Info Block" icon="circle-info"> **Block Type:** Info\ **Limit:** Unlimited (9999 max) Create individual information cards displaying contact details, business hours, or other relevant information alongside the form. ### Block Settings **Title** (Text field)\ Label for this information block (e.g., "Business Hours", "Phone", "Email", "Address") **Content** (Rich text editor)\ Detailed information for this block. Supports formatting, links, and line breaks. ### Common Block Examples **Business Hours** ``` Title: "Store Hours" Content: Monday - Friday: 9am - 6pm Saturday: 10am - 4pm Sunday: Closed ``` **Phone Contact** ``` Title: "Call Us" Content: Main: (555) 123-4567 Support: (555) 123-4568 ``` **Email Contact** ``` Title: "Email" Content: General: info@store.com Support: help@store.com Press: media@store.com ``` **Physical Address** ``` Title: "Visit Us" Content: 123 Main Street Suite 400 San Francisco, CA 94102 ``` **Social Media** ``` Title: "Follow Us" Content: Instagram: @yourstore Twitter: @yourstore Facebook: /yourstore ``` </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Set Clear Expectations" icon="clock"> Include expected response time in your introductory content. Customers appreciate knowing when to expect a reply (24 hours, 2 business days, etc.). </Card> <Card title="Provide Multiple Contact Options" icon="phone"> Use info blocks to offer phone, email, and social media alternatives. Some customers prefer different communication channels. </Card> <Card title="Optimize Map Zoom Level" icon="map"> Test zoom levels 10-13 to find the sweet spot showing your location with enough neighborhood context for visitors to orient themselves. </Card> <Card title="Secure Your API Key" icon="shield"> Always restrict your Google Maps API key to your store's domain in Google Cloud Console to prevent unauthorized usage and billing surprises. </Card> <Card title="List Complete Hours" icon="calendar"> Create an info block with full weekly hours including holidays or seasonal variations. Reduces "Are you open?" inquiries. </Card> <Card title="Segment Contact Information" icon="grid"> Create separate info blocks for different contact types (hours/phone/email) rather than one large block. Improves scannability. </Card> <Card title="Include Alternative Contact" icon="comments"> For high-volume stores, mention alternative support channels (live chat, FAQ, knowledge base) to reduce form submission backlog. </Card> <Card title="Mobile-Friendly Formatting" icon="mobile"> Keep info block content concise. Long text blocks become difficult to scan on mobile devices where this section is most accessed. </Card> </CardGroup> ## Common Use Cases ### Standard Business Contact Page * Title: "Get In Touch" * Content: Response time and business hour context * Google Maps showing store/office location (zoom 12) * Info blocks: Hours, Phone, Email * **Best for:** Retail stores, restaurants, service businesses with physical locations ### E-commerce Customer Support * Title: "Contact Support" * Content: "Our team responds within 24 hours" * No map (online-only business) * Info blocks: Support hours, Email separated by topic (Orders/Returns/General) * **Best for:** Online-only stores, dropshipping, digital products ### Multi-Location Business * Title: "Visit Our Stores" * Content: "Select location for specific details" * Google Maps showing headquarters or flagship location * Info blocks: Location 1 address/phone, Location 2 address/phone, etc. * **Best for:** Chain stores, franchise operations, multi-location retailers ### Wholesale/B2B Inquiries * Title: "Wholesale Inquiries" * Content: "Interested in stocking our products? We'll respond within 2 business days." * No map (privacy for business operations) * Info blocks: Sales email, Required information list, Terms * **Best for:** Brands selling to retailers, B2B operations, wholesale businesses ### Appointment-Based Business * Title: "Schedule a Consultation" * Content: "Fill out this form or call to book your appointment" * Google Maps showing studio/office (zoom 13) * Info blocks: Booking phone, Hours, Services offered * **Best for:** Salons, consultants, showrooms, studios requiring appointments ## Layout Behavior ### Desktop Layout The section typically displays in a **two-column layout:** * **Left column:** Contact form (name, email, message fields) * **Right column:** Google Maps (if configured) + information blocks stacked below Information blocks appear as individual cards with distinct titles, making it easy to scan for specific contact details. ### Mobile Layout On mobile devices, the layout **stacks vertically:** 1. Title and introductory content (top) 2. Contact form fields (full width) 3. Google Maps (if present, full width) 4. Information blocks (full width, stacked) Each element takes full screen width for optimal mobile usability. ### Map Display Behavior * **With API key + coordinates:** Embedded interactive Google Map displays * **Missing API key:** Map does not render (no error shown to customers) * **With map:** Form and blocks adjust to accommodate map space * **Without map:** Form and blocks expand to use available space ## Related Sections * **[About](/themes/mojave/about)** - Use on About page for company background before contact section * **[Footer](/themes/mojave/footer/footer)** - Include basic contact info in footer for site-wide access * **[Newsletter](/themes/mojave/newsletter)** - Alternative email capture method for marketing (vs. support inquiries) * **[Page](/themes/mojave/page)** - Combine with rich text content for comprehensive contact pages * **[Accordions](/themes/mojave/accordions)** - Add FAQ accordion above contact form to reduce form submissions ## Technical Notes ### Form Submission Behavior The contact form submits to Shopify's built-in contact form handler. Submissions are sent to the **store owner's primary email** configured in Shopify admin (Settings > Store details > Store contact email). Form submissions are **not stored in Shopify admin** - they only arrive via email. Consider using a customer support app if you need submission tracking, auto-responses, or ticket management. ### Google Maps API Requirements To display the embedded map: 1. **API Key Required:** Even with valid coordinates, map won't display without a valid API key 2. **API Enabled:** "Maps JavaScript API" must be enabled in your Google Cloud project 3. **Billing Enabled:** Google requires billing information even though Maps usage is free up to generous limits 4. **Domain Restrictions:** Recommended to restrict API key to your store's domain for security **Cost Consideration:** Google Maps provides \$200 free monthly credit, which covers approximately 28,000 map loads. Most stores stay well within free tier limits. ### Information Block Limits While the section supports up to 9999 information blocks, **practical limit is 4-6 blocks**: * **4 blocks:** Ideal (Hours, Phone, Email, Address) - easy to scan * **6 blocks:** Maximum recommended before overwhelming customers * **7+ blocks:** Consider using an accordion section instead for collapsible organization ### Coordinate Precision Latitude and longitude coordinates support up to **15 decimal places**, providing accuracy down to millimeter level. However, **6-7 decimal places** (accurate to \~10cm) is more than sufficient for business location mapping. **Example precision levels:** * 2 decimal places: \~1km accuracy * 4 decimal places: \~11m accuracy * 6 decimal places: \~0.11m accuracy (recommended) ### Form Field Customization The contact form fields (Name, Email, Phone Number, Message) are **hardcoded** in the theme and cannot be customized through the Theme Customizer. To add custom fields or change labels, you'll need to edit the [contact-form.liquid](contact-form.liquid) file directly or use a contact form app. ## Troubleshooting **Map not displaying:** * Verify API key is correct and copied completely (no extra spaces) * Check that "Maps JavaScript API" is enabled in Google Cloud Console * Confirm billing is enabled in your Google Cloud account * Ensure API key is not restricted to different domains * Test coordinates in regular Google Maps to verify they're valid **Form submissions not received:** * Check Shopify Admin > Settings > Store details > Store contact email is correct * Verify email isn't going to spam folder * Confirm email address can receive external emails (not blocked) * Test with a different email address to rule out email provider issues **Information blocks not visible:** * Ensure blocks have both Title AND Content filled * Check that blocks weren't accidentally hidden/deleted * Verify section is published (not draft mode) **Map showing wrong location:** * Verify latitude and longitude aren't swapped (lat is always first) * Confirm coordinates use decimal format, not degrees/minutes/seconds * Check for typos in coordinate numbers (easy to mistype decimal places) **Layout looks broken:** * If map is very large, adjust zoom level to 10-13 range * Ensure info block content isn't excessively long (break into multiple blocks if needed) * Check that custom CSS isn't conflicting with section styles # Content Tiles Source: https://docs.digifist.com/themes/mojave/sections/content-tiles Build custom masonry-style grid layouts with flexible tiles featuring images, videos, text, and CTAs with precise grid positioning control ## What this section does The **Content tiles** section creates sophisticated grid-based layouts where each tile can span multiple columns and rows, perfect for magazine-style editorial content, service showcases, or visual storytelling. Features include: * **Grid layout system**: Position tiles with column/row spanning (1-6 columns × 1-6 rows) * **Unlimited tile blocks** with independent sizing and positioning * **Media flexibility**: Images, self-hosted videos, or YouTube/Vimeo per tile * **Three media positions**: Top, Bottom, or Background * **Responsive media**: Separate desktop/mobile images and videos * **Content overlay**: Text + heading + button over background media * **Show on control**: Display tiles only on desktop, mobile, or both * **Three tile styles**: Main, Accent, Transparent backgrounds Perfect for homepage content grids, editorial layouts, service showcases, or any design requiring precise grid control. <Frame> <img alt="Content Tiles Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Content tiles** </Step> <Step title="Add tile blocks"> Click **Add tile** block. Each block creates one grid item. Add as many as needed. </Step> <Step title="Configure grid layout"> For each tile, set **Column factor** (width, 1-6) and **Row factor** (height, 1-6) to control size and positioning </Step> <Step title="Add content & media"> Add heading, text, button, and media (image/video) to each tile. Configure media position and content alignment. </Step> </Steps> ## Section settings <Tabs> <Tab title="General"> <AccordionGroup> <Accordion title="Swap order for mobile" icon="mobile"> **Checkbox** (default: unchecked) Reverses the order of tiles on mobile devices: * Unchecked: Tiles display in the same order as desktop (first tile → last tile) * Checked: Tiles display in reverse order (last tile → first tile) Useful when desktop grid layout creates a visual hierarchy that should be reversed for mobile vertical stacking. </Accordion> <Accordion title="Heading" icon="heading"> **Inline rich text** (optional) Main section heading displayed above all tiles. Examples: "Featured Content", "Our Services", "Explore", "Why Choose Us" Leave blank for no section heading. </Accordion> <Accordion title="Heading size" icon="text-size"> **Dropdown** (default: L) Section heading size: * XS (h6): Very small * S (h5): Small * M (h4): Medium * L (h3): Large (default) * XL (h2): Extra large Adjust based on section prominence and page hierarchy. </Accordion> <Accordion title="Heading alignment" icon="align-left"> **Dropdown** (default: Start) Horizontal alignment of section heading: * **Start**: Left-aligned * **Center**: Centered * **End**: Right-aligned Desktop only—mobile heading always left-aligned. </Accordion> <Accordion title="Tile spacing" icon="grip"> **Dropdown** (default: Default) Spacing between tiles in the grid: * **Default**: Standard gap between tiles * **Compact**: Reduced gap for denser layouts Compact works well for image-heavy grids without text overlays. </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> <AccordionGroup> <Accordion title="Style" icon="palette"> **Dropdown** (default: Body) Background color/style for the entire section: * **Body**: Default body background color * **Main**: Primary theme color * **Accent**: Accent theme color This sets the section background, not individual tile backgrounds (configure those per tile). </Accordion> <Accordion title="Spacing - Desktop & Mobile" icon="arrows-up-down"> **Desktop** (default: Default) and **Mobile** (default: Compact) Vertical spacing above and below the section: * **Default**: Standard spacing * **Medium**: Moderate spacing * **Compact**: Minimal spacing * **None**: No spacing Mobile spacing options: Default, Compact, None. </Accordion> <Accordion title="Section width" icon="arrows-left-right"> **Dropdown** (default: Page) Section container width: * **Page**: Standard page width (default) * **Fullwidth**: Edge-to-edge, full browser width Fullwidth creates more dramatic grid layouts, especially for image-heavy content. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block: Tile **Type**: tile (unlimited blocks) Each tile block creates one grid item with independent size, content, media, and positioning. <Tabs> <Tab title="Grid Layout"> <AccordionGroup> <Accordion title="Show on" icon="devices"> **Dropdown** (default: Both) Controls which devices display this tile: * **Desktop**: Only visible on desktop/tablet * **Mobile**: Only visible on mobile * **Both**: Visible on all devices (default) Use to create different layouts for mobile vs. desktop (e.g., hide complex multi-column tiles on mobile, show mobile-optimized alternatives). </Accordion> <Accordion title="Column factor" icon="table-columns"> **Range**: 1-6 (default: 3) **Controls tile width** by setting how many columns (out of 6 total) this tile spans: * 1 = 1/6 width (narrow) * 2 = 1/3 width * 3 = 1/2 width (default, half) * 4 = 2/3 width * 5 = 5/6 width * 6 = Full width **Info**: "The grid layout is used to divide the section into columns and rows." Think of the section as a 6-column grid. Column factor determines horizontal span. </Accordion> <Accordion title="Row factor" icon="grip-lines"> **Range**: 1-6 (default: 1) **Controls tile height** by setting how many rows this tile spans: * 1 = Single row height (default) * 2 = Double height * 3 = Triple height * 4-6 = Increasingly tall tiles Larger row factors create taller tiles, useful for hero content or vertical imagery. </Accordion> <Accordion title="Aspect ratio" icon="aspect-ratio"> **Dropdown** (default: Auto) Sets the aspect ratio for the tile or media (behavior depends on Media position): * **Media position = Top/Bottom**: Aspect ratio applies to the media only * **Media position = Background**: Aspect ratio applies to the entire tile **Options** (grouped): * **Auto**: Auto (no constraint), Media (based on media dimensions) * **Square**: 1:1 * **Landscape**: 4:3, 3:2, 5:4, 16:9, 2:1, 4:1, 8:1 * **Portrait**: 3:4, 2:3, 4:5, 9:16, 1:2 **Info**: "This value sets the aspect ratio based on media position: for 'top' and 'bottom', it applies to the media, and for 'background', it applies to the tile." </Accordion> </AccordionGroup> </Tab> <Tab title="Content & Text"> <AccordionGroup> <Accordion title="Style" icon="palette"> **Dropdown** (default: Main) Background color/style for this tile: * **Main**: Primary theme color * **Accent**: Accent theme color * **Transparent**: No background (media visible through) Transparent works best with Background media position for text overlays on images. </Accordion> <Accordion title="Content position" icon="arrows-alt-v"> **Dropdown** (default: Center) **Vertical positioning** of content within the tile: * **Top**: Content aligns to top of tile * **Center**: Content vertically centered (default) * **Bottom**: Content aligns to bottom of tile Most relevant when using Background media position for overlays. </Accordion> <Accordion title="Content alignment" icon="align-center"> **Dropdown** (default: Center) **Horizontal alignment** of content (desktop): * **Start**: Left-aligned text and elements * **Center**: Center-aligned (default) * **End**: Right-aligned Controls text alignment, button position, and overall content centering. </Accordion> <Accordion title="Content alignment for mobile" icon="mobile"> **Dropdown** (default: Start) **Horizontal alignment** specific to mobile devices: * **Start**: Left-aligned (default) * **Center**: Center-aligned * **End**: Right-aligned Mobile default is Start (left) for better readability even if desktop is centered. </Accordion> <Accordion title="Heading" icon="heading"> **Inline rich text** (default: "Heading for Content Tiles") Tile heading/title displayed prominently: * Supports inline formatting (bold, italic, links) * Position determined by Content position and alignment settings Examples: "Premium Quality", "Fast Shipping", "Learn More", "Shop Collection" </Accordion> <Accordion title="Heading size" icon="text-size"> **Dropdown** (default: S) Tile heading size: * XS (h6), S (h5, default), M (h4), L (h3), XL (h2) Use larger sizes for hero tiles, smaller for secondary content. </Accordion> <Accordion title="Text" icon="align-left"> **Rich text editor** (optional) Body text/description for the tile: * Full rich text support (paragraphs, lists, links, formatting) * Displayed below heading * Position determined by alignment settings Keep concise (2-4 sentences) for visual tiles. </Accordion> <Accordion title="Button label & Link" icon="link"> **Button label** (text field, optional) * CTA button text (e.g., "Shop now", "Learn more", "View collection") * **Info**: "Leave empty to hide the button" **Button link** (URL field) * Destination for the button Button only displays if label is provided. </Accordion> <Accordion title="Button style" icon="square"> **Dropdown** (default: Filled) Button appearance: * **Filled**: Solid background button (default) * **Outlined**: Border-only button * **Text**: Underlined link style Outlined/Text styles work better over busy background images. </Accordion> </AccordionGroup> </Tab> <Tab title="Media"> <AccordionGroup> <Accordion title="Media position" icon="image"> **Dropdown** (default: Background) Controls where media appears relative to content: * **Top**: Media above text content (stacked) * **Bottom**: Media below text content (stacked) * **Background**: Media behind text (overlay, default) **Background** creates text overlays on images/videos. **Top/Bottom** creates distinct media + text sections. </Accordion> <Accordion title="Image" icon="image"> **Image picker** (optional) Main tile image (desktop): * Displayed according to Media position setting * Overwritten by video if video is provided Recommended sizes vary based on column/row factors. </Accordion> <Accordion title="Video" icon="video"> **Video upload** (optional) Self-hosted video file: * **Overwrites Image** if provided * Autoplay muted, loops * **Info**: "Overwrites image" Use for background videos or looping product demos. </Accordion> <Accordion title="External video" icon="play"> **Video URL** (YouTube/Vimeo, optional) External video (YouTube or Vimeo): * **Overwrites Image and Video** if provided * **Info**: "Overwrites image and video. We recommend above video option for better performance, external videos can cause performance issues." Prefer self-hosted Video for better performance, especially with Background position. </Accordion> <Accordion title="Show video controls" icon="sliders"> **Checkbox** (default: unchecked) Shows video player controls (play/pause, volume, timeline): * Checked: Video controls visible * Unchecked: No controls (autoplay only) Enable for Top/Bottom positioned videos. Disable for Background videos (cleaner overlay). </Accordion> <Accordion title="Padding" icon="expand"> **Dropdown** (default: S) Internal padding (spacing) inside the tile: * **No**: 0 padding * **S**: Small (default) * **M**: Medium * **L**: Large * **XL**: Extra large More padding creates breathing room for content. Less padding maximizes visual impact of media. </Accordion> </AccordionGroup> </Tab> <Tab title="Media Mobile"> <AccordionGroup> <Accordion title="Mobile media behavior" icon="info"> **Optional mobile-specific media** If mobile media is provided (image, video, or external video), it replaces desktop media on mobile devices. If no mobile media is set, desktop media is used. **Info**: "If mobile media is set, it will be used on mobile devices instead of the main media." Use when desktop images don't work well on mobile (wrong orientation, too detailed, etc.). </Accordion> <Accordion title="Image mobile" icon="mobile"> **Image picker** (optional) Mobile-specific image: * Replaces desktop Image on mobile if provided * Overwritten by mobile video if provided Use portrait-oriented or cropped images optimized for mobile screens. </Accordion> <Accordion title="Video mobile" icon="video"> **Video upload** (optional) Mobile-specific self-hosted video: * **Overwrites mobile image** if provided * **Info**: "Overwrites image" Use shorter, mobile-optimized videos (portrait orientation, faster loading). </Accordion> <Accordion title="External video mobile" icon="play"> **Video URL** (YouTube/Vimeo, optional) Mobile-specific external video: * **Overwrites mobile image and video** if provided * **Info**: "Overwrites image and video. We recommend above video option for better performance, external videos can cause performance issues." Prefer self-hosted Video mobile for better mobile performance. </Accordion> <Accordion title="Show video controls on mobile" icon="sliders"> **Checkbox** (default: unchecked) Shows video controls on mobile devices: * Checked: Video controls visible on mobile * Unchecked: No controls on mobile Mobile users expect more control—consider enabling for non-background videos. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Plan your grid" icon="grid"> Sketch the layout first. The 6-column system requires planning: which tiles span 2, 3, 4+ columns? Which are tall (row factor 2+)? </Card> <Card title="Balance column factors" icon="scale-balanced"> Ensure column factors add up to 6 (or multiples) for clean rows: 3+3, 2+2+2, 4+2, 6 (full). Odd combinations create staggered layouts. </Card> <Card title="Hero tile prominence" icon="star"> Use column factor 6 (full width) + row factor 2-3 for hero tiles at top. Creates focal point before smaller tiles. </Card> <Card title="Background position for overlays" icon="layer-group"> Use Background media position with Transparent style for text overlays on images. Top/Bottom for clean separation. </Card> <Card title="Mobile optimization" icon="mobile"> All tiles stack vertically on mobile. Use "Show on" to hide complex multi-column desktop tiles, show mobile-optimized alternatives. </Card> <Card title="Padding for readability" icon="expand"> Use at least S padding when text overlays media (Background position). More padding improves readability on busy images. </Card> <Card title="Video performance" icon="bolt"> Prefer self-hosted videos over external (YouTube/Vimeo) for background videos. External videos reduce performance, especially on mobile. </Card> <Card title="Aspect ratios for consistency" icon="equals"> Set consistent aspect ratios for tiles with Top/Bottom media position. Creates visual rhythm and grid alignment. </Card> </CardGroup> ## Common use cases **Homepage hero + features grid** — First tile: column 6 × row 2 (hero), followed by 3 tiles: column 2 × row 1 (features/benefits) **Editorial magazine layout** — Mixed column/row factors: 4+2, 3+3, 6, 2+2+2 pattern for dynamic visual storytelling **Service showcase** — 3 tiles with column 2 × row 1, Background media position, centered text overlays **Portfolio/Gallery** — All tiles column 3 × row 1 (2-column grid on desktop), images with Top media position **About page storytelling** — Alternating column 4+2 and 2+4 with text + images for narrative flow **Product feature highlights** — 4 tiles with column 3 × row 2, large icons/images, centered content ## Layout behavior **Desktop grid system**: * Section divided into **6 columns** * Tiles span columns based on Column factor (1-6) * Tiles span rows based on Row factor (1-6) * Tiles flow left-to-right, top-to-bottom * When column factors exceed 6, tiles wrap to next row * Gaps between tiles controlled by Tile spacing setting **Mobile stacking**: * All tiles stack vertically (one per row) * Column/Row factors ignored on mobile * Order: First block → Last block (or reversed if "Swap order for mobile" is checked) * Full width per tile * Media always stacks above text on mobile (even if Background on desktop) **Media position behavior**: * **Top**: Media → Text → Button (vertical stack) * **Bottom**: Text → Button → Media (vertical stack) * **Background**: Media fills entire tile, content overlays with positioning **Show on control**: * Display specific tiles only on Desktop, Mobile, or Both * Create device-specific layouts (e.g., complex grid on desktop, simplified tiles on mobile) ## Grid layout examples **Example 1: Hero + 3 features** ``` Tile 1: Column 6, Row 2 (full-width hero) Tile 2: Column 2, Row 1 (feature 1) Tile 3: Column 2, Row 1 (feature 2) Tile 4: Column 2, Row 1 (feature 3) ``` **Example 2: Magazine layout** ``` Tile 1: Column 4, Row 1 (main story) Tile 2: Column 2, Row 1 (side story) Tile 3: Column 2, Row 1 (side story) Tile 4: Column 4, Row 1 (main story) Tile 5: Column 6, Row 1 (full-width banner) ``` **Example 3: Equal grid** ``` Tile 1-6: Column 2, Row 1 (3-column grid, 2 rows) or Tile 1-9: Column 2, Row 1 (3-column grid, 3 rows) ``` ## Customization tips **For hero section**: * First tile: Column 6, Row 3, Background media, Center alignment * Heading XL, Button Filled, Padding L * Following tiles: Column 3, Row 1 for split-screen effect **For image gallery**: * All tiles: Column 3, Row 1 (2 columns) or Column 2 (3 columns) * Media position: Top (image above) * Aspect ratio: 1:1 (square) or 3:4 (portrait) for consistency * Minimal padding, Compact tile spacing **For services/features**: * Tiles: Column 2, Row 1 (3 columns) * Media position: Background, Style: Main or Accent * Content alignment: Center, Heading M, Padding M * Icons or simple graphics as media **For storytelling/editorial**: * Mixed column factors: 4+2, 3+3, 2+4 pattern * Alternate media position: Top, Bottom for rhythm * Rich text with multiple paragraphs * Row factor 2 for emphasis tiles ## Related sections * **Multi Column Text** — Simpler text-only columns without grid complexity * **Images with Text** — Two-area split-screen layouts (Primary + Secondary) * **Featured Collections Links** — Product-focused grid with collections * **Hero** — Carousel-based hero sections as alternative to grid ## Technical notes **6-column grid system**: The section uses a 6-column CSS grid. Column factor determines how many columns a tile spans (1-6 = 1/6 to 6/6 width). **Row factor flexibility**: Row factor is relative, not absolute pixels. Row 1 height depends on content/aspect ratio. Row 2 = double that height. **Mobile behavior**: Grid system disabled on mobile. All tiles become full-width and stack vertically for optimal mobile experience. **Media priority**: External video > Video > Image. If external video is set, it overwrites video and image. If video is set, it overwrites image. **Performance**: Self-hosted videos perform significantly better than external videos, especially for Background position and mobile. External videos load iframes and external scripts, impacting page speed. **Aspect ratio nuance**: Aspect ratio behavior changes based on media position. With Background, it constrains the tile itself. With Top/Bottom, it constrains only the media area. # Countdown Timer Source: https://docs.digifist.com/themes/mojave/sections/countdown-timer Create urgency with customizable countdown timers for sales, launches, and limited-time offers with optional media and flexible display options ## What this section does The **Countdown timer** section creates urgency and drives conversions by displaying a live countdown to a specific date and time. Features include: * **Live countdown** with configurable date/time (year, month, day, hour, minute) * **Customizable timer units**: Show/hide days, hours, minutes, seconds * **Two layout modes**: With media or without media * Heading, subheading (with separate mobile version), and CTA button * Timer end message that displays when countdown reaches zero * Optional promotional image Perfect for flash sales, product launches, limited-time offers, or any time-sensitive campaigns. <Frame> <img alt="Countdown Timer Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Countdown timer** </Step> <Step title="Set target date & time"> Configure the countdown end date: Year, Month, Day, Hour, and Minute </Step> <Step title="Configure timer display"> Choose which units to display (days, hours, minutes, seconds) and add your heading/subheading text </Step> <Step title="Optional: Add media"> Upload an image and select "Media" layout to include promotional imagery alongside the timer </Step> </Steps> ## Section settings <Tabs> <Tab title="Layout & Media"> <AccordionGroup> <Accordion title="Make section full width" icon="maximize"> **Checkbox** (default: unchecked) Controls section container width: * Unchecked: Section contained within standard page width * Checked: Section spans full browser width (edge-to-edge) Fullwidth creates more dramatic, attention-grabbing timers. </Accordion> <Accordion title="Layout" icon="table-columns"> **Dropdown** (default: Media none) Controls whether promotional image is displayed: * **Media**: Shows uploaded image alongside timer content * **Media none**: Timer only, no image (default) Use **Media** layout for visual campaigns (e.g., product image with sale timer). Use **Media none** for clean, focused timer displays. </Accordion> <Accordion title="Image" icon="image"> **Image picker** (optional) Promotional image displayed when Layout is set to "Media": * Appears beside timer content (split-screen on desktop) * Hidden when Layout is "Media none" * Use product images, lifestyle photography, or promotional graphics <Note>Image only displays when Layout setting is set to "Media".</Note> </Accordion> <Accordion title="Spacing - Desktop & Mobile" icon="arrows-up-down"> **Desktop** (default: Default) and **Mobile** (default: Compact) Controls vertical spacing above and below the section: * **Default**: Standard spacing * **Medium**: Moderate spacing * **Compact**: Minimal spacing * **None**: No spacing </Accordion> </AccordionGroup> </Tab> <Tab title="Text Content"> <AccordionGroup> <Accordion title="Heading" icon="heading"> **Text field** (default: "50% Off Everything") Main heading/title for the countdown section. Should communicate the offer or event. Examples: "Flash Sale", "Product Launch", "Limited Time Offer", "Black Friday Sale" Keep concise and impactful (2-5 words). </Accordion> <Accordion title="Subheading" icon="text"> **Text field** (default: "Limited time only") Supporting text displayed below heading (desktop and tablet). Examples: "Ends soon", "While supplies last", "Don't miss out", "24 hours only" </Accordion> <Accordion title="Subheading mobile" icon="mobile"> **Text field** (default: "Limited time only") Separate subheading text specifically for mobile devices. Use to shorten text for smaller screens or adjust messaging for mobile users. </Accordion> <Accordion title="Timer end message" icon="flag-checkered"> **Inline rich text** (default: "Sale has ended") Message displayed when countdown reaches zero: * Replaces the timer display * Can include basic formatting (bold, italic, links) * Info: "This message will be displayed when the timer ends" Examples: "Offer expired", "Sale ended - check back soon!", "Event has started" </Accordion> <Accordion title="Button label & URL" icon="square-check"> **Button label** (text, default: "Shop now") * Primary CTA button text **Button URL** (URL, default: /collections) * Destination for the button Drive urgency with CTAs like "Shop now", "Claim offer", "Get started", "Buy now" </Accordion> </AccordionGroup> </Tab> <Tab title="Timer Configuration"> <AccordionGroup> <Accordion title="Target date & time" icon="calendar-day"> Set the countdown end date and time: **Year** — Number input (default: 2024) * Four-digit year (e.g., 2024, 2025) **Month** — Dropdown (default: January) * Select from 12 months **Day** — Range slider: 1-31 (default: 1) * Day of the month **Hour** — Range slider: 0-23 (default: 0) * 24-hour format (0 = midnight, 12 = noon, 23 = 11 PM) **Minute** — Range slider: 0-59 (default: 0) * Minutes past the hour <Warning>Set dates in the future for countdown to work. Past dates will immediately show the timer end message.</Warning> </Accordion> <Accordion title="Enable days" icon="calendar-days"> **Checkbox** (default: checked) Shows/hides the **days** unit in the countdown display: * Checked: Days displayed (e.g., "5 days 12:30:45") * Unchecked: Days hidden (timer starts at hours) Disable for short countdowns (\< 24 hours). </Accordion> <Accordion title="Enable hours" icon="clock"> **Checkbox** (default: checked) Shows/hides the **hours** unit in the countdown display. Disable for very short countdowns (minutes only). </Accordion> <Accordion title="Enable minutes" icon="hourglass-half"> **Checkbox** (default: checked) Shows/hides the **minutes** unit in the countdown display. Rarely disabled—minutes are essential for most countdowns. </Accordion> <Accordion title="Enable seconds" icon="stopwatch"> **Checkbox** (default: checked) Shows/hides the **seconds** unit in the countdown display: * Checked: Seconds displayed (creates more urgency with constant movement) * Unchecked: Seconds hidden (cleaner, less busy display) **Seconds create urgency** through constant visual change. Disable for cleaner aesthetics or less pressure. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Seconds for urgency" icon="stopwatch"> Keep seconds enabled (default) for maximum urgency. The constant ticking creates psychological pressure to act quickly. </Card> <Card title="Set realistic deadlines" icon="calendar-check"> Use real, enforced deadlines. Fake urgency damages trust. If countdown ends, the offer should actually end. </Card> <Card title="Match units to duration" icon="clock"> For 24+ hour sales: enable days. For 1-24 hours: disable days, show hours. For \< 1 hour: show minutes/seconds only. </Card> <Card title="Clear offer messaging" icon="bullhorn"> Heading should immediately communicate the offer (e.g., "50% Off", "Flash Sale", "Launch Event"). Make value obvious. </Card> <Card title="Strong CTAs" icon="hand-pointer"> Use urgent button text: "Shop now", "Claim offer", "Get yours" rather than generic "Learn more" or "Click here". </Card> <Card title="Fullwidth for impact" icon="maximize"> Enable fullwidth for homepage banners or major sales. Contained width works better for secondary placements. </Card> <Card title="Mobile subheading brevity" icon="mobile"> Use shorter subheading for mobile to avoid text wrapping or overwhelming small screens. </Card> <Card title="End message strategy" icon="flag-checkered"> Timer end message should guide next action: "Sale ended" (passive) vs "Check our new collection" (active redirect). </Card> </CardGroup> ## Common use cases **Flash sales** — Homepage banner with countdown to end of limited-time discount (e.g., "24 Hour Flash Sale") **Product launches** — Countdown to new product release or collection drop to build anticipation **Holiday sales** — Black Friday, Cyber Monday, or seasonal sale countdowns on homepage **Cart/checkout abandonment** — Use in email campaigns or on cart page to create urgency for completing purchase **Webinar/event registration** — Countdown to event start time to drive registrations **Stock limitation** — "Limited stock - offer ends in..." to create scarcity and urgency together ## Layout behavior **Desktop - Media layout**: * Split-screen: Timer content on one side, image on other * Timer displays prominently with all enabled units * Button and subheading clearly visible **Desktop - Media none layout**: * Timer content centered, no image * Full width allocated to countdown and text * More prominent, focused display **Mobile (all layouts)**: * Always stacks vertically * Image at top (if Media layout), then timer, then text/button * Timer scales responsively * Uses mobile-specific subheading **Timer display format**: ``` Days: 05 Hours: 12 Minutes: 30 Seconds: 45 ``` Units can be enabled/disabled independently. Displays in large, readable font with labels. ## Timer behavior **Before countdown end**: * Live countdown updates every second (if seconds enabled) or minute * All enabled units display with current values * Button and content visible **When countdown reaches zero**: * Timer display **replaced** with "Timer end message" text * Heading and button remain visible (unless customized) * No automatic page refresh or section hiding **Timezone**: * Countdown uses **customer's local timezone** (browser-based) * Set time in your local timezone, customers see countdown in theirs * Consider timezone differences for global audiences ## Customization tips **For very short sales (\< 1 hour)**: * Disable: Days, Hours * Enable: Minutes, Seconds only * Results in: "30:45" (minutes:seconds) **For daily deals (resets daily)**: * Set end time to midnight (00:00) of next day * Enable: Hours, Minutes, Seconds * Disable: Days (implies daily reset) **For multi-day sales**: * Enable: Days, Hours, Minutes * Seconds optional (disable for cleaner look) * Result: "3 days 14:30:00" **For minimal pressure**: * Enable: Days, Hours only * Disable: Minutes, Seconds * Creates awareness without anxiety ## Related sections * **Hero** — Dramatic banners that can include urgency messaging * **Newsletter** — Email signup sections for post-sale engagement * **Featured Products** — Pair timer with specific sale products * **Banner Fullwidth** — Alternative promotional banner without timer # Custom Liquid Source: https://docs.digifist.com/themes/mojave/sections/custom-liquid Developer section for injecting custom Liquid code, app snippets, and advanced customizations ## What It Does The **Custom Liquid** section provides a code editor within the theme customizer, allowing developers to inject custom Liquid code, include app snippets, or create advanced customizations without editing theme files directly. This is the designated area for technical modifications and custom functionality. ## Getting Started <Steps> <Step title="Add the Section"> Add the Custom Liquid section to any template where you need custom code functionality </Step> <Step title="Write or Paste Liquid Code"> Use the code editor to write Liquid markup, HTML, CSS, or JavaScript wrapped in appropriate tags </Step> <Step title="Test Thoroughly"> Preview your changes carefully before publishing. Invalid Liquid can cause rendering issues </Step> <Step title="Adjust Spacing"> Set top and bottom padding to control vertical spacing around your custom content </Step> </Steps> ## Settings <AccordionGroup> <Accordion title="Custom Liquid" icon="code"> **Type:** Liquid code editor\ **Default:** Empty A code editor field where you can write or paste custom Liquid code, HTML, CSS, or JavaScript. This field has full access to Liquid objects, filters, and tags available in Shopify themes. ### What You Can Add **App Snippets:** ```liquid theme={null} {% render 'app-reviews' %} {% render 'size-chart' %} ``` Integrate third-party apps by rendering their snippets. Most Shopify apps provide snippet code for integration. **Custom Product Grids:** ```liquid theme={null} {% assign featured = collections.featured.products %} {% for product in featured limit: 4 %} <!-- Custom product card HTML --> {% endfor %} ``` Create customized product displays beyond standard section capabilities. **Dynamic Content:** ```liquid theme={null} {% if customer %} <p>Welcome back, {{ customer.first_name }}!</p> {% else %} <p>Sign in to see personalized content</p> {% endif %} ``` Show different content based on customer login status, cart contents, or other conditions. **Custom Forms:** ```liquid theme={null} <form action="/cart/add" method="post"> <!-- Custom form fields --> <button type="submit">Add to Cart</button> </form> ``` Build custom forms for contact, newsletter, or product customization. **Embedded Content:** ```liquid theme={null} <iframe src="https://example.com/widget" width="100%" height="400"></iframe> ``` Embed external widgets, calendars, booking systems, or third-party content. **Custom CSS/JavaScript:** ```liquid theme={null} <style> .custom-element { color: red; } </style> <script> console.log('Custom functionality'); </script> ``` Add page-specific styling or functionality (wrap in appropriate tags). ### Code Editor Features * **Syntax highlighting:** Liquid, HTML, CSS, and JavaScript syntax coloring * **Line numbers:** Easy reference for debugging * **Indentation support:** Tab key for proper code formatting * **Error highlighting:** Basic syntax error detection (not foolproof) ### Important Guidelines **Do:** * Test code in a duplicate/staging theme first * Use comments to document what custom code does * Follow Liquid best practices and syntax * Validate HTML to ensure proper structure * Keep code organized and readable **Don't:** * Copy-paste code you don't understand * Include unescaped customer input (security risk) * Create very long code blocks (use snippets instead) * Forget to test on mobile devices * Override critical theme functionality without backup ### Security Considerations The Custom Liquid section has **full theme access**, meaning: * Code executes server-side during page render * Has access to all Liquid objects (customer data, products, orders) * Can modify page structure and functionality * Can include external resources **Never include:** * API keys or passwords in plain text * Unvalidated customer input that could execute malicious code * Resource-intensive operations that slow page rendering * Code from untrusted sources ### Performance Tips * **Limit API calls:** Liquid executes server-side; excessive API calls slow page rendering * **Cache when possible:** Use Liquid variables to avoid repeated calculations * **Minimize external resources:** Each external script/style adds load time * **Test load time:** Use browser dev tools to ensure custom code doesn't create bottlenecks </Accordion> <Accordion title="Padding Top" icon="arrow-up"> **Type:** Range slider\ **Range:** 0-100px (increments of 4px)\ **Default:** 40px Vertical spacing (padding) above the custom liquid content. Controls distance from the previous section or page element. ### When to Adjust **Increase (60-100px):** * Custom content is visually prominent (needs breathing room) * Creating hero-like custom sections * Content needs clear separation from above section **Decrease (20-36px):** * Custom content is supplementary (subtle addition) * Multiple custom liquid sections stacked closely * Tighter, content-dense layouts **Remove (0px):** * Custom content is continuous with previous section * Building integrated custom layouts * Advanced design scenarios with custom spacing **Default (40px):** Appropriate for most use cases, providing standard section spacing. </Accordion> <Accordion title="Padding Bottom" icon="arrow-down"> **Type:** Range slider\ **Range:** 0-100px (increments of 4px)\ **Default:** 52px Vertical spacing (padding) below the custom liquid content. Controls distance to the next section or page element. ### When to Adjust **Increase (60-100px):** * Custom content concludes a major page section * Creating visual breaks between distinct page areas * Custom content needs clear ending **Decrease (20-36px):** * Next section is closely related * Reducing cumulative whitespace on long pages * Tighter layouts **Remove (0px):** * Next section is continuous part of custom layout * Building integrated custom designs * Advanced spacing control **Default (52px):** Slightly more than padding top, providing balanced section conclusion spacing. ### Padding Coordination The default values (40px top, 52px bottom) create **92px total vertical spacing** around custom content. Adjust both values proportionally to maintain visual balance unless you specifically need asymmetric spacing. </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Test in Duplicate Theme First" icon="vial"> Always test custom Liquid in a duplicate/staging theme before implementing in your live theme. Invalid code can break page rendering. </Card> <Card title="Document Your Code" icon="comment"> Add comments explaining what custom code does and why it's there. Future you (or other developers) will appreciate the context. </Card> <Card title="Keep Code Organized" icon="list-check"> For complex customizations, create a snippet file and render it from Custom Liquid section rather than writing 100+ lines inline. </Card> <Card title="Validate Before Publishing" icon="check"> Use HTML validators and Liquid syntax checkers to catch errors before they reach customers. Preview extensively on desktop and mobile. </Card> <Card title="Avoid Hardcoded Values" icon="link-slash"> Use Liquid variables and settings rather than hardcoding product IDs, URLs, or text. Makes maintenance easier when things change. </Card> <Card title="Consider Performance Impact" icon="gauge"> Monitor page load time after adding custom Liquid. Heavy operations, many API calls, or large external scripts can slow rendering significantly. </Card> <Card title="Never Expose Sensitive Data" icon="lock"> Don't include API keys, passwords, or sensitive credentials in Custom Liquid. Use secure app integrations or backend logic instead. </Card> <Card title="Mobile-First Approach" icon="mobile"> Always test custom code on mobile devices. What works on desktop may have layout or performance issues on mobile connections. </Card> </CardGroup> ## Common Use Cases ### App Snippet Integration **Use case:** Integrating third-party Shopify apps that provide snippet code ```liquid theme={null} {% comment %} Render app snippet for product reviews App: Judge.me Product Reviews {% endcomment %} {% render 'judgeme_widgets' %} ``` **When to use:** Apps requiring snippet placement in specific templates (homepage, product page, cart) ### Custom Product Showcase **Use case:** Featured products with custom layout beyond standard sections ```liquid theme={null} {% assign featured = collections.featured.products %} <div class="custom-product-grid"> {% for product in featured limit: 4 %} <div class="product-card"> <a href="{{ product.url }}"> <img src="{{ product.featured_image | img_url: 'medium' }}" alt="{{ product.title }}"> <h3>{{ product.title }}</h3> <p>{{ product.price | money }}</p> </a> </div> {% endfor %} </div> <style> .custom-product-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; } </style> ``` **When to use:** Unique homepage product displays, curated collections, custom styling ### Personalized Welcome Message **Use case:** Show different content to logged-in vs guest customers ```liquid theme={null} {% if customer %} <div class="welcome-message"> <h2>Welcome back, {{ customer.first_name }}!</h2> <p>You have {{ customer.orders_count }} orders with us.</p> <a href="/account">View Your Account</a> </div> {% else %} <div class="welcome-message"> <h2>New Here?</h2> <p>Create an account to track orders and save favorites.</p> <a href="/account/register">Sign Up</a> </div> {% endif %} ``` **When to use:** Personalized homepage content, account pages, post-purchase experiences ### Conditional Announcement Banners **Use case:** Show banners only to specific customer segments or during specific times ```liquid theme={null} {% comment %} Show holiday banner only in December {% endcomment %} {% assign current_month = 'now' | date: '%m' %} {% if current_month == '12' %} <div class="holiday-banner" style="background: #c41e3a; color: white; padding: 20px; text-align: center;"> <h2>Holiday Sale: 25% Off Storewide Until Dec 25!</h2> <a href="/collections/all" style="color: white; text-decoration: underline;">Shop Now</a> </div> {% endif %} ``` **When to use:** Seasonal promotions, customer segment targeting, A/B testing custom banners ### External Widget Embedding **Use case:** Integrate booking system, event calendar, or external tool ```liquid theme={null} {% comment %} Embed appointment booking widget {% endcomment %} <div class="booking-widget"> <h2>Book a Consultation</h2> <iframe src="https://calendly.com/your-store/consultation" width="100%" height="600" frameborder="0"> </iframe> </div> <style> .booking-widget { max-width: 800px; margin: 0 auto; } </style> ``` **When to use:** Service-based businesses, appointment booking, event registration, external integrations ### Cart-Based Conditional Content **Use case:** Show different messages based on cart contents or value ```liquid theme={null} {% if cart.item_count > 0 %} {% assign cart_total = cart.total_price | money_without_currency | plus: 0 %} {% if cart_total < 50 %} <div class="free-shipping-notice" style="background: #fef3c7; padding: 15px; text-align: center; border-radius: 8px;"> <p>Add ${{ 50 | minus: cart_total }} more for FREE SHIPPING!</p> </div> {% else %} <div class="free-shipping-notice" style="background: #d1fae5; padding: 15px; text-align: center; border-radius: 8px;"> <p>You've qualified for FREE SHIPPING!</p> </div> {% endif %} {% endif %} ``` **When to use:** Cart page upsells, shipping threshold notices, volume discount triggers ## Technical Notes ### Liquid Object Access The Custom Liquid section has full access to Shopify's Liquid objects based on template context: **Available Everywhere:** * `shop` - Store information * `cart` - Current cart contents * `request` - Page request information * `settings` - Theme settings * `template` - Current template name **Template-Specific:** * `product` - Product template only * `collection` - Collection template only * `article` - Article/blog template only * `page` - Page template only * `customer` - All templates (null if not logged in) **Not Available:** * Section-specific settings from other sections (isolated scope) * Data from apps unless they provide Liquid objects ### Server-Side vs Client-Side Execution **Server-Side (Liquid):** * Executes during page render on Shopify servers * Has access to all Shopify data (products, customers, orders) * Output is HTML sent to browser * Cannot respond to user interactions after page load **Client-Side (JavaScript):** * Executes in customer's browser after page loads * Can respond to clicks, scrolls, form submissions * Must use Ajax/fetch to access Shopify data * Use `<script>` tags within Custom Liquid for client-side code ### Code Limitations * **No file system access:** Cannot create/read files outside Liquid scope * **No database queries:** Can only access data through Liquid objects * **No external API calls:** Liquid doesn't support HTTP requests to external services * **Output buffering:** Very large output (thousands of lines) may be truncated ### Snippet Alternative For complex or reusable custom code, consider creating a **snippet file** instead: 1. Create `snippets/custom-homepage-hero.liquid` in theme code editor 2. Write full code in snippet file (easier editing, version control) 3. Use Custom Liquid section to render snippet: ```liquid theme={null} {% render 'custom-homepage-hero' %} ``` **Benefits:** * Easier code editing (full code editor vs. small inline field) * Reusable across multiple pages * Better organization * Easier version control/backup ### Debugging Custom Liquid **Common Issues:** **Nothing displays:** * Check for Liquid syntax errors (missing `%}`, unclosed tags) * Verify objects exist (e.g., `product` only exists on product pages) * Check padding isn't set too low (content might be hidden) **Page renders incorrectly:** * Validate HTML structure (unclosed tags break layout) * Check for CSS specificity conflicts with theme styles * Verify JavaScript isn't conflicting with theme scripts **Performance problems:** * Remove expensive operations (nested loops, large arrays) * Limit external script/style includes * Cache repeated calculations in variables **Use Liquid's debug filter:** ```liquid theme={null} {{ product | json }} ``` Outputs object structure to inspect available data. ### Security Best Practices * **Sanitize user input:** Never directly output customer-submitted data without escaping * **Use `escape` filter:** `{{ user_input | escape }}` prevents XSS attacks * **Validate external resources:** Only include scripts/styles from trusted sources * **Avoid inline credentials:** Never hardcode API keys or passwords * **Test for injection attacks:** Ensure form inputs can't execute code ### Performance Monitoring After adding custom Liquid: 1. Use browser DevTools Network tab to check page load time 2. Monitor server response time in Shopify admin (Online Store > Themes > Actions > Preview) 3. Test on slow connections (DevTools network throttling) 4. Check mobile performance (often slower than desktop) **Target:** Custom Liquid should add less than 100ms to page load time. ## Troubleshooting **Custom Liquid section is empty/not displaying:** * Verify code is saved (click Save after editing) * Check Liquid syntax for errors (unclosed tags, typos in object names) * Ensure template context matches code (e.g., `product` object only exists on product pages) * Check padding settings aren't set to 0 with no content height **Layout breaks after adding custom code:** * Validate HTML structure (use W3C validator) * Check for unclosed `<div>`, `<style>`, or `<script>` tags * Verify custom CSS isn't overriding critical theme styles * Inspect with browser DevTools to identify conflicting styles **Code works on desktop but not mobile:** * Test responsive behavior (fixed widths may overflow) * Check external resources load on mobile connections * Verify JavaScript doesn't rely on desktop-specific events * Test iframe embeds (some services don't work well on mobile) **Performance degradation after adding custom Liquid:** * Remove or optimize nested Liquid loops * Limit external script/style includes (each adds HTTP request) * Cache repeated operations in variables rather than recalculating * Consider moving heavy logic to snippet file with error handling **App snippet not rendering:** * Verify app is installed and enabled * Check snippet name matches exactly (case-sensitive) * Ensure app hasn't been updated with new snippet name * Review app's integration instructions for template compatibility **JavaScript errors in console:** * Check for syntax errors in `<script>` tags * Verify jQuery/libraries are loaded if code depends on them * Ensure code doesn't conflict with theme's existing JavaScript * Wrap code in `DOMContentLoaded` to ensure DOM is ready # Featured Articles Source: https://docs.digifist.com/themes/mojave/sections/featured-articles Showcase blog articles in a grid layout, either automatically from a blog or manually curated through article blocks ## What this section does The **Featured Articles** section displays blog content in an attractive card grid, perfect for promoting your latest posts or highlighting curated content. You can: * Automatically pull recent articles from a selected blog (dynamic) * Manually select specific articles using blocks (curated) This section brings your blog content to the forefront of your homepage or landing pages, encouraging visitors to engage with your brand story and content marketing. <Frame> <img alt="Featured Articles Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Featured articles** </Step> <Step title="Choose article source"> Either select a **Blog** to pull articles automatically, OR add **Article blocks** to manually select specific articles </Step> <Step title="Configure display"> Add a heading and subheading, set the article count (if using a blog), and toggle fullwidth mode based on your design preferences </Step> </Steps> ## Section settings <Tabs> <Tab title="Content"> <AccordionGroup> <Accordion title="Enable fullwidth" icon="maximize"> **Checkbox** (default: checked) Controls the section width: * **Checked**: Section spans full browser width (edge-to-edge) * **Unchecked**: Section contained within standard page width **When to use fullwidth**: Dramatic, showcase-style blog promotion that dominates the page **When to disable**: Matching other contained sections for cohesive page rhythm </Accordion> <Accordion title="Heading" icon="heading"> **Text field** (default: "Blog posts") Main heading for the section. Automatically populates with the blog name when you select a blog, but can be overridden. Use descriptive headings like "Latest News", "From the Blog", or "Our Stories". </Accordion> <Accordion title="Subheading" icon="align-left"> **Textarea** (default: "Give your customers a summary of your blog posts.") Supporting text that provides context about the blog content. Keep concise (1-2 sentences). </Accordion> <Accordion title="Link text" icon="link"> **Text field** (optional) Text displayed on the call-to-action button below the articles (e.g., "Read more", "View all posts"). </Accordion> <Accordion title="Link URL" icon="arrow-up-right-from-square"> **URL field** (optional) Destination for the CTA button. Automatically populates with the blog URL when you select a blog, but can be overridden. Typically links to: * The main blog page * A specific blog category * A custom landing page </Accordion> <Accordion title="Blog" icon="newspaper"> **Blog picker** — Select a Shopify blog to automatically pull articles from * Displays the most recent articles based on publish date * Updates automatically as new articles are published * **Overrides manual article blocks** if both are configured * Auto-fills Heading and Link URL with blog info (can be overridden) **When to use**: Dynamic article displays that stay current without manual updates (e.g., "Latest News", "Recent Posts"). </Accordion> <Accordion title="Articles count" icon="hashtag"> **Range slider** — 4 to 10 articles (default: 4) Controls how many articles are displayed when using the Blog setting. * 4 articles: Recommended for most layouts (default) * 6-8 articles: Use when you have more vertical space * 10 articles: Maximum for comprehensive blog showcases <Note>This setting only applies when a Blog is selected. When using manual article blocks, the number of articles matches the number of blocks added.</Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Spacing"> <AccordionGroup> <Accordion title="Spacing - Desktop" icon="arrows-up-down"> **Dropdown** (default: Compact) Controls vertical spacing above and below the section on desktop devices: * **Default** — Standard spacing for balanced layouts * **Medium** — Moderate spacing for tighter designs * **Compact** — Minimal spacing (recommended for fullwidth sections) * **None** — No spacing for seamless layouts </Accordion> <Accordion title="Spacing - Mobile" icon="mobile"> **Dropdown** (default: Compact) Controls vertical spacing above and below the section on mobile devices: * **Default** — Standard mobile spacing * **Compact** — Reduced spacing (recommended for mobile) * **None** — No spacing for seamless mobile layouts </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block types ### Article block Add **Article** blocks to manually select specific articles to feature. Each block represents one article. <AccordionGroup> <Accordion title="Article" icon="newspaper"> **Article picker** — Select a specific blog article to display * Info: "Overwrites the Blog, if chosen" * Choose any published article from any blog * Articles display in the order blocks are arranged in the Theme Customizer **Important**: All article blocks are ignored if the **Blog** setting (section-level) is filled. Remove the Blog selection to use manual article blocks. **When to use blocks**: Curated, hand-picked article displays for campaigns, featured content, or themed collections (e.g., "Summer Recipe Collection", "Holiday Gift Guides"). </Accordion> </AccordionGroup> **How to add article blocks**: 1. In the Theme Customizer, click **Add block** 2. Select **Article** 3. Choose the article from the picker 4. Repeat to add more articles 5. Drag blocks to reorder articles ## Best practices <CardGroup> <Card title="Choose the right source" icon="filter"> Use **Blog** for dynamic, auto-updating displays. Use **Article blocks** for static, curated selections tied to specific campaigns or themes. </Card> <Card title="Optimal article count" icon="hashtag"> Display 4 articles by default for balanced visual impact. Use 6-8 only if you have substantial blog content and vertical space. </Card> <Card title="Fullwidth for impact" icon="maximize"> Enable fullwidth for dramatic blog showcases that dominate the page. Disable when stacking with other standard-width sections. </Card> <Card title="Descriptive headings" icon="text"> Use specific headings like "Latest News", "Style Tips", or "From the Journal" instead of generic "Blog posts" to set expectations. </Card> <Card title="Concise subheadings" icon="align-left"> Keep subheadings to 1-2 sentences that explain the value of your blog content (e.g., "Discover styling tips, trends, and inspiration from our team"). </Card> <Card title="CTA encourages exploration" icon="arrow-pointer"> Always include Link text and Link URL to drive visitors to your full blog where they can discover more content. </Card> <Card title="Update featured content" icon="calendar"> When using manual article blocks, refresh featured articles seasonally or with new campaigns to keep content fresh and relevant. </Card> <Card title="Coordinate spacing" icon="arrows-up-down"> Use Compact spacing (default) for fullwidth sections. Use Default spacing when the section sits between lighter content areas. </Card> </CardGroup> ## Common use cases **Homepage blog showcase** — Feature your most recent blog posts on the homepage to drive traffic to your content and establish brand authority **Content hub landing page** — Create a dedicated blog landing page that showcases featured or popular articles before the full blog list **Campaign-specific content** — Manually curate articles related to a seasonal campaign, holiday, or product launch using article blocks **Category highlights** — Pull articles from a specific blog category to introduce customers to themed content (e.g., "Recipes", "Tutorials") **Editorial storytelling** — Showcase long-form brand stories, founder interviews, or behind-the-scenes content to build emotional connections ## Layout behavior **Desktop**: Articles display in a grid layout, typically 2-4 columns depending on the number of articles. Each article card includes: * Featured image * Article title * Excerpt (if available) * Publish date and author (if configured in theme settings) * Read more link **Mobile**: Articles stack vertically in a single column for optimal mobile reading. **Article order**: * **Blog mode**: Most recent articles first (sorted by publish date) * **Block mode**: Order matches the arrangement of article blocks in the Theme Customizer ## Content population logic ### When using Blog setting: 1. Select a blog using the **Blog** picker 2. **Heading** auto-fills with blog name (can be overridden) 3. **Link URL** auto-fills with blog URL (can be overridden) 4. Most recent X articles display (X = **Articles count** setting) 5. All article blocks are ignored ### When using Article blocks: 1. Leave **Blog** setting empty 2. Add **Article** blocks for each article you want to feature 3. Manually set **Heading** and **Link URL** 4. Articles display in block order 5. **Articles count** setting has no effect ## Related sections * **Featured Collection** — Similar editorial layout but for products instead of articles * **Featured Products** — Display curated products in a grid or slider * **Main Blog** — Full blog template with hero banner, filtering, and pagination # Featured Collection Source: https://docs.digifist.com/themes/mojave/sections/featured-collection Promote a collection with a split-screen layout featuring an image, descriptive text, and a grid of products from your selected collection ## What this section does The **Featured Collection** section creates an editorial-style promotional display for any collection in your store. It combines: * A large promotional image with customizable height and border effects * Heading and subheading text to introduce the collection * A grid of products pulled directly from the selected collection * A call-to-action button linking to the full collection This section is perfect for highlighting seasonal collections, new arrivals, or featured product categories on your homepage or landing pages. <Frame> <img alt="Featured Collection Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Featured collection** </Step> <Step title="Configure content"> Upload a promotional image (1440x1720px recommended), add your heading and subheading text, then select the collection to feature </Step> <Step title="Adjust layout"> Set the number of products to display (4-10) and toggle the flip setting to position content on left or right side </Step> </Steps> ## Section settings <Tabs> <Tab title="Content & Media"> <AccordionGroup> <Accordion title="Image" icon="image"> **Image picker** — Upload or select a promotional image for the collection * Recommended size: 1440x1720px * Appears on one side of the split-screen layout * Should be high-quality lifestyle imagery that represents the collection **Image Height** — Range slider: 50-100% (default: 100%) * Controls the height of the featured image relative to section height * 100% = image fills the full section height * Lower values create shorter, more compact image display </Accordion> <Accordion title="Flip media/content position" icon="right-left"> **Checkbox** (default: unchecked) Reverses the layout to swap positions of image and text content: * Unchecked: Image on left, content on right * Checked: Content on left, image on right Use when stacking multiple featured sections to create visual variety. </Accordion> <Accordion title="Enable border effect" icon="border-all"> **Checkbox** (default: checked) Adds a decorative border effect around the featured image for enhanced visual separation. </Accordion> <Accordion title="Heading" icon="heading"> **Textarea** (default: "Featured collection") Main heading that introduces the collection. Keep concise (3-5 words) for maximum impact. </Accordion> <Accordion title="Subheading" icon="align-left"> **Textarea** (default: "Pair text with an image to focus on your collection. Add details on availability, style, or even provide a review.") Descriptive text that provides context about the collection—describe the style, occasion, features, or benefits. </Accordion> <Accordion title="Link text" icon="link"> **Text field** (default: "Shop all") Text displayed on the call-to-action button. </Accordion> <Accordion title="Link URL" icon="arrow-up-right-from-square"> **URL field** (default: /collections) Destination URL for the button. Typically links to the full collection page. </Accordion> <Accordion title="Collection" icon="grid-2"> **Collection picker** — Select which Shopify collection to display products from Products are automatically pulled from the selected collection based on your collection's sort order. </Accordion> <Accordion title="Products count" icon="hashtag"> **Range slider** — 4 to 10 products (default: 6) Controls how many products from the collection are displayed in the grid. * 4-6 products: Recommended for most layouts * 7-10 products: Use when you have more vertical space </Accordion> </AccordionGroup> </Tab> <Tab title="Layout & Spacing"> <AccordionGroup> <Accordion title="Spacing - Desktop" icon="arrows-up-down"> **Dropdown** (default: Default) Controls vertical spacing above and below the section on desktop devices: * **Default** — Standard spacing for balanced layouts * **Medium** — Moderate spacing for tighter designs * **Compact** — Minimal spacing when sections should sit close together * **None** — No spacing for edge-to-edge layouts </Accordion> <Accordion title="Spacing - Mobile" icon="mobile"> **Dropdown** (default: Compact) Controls vertical spacing above and below the section on mobile devices: * **Default** — Standard mobile spacing * **Compact** — Reduced spacing (default for mobile-optimized design) * **None** — No spacing for seamless mobile layouts </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Use high-quality images" icon="camera"> Upload images at 1440x1720px for sharp display. Use lifestyle photography that represents your collection's style and appeals to your target audience. </Card> <Card title="Keep headings concise" icon="text-size"> Limit headings to 3-5 words for maximum impact. Use the subheading field for longer descriptions and collection details. </Card> <Card title="Optimal product count" icon="grid-2"> Display 6 products by default for balanced visual weight. Use fewer (4) for more focus or more (8-10) when featuring large collections. </Card> <Card title="Create visual rhythm" icon="wave-square"> When stacking multiple sections, alternate the flip setting to create a flowing, magazine-style layout that guides the eye. </Card> <Card title="Match CTA to collection" icon="arrow-pointer"> Set the Link URL to point to the actual collection page so customers can explore all products after viewing the preview. </Card> <Card title="Coordinate spacing" icon="arrows-up-down"> Use consistent spacing settings across sections for cohesive page rhythm. Compact works well for mobile, Default for desktop. </Card> <Card title="Test border effects" icon="border-all"> Try border enabled/disabled based on your image style. Borders work best with product photography, less so with lifestyle images. </Card> <Card title="Update seasonally" icon="calendar"> Refresh the featured collection, image, and text with new seasonal collections to keep your homepage content current and relevant. </Card> </CardGroup> ## Common use cases **Homepage collection promotion** — Feature your best-selling or newest collection on the homepage with compelling imagery and a direct CTA **Seasonal campaigns** — Highlight holiday, seasonal, or limited-time collections with timely images and copy that create urgency **Category introduction** — Use on category landing pages to introduce and provide context for the products customers will see below **Editorial storytelling** — Create a magazine-style brand experience by combining high-quality imagery with narrative text about your collections ## Layout behavior **Desktop**: The section displays in a split-screen layout with the image on one side and text content (heading, subheading, CTA) on the other. Products appear in a grid below. Use the flip setting to reverse the image/content positions. **Mobile**: The layout stacks vertically with the image at the top, followed by text content, then the product grid. The flip setting does not affect mobile layout. ## Related sections * **Featured Products** — Display a curated list of specific products instead of pulling from a collection * **Featured Collections Links** — Promote multiple collections at once with a tile-based layout * **Featured Articles** — Similar editorial layout but for blog content instead of products # Featured Collections Links Source: https://docs.digifist.com/themes/mojave/sections/featured-collections-links Promote multiple collections simultaneously with three distinct display styles: simple links, lifestyle image tiles, or product image tiles ## What this section does The **Promotional Collections** section (internally called `featured-collections-links`) creates a versatile multi-collection showcase with three distinct visual styles: * **Links** — Simple text-based collection links * **Image tiles** — Visual tiles using collection or custom images * **Product tiles** — Product-focused tiles overlaying featured product images The section uses a split-screen layout with a promotional image and heading on one side, and collection links/tiles added via blocks on the other. <Frame> <img alt="Promotional Collections Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Promotional collections** </Step> <Step title="Choose display style"> Set the **Types** dropdown to Links, Lifestyle image tiles, or Product image tiles based on your desired visual impact </Step> <Step title="Add collection blocks"> Add **Collection link** blocks (typically 4-6) for each collection you want to promote, configuring images and links as needed </Step> <Step title="Configure layout"> Upload a main promotional image, set your heading/subheading, and adjust section height and spacing </Step> </Steps> ## Section settings <Tabs> <Tab title="Display & Content"> <AccordionGroup> <Accordion title="Types" icon="layer-group"> **Dropdown** (default: Links) Controls the visual style of collection presentation: * **Links** — Minimal text links with arrows, fast-loading and straightforward * **Lifestyle image tiles** — Visual tiles using collection featured images or custom block images * **Product image tiles** — Product-focused tiles overlaying images of 3 featured products **When to use each**: * **Links**: Quick navigation without visual distraction * **Image tiles**: Balanced visuals for category exploration * **Product tiles**: Maximum product emphasis while promoting collections </Accordion> <Accordion title="Flip image/content position" icon="right-left"> **Checkbox** (default: unchecked) Reverses the layout to swap positions of main image and collection links: * Unchecked: Image on left, collection links on right * Checked: Collection links on left, image on right Use when stacking multiple sections to create visual variety. </Accordion> <Accordion title="Heading" icon="heading"> **Text field** (default: "Highlight multiple collection links") Main heading that introduces the collection grouping (e.g., "Shop by Category", "Explore Collections"). </Accordion> <Accordion title="Subheading" icon="align-left"> **Textarea** (default: "Collections") Supporting text below the heading that provides additional context. </Accordion> <Accordion title="Image" icon="image"> **Image picker** — Upload or select a promotional image for the content side * Recommended size: 1440x1620px * Appears on one side of the split-screen layout * Should complement the collections being promoted **Image height - mobile** — Range slider: 0-100% (default: 100%) * Controls the height of this image on mobile devices * 100% = image fills the full section height on mobile </Accordion> <Accordion title="Enable border effect" icon="border-all"> **Checkbox** (default: checked) Adds a decorative border effect around the main section image. </Accordion> </AccordionGroup> </Tab> <Tab title="Products"> <AccordionGroup> <Accordion title="Product - 1, 2, 3" icon="bag-shopping"> **Product pickers** — Select 3 featured products * **Product - 1**: First featured product * **Product - 2**: Second featured product * **Product - 3**: Third featured product <Warning>These products **only display** when Types is set to "Product image tiles". They have no effect in Links or Lifestyle image tiles modes.</Warning> **Purpose**: When using Product tiles mode, these products serve as the background images for collection tiles, creating a product-focused visual style. **Best practice**: Choose products that represent the collections well or are hero products from those categories. </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> <AccordionGroup> <Accordion title="Section height" icon="arrows-up-down-left-right"> **Range slider** — 20vw to 100vw (default: 55vw) Controls the minimum height of the entire section in viewport width units. * **55vw** (default): Section is 55% of the viewport width in height * Lower values (20-40vw): More compact, less dramatic * Higher values (60-100vw): More dramatic, full-screen feel <Info>Using viewport width units (vw) ensures the section scales proportionally with screen size.</Info> </Accordion> <Accordion title="Section width" icon="arrows-left-right"> **Dropdown** (default: Full width) Controls the maximum width of the section: * **Page width** — Standard container matching theme page width * **Full width** — Edge-to-edge display (recommended for maximum impact) </Accordion> <Accordion title="Spacing - Desktop" icon="arrows-up-down"> **Dropdown** (default: Default) Controls vertical spacing above and below the section on desktop devices: * **Default** — Standard spacing for balanced layouts * **Medium** — Moderate spacing for tighter designs * **Compact** — Minimal spacing * **None** — No spacing for seamless layouts </Accordion> <Accordion title="Spacing - Mobile" icon="mobile"> **Dropdown** (default: Compact) Controls vertical spacing above and below the section on mobile devices: * **Default** — Standard mobile spacing * **Compact** — Reduced spacing (recommended) * **None** — No spacing for seamless mobile layouts </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block types ### Collection link block Add **Collection link** blocks to promote individual collections. Each block creates one collection link or tile depending on the Types setting. <AccordionGroup> <Accordion title="Collection" icon="grid-2"> **Collection picker** — Select which Shopify collection this link represents The collection provides: * Collection name (used as default link text) * Collection URL (used as default destination) * Collection featured image (used in Image tile and Product tile modes) </Accordion> <Accordion title="Text color" icon="palette"> **Dropdown** (default: Main) Controls the text color for collection names/links: * **Main** — Primary text color from theme * **Accent** — Accent color from theme <Warning>This setting **only applies** to Lifestyle image tiles and Product image tiles modes. It has no effect when Types is set to Links.</Warning> </Accordion> <Accordion title="Link text" icon="text"> **Text field** (default: "All") Custom text to display for this collection link. Can override the collection's default name. Examples: "Shop All", "View Collection", custom category names </Accordion> <Accordion title="Link URL" icon="arrow-up-right-from-square"> **URL field** (default: /collections) Custom destination URL for this collection link. * **Overwrites the collection URL** if provided * Use to link to custom landing pages, filtered collections, or external pages * Leave default to use the collection's standard URL </Accordion> <Accordion title="Image" icon="image"> **Image picker** (optional) Custom image for this collection tile. * **Overwrites the collection's featured image** when provided * Only relevant for **Lifestyle image tiles** and **Product image tiles** modes * Has no effect in **Links** mode Use custom images to: * Override collection images that don't match your desired style * Ensure consistent image quality and dimensions across tiles * Create themed or seasonal variations </Accordion> </AccordionGroup> **How to add collection blocks**: 1. In the Theme Customizer, click **Add block** 2. Select **Collection link** 3. Choose the collection and configure settings 4. Repeat to add more collections (typically 4-6) 5. Drag blocks to reorder collections ## Best practices <CardGroup> <Card title="Optimal collection count" icon="hashtag"> Add 4-6 collection link blocks for balanced display. Too few looks sparse, too many overwhelms the layout and slows decision-making. </Card> <Card title="Choose the right type" icon="layer-group"> Use Links for minimal distraction, Image tiles for balanced visual browsing, and Product tiles when products should be the hero. </Card> <Card title="Section height strategy" icon="ruler-vertical"> Keep default 55vw for most use cases. Use 40-50vw for compact sections, 60-80vw for dramatic, full-screen experiences. </Card> <Card title="Fullwidth for impact" icon="maximize"> Use Full width (default) for maximum visual drama. Only switch to Page width if matching other contained sections. </Card> <Card title="Product tile alignment" icon="bag-shopping"> When using Product tiles, choose the 3 featured products carefully—they should represent or complement the collections being promoted. </Card> <Card title="Consistent tile images" icon="images"> For Image tiles mode, ensure all collection images (or custom block images) have consistent style, dimensions, and quality. </Card> <Card title="Create visual rhythm" icon="wave-square"> Use the flip setting when stacking multiple sections to alternate layouts and create a flowing, magazine-style design. </Card> <Card title="Update seasonally" icon="calendar"> Refresh collection selections, images, and heading/subheading text seasonally to keep the section relevant and timely. </Card> </CardGroup> ## Common use cases **Category navigation hub** — Create a visual directory of your main product categories (e.g., "Men", "Women", "Kids", "Accessories") **Shop by style** — Promote collections organized by aesthetic, occasion, or theme (e.g., "Casual", "Formal", "Outdoor", "Travel") **Seasonal campaigns** — Highlight seasonal collections with timely imagery (e.g., "Summer Essentials", "Holiday Gifts", "Back to School") **Brand collections** — Showcase collections by brand or designer for multi-brand retailers **Sale promotions** — Feature sale or clearance collections alongside regular-priced categories ## Layout behavior **Split-screen composition**: * One side: Main promotional image with heading and subheading * Other side: Collection links/tiles (added via blocks) * Flip setting reverses which side is which **Desktop**: * Links mode: Vertical list of text links with arrows * Image tiles: Grid of image tiles (2-3 columns based on count) * Product tiles: Grid of tiles overlaying product images **Mobile**: * Stacks vertically: image at top, then collection links/tiles * Flip setting does not affect mobile layout **Tile behavior**: * Image tiles: Each shows collection image (or custom block image) with text overlay * Product tiles: Each shows one of the 3 featured products with collection name overlay * Links: Simple text links, no images ## Display type comparison | Feature | Links | Image Tiles | Product Tiles | | ------------------- | ---------------- | ----------------- | ----------------- | | **Visual impact** | Minimal | Medium | High | | **Page load** | Fastest | Medium | Slower | | **Best for** | Quick navigation | Category browsing | Product focus | | **Images used** | None | Collection/custom | Featured products | | **Mobile friendly** | Excellent | Good | Good | | **Decision speed** | Fast | Medium | Slower | ## Related sections * **Featured Collection** — Promote a single collection with product grid and split-screen layout * **Featured Products** — Display curated products in slideshow or grid format * **Hero** — Full-width banner sections for dramatic promotional content # Featured Products Source: https://docs.digifist.com/themes/mojave/sections/featured-products Showcase a curated selection of products in a slideshow or grid layout, perfect for highlighting best sellers, new arrivals, or promotional items ## What this section does The **Featured Products** section displays a customizable set of products in your choice of slideshow or grid format. You can either: * Pull products automatically from a selected collection (dynamic) * Manually choose specific products to feature (curated) This flexible section is ideal for highlighting trending products, promotional items, best sellers, or new arrivals on your homepage, landing pages, or any page in your theme. <Frame> <img alt="Featured Products Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Featured products** </Step> <Step title="Choose product source"> Either select a **Collection** to pull products automatically, OR manually select individual products using the **Products** picker (up to 12) </Step> <Step title="Configure display"> Choose between **Slider** (carousel) or **Grid** display style, set section width, and adjust spacing to match your page design </Step> </Steps> ## Section settings <Tabs> <Tab title="Content"> <AccordionGroup> <Accordion title="Heading" icon="heading"> **Textarea** (default: "Featured products") Main heading displayed above the product display. Use to describe the product selection (e.g., "Best Sellers", "New Arrivals", "Staff Picks"). </Accordion> <Accordion title="Collection" icon="grid-2"> **Collection picker** — Select a Shopify collection to automatically pull products from * Products display in the collection's configured sort order * Updates automatically when collection products change * **Overrides manual product selection** if both are configured **When to use**: Dynamic product displays that update as your collection changes (e.g., "Best Sellers", "New Arrivals"). </Accordion> <Accordion title="Products" icon="bag-shopping"> **Product list picker** — Manually select up to 12 specific products * Choose exact products to feature in exact order * Maximum 12 products * **Ignored if a Collection is selected above** **When to use**: Curated, hand-picked product selections that you want full control over (e.g., promotional campaigns, editorial picks). </Accordion> <Accordion title="Link text" icon="link"> **Text field** (default: "Explore featured products") Text displayed on the call-to-action button below the products. </Accordion> <Accordion title="Link URL" icon="arrow-up-right-from-square"> **URL field** (default: /collections) Destination URL for the CTA button. Typically links to: * The source collection page (if using Collection setting) * A relevant category or landing page * "Shop All" collections page </Accordion> </AccordionGroup> </Tab> <Tab title="Display & Layout"> <AccordionGroup> <Accordion title="Display style" icon="grid-2-plus"> **Dropdown** (default: Slideshow) — **Desktop only** Controls how products are displayed on desktop devices: * **Slideshow** — Products in carousel/slider format with navigation arrows * **Grid** — Products in static grid layout, all visible at once <Note>Mobile devices always display products as a horizontal scrollable row, regardless of this setting.</Note> **When to use Slideshow**: 6+ products, limited vertical space, or when you want interactive browsing **When to use Grid**: 3-4 products, when all products should be visible without interaction, or for focused attention </Accordion> <Accordion title="Section width" icon="arrows-left-right"> **Dropdown** (default: Page width) Controls the maximum width of the section container: * **Page width** — Standard container matching theme page width * **Narrow** — Tighter, more focused container (medium width) * **Full width** — Edge-to-edge display spanning entire screen width **Best practices**: * **Full width** works best with Slideshow style * **Narrow** creates focus when featuring 3-4 hero products * **Page width** balances with other standard-width sections </Accordion> <Accordion title="Extra spacing" icon="arrows-up-down"> **Checkbox** (default: checked) Adds additional vertical spacing between the section elements (heading, products, CTA button) for a more open, refined layout. * Checked: Increased spacing for airier design * Unchecked: Compact spacing for denser layouts Useful when the section sits between other content-heavy sections. </Accordion> <Accordion title="Spacing - Desktop" icon="arrows-up-down"> **Dropdown** (default: Default) Controls vertical spacing above and below the section on desktop devices: * **Default** — Standard spacing for balanced layouts * **Medium** — Moderate spacing for tighter designs * **Compact** — Minimal spacing when sections should sit close together * **None** — No spacing for seamless, edge-to-edge layouts </Accordion> <Accordion title="Spacing - Mobile" icon="mobile"> **Dropdown** (default: Compact) Controls vertical spacing above and below the section on mobile devices: * **Default** — Standard mobile spacing * **Compact** — Reduced spacing (recommended for mobile) * **None** — No spacing for seamless mobile layouts </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Choose the right source" icon="filter"> Use **Collection** for dynamic, auto-updating displays (e.g., best sellers). Use **Products** for static, curated selections (e.g., campaign-specific products). </Card> <Card title="Slider for many products" icon="sliders"> Use Slideshow style when featuring 6+ products to avoid overwhelming the page. Grid works best with 3-4 products for immediate visibility. </Card> <Card title="Match CTA to source" icon="arrow-pointer"> Set the Link URL to the source collection page (if using Collection) or a relevant category page so customers can explore more products. </Card> <Card title="Section width strategy" icon="maximize"> Use Full width with Slideshow for dramatic product showcases. Use Narrow with Grid to focus attention on fewer hero products. </Card> <Card title="Limit product count" icon="hashtag"> Display 6-8 products in Slideshow or 4 products in Grid for optimal user experience. Too many products can cause decision paralysis. </Card> <Card title="Update seasonally" icon="calendar"> Refresh featured products or switch collections based on seasons, holidays, or promotional campaigns to keep content relevant. </Card> <Card title="Coordinate spacing" icon="arrows-up-down"> Use Extra spacing when sandwiched between heavy content sections. Disable it when stacking multiple product sections for tighter layouts. </Card> <Card title="Descriptive headings" icon="text"> Use specific headings like "Best Sellers", "New Arrivals", or "Staff Picks" instead of generic "Featured Products" to set context. </Card> </CardGroup> ## Common use cases **Homepage hero products** — Feature your best-selling or newest products immediately after the hero banner to capture visitor attention **Sale/promotional sections** — Manually select products on sale or part of a campaign using the Products picker for full control **Category highlights** — Pull products from a specific category collection to introduce customers to that product category **Trending items showcase** — Use a dynamic collection that auto-updates with best-selling or frequently viewed products **Editorial product stories** — Curate specific products that tell a brand story or follow a theme (e.g., "Summer Essentials", "Gift Ideas") ## Layout behavior **Desktop - Slideshow style**: Products display in a carousel/slider with navigation arrows. Users can click through products horizontally. **Desktop - Grid style**: Products display in a static grid layout with all products visible simultaneously. **Mobile**: Regardless of style setting, products always display as a horizontal scrollable row on mobile devices for optimal touch interaction. **Product order**: Products appear in the order defined by: * Collection sort order (if using Collection setting) * Manual selection order (if using Products setting) ## Related sections * **Featured Collection** — Display products from a collection with a large promotional image and split-screen layout * **Recommended Products** — Display AI-powered product recommendations based on customer behavior * **Recently Viewed** — Show products the customer has recently browsed # Hero Banner Source: https://docs.digifist.com/themes/mojave/sections/hero Create dramatic full-width hero banners with carousel capabilities, split-screen layouts, and flexible content areas with images, videos, or solid colors ## What this section does The **Hero** section creates powerful, attention-grabbing banners at the top of your pages. It supports: * **Carousel functionality** with multiple rotating slides * **Three layout modes**: 70/30 split, 50/50 split, or fullwidth * **Dual content areas** per slide: Main (primary) and Aside (secondary) * **Media flexibility**: Background images, embedded videos, uploaded videos, or solid colors * **Responsive design**: Separate mobile images and mobile-first behavior Each hero slide can feature two distinct zones (Main and Aside) with independent images, text, and calls-to-action, allowing for sophisticated split-screen storytelling or focused fullwidth messaging. <Frame> <img alt="Hero Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Hero** </Step> <Step title="Add slide blocks"> Add one or more **Hero slide** blocks (1-3 recommended). Each block represents one carousel slide </Step> <Step title="Choose layout"> For each slide, select your layout: 70/30 (focus on one side), 50/50 (balanced), or Full-width (single dramatic banner) </Step> <Step title="Configure content"> Upload images for Main and Aside areas, add headings and call-to-action buttons, adjust overlay and alignment settings </Step> </Steps> ## Section settings <AccordionGroup> <Accordion title="Hero height" icon="arrows-up-down"> **Range slider** — 50% to 100% (default: 100%) Controls the height of all hero slides in the carousel. * **100%** (default): Full viewport height for maximum impact * **75-90%**: Prominent but allows content below to peek through * **50-70%**: More compact hero that doesn't dominate the page Applies to all slides in the carousel. </Accordion> <Accordion title="Enable carousel autoplay" icon="circle-play"> **Checkbox** (default: unchecked) Automatically rotates through hero slides without user interaction. * Checked: Slides auto-advance based on autoplay interval * Unchecked: Users must click navigation arrows to change slides <Warning>**Accessibility consideration**: Autoplay can be distracting. Use sparingly and keep intervals long (7+ seconds).</Warning> </Accordion> <Accordion title="Autoplay interval" icon="clock"> **Range slider** — 3 to 10 seconds (default: 5) Controls how long each slide displays before auto-advancing to the next. * **3-4 seconds**: Very fast, only for minimal content * **5-6 seconds**: Standard speed for most content * **7-10 seconds**: Slower pace for text-heavy or complex slides Only applies when autoplay is enabled. Minimum 7 seconds recommended for readability. </Accordion> <Accordion title="Enable control arrows" icon="arrows-left-right"> **Checkbox** (default: checked) Shows/hides navigation arrows that users click to manually advance slides. * Checked: Arrows visible for manual control * Unchecked: No arrows (rely on autoplay or dots) Recommended to stay enabled unless using very slow autoplay. </Accordion> </AccordionGroup> ## Block types ### Hero slide block Add **Hero slide** blocks to create individual carousel slides. Each slide has two potential content areas: Main (primary) and Aside (secondary). <Tabs> <Tab title="General"> <AccordionGroup> <Accordion title="Layout" icon="table-columns"> **Dropdown** (default: 70/30) Controls the screen split ratio between Main and Aside areas: * **70/30** — Main occupies 70% width, Aside occupies 30% * **50/50** — Equal split for balanced dual messaging * **Full-width** — Main only (100% width), Aside settings ignored **When to use each**: * **70/30**: Primary content focus with secondary callout * **50/50**: Side-by-side product comparison or dual campaigns * **Full-width**: Single, dramatic hero statement without distraction </Accordion> <Accordion title="Flip" icon="right-left"> **Checkbox** (default: unchecked) Reverses the positions of Main and Aside areas: * Unchecked: Main on left, Aside on right * Checked: Aside on left, Main on right <Note>Only applies to 70/30 and 50/50 layouts. Has no effect on Full-width.</Note> Use flip to create visual variety when featuring multiple slides or when layout direction serves your content better. </Accordion> <Accordion title="Overlay opacity" icon="droplet"> **Range slider** — 0% to 100% (step: 10%, default: 50%) Controls the darkness of the Main area overlay placed over background images/videos. * **0%**: No overlay, full image/video brightness (text must be readable) * **30-50%**: Moderate overlay for readability while keeping image visible * **70-100%**: Heavy overlay for maximum text contrast Adjust based on background image brightness and text color. Darker images need less overlay. </Accordion> </AccordionGroup> </Tab> <Tab title="Main Area"> <AccordionGroup> <Accordion title="Vertical align content" icon="arrows-up-down"> **Dropdown** (default: Bottom) Positions text vertically within the Main area: * **Top**: Text at top of Main area * **Center**: Text centered vertically * **Bottom**: Text at bottom (classic hero style) Bottom placement creates grounded, stable hero banners. Center works for minimal content. </Accordion> <Accordion title="Horizontal align content" icon="align-left"> **Dropdown** (default: Start/Left) Positions text horizontally within the Main area: * **Start** (Left): Left-aligned text * **Center**: Centered text * **End** (Right): Right-aligned text Left alignment is most common. Center works best with Full-width layouts and short text. </Accordion> <Accordion title="Decoration line" icon="minus"> **Checkbox** (default: unchecked) Adds a decorative horizontal line element to the Main area for visual accent. </Accordion> <Accordion title="Image" icon="image"> **Image picker** — Background image for Main area * **Recommended sizes**: * Full-width layout: 2880x1400px * 50/50 layout: 1440x1400px * 70/30 layout: 2000x1400px * Serves as background for Main area * Overlay opacity controls darkness **Mobile image** (optional) * **Recommended sizes**: * Full-width: 720x1500px * 50/50: 720x760px * 70/30: 720x1000px * Optimized for vertical mobile display * If empty, desktop image is used <Tip>Always upload mobile images for portrait-oriented displays that showcase your content better on phones.</Tip> </Accordion> <Accordion title="External video" icon="video"> **Video URL field** — Embed YouTube or Vimeo video as Main background * Accepts: YouTube and Vimeo URLs * Recommended aspect ratio: 16:9 * Replaces image when provided * Videos loop automatically and are muted Use for brand videos, product demos, or lifestyle content that adds motion to your hero. </Accordion> <Accordion title="Video" icon="file-video"> **Video file upload** — Upload video file as Main background * Upload video directly (MP4 recommended) * Recommended aspect ratio: 16:9 * Replaces image when provided * Videos loop automatically Use self-hosted videos for full control over quality and performance. </Accordion> <Accordion title="Enable plain background" icon="square"> **Checkbox** (default: unchecked) Replaces all media (images/videos) with a solid color background from your theme colors. * Checked: Uses plain\_background\_color setting * Unchecked: Uses image/video Useful for text-heavy hero banners, minimalist designs, or when image/video isn't needed. **Plain background color** — Dropdown (default: Alternative) * **Main**: Primary theme color * **Accent**: Accent theme color * **Alternative**: Alternative theme color Only applies when "Enable plain background" is checked. </Accordion> <Accordion title="Heading" icon="heading"> **Textarea** (default: "Highlight an\nimage banner") Main heading text for the hero banner. Supports line breaks (press Enter for multi-line). Keep concise (1-2 lines) for maximum impact and readability over images. </Accordion> <Accordion title="Link text & URL" icon="link"> **Link text** (text, default: "Shop all") * CTA button/link text **Link URL** (URL, default: /collections) * Destination for the CTA Common destinations: collection pages, new arrivals, sale pages, product pages. </Accordion> <Accordion title="Enable image to be clickable" icon="hand-pointer"> **Checkbox** (default: unchecked) Makes the entire Main area image/video clickable using the Link URL. * Checked: Clicking anywhere on Main background navigates to Link URL * Unchecked: Only the Link text/button is clickable Useful for creating large, tappable hero banners on mobile. </Accordion> <Accordion title="Link type & style" icon="square-check"> **Link type** (dropdown, default: Link) * **Link**: Text link with underline * **Button**: Full button element **Link style** (dropdown, default: Primary) — Only applies when Link type is "Button" * **Primary**: Primary button style from theme * **Secondary**: Secondary button style from theme Use buttons for high-priority CTAs, links for subtle navigation. </Accordion> </AccordionGroup> </Tab> <Tab title="Aside Area"> <AccordionGroup> <Accordion title="Horizontal align content" icon="align-left"> **Dropdown** (default: Center) Positions text horizontally within the Aside area: * **Start** (Left): Left-aligned text * **Center**: Centered text (most common for Aside) * **End** (Right): Right-aligned text Center alignment is typical for Aside as it's usually a secondary, smaller area. </Accordion> <Accordion title="Overlay opacity" icon="droplet"> **Range slider** — 0% to 100% (step: 10%, default: 100%) Controls the darkness of the Aside area overlay (similar to Main overlay opacity). * **0%**: No overlay * **50%**: Moderate overlay * **100%**: Full overlay (default for Aside) Aside typically has heavier overlay (100%) for better text readability in smaller space. </Accordion> <Accordion title="Decoration line" icon="minus"> **Checkbox** (default: unchecked) Adds a decorative horizontal line to the Aside area. </Accordion> <Accordion title="Image" icon="image"> **Image picker** — Background image for Aside area * **Recommended sizes**: * 50/50 layout: 1440x1400px * 70/30 layout: 980x1400px * Serves as background for Aside area **Mobile image** (optional) * **Recommended sizes**: * 50/50: 720x760px * 70/30: 720x420px * Mobile-specific Aside background <Warning>Aside area is **hidden on mobile devices**. Aside images only display on desktop/tablet.</Warning> </Accordion> <Accordion title="Heading & Subheading" icon="text"> **Heading** (textarea, default: "Image banner") * Main heading for Aside area * Keep shorter than Main heading **Subheading** (textarea, default: "Give customers details...") * Supporting text for Aside area * Provides context or additional details </Accordion> <Accordion title="Link text & URL" icon="link"> **Link text** (text, default: "Shop all") * CTA text for Aside area **Link URL** (URL, default: /collections) * Destination for Aside CTA Can link to different destination than Main area for dual CTAs. </Accordion> <Accordion title="Link type & style" icon="square-check"> **Link type** (dropdown, default: Link) * **Link**: Text link with underline * **Button**: Full button element **Link style** (dropdown, default: Primary) * **Primary**: Primary button style * **Secondary**: Secondary button style Independent from Main area link styling—allows for different button styles per area. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Limit slide count" icon="list-ol"> Use 1-3 hero slides maximum. Too many slides dilute messaging and reduce engagement. One dramatic slide often outperforms carousels. </Card> <Card title="Choose the right layout" icon="table-columns"> Use 70/30 for primary content focus, 50/50 for balanced dual messaging, and Full-width for dramatic single statements. </Card> <Card title="Upload mobile images" icon="mobile"> Always provide mobile-specific images optimized for portrait orientation. Desktop images often crop poorly on mobile. </Card> <Card title="Slow autoplay intervals" icon="clock"> If using autoplay, set interval to 7+ seconds minimum so users can read content. Faster rotation is disorienting. </Card> <Card title="Video best practices" icon="video"> Use short, looping videos (10-15 seconds) that are muted. Keep file sizes under 5MB for performance. </Card> <Card title="Overlay for readability" icon="eye"> Adjust overlay opacity based on image brightness. Dim images need less overlay (20-40%), bright images need more (60-80%). </Card> <Card title="Concise headings" icon="text-size"> Keep hero headings to 1-2 lines maximum. Shorter text has more visual impact and is more readable over images. </Card> <Card title="Aside area on mobile" icon="mobile-screen"> Remember: Aside area is hidden on mobile. Ensure Main area alone communicates your key message effectively. </Card> </CardGroup> ## Common use cases **Homepage hero** — Single fullwidth slide with dramatic imagery and primary CTA to drive visitors into your store **Campaign promotion** — 70/30 layout with large product image on Main side and promotional text + CTA on Aside **Product launches** — Carousel with 2-3 slides showcasing different features or colorways of a new product **Seasonal campaigns** — 50/50 split with seasonal imagery on one side and promotional messaging on the other **Video storytelling** — Fullwidth layout with brand video background and overlaid heading/CTA **Dual promotions** — 50/50 layout featuring two different collections or categories with separate CTAs, to promote multiple offerings simultaneously ## Layout behavior **Desktop/Tablet**: * **70/30**: Main takes 70% width, Aside takes 30% * **50/50**: Equal 50/50 split * **Full-width**: Main spans 100%, Aside hidden * Flip setting reverses Main/Aside positions **Mobile** (all layouts): * Main area displays at 100% width * **Aside area is completely hidden** * Main image mobile-specific if provided, otherwise desktop image used * Content stacks vertically below hero image **Carousel navigation**: * Arrows appear on left/right edges (if enabled) * Dots/indicators appear at bottom center * Autoplay rotates slides automatically (if enabled) ## Layout comparison | Layout | Main Width | Aside Width | Best For | Mobile Behavior | | -------------- | ---------- | ----------- | --------------------------------- | ---------------- | | **70/30** | 70% | 30% | Primary focus + secondary callout | Main only (100%) | | **50/50** | 50% | 50% | Balanced dual messaging | Main only (100%) | | **Full-width** | 100% | Hidden | Single dramatic statement | Main only (100%) | ## Media priority When multiple media types are configured for Main or Aside, they're applied in this priority order: 1. **Plain background** (if enabled) — overrides all media 2. **Video file** (if uploaded) — overrides external video and images 3. **External video** (if provided) — overrides images 4. **Image** (if uploaded) — fallback media type ## Related sections * **Featured Collection** — Split-screen section featuring collection with products * **Images with Text** — Editorial content sections with image/text combinations * **Banner Fullwidth** — Simpler fullwidth banner without carousel capabilities # Images with Text Source: https://docs.digifist.com/themes/mojave/sections/images-with-text Create editorial-style content sections with flexible layouts combining images, text, product cards, and interactive product dots ## What this section does The **Images with text** section creates sophisticated, magazine-style layouts that combine: * Two media areas (Primary and Secondary) with images or product cards * Text content with heading, body text, button, and link * Interactive **product dots** that overlay on images (up to 3 per image) * Two layout styles: **Columns** (side-by-side) or **Rows** (stacked) * Fullwidth or contained layouts This versatile section is perfect for brand storytelling, lookbook-style presentations, category introductions, or any content that benefits from visual+text combinations. <Frame> <img alt="Images with Text Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Images with text** </Step> <Step title="Upload images"> Add images to **Primary media** and **Secondary media** areas (1200x1370px recommended) </Step> <Step title="Add text content"> Fill in heading, content text, button/link, and choose your layout style (Columns or Rows) </Step> <Step title="Optional: Add product dots"> Enable product dots, then add **Primary product dot** or **Secondary product dot** blocks to create interactive hotspots on your images </Step> </Steps> ## Section settings <Tabs> <Tab title="Layout"> <AccordionGroup> <Accordion title="Enable fullwidth" icon="maximize"> **Checkbox** (default: unchecked) Controls section container width: * Unchecked: Section contained within standard page width * Checked: Section spans full browser width (edge-to-edge) Fullwidth creates more dramatic, immersive presentations. </Accordion> <Accordion title="Flip columns left/right" icon="right-left"> **Checkbox** (default: unchecked) Reverses the order of media and text content: * Unchecked: Default arrangement * Checked: Flipped arrangement Use to create visual variety when stacking multiple sections. </Accordion> <Accordion title="Style" icon="table-columns"> **Dropdown** (default: Columns) Controls the layout structure: * **Columns**: Media and text side-by-side (desktop) * **Rows**: Media and text stacked vertically **Columns** is most common for split-screen editorial layouts. **Rows** works for sequential storytelling. </Accordion> <Accordion title="Spacing - Desktop & Mobile" icon="arrows-up-down"> **Desktop** (default: Default) and **Mobile** (default: Compact) Controls vertical spacing above and below the section: * **Default**: Standard spacing * **Medium**: Moderate spacing * **Compact**: Minimal spacing * **None**: No spacing </Accordion> </AccordionGroup> </Tab> <Tab title="Text Content"> <AccordionGroup> <Accordion title="Heading" icon="heading"> **Textarea** (default: "Images with text") Main heading for the section. Keep concise (3-7 words) for maximum impact. </Accordion> <Accordion title="Content" icon="align-left"> **Textarea** (default: "Pair text with an image to focus on your chosen product, collection, or blog post...") Body text that provides details, descriptions, or storytelling. Can be multiple paragraphs. </Accordion> <Accordion title="Button label & URL" icon="square-check"> **Button label** (text, default: "Shop all") * Primary CTA text displayed as button **Button URL** (URL, default: /collections) * Destination for the button Buttons create prominent CTAs. Leave empty if not needed. </Accordion> <Accordion title="Link text & URL" icon="link"> **Link text** (text, default: "Shop all") * Secondary CTA text displayed as text link **Link URL** (URL, default: /collections) * Destination for the text link Links provide subtle, secondary navigation. Can be used with or without button. </Accordion> </AccordionGroup> </Tab> <Tab title="Media"> <AccordionGroup> <Accordion title="Primary media - Image" icon="image"> **Image picker** — Upload primary image * Recommended size: 1200x1370px * Typically the larger or more prominent image in thelayout **Image link URL** (optional) * Makes the entire primary image clickable * Links to specified URL when image is clicked </Accordion> <Accordion title="Secondary media - Image" icon="image"> **Image picker** — Upload secondary image * Recommended size: 1200x1370px * Typically the smaller or secondary image in the layout **Image link URL** (optional) * Makes the entire secondary image clickable **Enable border effect for image** — Checkbox (default: checked) * Adds decorative border effect to secondary image only * Info: "This setting apply only on secondary media" </Accordion> <Accordion title="Enable product dots" icon="location-dot"> **Checkbox** (default: unchecked) Enables interactive product hotspot dots that overlay on images: * When checked: Product dot blocks can be added (see Block types) * When unchecked: Product dot blocks are hidden * Info: "These settings apply on both media" Product dots create "shop the look" style interactive images where customers can click on products within lifestyle imagery. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block types ### Primary product dot **Limit: 3 blocks** <AccordionGroup> <Accordion title="Product" icon="bag-shopping"> **Product picker** — Select product to display in hotspot When clicked, displays a quick view popup of the selected product. </Accordion> <Accordion title="Position X" icon="arrows-left-right"> **Range slider** — 0% to 100% (default: 25%) Horizontal position of the dot on the **primary image**: * 0% = Far left edge * 50% = Center * 100% = Far right edge </Accordion> <Accordion title="Position Y" icon="arrows-up-down"> **Range slider** — 0% to 100% (default: 25%) Vertical position of the dot on the **primary image**: * 0% = Top edge * 50% = Middle * 100% = Bottom edge </Accordion> </AccordionGroup> **Add up to 3 primary product dots** to place multiple products on the primary image. ### Secondary product dot **Limit: 3 blocks** Identical to Primary product dot, but places hotspots on the **secondary image** instead. <AccordionGroup> <Accordion title="Product, Position X, Position Y" icon="location-dot"> Same configuration as Primary product dot, but applied to the secondary image. </Accordion> </AccordionGroup> **Add up to 3 secondary product dots** to place multiple products on the secondary image. ## Best practices <CardGroup> <Card title="Columns for split-screen" icon="table-columns"> Use Columns style for classic split-screen editorial layouts with images on one side, text on other. Most versatile option. </Card> <Card title="Rows for storytelling" icon="bars-staggered"> Use Rows style when you want sequential, stacked presentation—ideal for step-by-step narratives or vertically-focused designs. </Card> <Card title="Product dots sparingly" icon="location-dot"> Use 1-2 product dots per image maximum. Too many dots create visual clutter and decision paralysis. </Card> <Card title="High-quality images" icon="image"> Upload images at 1200x1370px for sharp display. Use lifestyle photography that tells a story and shows products in context. </Card> <Card title="Flip for variety" icon="right-left"> When stacking multiple sections, alternate flip setting to create flowing, magazine-style layouts that prevent monotony. </Card> <Card title="Border on secondary" icon="border-all"> The border effect only applies to secondary images—use it to differentiate or highlight that image within the layout. </Card> <Card title="Button vs link strategy" icon="link"> Use button for primary CTA, text link for secondary navigation. Or use just one based on hierarchy needs. </Card> <Card title="Fullwidth for drama" icon="maximize"> Enable fullwidth for showcase-style sections that should dominate the page. Disable for sections within broader content flows. </Card> </CardGroup> ## Common use cases **Lookbook/Shop the look** — Enable product dots on lifestyle images to create interactive "shop the look" sections where customers click dots to view products **Brand storytelling** — Use columns layout with brand imagery and text to tell your brand story, mission, or values **Category introduction** — Place at top of collection pages with category imagery and descriptive text **Feature highlights** — Showcase product features or benefits with supporting imagery in rows layout **Editorial content** — Create magazine-style content sections with high-quality photography and formatted text **Product comparisons** — Use two images side-by-side with text comparing products or highlighting differences ## Layout behavior **Desktop - Columns style**: * Media and text arranged side-by-side * Flip setting controls which side each appears on * Primary and secondary media can be images or product cards **Desktop - Rows style**: * All content stacks vertically * Media, then text, in sequential order * Flip may affect stacking order **Mobile (all styles)**: * Always stacks vertically * Typically: Primary media → Secondary media → Text content * Flip setting may not affect mobile layout **Product dots**: * Clickable hotspots overlaid on images * Show product quickview popup on click or hover * Position controlled by X/Y percentage values * Up to 6 total dots (3 primary + 3 secondary) ## Product dots feature The **product dots** feature creates interactive "shop the look" style sections: 1. **Enable product dots** in section settings 2. Add **Primary product dot** blocks for dots on primary image (max 3) 3. Add **Secondary product dot** blocks for dots on secondary image (max 3) 4. For each dot: * Select a product * Set X position (horizontal: 0-100%) * Set Y position (vertical: 0-100%) 5. Dots appear as clickable hotspots on images 6. Clicking dot shows product quick view popup **Best for**: Lifestyle imagery where products are visible in context (e.g., styled room, model wearing outfit, table setting with products). ## Related sections * **Featured Collection** — Similar split-screen layout for collection promotion * **Hero** — Dramatic banners with background images and text overlays * **Multi Column Text** — Text-focused content in multiple columns * **Banner Fullwidth** — Simpler fullwidth promotional banners # Collection Banner Source: https://docs.digifist.com/themes/mojave/sections/main-collection-banner Hero banner for collection pages with image, description, and sub-collection navigation menu ## What It Does The **Collection Banner** section displays at the top of collection pages (PLP), showcasing the collection's featured image, title, description, and optional sub-collections navigation menu. This banner provides context and visual appeal to your collection pages while helping customers navigate between related collections. Content auto-populates from your Collection settings in Shopify Admin (image, title, description), with customization options for background color, image display, overlay transparency, and sub-collection menu styles (text links, square thumbnails, or rounded thumbnails). <Note> This is a **template section** (appears on PLP - Collection pages only). Not available as a regular section on other pages. Configure in Theme Customizer → Collection page template. </Note> ## Getting Started <Steps> <Step title="Add Collection Content in Admin"> Go to Shopify Admin → Products → Collections → Select collection → Add description and featured image. This content auto-displays in banner. </Step> <Step title="Configure Banner Display"> In Theme Customizer (Collection page template), choose background color, enable/disable description and image display. </Step> <Step title="Set Up Sub-Collections Menu (Optional)"> Create a navigation menu in Admin (Online Store → Navigation) with links to sub-collections, then select it in "Collections menu" setting. </Step> <Step title="Customize Menu Style"> Choose menu display: text links, square thumbnails, or rounded thumbnails. Add menu item blocks for custom thumbnail images. </Step> </Steps> ## Settings <Tabs> <Tab title="Section Settings"> <AccordionGroup> <Accordion title="Background Color" icon="fill-drip"> **Type:** Select dropdown\ **Options:** White, Black, Main\ **Default:** White Controls the background color of the collection banner section. ### Color Options **White (Default):** * Clean, professional, high readability * Best for: Most collections, light/airy aesthetic * Text: Dark text automatically applied for contrast * Image: Looks best with colorful/vibrant collection images **Black:** * Bold, dramatic, premium feel * Best for: Luxury collections, fashion, dark-themed stores * Text: Light/white text automatically applied * Image: Works well with high-contrast or light-toned images **Main:** * Uses your theme's primary brand color * Best for: Strong brand identity, unique aesthetic * Text: Adjusts automatically based on color brightness * **Note:** "Main" color set in theme settings (globally) ### Choosing Background Color **White when:** * Collection image has dark/bold elements (provides contrast) * Store aesthetic is minimal, clean, Scandinavian * High readability is priority **Black when:** * Store brand is luxury, premium, edgy * Collection image is light-toned (provides contrast) * Want dramatic, fashion-forward aesthetic **Main when:** * Strong brand color identity (e.g., Tiffany blue, Coca-Cola red) * Want consistent brand color across all collection banners * Collection images are neutral (brand color pops) **Tip:** Test background color with actual collection image in Theme Customizer preview. </Accordion> <Accordion title="Show Collection Description" icon="align-left"> **Type:** Checkbox\ **Default:** Enabled (checked) Controls whether the collection description (from Shopify Admin) displays in the banner. ### When Enabled (Default) * Description appears below collection title in banner * Content pulls from Collection → Description field in Shopify Admin * Supports rich text formatting (paragraphs, bold, italic, links) * Helps SEO (descriptive content indexed by search engines) ### When Disabled * Description hidden (cleaner, more minimal banner) * Only title and image display * Useful when descriptions are empty, very long, or redundant ### Use Cases **Enable when:** * Collections have valuable descriptions (category overview, styling tips, buying guides) * SEO is priority (descriptive content helps rankings) * Customers benefit from context (e.g., "Sustainable Materials Collection - All products eco-certified") * Descriptions are 1-3 sentences (concise, scannable) **Disable when:** * Descriptions are missing/empty in Admin (avoid blank space) * Descriptions are very long (clutters banner, distracts from products) * Minimal aesthetic preferred (image + title only) * Collection title is self-explanatory (e.g., "Women's Shoes" needs no extra description) ### Best Practices **If enabled:** * Keep descriptions 1-3 sentences (30-60 words ideal) * Focus on benefits/category overview ("Discover handcrafted jewelry made with recycled metals") * Avoid repeating title ("Jewelry Collection" title + "Shop our jewelry collection" description = redundant) * Use Admin's rich text editor for formatting (bold key phrases, add links if needed) **Managing descriptions in Admin:** 1. Products → Collections → Select collection → Description field 2. Write 1-3 sentence overview 3. Save → Preview on storefront **Recommendation:** Enable for curated/seasonal collections with meaningful descriptions, disable for utility collections (Sale, New Arrivals) unless you add context. </Accordion> <Accordion title="Show Collection Image" icon="image"> **Type:** Checkbox\ **Default:** Enabled (checked)\ **Info:** "For best results, use an image with a 16:9 aspect ratio. [Learn more](https://help.shopify.com/en/manual/shopify-admin/productivity-tools/image-editor#understanding-image-aspect-ratio)" Controls whether the collection's featured image (from Shopify Admin) displays in the banner. ### When Enabled (Default) * Featured image appears as hero background in banner * Content pulls from Collection → Image field in Shopify Admin * Creates visual interest and brand storytelling * Helps customers quickly identify collection type **Image specifications:** * **Recommended size:** 1920x1080px (16:9 aspect ratio) * **File format:** JPG (photos), PNG (graphics with transparency) * **File size:** Under 500KB (compress for fast loading) * **Content:** Lifestyle, products in use, category-defining imagery ### When Disabled * No background image (solid background color only) * Simpler, faster-loading banner * Focus shifts entirely to title + description text * Useful when images are missing or low-quality ### Use Cases **Enable when:** * Collections have high-quality featured images in Admin * Visual storytelling enhances category (e.g., outdoor gear collection with mountain landscape) * Brand aesthetic is image-heavy, editorial * Want to differentiate collections visually (Summer vs Winter) **Disable when:** * Featured images missing/empty in Admin (avoid broken image placeholders) * Images are low-quality, inconsistent, or off-brand * Fast page load is critical priority * Minimal, text-focused aesthetic preferred * All collections use same generic image (no differentiation value) ### Image Position Setting After enabling, use "Image Position" setting to control vertical alignment: * **Top:** Shows top portion of image (use for images with important content at top) * **Center (Default):** Shows middle of image (best for balanced compositions) * **Bottom:** Shows bottom portion (use for images with ground/products at bottom) ### Best Practices **Image selection:** * Use **lifestyle images** (products in use, not white background product shots) * Show collection theme (e.g., "Beach Collection" with ocean/sand imagery) * Keep subjects centered vertically (works with Center position) * Avoid busy images (text becomes hard to read over complex backgrounds) * Consider image overlay opacity (use 40-60% overlay for better text readability) **Managing images in Admin:** 1. Products → Collections → Select collection → Featured image 2. Upload 1920x1080px image (16:9 ratio) 3. Use Shopify image editor to crop/adjust if needed 4. Save → Preview on storefront **Common mistake:** Using product photos as collection images. Product photos are for products, lifestyle/category images are for collections. **Recommendation:** Enable with high-quality lifestyle images at 16:9 ratio, or disable and use solid background color if images aren't ready. </Accordion> <Accordion title="Image Position" icon="up-down-left-right"> **Type:** Select dropdown\ **Options:** Top, Center, Bottom\ **Default:** Center Controls which portion of the collection image is visible in the banner (vertical alignment). ### How It Works Collection images are often taller than banner height (banner may be 400-600px tall, image is 1080px tall). This setting controls which part of the image displays. **Top:** * Shows top \~50-60% of image * Bottom portion cropped out of view **Center (Default):** * Shows middle \~50-60% of image * Top and bottom portions cropped equally **Bottom:** * Shows bottom \~50-60% of image * Top portion cropped out of view ### Choosing Position **Top when:** * Important content is at top of image (skyline, person's face, product at top) * Example: Image of person wearing hat (face is at top, needs to be visible) **Center when:** * Image is balanced/symmetrical (subject centered vertically) * Most images work well centered * Example: Product shot of shoes centered on neutral background **Bottom when:** * Important content is at bottom (products on table, ground-level subjects) * Example: Image of products on beach sand (products at bottom, sky at top can be cropped) ### Testing Your Images 1. Upload collection image in Admin (16:9 ratio) 2. Preview collection page in Theme Customizer 3. Try each position (Top/Center/Bottom) 4. Choose position that shows most important content **Tip:** If you're cropping out critical content at any position, your image may have wrong aspect ratio. Re-crop to 16:9 in Admin. **Recommendation:** Start with Center (default), adjust to Top or Bottom only if critical content is being cropped. </Accordion> <Accordion title="Image Overlay Transparency" icon="droplet"> **Type:** Range slider\ **Range:** 0-100% (step: 5%)\ **Default:** 50% Controls opacity of dark overlay placed over collection image to improve text readability. ### How Overlay Works A semi-transparent black layer sits between image and text: * **0%:** No overlay (image fully visible, text directly on image) * **50% (Default):** Half-transparent overlay (balanced visibility) * **100%:** Fully opaque overlay (image completely darkened, only text visible) ### Choosing Overlay Opacity **Low opacity (0-30%):** * **Pro:** Image remains vibrant and visible * **Con:** Text may be hard to read if image is light/busy * **Best for:** Dark images (already provide contrast for white text) * **Example:** 20% overlay on image of dark forest (text remains readable) **Medium opacity (40-60%):** ← **Default: 50%** * **Pro:** Balanced—image visible, text readable * **Con:** May slightly mute image colors * **Best for:** Most images, general purpose * **Example:** 50% overlay on medium-brightness beach scene **High opacity (70-100%):** * **Pro:** Maximum text readability * **Con:** Image becomes very dark, loses visual impact * **Best for:** Very bright/light images, when text legibility is critical * **Example:** 80% overlay on white/snowy image ### Testing Process 1. Upload collection image 2. Set overlay to 50% (starting point) 3. Preview banner → Check title/description readability 4. **If text hard to read:** Increase opacity (60%, 70%, etc.) 5. **If image too dark:** Decrease opacity (40%, 30%, etc.) ### Best Practices **Dark images:** Use 0-30% overlay (already dark enough for contrast) **Medium images:** Use 40-60% overlay (most common) **Light images:** Use 60-80% overlay (need darkening for text contrast) **Very light images (white, bright):** Use 70-100% overlay or disable image entirely **Alternative:** If you consistently need 70%+ overlay (making images very dark), consider editing images to be darker in Shopify Admin image editor instead. **Recommendation:** Start with 50%, adjust up or down based on specific image brightness and text readability. </Accordion> <Accordion title="Collections Menu" icon="bars"> **Type:** Link list (navigation menu picker)\ **Optional:** Leave empty to hide menu\ **Info:** "Add a collection menu by including [navigation](https://help.shopify.com/en/manual/online-store/menus-and-links/editing-menus), whose first level links names match any of your shop's collections." Displays a navigation menu for sub-collections or related collections below the banner. ### How It Works **Create a menu in Shopify Admin:** 1. Online Store → Navigation → Add menu 2. Name it (e.g., "Apparel Sub-Collections") 3. Add links to collections 4. **Important:** Link names must exactly match collection titles **Example menu structure:** ``` Apparel Sub-Collections (Menu name) ├── Shirts (Link to "Shirts" collection) ├── Pants (Link to "Pants" collection) ├── Outerwear (Link to "Outerwear" collection) └── Accessories (Link to "Accessories" collection) ``` **Select menu in banner settings:** * Choose "Apparel Sub-Collections" menu * Menu displays below collection title/description * Customers can navigate between related collections ### When to Use **Use Collections Menu when:** * Parent collection has logical sub-categories (e.g., "Clothing" → Tops, Bottoms, Dresses) * You want customers to browse related collections easily * Creating collection "hubs" (e.g., "Men's" collection with Shirts/Pants/Shoes menu) * Store has deep collection hierarchy **Don't use when:** * Collection is leaf-level (no sub-collections) * Only 1-2 related collections (add manual links in description instead) * Menu would be confusing (unrelated collections) ### Menu Styles After selecting menu, choose display style: **Links (Text only):** * Plain text links in horizontal row * Fast loading, minimal design * Best for: Many sub-collections (6+), text-focused aesthetic **Thumbnails - Squared:** * Square image thumbnails with collection name * Visual browsing experience * Best for: 3-6 sub-collections, visual brands **Thumbnails - Rounded:** * Circular image thumbnails with collection name * Modern, friendly aesthetic * Best for: 3-5 sub-collections, lifestyle brands ### Adding Thumbnail Images **Default behavior:** * Thumbnails auto-use collection featured images from Admin **Custom thumbnails (per sub-collection):** 1. Add "Menu Item" block in section 2. Enter title (must match collection name exactly) 3. Upload custom thumbnail image 4. Image overrides collection featured image for this menu **Example:** * "Shirts" collection has detailed product grid image (not ideal for small thumbnail) * Add Menu Item block: Title = "Shirts", upload icon-style image * Menu uses custom icon instead of full featured image ### Best Practices **Menu structure:** * Keep menu items 3-6 (too many overwhelms, too few redundant) * Use parallel naming ("Men's Shirts," "Men's Pants," "Men's Shoes" not "Shirts," "Bottoms," "Footwear for Men") * Logical grouping (all items same hierarchy level) **Link names must match collections:** * If collection is "T-Shirts," menu link must say "T-Shirts" (exact match) * Capitalization usually matters * Test in preview—if menu item doesn't link, check spelling **Thumbnail images:** * Use **square** images for squared thumbnails (500x500px) * Use **square** images for rounded thumbnails (they're cropped to circle) * Icon-style images work better than detailed photos * Keep consistent style across all thumbnails **Recommendation:** Use for parent collections with clear sub-categories (e.g., "Apparel" → Tops/Bottoms/Dresses). Skip for standalone collections. </Accordion> <Accordion title="Collections Menu Style" icon="palette"> **Type:** Select dropdown\ **Options:** Links, Thumbnails - Squared, Thumbnails - Rounded\ **Default:** Thumbnails - Rounded Controls visual presentation of the collections menu (if menu selected above). ### Links (Text Only) **Appearance:** * Horizontal list of text links * Minimal design (button/underline styling) * No images, fastest loading **Best for:** * Many sub-collections (7+)—thumbnails would create long row * Text-focused, minimal aesthetic * Fast page load priority * Desktop-heavy traffic (text nav more clickable on desktop) **Example use:** * Parent "Home Decor" collection with 8 sub-collections (Living Room, Bedroom, Kitchen, Bath, Lighting, Rugs, Wall Art, Outdoor) * Text links more compact than 8 thumbnail squares ### Thumbnails - Squared **Appearance:** * Square image thumbnails (collection featured images) * Collection name below each square * Grid-like, organized presentation **Best for:** * 3-6 sub-collections (more gets crowded) * Visual product categories (fashion, home goods) * When collection images are strong differentiators * Balanced aesthetic (modern but structured) **Example use:** * Parent "Women's Apparel" with 4 sub-collections (Tops, Dresses, Bottoms, Outerwear) * Square thumbnails show category at a glance ### Thumbnails - Rounded (Default) **Appearance:** * Circular image thumbnails (collection featured images cropped to circle) * Collection name below each circle * Soft, friendly, modern presentation **Best for:** * 3-5 sub-collections (circles take more visual space than squares) * Lifestyle brands, beauty, wellness, fashion * When aesthetic is important (rounded feels premium/friendly) * Icon-style imagery (faces, products, simple subjects work well in circles) **Example use:** * Parent "Skincare" with 4 sub-collections (Cleansers, Serums, Moisturizers, Masks) * Rounded thumbnails feel spa-like, approachable ### Choosing Menu Style **Number of items:** * 3-4 items: Any style works (thumbnails preferred for visual interest) * 5-6 items: Squared or Rounded thumbnails (not too crowded yet) * 7+ items: Links (thumbnails create long, scrollable row) **Brand aesthetic:** * **Minimal/text-focused:** Links * **Modern/structured:** Thumbnails - Squared * **Friendly/lifestyle:** Thumbnails - Rounded **Image availability:** * Strong collection images: Thumbnails (use visual assets) * Weak/missing images: Links (avoid exposing poor imagery) **Mobile consideration:** * Thumbnails become horizontal scrolling carousel on mobile (swipe to see all) * Links may wrap to multiple rows (harder to scan) * 3-4 thumbnails ideal for mobile experience **Recommendation:** Use Thumbnails - Rounded (default) for 3-5 visually-distinct sub-collections, switch to Links for 7+ items or text-focused stores. </Accordion> </AccordionGroup> </Tab> <Tab title="Menu Item Blocks"> <AccordionGroup> <Accordion title="Menu Item Block" icon="image"> **Block Type:** Menu item\ **Limit:** Unlimited (typically matches number of menu links) Override collection featured image with custom thumbnail for specific menu items. ### When to Use **Default behavior (no blocks):** * Menu thumbnails auto-use collection featured images from Shopify Admin * Works well if collection images are already optimized for thumbnails **Add Menu Item blocks when:** * Collection featured image is wrong aspect ratio (rectangular image cropped poorly to square/circle) * Featured image too detailed (product grid photo doesn't work as small thumbnail) * Want consistent icon-style menu (all collections use different image styles in Admin) * Featured image missing (add custom placeholder) ### Block Settings **Title** (Text, required) * **Info:** "Menu item title must match the sub-collection title, from the Collections menu link list." * Enter exact collection name (case-sensitive, spelling must match) * Example: If menu links to "Men's Shirts" collection, title = "Men's Shirts" * **Purpose:** Tells theme which menu item to apply custom image to **Image** (Image picker) * Upload custom thumbnail image * **Recommended size:** 500x500px (square, even for rounded thumbnails—theme crops to circle) * **Style:** Icon-like, simple subject, clear at small size * This image replaces collection featured image for this menu item only ### Example Workflow **Scenario:** "Apparel" collection with sub-collections menu **Menu in Admin:** * Shirts (links to "Shirts" collection) * Pants (links to "Pants" collection) * Outerwear (links to "Outerwear" collection) **Problem:** "Shirts" collection featured image is a wide product grid photo (crops poorly to thumbnail) **Solution:** 1. Add "Menu Item" block 2. Title: "Shirts" (exact match) 3. Image: Upload 500x500px icon of single shirt 4. Save 5. Menu now shows custom shirt icon instead of cropped grid photo 6. Other menu items (Pants, Outerwear) still use featured images from Admin ### Best Practices **Title matching critical:** * Title must **exactly match** collection title * Check capitalization: "shirts" ≠ "Shirts" * Check spacing: "Men's Shirts" ≠ "Men's Shirts" (extra space) * If custom image doesn't appear, verify exact spelling/caps in Admin collection title **Image specifications:** * **Square images only** (500x500px ideal) * Even for rounded thumbnails (theme crops square to circle) * Simple subject (icon-style, not detailed scene) * Consistent style across all custom thumbnails (don't mix photos + illustrations) * Under 100KB file size (thumbnails are small, large files unnecessary) **When to add blocks:** * **Not needed** if featured images work well (already square, simple, consistent) * **Add blocks** for problematic collections only (not all menu items need blocks) * **Or add for all** if creating custom icon set for entire menu **Recommendation:** Only add Menu Item blocks if collection featured images don't work as thumbnails. Most stores can use featured images directly without blocks. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Add Collection Content in Admin" icon="pen-to-square"> Always add collection descriptions and images in Shopify Admin (Products → Collections). Banner auto-populates from this content—editing here updates all collection pages. </Card> <Card title="Use 16:9 Images" icon="crop"> Upload collection images at 1920x1080px (16:9 ratio) for best results. Other aspect ratios crop awkwardly and may cut off important content. </Card> <Card title="Adjust Overlay for Readability" icon="eye"> Start with 50% overlay, increase if text hard to read on bright images, decrease if image too dark. Text legibility is priority over image vibrancy. </Card> <Card title="Keep Menus Focused" icon="list"> Limit sub-collection menus to 3-6 items for scannability. Too many creates decision paralysis. Group related collections logically. </Card> <Card title="Match Menu Link Names to Collections" icon="link"> Menu links must exactly match collection titles for auto-linking to work. Check capitalization and spelling—"Mens Shirts" ≠ "Men's Shirts". </Card> <Card title="Consistent Thumbnail Style" icon="images"> If using thumbnails, ensure all images have consistent style (all photos or all icons, similar composition). Mismatched styles look unprofessional. </Card> <Card title="Test on Mobile" icon="mobile"> Preview collection banner on mobile—image crops differently, menu becomes carousel. Ensure key content visible and menu swipeable. </Card> <Card title="Concise Descriptions" icon="align-left"> Keep collection descriptions 1-3 sentences (30-60 words). Banners are for overview, not detailed content. Save longer copy for page sections below. </Card> </CardGroup> ## Common Use Cases ### Visual Fashion Collection **Settings:** Show image ON, Overlay 40%, Background White, Menu Thumbnails - Rounded **Setup:** "Women's Apparel" collection with lifestyle image (model wearing items), description enabled ("Discover timeless styles..."), menu with sub-collections (Tops, Dresses, Bottoms) **Best for:** Fashion, apparel, accessories with strong photography ### Minimal Product Category **Settings:** Show image OFF, Background Black, Description ON, Menu Links (text only) **Setup:** "Electronics" collection, no image (solid black background), short description ("Shop the latest tech"), menu with 8 sub-collections as text links **Best for:** Tech, electronics, industrial products where imagery less critical ### Seasonal Sale Banner **Settings:** Show image ON, Overlay 60%, Background Main (red), Menu OFF **Setup:** "Summer Sale" collection with bright beach image (high overlay for text readability), large banner with "Up to 50% off" description, no sub-menu (direct to products) **Best for:** Sale collections, promotional categories, seasonal events ### Luxury Category Hub **Settings:** Show image ON, Overlay 70%, Background Black, Menu Thumbnails - Squared **Setup:** "Designer Handbags" collection with elegant product image, minimal description, menu with 4 designer sub-collections (squared thumbnails for structured look) **Best for:** Luxury goods, premium brands, high-end fashion ### Sustainable Product Line **Settings:** Show image ON, Overlay 45%, Background White, Description ON, Menu Thumbnails - Rounded **Setup:** "Eco-Friendly Collection" with nature imagery, detailed description about sustainability practices, rounded thumbnail menu for soft/natural feel **Best for:** Eco brands, natural products, wellness, organic goods ## Layout Behavior ### Desktop Layout **With Image Enabled:** * Collection image spans full width as background * Title and description centered over image (with overlay) * Menu displays below title/description area * Height: \~400-600px (varies by theme, content length) **Without Image:** * Solid background color * Title and description on background * More compact height (\~200-300px) ### Mobile Layout **Image:** * Full-width background (entire mobile width) * Often taller on mobile (more vertical space for title/description) * Image crops to fill screen width **Menu:** * Text links: May wrap to multiple rows * Thumbnails: Horizontal swipeable carousel (swipe left/right) ### Menu Thumbnail Sizes **Links (text only):** * Just text, no images * Button or plain text styling **Squared thumbnails:** * Desktop: \~150-200px squares * Mobile: \~120px squares (in carousel) **Rounded thumbnails:** * Desktop: \~150-200px circles * Mobile: \~120px circles (in carousel) ## Related Sections * **[Featured Collection](/themes/mojave/featured-collection)** - Showcase specific collection products on homepage * **[Featured Collections Links](/themes/mojave/featured-collections-links)** - Collection grid for homepage * **[Collection Product Grid (Template)](/themes/mojave/collections/collection-page)** - Products display below banner on PLP * **[Hero](/themes/mojave/hero)** - Similar hero banner for homepage ## Technical Notes ### Content Auto-Population Banner content sources: * **Title:** Collection title from Admin (e.g., "Summer Collection") * **Description:** Collection description field in Admin (rich text supported) * **Image:** Collection featured image in Admin **Editing:** Products → Collections → Select collection → Edit title/description/image → Save **Theme displays:** Changes in Admin instantly reflect on storefront (no theme editing needed) ### Menu Link Matching Logic Theme matches menu links to collections by **exact title match**: **Example:** * Menu link text: "Men's Shirts" * Collection title in Admin: "Men's Shirts" * Result: Link works, navigates to collection **Mismatch scenarios (all fail):** * Menu link: "Men's Shirts" vs Collection: "Mens Shirts" (apostrophe missing) * Menu link: "Men's Shirts" vs Collection: "men's shirts" (capitalization different) * Menu link: "Men's Shirts " vs Collection: "Men's Shirts" (trailing space) **Troubleshooting:** If menu links don't navigate, check Admin collection titles vs menu link text character-by-character. ### Image Overlay Implementation **CSS overlay:** ```css theme={null} background: rgba(0, 0, 0, 0.5); /* 50% black overlay */ ``` **Transparency values:** * 0% = `rgba(0, 0, 0, 0)` (no overlay) * 50% = `rgba(0, 0, 0, 0.5)` (default) * 100% = `rgba(0, 0, 0, 1)` (fully opaque black) **Text color:** Automatically white when overlay present (for contrast) ### SEO Implications **Collection descriptions:** * Indexed by search engines * Contributes to collection page SEO * Use keywords naturally (e.g., "Shop organic cotton t-shirts...") **Image alt text:** * Collection featured images use collection title as alt text automatically * Improves image search rankings * Accessibility benefit for screen readers ### Performance **Image loading:** * Collection images lazy load below fold (if banner not first section) * Recommended: Compress to under 500KB before upload * Shopify CDN auto-serves WebP format (faster) to supported browsers **Menu thumbnails:** * Lazy load (don't render until visible) * Shopify auto-resizes to actual display dimensions (\~200px) * Minimal performance impact even with 6 thumbnails ## Troubleshooting **Banner not showing on collection page:** * Verify section is enabled in Theme Customizer → Collection template * Check if collection has content (title at minimum, even without image/description) * Preview specific collection URL (not homepage) **Collection description/image not displaying:** * Check "Show collection description" / "Show collection image" enabled in settings * Verify content exists in Shopify Admin → Products → Collections → \[Collection name] * Try editing collection in Admin, re-save, refresh storefront **Menu links not working:** * Verify menu selected in "Collections menu" setting * Check menu link names exactly match collection titles in Admin (case-sensitive) * Test menu in Admin (Online Store → Navigation → Open menu → Verify links functional) **Menu thumbnails missing or wrong:** * Verify collections have featured images in Admin * For custom thumbnails: Check "Menu Item" block title exactly matches collection name * Re-upload custom thumbnail image (may have failed to save) * Check browser console for image load errors (broken URL) **Text unreadable over image:** * Increase "Image overlay transparency" (60%, 70%, 80%) * Test with very bright images—may need 80-100% overlay or consider disabling image * Alternative: Edit image in Admin to be darker before uploading **Menu too crowded/scrolling horizontally:** * Reduce number of menu items (remove less important sub-collections) * Switch to "Links" menu style (more compact than thumbnails) * On mobile: Expected behavior (thumbnails carousel, swipe left/right) **Different menu shows on different collections:** * Each collection page can have different menu selected * Edit Collection Banner section while viewing specific collection in Theme Customizer * Menu setting is per-collection-template (not global) **Background color not changing:** * Hard refresh browser (Cmd/Ctrl + Shift + R) after saving * Check if image overlay is 100% (completely covering background color) * "Main" color set in theme settings (not in section)—check Theme settings → Colors **Menu item block not applying custom image:** * Verify block title exactly matches collection title (check Admin for exact capitalization/spacing) * Ensure custom image uploaded (not left blank) * Try deleting and re-adding block * Check that menu includes link to this collection # Marquees Source: https://docs.digifist.com/themes/mojave/sections/marquees Create animated scrolling text banners with optional icons and links, perfect for announcements, trust badges, or promotional messaging ## What this section does The **Marquees** section creates horizontally scrolling text banners with continuous animation, perfect for announcements, trust indicators, or repeated messaging. Features include: * **Unlimited text items** with optional icons and links * **Continuous horizontal scrolling** animation (or static display) * **Adjustable animation speed**: 1-10 (slower to faster) * **Element sizing**: Control text/icon size (1-6 scale) * **Element spacing**: Control distance between items * **Four background colors**: Body, Main, Accent, Alternative * Fullwidth default container (or contained) * Desktop/mobile spacing controls Perfect for announcements, shipping offers, trust badges, brand values, promotional messaging, or any content that benefits from continuous visibility. <Frame> <img alt="Marquees Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Marquees** </Step> <Step title="Add text items"> Click **Add Text item** block. Each block creates one scrolling element. Add 3-8 items for optimal marquee effect. </Step> <Step title="Configure animation"> Enable animation and adjust speed (1-10) and element size/spacing for desired visual impact </Step> <Step title="Optional: Add icons"> Upload icons (images) for each item to create visual interest and brand recognition </Step> </Steps> ## Section settings <Tabs> <Tab title="Animation"> <AccordionGroup> <Accordion title="Enable animation" icon="play"> **Checkbox** (default: checked) Controls whether marquee items scroll horizontally: * Checked: Items scroll continuously from right to left (default) * Unchecked: Items display statically (no animation) **Info**: "Enable to animate the marquees." Disable for static trust badges or features. Enable for announcements and promotional content. </Accordion> <Accordion title="Animation speed" icon="gauge"> **Range**: 1-10 (default: 5) Controls the scrolling speed: * **1**: Fastest scrolling * **5**: Medium speed (default, balanced) * **10**: Slowest scrolling **Info**: "The higher the number, the slower the animation." <Note>Higher numbers = SLOWER animation. Adjust based on text length and readability needs.</Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Desktop Layout"> <AccordionGroup> <Accordion title="Element size" icon="text-size"> **Range**: 1-6 (default: 1) Controls the size of text and icons on desktop/tablet: * **1**: Smallest (default) * **3**: Medium * **6**: Largest **Info**: "Desktop and tablet only. Mobile will be set automatically." Larger sizes create more prominent banners. Smaller sizes work for subtle trust indicators. </Accordion> <Accordion title="Element spacing" icon="arrows-left-right"> **Range**: 0-6 (step: 0.4, default: 4.8) Controls the horizontal distance between marquee items on desktop/tablet: * **0**: No spacing (items touching) * **4.8**: Default spacing * **6**: Maximum spacing **Info**: "Desktop and tablet only." More spacing creates breathing room. Less spacing creates a denser, more continuous effect. </Accordion> </AccordionGroup> </Tab> <Tab title="Layout & Style"> <AccordionGroup> <Accordion title="Background color" icon="palette"> **Dropdown** (default: Body) Section background color: * **Body**: Default body background (default) * **Main**: Primary theme color * **Accent**: Accent theme color * **Alternative**: Alternative theme color Choose contrasting colors for visibility. Accent/Main work well for promotional marquees. Body for subtle trust badges. </Accordion> <Accordion title="Spacing - Desktop & Mobile" icon="arrows-up-down"> **Desktop** (default: Default) and **Mobile** (default: Compact) Vertical spacing above and below the section: * **Default**: Standard spacing * **Medium**: Moderate spacing * **Compact**: Minimal spacing * **None**: No spacing Mobile options: Default, Compact, None. </Accordion> <Accordion title="Spacing - Vertical" icon="arrows-alt-v"> **Dropdown** (default: Default) Controls directional vertical spacing (both desktop and mobile): * **Default**: Spacing both top and bottom (default) * **Top none**: No spacing at top, spacing at bottom * **Bottom none**: No spacing at bottom, spacing at top **Info**: "Use this setting if you do not want any space at the top or bottom. For desktop and mobile." Use to attach marquee flush to adjacent sections (e.g., below header or above footer). </Accordion> <Accordion title="Section width" icon="maximize"> **Dropdown** (default: Fullwidth) Container width for the section: * **Page**: Standard page width * **Narrow**: Medium width * **Fullwidth**: Edge-to-edge (default) Fullwidth (default) creates maximum marquee impact and continuous edge-to-edge scrolling. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block: Text item **Type**: item (unlimited blocks) Each block creates one marquee element with optional icon and link. <AccordionGroup> <Accordion title="Icon" icon="image"> **Image picker** (optional) Custom icon/image displayed before the text: * Use small icons (50x50px to 100x100px recommended) * Common: trust badges, logos, icons, emojis * Scales based on Element size setting Icons add visual interest and brand recognition. Leave blank for text-only marquee items. </Accordion> <Accordion title="Heading" icon="text"> **Text field** (required) The text content for this marquee item. Examples: * "Free Shipping on Orders \$50+" * "Trusted by 10,000+ Customers" * "Made in USA" * "30-Day Money Back Guarantee" Keep concise (3-8 words) for readability during scroll. </Accordion> <Accordion title="Link" icon="link"> **URL field** (optional) Makes the entire marquee item clickable: * Links to collection, product, page, or external URL * Entire item (icon + text) becomes clickable area Use for promotional messaging that drives action (e.g., "Flash Sale - Shop Now" → /collections/sale). </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="3-8 items optimal" icon="list"> Too few items (1-2) creates obvious repetition. 3-8 items creates seamless continuous scrolling without repetitive feel. </Card> <Card title="Consistent item length" icon="equals"> Keep all items similar text length. Mixed short/long creates uneven rhythm and awkward spacing during scrolling. </Card> <Card title="Speed for readability" icon="gauge"> Set speed 4-6 for announcements (readable). Use 1-3 for ambient effects or repeated branding (faster). </Card> <Card title="Icons for recognition" icon="star"> Use icons for trust badges (checkmark, shield) or brand elements. Consistent icon style across all items. </Card> <Card title="Fullwidth for impact" icon="maximize"> Keep default Fullwidth setting. Contained marquees feel cramped and lose the continuous scroll effect. </Card> <Card title="Contrasting backgrounds" icon="palette"> Use Accent or Main background for promotional marquees to stand out. Body for subtle trust indicators. </Card> <Card title="Bottom-none spacing" icon="arrows-down"> Use "Spacing - Vertical: Bottom none" when placing marquee immediately above footer for seamless design. </Card> <Card title="Link strategically" icon="link"> Don't make all items clickable. Reserve links for promotional items that drive specific actions. </Card> </CardGroup> ## Common use cases **Announcement banner** — Below header, fullwidth, Main/Accent background: "Free Shipping Today Only • Flash Sale 50% Off • Limited Time Offer" **Trust indicators** — Above footer, Body background, static (no animation): "100% Secure Checkout • Free Returns • 24/7 Support • Made in USA" **Shipping offers** — Homepage or cart page: "Free Shipping \$50+ • Express Delivery Available • Ships Within 24 Hours" **Brand values** — About page or homepage: "Sustainable Materials • Ethically Made • Carbon Neutral • Give Back Program" **Product features** — PLP/Collection pages: "Waterproof • Lifetime Warranty • Machine Washable • Vegan Leather" **Social proof** — Homepage: "Trusted by 10K+ Customers • 5-Star Rated • Featured in \[Magazine] • Award Winning" ## Layout behavior **Desktop - Animation enabled**: * Items scroll continuously from right to left * Seamless loop (last item connects to first) * Speed controlled by Animation speed setting (1-10) * Items repeat to fill viewport width * Hover: Animation pauses (optional theme behavior) **Desktop - Animation disabled**: * Items display statically in horizontal row * No scrolling or movement * Useful for static trust badges or features **Mobile**: * Same scrolling behavior as desktop * Element size auto-adjusts for mobile (smaller) * Element spacing can differ from desktop * Always fullwidth regardless of Section width setting **Scrolling mechanics**: * Infinite loop: Content duplicates to create seamless scroll * No start/end: Continuous cycle * Consistent speed throughout ## Content guidelines **Heading text**: * 3-8 words ideal for readability * Use action words for promotional content ("Shop Now", "Save Today") * Use trust language for badges ("Guaranteed", "Certified", "Trusted") * ALL CAPS optional for emphasis (use sparingly) * Avoid punctuation except essential symbols (%, \$, +) **Icon selection**: * Small, simple icons (50x50 to 100x100px) * Consistent style across all items (all line icons or all filled) * High contrast with background * SVG format preferred—upload as PNG if needed with transparent background **Item variety**: * Mix related content: "Free Shipping" + "Easy Returns" + "Secure Checkout" * Group thematically: All shipping offers OR all trust badges OR all brand values * Avoid mixing unrelated topics (shipping + social proof + product features) ## Customization tips **For announcement banner (below header)**: * Enable animation, speed 5-6 * Background: Accent (high contrast) * Section width: Fullwidth * Spacing vertical: Top none (flush with header) * Content: Promotional offers with links **For trust indicator bar (above footer)**: * Disable animation (static display) * Background: Body (subtle) * Element size: 2-3 (prominent but not overwhelming) * Small icons (shields, checkmarks, badges) * Content: Security, support, quality guarantees **For product feature tags**: * Enable animation, speed 4 (readable) * Background: Alternative or Accent * Element size: 1-2 (compact) * No icons (text-only) * Content: Product features and benefits **For brand storytelling**: * Enable animation, speed 7-8 (slow, readable) * Background: Main * Element size: 4-5 (large, statement-making) * Brand logo icons * Content: Brand values and mission ## Related sections * **Announcement Bar** (structural) — Header-attached announcement (often above header) * **Rich Text** — Static text content alternative without animation * **Content Tiles** — Grid-based content displays * **Trust Indicators** — Dedicated trust badge section (if available in theme) ## Technical notes **Infinite scroll mechanism**: Marquee duplicates content multiple times to create seamless loop. As items scroll off-screen left, identical items appear from right. **Animation performance**: CSS-based animation for smooth 60fps performance. Hardware accelerated on modern browsers. **Pause on hover**: Theme may include pause-on-hover behavior for accessibility and readability. Users can hover to read content before it scrolls away. **Mobile auto-sizing**: Element size setting only affects desktop/tablet. Mobile automatically scales down to fit screen, typically 50-70% of desktop size. **Accessibility**: Ensure animation speed allows readable content. Consider providing static version or pause control for users with motion sensitivity. Screen readers read content linearly regardless of animation. **Speed calculation**: Speed represents animation duration multiplier. Higher number = longer duration = slower movement. Speed 10 is approximately 10x slower than speed 1. **Item repetition**: Section automatically calculates how many times to duplicate items based on viewport width and animation state. Typically duplicates 2-3 times for seamless infinite effect. # Multi Column Text Source: https://docs.digifist.com/themes/mojave/sections/multi-column-text Organize content into side-by-side columns with three layout styles: List, Columns, and Boxes for editorial layouts and feature highlights ## What this section does The **Multi column text** section organizes content into side-by-side columns, perfect for feature comparisons, benefits, services, or any content that benefits from visual organization. Features include: * **Up to 4 content columns** with independent text and links * **Three layout styles**: List (stacked), Columns (equal-width side-by-side), Boxes (outlined cards) * **Section heading** above all columns * Optional fullwidth container * Individual links per column * Responsive design (stacks on mobile) Perfect for about pages, service descriptions, feature highlights, benefits, or any editorial content that benefits from multi-column organization. <Frame> <img alt="Multi Column Text Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Multi column text** </Step> <Step title="Set section heading"> Add a heading that describes the content (e.g., "Why Choose Us", "Our Services") </Step> <Step title="Choose layout"> Select layout style: List (vertical), Columns (side-by-side), or Boxes (card-style) </Step> <Step title="Add content blocks"> Add 2-4 content blocks. Each becomes one column. Configure heading, text, and optional link per block. </Step> </Steps> ## Section settings <AccordionGroup> <Accordion title="Enable full width" icon="maximize"> **Checkbox** (default: unchecked) Controls section container width: * Unchecked: Section contained within standard page width * Checked: Section spans full browser width (edge-to-edge) Fullwidth provides more horizontal space for columns and creates more visual impact. </Accordion> <Accordion title="Heading" icon="heading"> **Textarea** (optional) Main section heading displayed above all columns. Examples: "Why Shop With Us", "Our Core Services", "What We Offer", "Benefits", "Features" Leave blank for no section heading. </Accordion> <Accordion title="Layout" icon="table-columns"> **Dropdown** (default: List) Controls how columns are displayed: * **List**: Columns stack vertically (one below the other) on all screen sizes * **Columns**: Side-by-side equal-width columns on desktop, stack on mobile * **Boxes**: Card-style layout with borders/backgrounds, side-by-side on desktop **List** is best for sequential content (steps, processes). **Columns** for equal-weight features. **Boxes** for emphasized, distinct features. </Accordion> <Accordion title="Spacing - Desktop & Mobile" icon="arrows-up-down"> **Desktop** (default: Default) and **Mobile** (default: Compact) Controls vertical spacing above and below the section: * **Default**: Standard spacing * **Medium**: Moderate spacing * **Compact**: Minimal spacing * **None**: No spacing Mobile has fewer options (Default, Compact, None). </Accordion> </AccordionGroup> ## Block: Content **Type**: content (limit: 4 blocks) Each block creates one column with heading, text, and optional link. <AccordionGroup> <Accordion title="Heading" icon="heading"> **Text field** (default: "Column") Column title/heading displayed prominently at top of each column. Examples: "Free Shipping", "24/7 Support", "Quality Guaranteed", "Easy Returns" Keep concise (2-4 words) for quick scanning. </Accordion> <Accordion title="Text" icon="align-left"> **Textarea** (default: "Pair text with an image to focus on your chosen product, collection, or blog post. Add details on availability, style, or even provide a review.") Main body text for the column: * Plain text only (no rich text formatting) * 2-4 sentences recommended * Describe feature, benefit, or service Focus on customer benefit ("Ships in 24 hours") rather than feature ("We have fast shipping"). </Accordion> <Accordion title="Link text & URL" icon="link"> **Link text** (text field, optional) * Label for the link (e.g., "Learn more", "View all", "Shop now") **Link URL** (URL field, optional) * Destination for the link Link is only displayed if both Link text and Link URL are provided. Use to direct users to related pages, collections, or policies. </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="2-4 columns optimal" icon="grip-vertical"> 4 is the maximum. Use 3 columns for balanced design, 2 for detailed content, 4 for concise features. Avoid single column (use Rich Text instead). </Card> <Card title="Parallel structure" icon="equals"> Keep all columns similar in length and structure. If one has 3 sentences, all should have \~3 sentences. Creates visual harmony. </Card> <Card title="Boxes for emphasis" icon="border-all"> Use "Boxes" layout for important, distinct features. The card-style design draws more attention than plain columns. </Card> <Card title="List for sequences" icon="list-ol"> Use "List" layout when order matters (steps, processes, timelines). Side-by-side columns imply equal importance. </Card> <Card title="Benefit-focused text" icon="bullseye"> Write about customer benefits, not company features. "Get support 24/7" instead of "We offer 24/7 support". </Card> <Card title="Concise headings" icon="compress"> Column headings should be 2-4 words. They're not sentences. "Free Shipping" not "We Offer Free Shipping". </Card> <Card title="Consistent link usage" icon="link"> Either all columns have links or none do. Inconsistent links create unbalanced design and confuse users. </Card> <Card title="Fullwidth for impact" icon="maximize"> Enable fullwidth for homepage features or hero content. Contained width works better for About pages or supporting content. </Card> </CardGroup> ## Common use cases **Homepage trust indicators** — 3-4 columns highlighting key benefits: Free Shipping, Easy Returns, Secure Checkout, 24/7 Support **About page services** — Company services or specialties with brief descriptions and links to service pages **Product features** — Key product benefits or features on PDP or landing pages (3-4 main selling points) **Process/How it works** — Step-by-step process using List layout (1. Shop, 2. Customize, 3. Deliver, 4. Enjoy) **Support options** — Different support channels or resources (Live Chat, Email, Phone, Help Center) with links **Content categories** — Homepage content navigation (Shop, Collections, About, Blog) with descriptions ## Layout behavior **Desktop - Columns layout**: * 2 blocks: 2 equal-width columns side-by-side * 3 blocks: 3 equal-width columns side-by-side * 4 blocks: 4 equal-width columns side-by-side * Even spacing between columns * Section heading centered above columns (if present) **Desktop - Boxes layout**: * Same column arrangement as Columns * Each column has border/background (card appearance) * More visual separation than Columns layout * Slightly more padding inside each box **Desktop - List layout**: * All columns stack vertically (one below the other) * Full width for each item * Best for sequential/ordered content **Mobile (all layouts)**: * Always stacks vertically (List behavior) * One column takes full width * Order: First block → Second block → Third block → Fourth block * Layout setting only affects desktop display ## Content guidelines **Column heading**: * 2-4 words ideal * Front-load important keywords * Use title case * Examples: "Free Returns", "Quality Assurance", "Expert Support" **Column text**: * 2-4 sentences (40-80 words) * Start with the benefit * Avoid jargon and complexity * Focus on "you" language (customer-centric) * Example: "Get your order in 2-3 business days with free standard shipping. No minimum purchase required." **Links**: * Use descriptive link text: "View shipping policy" not "Click here" * Link to relevant pages: policies, collections, product pages * Consistent link text across columns if possible ("Learn more" for all) ## Customization tips **For trust/credibility (homepage)**: * Layout: Columns or Boxes * 3-4 blocks with icons or emoji in headings (optional) * No links (just pure trust signals) * Heading: "Why Shop With Us", "Our Promise", "Customer Benefits" **For services/about page**: * Layout: Columns * 2-3 blocks with detailed text (4-5 sentences) * Links to dedicated service pages * Heading: "What We Do", "Our Services", "Capabilities" **For process/steps**: * Layout: List * 3-4 blocks numbered in headings ("1. Choose", "2. Customize", "3. Receive") * No links needed * Heading: "How It Works", "Our Process", "Easy as 1-2-3" **For feature comparison**: * Layout: Boxes * 3-4 blocks highlighting distinct features * Link to product pages or feature details * Heading: "Feature Highlights", "What's Included", "Benefits" ## Related sections * **Content Tiles** — Similar multi-column layout with image + text combinations * **Rich Text** — Single-column alternative for non-divided content * **Accordions** — Collapsible alternative for lengthy content in limited space * **Featured Collections Links** — Visual multi-column with collection focus ## Technical notes **4-block limit**: Maximum 4 content blocks allowed. This ensures design integrity across screen sizes. More than 4 creates overcrowding. **Mobile stacking**: All layouts become vertical (List behavior) on mobile regardless of desktop setting. This ensures readability on small screens. **Plain text only**: Text field doesn't support rich text formatting. This maintains visual consistency across columns. Use links for emphasis/navigation. **Responsive columns**: With Columns/Boxes layout, columns automatically adjust width: 2 columns = 50% each, 3 columns = 33% each, 4 columns = 25% each on desktop. # Newsletter Source: https://docs.digifist.com/themes/mojave/sections/newsletter Collect email subscribers with a split-screen newsletter signup section featuring customizable styling, optional image, and integrated email form ## What this section does The **Newsletter sign up** section creates an attractive email collection point with: * Split-screen layout with email form and optional promotional image * Two style variations: light (main style) or dark (accent colors) * Integrated with Shopify's customer email collection system * Customizable heading and rich text content Perfect for homepage footers, landing pages, or anywhere you want to grow your email list. <Frame> <img alt="Hero Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Newsletter sign up** </Step> <Step title="Configure content"> Add your heading (e.g., "Subscribe to our emails") and supporting content explaining the value of subscribing </Step> <Step title="Choose style & layout"> Select Light or Dark style, optionally upload an image, and adjust layout settings (flip, center, spacing) </Step> </Steps> ## Section settings <Tabs> <Tab title="Content & Style"> <AccordionGroup> <Accordion title="Style" icon="palette"> **Dropdown** (default: Main style / Light) Controls the color scheme of the newsletter section: * **Main style** (Light): Uses primary theme colors with light background * **Accent colors** (Dark): Uses accent theme colors with darker background Choose based on surrounding content and brand preference. Dark style creates more contrast and visual separation. </Accordion> <Accordion title="Flip image/content position" icon="right-left"> **Checkbox** (default: unchecked) Reverses positions of form/content and image: * Unchecked: Form on left, image on right * Checked: Image on left, form on right Use flip to create visual variety when stacking multiple split-screen sections. </Accordion> <Accordion title="Center text" icon="align-center"> **Checkbox** (default: unchecked) Centers the heading and content text within the form area: * Unchecked: Left-aligned text (default) * Checked: Center-aligned text Center alignment works well when no image is present or for focused, minimal designs. </Accordion> <Accordion title="Heading" icon="heading"> **Textarea** (default: "Subscribe to our emails") Main heading for the newsletter section. Keep concise and action-oriented (e.g., "Join our list", "Get updates"). </Accordion> <Accordion title="Content" icon="align-left"> **Rich text editor** (default: "Be the first to know about new collections and exclusive offers.") Supporting text that explains the value of subscribing. Can include: * Benefits of subscribing (early access, exclusive offers, etc.) * Frequency of emails * Privacy assurance Use rich text formatting (bold, lists) to highlight key benefits. </Accordion> <Accordion title="Image" icon="image"> **Image picker** (optional) Promotional image displayed beside the email signup form. * Recommended size: 1440x1200px * Use lifestyle imagery, product photos, or brand graphics * If empty, form spans full width (no split-screen) **Image Height** — Range slider: 50-100% (default: 100%) * Controls height of image relative to section height * 100% = image fills full section height * Lower values create shorter images </Accordion> </AccordionGroup> </Tab> <Tab title="Layout & Spacing"> <AccordionGroup> <Accordion title="Spacing - Desktop" icon="arrows-up-down"> **Dropdown** (default: Default) Controls vertical spacing above and below the section on desktop: * **Default**: Standard spacing * **Medium**: Moderate spacing * **Compact**: Minimal spacing * **None**: No spacing Default spacing works for most placements. Use None when newsletter section should flow seamlessly with surrounding content. </Accordion> <Accordion title="Spacing - Mobile" icon="mobile"> **Dropdown** (default: Compact) Controls vertical spacing above and below the section on mobile: * **Default**: Standard mobile spacing * **Compact**: Reduced spacing (recommended for mobile economy) * **None**: No spacing </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Communicate value" icon="gift"> Clearly explain why visitors should subscribe: early access, exclusive discounts, style tips, etc. Value proposition drives signups. </Card> <Card title="Use compelling images" icon="image"> Upload lifestyle or product photography at 1440x1200px that represents your brand and appeals to your target audience. </Card> <Card title="Dark style for contrast" icon="moon"> Use Dark (accent colors) style when placing newsletter section between product sections or on light backgrounds for visual break. </Card> <Card title="Center when no image" icon="align-center"> If skipping the image, enable Center text for a focused, minimal newsletter signup that doesn't feel off-balance. </Card> <Card title="Keep it brief" icon="text"> Limit heading to 3-5 words and content to 1-2 sentences. Overly long copy reduces signup rates. </Card> <Card title="Homepage footer placement" icon="arrow-down"> Most effective when placed near page bottom (but above footer) where visitors have engaged with content and are ready to commit. </Card> <Card title="Flip for variety" icon="right-left"> When stacking multiple split-screen sections, alternate flip setting to create flowing, magazine-style layouts. </Card> <Card title="Privacy assurance" icon="shield"> Include brief privacy assurance in content ("We respect your privacy") to increase trust and signup rates. </Card> </CardGroup> ## Common use cases **Homepage email collection** — Place near bottom of homepage to capture engaged visitors before they leave **Landing page lead generation** — Feature prominently on campaign landing pages to build targeted email lists **Post-purchase signup** — Add to thank you pages to convert customers into subscribers for future marketing **Blog sidebar** — Integrate into blog layouts to convert content readers into email subscribers **Exit intent replacement** — Static alternative to popup modals for less intrusive email collection ## Layout behavior **Desktop**: * When image is present: Split-screen with form/content on one side, image on other (controlled by flip) * When no image: Form/content spans full width * Email input and submit button display horizontal inline **Mobile**: * Always stacks vertically: image at top (if present), then heading, content, and email form * Flip setting does not affect mobile layout * Email form remains horizontal inline **Form functionality**: * Email input with placeholder text * Submit button * Success message displays after submission * Integrates with Shopify customer email collection ## Email collection integration The newsletter section automatically integrates with: * **Shopify Customer Privacy API** — Complies with privacy regulations * **Customer accepts marketing** checkbox (if required by region) * **Shopify's email marketing** apps (e.g., Shopify Email) * **Third-party email providers** via app integrations Collected emails appear in **Customers > Accepts marketing** in your Shopify admin. ## Related sections * **Newsletter Modal** — Popup version of newsletter signup * **Footer** — Footer often includes simpler inline newsletter signup * **Multi Column Text** — Can include newsletter signup via custom blocks # Newsletter Modal Source: https://docs.digifist.com/themes/mojave/sections/newsletter-modal Popup modal capturing email signups with timed display and cookie-based persistence ## What It Does The **Newsletter Modal** displays a popup overlay prompting visitors to subscribe to your email newsletter. The modal appears automatically after a specified delay (default 3 seconds) and intelligently remembers visitor interactions using cookies—if a visitor closes the modal, they won't see it again for the duration you specify (default 365 days). Fully customizable with your own heading, content, image, and colors, the newsletter modal integrates seamlessly with Shopify's customer email collection system. Perfect for growing your email list, announcing first-purchase discounts, or promoting exclusive content. ## Getting Started <Steps> <Step title="Add the Section"> Add the Newsletter Modal section to your theme (typically added once globally, not per-page) </Step> <Step title="Enable the Modal"> Check "Enable newsletter modal" to activate popup (unchecked hides it site-wide) </Step> <Step title="Customize Content"> Set heading ("Enjoy 10% off your first order"), content (signup pitch), and optional image </Step> <Step title="Configure Timing"> Set delay (seconds before popup appears) and cookie expiration (days before showing again if closed) </Step> </Steps> ## Settings <AccordionGroup> <Accordion title="Enable Newsletter Modal" icon="toggle-on"> **Type:** Checkbox\ **Default:** Enabled (checked) Master switch controlling whether the newsletter modal appears on your site. ### When Enabled (Checked) * Modal appears to visitors after configured delay * Displays on all pages site-wide (not page-specific) * Respects cookie settings (won't show if visitor previously closed it) * Integrates with age verification (waits until age verified if both active) ### When Disabled (Unchecked) * Modal never appears on site * Useful for: * **Temporarily pausing** newsletter campaign * **Testing other popups** (age verification, sales banners) * **Seasonal campaigns** (enable during busy season, disable off-season) * **Website maintenance** (hide while updating content) ### Quick Toggle Use Cases **Enable during:** * Product launches (capture interest from launch traffic) * Holiday shopping seasons (Black Friday, Christmas) * Marketing campaigns (social media promotion driving traffic) * After redesign (re-engage visitors with fresh offer) **Disable during:** * Site issues (don't interrupt frustrated visitors) * Post-sale fatigue (give customers a break after major sale) * Low-traffic periods (off-season for seasonal businesses) * Testing other high-priority popups **Best practice:** Enable for active growth periods, disable when you need visitor focus elsewhere. </Accordion> <Accordion title="Toggle Modal Visibility in Design Mode" icon="paintbrush"> **Type:** Checkbox\ **Default:** Disabled (unchecked)\ **Info:** "When checked, the modal will open whenever you are in the Theme Customizer, and customizing the section's settings would instantly render its contents in the editor. Note that you should deselect that option after you've finished customizing the modal, so that the modal can be closed" Controls whether the modal displays while you're editing the theme in Shopify's customizer. ### When to Enable (Check) **Enable when:** * Actively editing modal content (heading, text, image) * Customizing colors (background, text colors) * Testing layout (image flip, content alignment) * Setting up modal for first time * Want to see changes immediately as you edit **Behavior when enabled:** * Modal opens automatically in Theme Customizer * Updates instantly when you change settings * Live preview of colors, text, images * Blocks view of page content below (intentional for preview) ### When to Disable (Uncheck) **Disable when:** * Finished customizing modal * Editing other sections (modal blocks view) * Working on navigation, header, product pages * Want to close modal to see overall page layout **Behavior when disabled:** * Modal hidden in Theme Customizer (doesn't block your work) * Modal still accessible in section list for editing settings * Modal still appears on live site (this only affects editor) ### Workflow Best Practice 1. **Enable** toggle when starting modal customization 2. Edit content, upload image, adjust colors 3. Preview appearance with different content lengths 4. **Disable** toggle when satisfied with design 5. Continue editing other theme sections 6. Test modal on live site (preview theme in incognito mode) **Important:** This setting **only affects Theme Customizer**. Live site behavior is controlled by "Enable newsletter modal" setting, not this toggle. **Recommendation:** Enable only while actively editing modal, disable immediately after to avoid blocking other work. </Accordion> <Accordion title="Add a Delay in Seconds" icon="clock"> **Type:** Range slider\ **Range:** 1-60 seconds (step: 1 second)\ **Default:** 3 seconds Controls how long to wait after page load before displaying the newsletter modal. ### How Delay Works **Timing starts:** * When page finishes loading (DOM ready) * Countdown begins 1-60 seconds (your choice) * Modal appears after countdown completes **If visitor navigates away:** * Timer resets on new page * Each page load has its own delay timer * Modal shows on whichever page visitor stays on long enough ### Choosing Optimal Delay **Short delay (1-3 seconds):** ← **Default: 3s** * **Pro:** Captures attention immediately * **Con:** May feel intrusive if visitor just arrived * **Best for:** High-traffic campaigns, limited-time offers, returning visitors * **User experience:** "I just got here, already asking for email?" **Medium delay (5-10 seconds):** * **Pro:** Visitor has time to see content before interruption * **Con:** Some visitors may leave before modal appears * **Best for:** General newsletter signup, evergreen campaigns * **User experience:** "I've browsed a bit, this offer seems interesting" **Long delay (15-30 seconds):** * **Pro:** Visitor demonstrates interest by staying, less intrusive * **Con:** High bounce rate means many never see modal * **Best for:** High-value offers, content-rich sites, blogs * **User experience:** "I'm engaged with content, tell me more" **Very long delay (30-60 seconds):** * **Pro:** Highly engaged visitors only (low annoyance factor) * **Con:** Very few visitors will see modal (low conversion volume) * **Best for:** Niche audiences, loyalty programs, premium content * **User experience:** "I'm clearly interested, yes I'll subscribe" ### Recommended Delays by Goal **Goal: Maximum signups (volume):** * Delay: 3-5 seconds * Rationale: Balance between reach and annoyance **Goal: Quality leads (engaged visitors):** * Delay: 10-15 seconds * Rationale: Filters for visitors who spend time on site **Goal: Minimal annoyance (brand perception):** * Delay: 20-30 seconds * Rationale: Only interrupts committed browsers **Goal: Capture bouncing visitors (exit intent alternative):** * Delay: 5-8 seconds * Rationale: Early enough to catch quick browsers ### Testing & Optimization **Start with default:** 3 seconds is proven baseline **A/B test delays:** Try 3s vs 10s, measure signup rate **Monitor bounce rate:** If spikes, delay may be too aggressive **Segment audiences:** Longer delay for returning visitors (requires custom code) **Recommendation:** Start with 3-5 seconds, increase to 10-15s if visitors report annoyance. </Accordion> <Accordion title="Cookie Expiration (Days)" icon="cookie-bite"> **Type:** Range slider\ **Range:** 5-365 days (step: 5 days)\ **Default:** 365 days (1 year)\ **Info:** "Some devices may restrict the cookie expiration to 7 (seven) days or even 24 hours, for security measures, or this can be even configured by the end user's device. More info [here](https://www.cookiestatus.com/)." Controls how long to wait before showing the modal again after a visitor closes it (without subscribing). ### How Cookie Expiration Works **When visitor closes modal:** * Browser cookie created: `_newsletter_modal: none` * Cookie stores close date/time * Expiration set to specified number of days **During expiration period:** * Modal won't appear to that visitor * Applies across all pages on your site * Visitor can browse freely without modal **After expiration:** * Cookie expires and is deleted * Modal appears again on next visit * Fresh opportunity to capture signup ### Choosing Expiration Duration **Short expiration (5-30 days):** * **Pro:** More opportunities to convert hesitant visitors * **Con:** May annoy frequent visitors who aren't interested * **Best for:** Time-sensitive campaigns, fast product launches * **Example:** "5 days - see modal again within a week if they don't subscribe" **Medium expiration (90-180 days):** * **Pro:** Balanced—gives visitors a break but doesn't give up forever * **Con:** May miss visitors who reconsider after longer time * **Best for:** Seasonal businesses, quarterly product releases * **Example:** "90 days - see modal again next season" **Long expiration (365 days):** ← **Default** * **Pro:** Respects visitor choice for full year, minimal annoyance * **Con:** Lost opportunity if visitor would reconsider sooner * **Best for:** Evergreen newsletters, general signup campaigns * **Example:** "365 days - once a year maximum" ### Cookie Restrictions (Important!) **Browser/device limitations:** * **Safari (iOS/macOS):** Often limits to 7 days maximum (ITP - Intelligent Tracking Prevention) * **Firefox:** Can restrict to 24 hours (Enhanced Tracking Protection) * **User settings:** Visitors can configure shorter cookie lifespans * **Private browsing:** All cookies deleted when browser closed **What this means:** * Your 365-day setting might become 7 days on Safari * Your 30-day setting might become 1 day in strict privacy mode * Can't guarantee exact expiration (browser decides final duration) **Learn more:** [Cookie Status](https://www.cookiestatus.com/) tracks browser cookie policies ### Recommended Durations by Strategy **Aggressive growth (maximize signups):** * Duration: 5-15 days * Rationale: Frequent reminders, multiple chances to convert * Risk: Visitor annoyance if too persistent **Balanced approach (default):** * Duration: 90-180 days * Rationale: Re-engage after reasonable time without being pushy * Risk: Some browsers will shorten this anyway **Respectful branding (minimize annoyance):** * Duration: 365 days * Rationale: Once a year maximum, respects visitor preference strongly * Risk: Miss visitors who'd reconsider sooner ### What Happens If Visitor Subscribes **Subscription behavior:** * Modal typically doesn't set cookie (assumes visitor won't see form again) * Some implementations set permanent "subscribed" flag * **Mojave behavior:** Check theme code—may still show to subscribers **Best practice:** External email provider (Klaviyo, Mailchimp) should hide signup for existing subscribers (requires integration beyond theme). **Recommendation:** Use 90-180 days for most use cases (balances growth with respect). Accept that Safari/Firefox may shorten this. </Accordion> <Accordion title="Background Color" icon="palette"> **Type:** Color picker\ **Default:** #FFFFFF (white) Sets the background color of the newsletter modal. ### Choosing Background Color **White (#FFFFFF):** ← **Default** * Clean, professional, high readability * Works with most brand colors * Doesn't distract from content/image * Safe choice for any brand **Brand color (your primary):** * Strong brand recognition * Bold, attention-grabbing * Ensure text remains readable (use "Primary Text Color" to adjust) * Example: Bright blue brand (#007BFF) **Soft neutral (light gray, beige):** * Subtle, elegant, less harsh than white * Good for luxury/minimalist brands * Examples: #F5F5F5 (light gray), #FAF9F6 (off-white) **Dark background (#000000, dark gray):** * Modern, bold, high-contrast * Requires light text colors (white/cream) * Dramatic for premium brands * Example: #1A1A1A (near-black) ### Color Psychology * **White:** Clean, trustworthy, medical/health (neutral) * **Blue:** Calm, reliable, tech-friendly * **Green:** Natural, eco-friendly, growth * **Red:** Urgency, excitement, danger (use sparingly) * **Black:** Luxury, premium, sophisticated * **Yellow:** Cheerful, optimistic, attention-grabbing ### Accessibility Considerations **Contrast ratio:** * Background + text must meet WCAG contrast requirements (4.5:1 minimum) * Use "Primary Text Color" setting to ensure readability * Test: Squint at preview—can you read text easily? **Best combinations:** * White background + black text (highest contrast) * Dark background + white text (high contrast) * Light background + dark text (good contrast) * Avoid: Medium background + medium text (poor contrast) **Recommendation:** Start with white (#FFFFFF), adjust to brand color only if text remains highly readable. </Accordion> <Accordion title="Primary Text Color" icon="font"> **Type:** Color picker\ **Default:** #000000 (black) Sets the color for the main heading text in the newsletter modal. ### When to Adjust **Keep default black (#000000) when:** * Background is white or very light * Maximum readability is priority * Brand is minimalist/modern **Change to white (#FFFFFF) when:** * Background is dark (black, navy, dark gray) * Using brand dark background color * Need high contrast on dark **Use brand color when:** * Background is neutral (allows brand color to pop) * Brand color has sufficient contrast with background * Example: Orange heading (#FF6600) on white background ### Contrast Guidelines **High contrast (recommended):** * Black text on white background * White text on black background * Dark blue text on light background **Medium contrast (use cautiously):** * Dark gray text on white background * Light text on medium dark background * May fail accessibility standards **Low contrast (avoid):** * Light gray text on white background * Medium gray text on medium background * Difficult to read, fails accessibility **Test your combination:** * Preview modal after selecting colors * Squint test: Can you read heading easily? * Accessibility check: Use [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) **Recommendation:** Use black (#000000) for light backgrounds, white (#FFFFFF) for dark backgrounds. </Accordion> <Accordion title="Secondary Text Color" icon="text"> **Type:** Color picker\ **Default:** #666666 (medium gray) Sets the color for the body content text (your signup pitch paragraph). ### Purpose of Secondary Text Secondary text is typically: * Less prominent than heading (lighter/softer) * Used for body copy, descriptions, fine print * Readable but doesn't compete with heading for attention ### Default Gray (#666666) **Why medium gray:** * Creates visual hierarchy (heading stands out more) * Still readable on white background (meets accessibility standards) * Professional, not distracting * Standard web convention ### When to Change **Use darker gray (#333333) when:** * You want body text more prominent * Content is critical to conversion * Background is very light **Use lighter gray (#999999) when:** * You want heading to dominate * Body text is supplementary only * Risk: May be too light (test readability) **Use white (#FFFFFF) when:** * Background is dark * Need high contrast * Both heading and body need maximum readability **Use brand color when:** * Background allows it (neutral white/gray) * Brand color is dark enough for readability * Example: Dark green (#006400) body text on white ### Hierarchy Best Practices **Heading should be darker/bolder than body:** * Heading: #000000 (black) * Body: #666666 (medium gray) * Creates clear visual hierarchy **Avoid equal weight:** * Don't use same color for heading and body * Lack of hierarchy confuses visual flow **Test together:** * Preview heading + body with your chosen colors * Heading should draw attention first, body should be readable second **Recommendation:** Keep default #666666 for most use cases. Adjust to #333333 if body text is important, #FFFFFF if background is dark. </Accordion> <Accordion title="Flip Image/Content Position" icon="arrows-left-right-to-line"> **Type:** Checkbox\ **Default:** Unchecked (image left, content right) Controls whether the image appears on the left or right side of the modal on desktop. ### Layout Options **Unchecked (Default - Image Left):** ``` Desktop: [Image] | [Heading + Content + Form] ``` * Image on left, content on right * Standard reading flow (left to right in Western cultures) * Visual first, then message **Checked (Flipped - Image Right):** ``` Desktop: [Heading + Content + Form] | [Image] ``` * Content on left, image on right * Text-first approach (message before visual) * Less common but can work for text-heavy pitches ### Mobile Behavior **Both layouts on mobile:** * Image always stacks on top * Content always below image * Flip setting has no effect on mobile * Single column layout regardless ### When to Flip **Keep default (image left) when:** * Image is strong visual hook (product, lifestyle photo) * You want visual to grab attention first * Following standard web convention **Flip (image right) when:** * Heading/message is most important (text-first) * Image is decorative rather than primary hook * A/B testing layout variations * Specific design preference (less common) ### Without Image If no image uploaded: * Content centered in modal * Flip setting has no effect (nothing to flip) * Content occupies full modal width **Recommendation:** Keep unchecked (default) for standard image-left layout. Flip only for specific design reasons or A/B testing. </Accordion> <Accordion title="Heading (Title)" icon="heading"> **Type:** Textarea\ **Default:** "Enjoy 10% off your first order." Main heading displayed prominently at top of newsletter modal. ### Crafting Effective Headings **Heading components:** 1. **Value proposition:** What visitor gets (discount, exclusive content, early access) 2. **Urgency/incentive:** Why subscribe now (limited time, first order) 3. **Brevity:** Short enough to scan quickly (5-10 words ideal) ### Heading Examples by Offer Type **Discount offers:** * "Enjoy 10% off your first order" (default) * "Get 15% off when you subscribe" * "Welcome! Take 20% off today" * "New friend discount: 10% off" **Exclusive access:** * "Join the club for exclusive perks" * "Get early access to new arrivals" * "Subscribe for VIP-only deals" * "Unlock members-only styles" **Free shipping:** * "Subscribe and enjoy free shipping" * "Get free delivery on every order" * "Join now for forever-free shipping" **Content/updates:** * "Stay in the loop with weekly updates" * "Get the latest trends in your inbox" * "Join 10,000+ subscribers" * "Subscribe for style inspiration" **Product launches:** * "Be the first to know about new drops" * "Get notified when we restock" * "New arrivals delivered to your inbox" ### Headline Formulas **Value + Action:** * "Save 10% + join our community" * "Subscribe + get free shipping" **Benefit + Reason:** * "Enjoy 15% off your first purchase" * "Get exclusive access to sales" **Urgency:** * "Limited time: 20% off" * "Don't miss out—subscribe today" **Social proof:** * "Join 50,000+ happy subscribers" * "See why everyone's subscribing" ### Best Practices **Be specific:** "10% off" better than "special discount" **Lead with benefit:** What they get, not what you want **Keep short:** 5-10 words (fits on one line) **Avoid jargon:** Simple language converts better **Test variations:** A/B test different offers (10% vs free shipping) **Recommendation:** Start with default ("Enjoy 10% off your first order"), adjust to match your specific offer. </Accordion> <Accordion title="Content (Entry)" icon="align-left"> **Type:** Rich text\ **Default:** "Sign up to join the club and get 10% off your purchase! Our selection of products is vast and offers something for everyone. Shop now and save." Body text below heading, providing additional context or persuasion for signup. ### Content Purpose Use content to: * **Expand on heading:** Provide details about offer * **Build trust:** Explain what subscriber receives (no spam, weekly updates, etc.) * **Add urgency:** Limited time, exclusive access * **Describe benefit:** Save money, stay informed, get early access ### Content Length **Short (1-2 sentences):** ← **Recommended** * Quick to scan, doesn't overwhelm * Works best on mobile (limited space) * Example: "Sign up today and save 10% on your first order. Plus, get early access to sales!" **Medium (3-4 sentences):** * Provides more context/persuasion * Risk: Visitors may not read all * Example: "Join our mailing list to receive 10% off your first purchase. You'll also get early access to new arrivals, exclusive sales, and style tips. We only send quality emails—no spam, ever." **Long (5+ sentences):** * Too much text, likely to be skipped * Avoid unless necessary (complex offers, legal requirements) ### Content Examples **Discount offer:** "Sign up today and enjoy 10% off your first order! Plus, be the first to hear about exclusive sales and new arrivals." **Exclusive access:** "Join our VIP list for early access to new products, members-only sales, and style inspiration delivered weekly." **Transparency (builds trust):** "Subscribe to get 10% off your first order. We'll send you updates on new arrivals and sales—never spam. Unsubscribe anytime." **Social proof:** "Join over 50,000 subscribers who enjoy 10% off, free shipping perks, and first dibs on new collections." **Free resource:** "Download our free style guide and get weekly tips, trends, and exclusive offers delivered to your inbox." ### Rich Text Formatting **Bold for emphasis:** "Sign up and get **10% off your first order**—plus free shipping!" **Multiple paragraphs (if needed):** ``` Join our mailing list for 10% off your first purchase. You'll also get early access to sales, new arrivals, and exclusive member perks. ``` ### Best Practices **Keep concise:** 1-3 sentences ideal (mobile-friendly) **Focus on "you":** Use "you get," "you'll receive" (customer-centric) **Address objections:** "No spam," "Unsubscribe anytime" (builds trust) **Reinforce heading:** Expand on offer, don't contradict it **Test readability:** Preview on mobile (text shouldn't scroll) **Recommendation:** Use 1-2 sentences, highlight key benefit, address "what's in it for me." </Accordion> <Accordion title="Image" icon="image"> **Type:** Image picker\ **Default:** Empty (no image) Optional image displayed on left (or right if flipped) side of modal on desktop. ### Image Purpose Newsletter modal images serve to: * **Attract attention:** Visual hook before visitor reads text * **Reinforce brand:** Lifestyle, product, or brand imagery * **Set tone:** Luxury, playful, minimal, bold (matches brand personality) * **Increase engagement:** Modals with images often convert better ### Image Specifications **Recommended size:** 600x800px to 800x1000px (portrait/vertical) * **Aspect ratio:** 3:4 or 2:3 ideal (portrait orientation) * **File format:** JPG (photos), PNG (graphics) * **File size:** Under 200KB (modal should load quickly) * **Color:** Match brand colors or complement modal background color ### Image Types **Product photography:** * Show bestselling products or new arrivals * Single hero product or styled flat-lay * Best for: E-commerce stores, product-focused brands **Lifestyle imagery:** * People using/wearing products * Aspirational scenes (travel, dining, fashion) * Best for: Fashion, home decor, lifestyle brands **Abstract/pattern:** * Geometric patterns, textures, gradients * Minimal distraction, modern aesthetic * Best for: Tech, minimalist, contemporary brands **Graphic/illustration:** * Custom illustrations, icons, brand mascots * Playful, distinctive, memorable * Best for: Creative brands, children's products, unique aesthetics **Text-based image:** * Large "10% OFF" or key message * Bold typography, minimal design * Best for: Sale promotions, urgent offers ### With vs. Without Image **With image:** * Desktop: Two-column layout (image + content) * Mobile: Image stacked above content * More visually engaging, takes up space **Without image (empty):** * Desktop: Content centered, single column * Mobile: Content only, no stacking * Simpler, faster loading, text-focused ### Layout Preview **Desktop with image:** ``` [Image (30%)] | [Heading, Content, Form (70%)] ``` **Mobile with image:** ``` [Image full-width] [Heading] [Content] [Form] ``` **Desktop/Mobile without image:** ``` [Heading centered] [Content centered] [Form centered] ``` ### Best Practices **Match brand:** Use imagery consistent with website aesthetic **Keep simple:** Busy images distract from message **Test performance:** Large images slow modal load (compress files) **Consider mobile:** Image shrinks significantly on mobile (ensure it's recognizable) **Text-free images:** Avoid text in image (use heading/content fields instead for accessibility) **Recommendation:** Use a simple product or lifestyle image (under 200KB) for visual interest, or leave empty for text-focused approach. </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Offer Clear Value" icon="gift"> Lead with specific benefit (10% off, free shipping, exclusive access). Vague "join our newsletter" underperforms concrete offers. </Card> <Card title="Keep Content Concise" icon="compress"> 1-3 sentences maximum. Visitors won't read paragraphs in a popup. Focus on key benefit and immediate CTA. </Card> <Card title="Test Delay Timing" icon="stopwatch"> Start with 3-5 seconds, monitor bounce rate. If visitors leave quickly, increase delay to 10-15 seconds for less intrusive timing. </Card> <Card title="Respect Cookie Expiration" icon="cookie"> 90-180 days balances growth with respect. Too short (5-10 days) annoys frequent visitors. Remember browsers may shorten your setting. </Card> <Card title="Ensure High Contrast" icon="circle-half-stroke"> Background and text colors must have strong contrast. Test on mobile and with accessibility tools—readability is critical to conversion. </Card> <Card title="Use Quality Images" icon="image"> If adding image, choose high-quality product or lifestyle photo under 200KB. Compress before uploading to avoid slow modal load. </Card> <Card title="Mobile-First Preview" icon="mobile"> 70% of traffic is mobile. Preview modal on actual phone—text should be readable, image recognizable, buttons tappable. </Card> <Card title="A/B Test Offers" icon="vial"> Test different incentives: 10% off vs free shipping vs exclusive access. Measure signup rate and customer lifetime value. </Card> </CardGroup> ## Common Use Cases ### First-Purchase Discount (E-Commerce Standard) **Heading:** "Enjoy 10% off your first order" **Content:** "Sign up today and save on your first purchase! Plus, get early access to sales and new arrivals." **Delay:** 3 seconds (quick engagement) **Cookie:** 365 days (once a year max) **Image:** Hero product or lifestyle photo **Best for:** General e-commerce stores, fashion, home goods ### Free Shipping Incentive **Heading:** "Get free shipping on every order" **Content:** "Subscribe now and enjoy free delivery forever—plus exclusive member perks." **Delay:** 5 seconds **Cookie:** 180 days (6 months) **Image:** Product packaging or delivery imagery **Best for:** Stores where shipping cost is barrier to purchase ### Content/Blog Newsletter (No Discount) **Heading:** "Join 10,000+ subscribers for weekly style tips" **Content:** "Get the latest trends, DIY projects, and exclusive tutorials delivered to your inbox every Friday." **Delay:** 10 seconds (let them read content first) **Cookie:** 90 days (3 months) **Image:** Blog/content imagery or author photo **Best for:** Blogs, content sites, educators, influencers ### Product Launch Announcement **Heading:** "Be the first to know about new drops" **Content:** "Subscribe and get notified 24 hours before our new collections launch—VIP access only." **Delay:** 5 seconds **Cookie:** 30 days (frequent reminders for launch season) **Image:** Teaser image of upcoming products **Best for:** Limited-release brands, streetwear, collectibles ### Abandoned Cart Recovery Support **Heading:** "Don't leave empty-handed! Save 10%" **Content:** "Complete your purchase and save 10% today. Plus, join our mailing list for future deals." **Delay:** 8 seconds (after they've browsed) **Cookie:** 7 days (short—encourage cart completion) **Image:** Product(s) from cart or similar items **Best for:** High-cart-abandonment stores, luxury items, considered purchases ### Seasonal Campaign (Holiday, Sale) **Heading:** "Holiday Sale: 20% off everything!" **Content:** "Subscribe now to unlock 20% off your order. Limited time only—don't miss out!" **Delay:** 3 seconds (urgency) **Cookie:** 5-10 days (short—maximize reach during sale) **Image:** Holiday-themed imagery or sale products **Best for:** Black Friday, Christmas, seasonal sales ## Layout Behavior ### Desktop Layout **With image:** * **Two-column layout:** Image (30% width) on left, content (70% width) on right * **Image:** Fills full height of modal * **Content:** Vertically centered (heading, text, form) * **Modal dimensions:** Max width \~750-800px * **Flip option:** Swaps image and content positions **Without image:** * **Single-column layout:** Content centered in modal * **Content:** Heading, text, form stacked vertically * **Modal dimensions:** Narrower (max width \~500-600px) * **Alignment:** All content centered ### Mobile Layout **Both layouts:** * **Single-column:** Image stacks above content (if present) * **Image height:** \~200-300px (compressed from desktop) * **Content:** Full-width below image * **Modal:** Occupies most of screen (small margins) * **Form:** Full-width button ### Visual Effects **Entrance animation:** * **Desktop:** Fade in + scale up from 0.9 to 1.0 * **Mobile:** Slide up from bottom of screen * **Duration:** \~300-400ms * **Delay:** Configured in "Add a delay in seconds" setting **Background overlay:** * **Color:** Semi-transparent black (\~50-70% opacity) * **Blur:** Optional backdrop blur (theme-dependent) * **Interaction:** Clicking overlay closes modal ## Related Sections * **[Newsletter](/themes/mojave/newsletter)** - Non-modal newsletter signup section (standard page section) * **[Age Verification Popup](/themes/mojave/age-verification-popup)** - Another modal (age verification takes priority over newsletter) * **[Footer](/themes/mojave/footer/footer)** - Alternative newsletter signup location (always visible) ## Technical Notes ### Cookie Management **Cookie name:** `_newsletter_modal` **Cookie values:** * `none`: Visitor closed modal, don't show again * (empty/missing): Visitor hasn't seen or closed modal, show it **Cookie attributes:** * **Expiration:** Set by "Cookie expiration" setting (5-365 days) * **Path:** `/` (applies site-wide) * **Secure:** May be set depending on HTTPS (best practice) **Browser limitations:** * Safari ITP: May limit to 7 days regardless of setting * Firefox ETP: May limit to 24 hours in strict mode * Private browsing: All cookies deleted on browser close ### Age Verification Integration If **both** Age Verification Popup and Newsletter Modal are enabled: 1. **Age verification shows first:** Newsletter modal waits 2. **After age confirmation:** Newsletter modal delay timer starts 3. **If age declined:** Newsletter modal never shows (visitor leaves site) **JavaScript coordination:** * Newsletter modal checks `getCookie("age-verified")` * Only proceeds if `age-verified === "true"` ### Email Collection **Shopify integration:** * Form posts to Shopify's customer email collection endpoint * Emails stored in Shopify admin (Customers section) * Can be exported to Klaviyo, Mailchimp, or other email platforms * Respects GDPR/privacy regulations (requires consent) **Custom integration:** * Theme code can be modified for third-party forms (Klaviyo embed, Mailchimp, etc.) * Requires code-level customization (not settings-based) ### Performance **Modal load time:** * HTML: \< 1KB (minimal markup) * CSS: \~5-8KB (styling) * JavaScript: \~3-5KB (cookie management, timing) * Image: 50-300KB (if present) * **Total:** 10-320KB, loads in \< 200ms typical **Page impact:** * Modal renders after page load (no blocking) * Delay ensures page content visible first * Lightweight JavaScript (no performance hit) ### Z-Index Hierarchy Modal overlays are layered: 1. **Age Verification Popup:** z-index 1000-1001 (highest) 2. **Newsletter Modal:** z-index 999 (below age verification) 3. **Page content:** z-index 1-10 (below modals) Ensures age verification always appears above newsletter modal. ## Troubleshooting **Modal not appearing on live site:** * Check "Enable newsletter modal" is checked * Test in incognito mode (cookies may remember previous close) * Verify delay setting (wait full duration after page load) * Check if age verification popup is active (newsletter waits until after age verified) * Browser console may show JavaScript errors (check for conflicts) **Modal shows every page:** * **Expected behavior:** Modal can appear on each page visit (delay resets per page) * **Solution:** Modal only sets cookie when closed (clicking X or overlay) * **Workaround:** Visitors should close modal once to prevent future displays **Cookie not persisting:** * Browser privacy settings may block cookies * Safari/Firefox may shorten expiration (ITP/ETP) * Private/incognito mode deletes cookies on browser close * Check browser console for cookie errors **Modal appears too quickly/slowly:** * Adjust "Add a delay in seconds" setting (1-60 range) * Test on live site (Theme Customizer preview may behave differently) * Check page load time (delays need time to expire: slow connection = longer effective delay) **Image not displaying:** * Verify image uploaded successfully in customizer * Check file size (keep under 500KB, ideally under 200KB) * Try different format (JPG vs PNG) * Clear browser cache and hard reload **Text hard to read:** * Check contrast between background and text colors * Use [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) * Preview on mobile (smaller screen harder to read) * Adjust "Primary Text Color" or "Secondary Text Color" **Layout broken on mobile:** * Test on actual device (not just browser resize) * Image may be too large (compress to under 200KB) * Content too long (keep heading \< 10 words, body \< 3 sentences) * Clear theme cache (some themes cache mobile layouts) **Modal conflicts with age verification:** * Age verification should always show first * Newsletter modal should wait until age verified * If both appear simultaneously, check theme JavaScript for conflicts * Contact theme support if integration broken **Can't close modal to preview page:** * Click overlay (outside modal) to close * Click any close button (X icon) * If stuck, disable "Toggle modal visibility in design mode" in settings * Reload Theme Customizer **Form doesn't submit:** * Ensure visitor entered valid email * Check Shopify admin for customer privacy settings (may block collection) * Test on live site (Theme Customizer form may not fully function) * Check browser console for form submission errors # Page Banner Source: https://docs.digifist.com/themes/mojave/sections/page-banner Page header section with breadcrumbs, title, and content for standard pages ## What It Does The **Page Banner** section creates a formatted header area at the top of standard pages, displaying breadcrumb navigation, page title, and optional introductory content. It provides consistent page headers across your site with options to customize or default to page-level content. ## Getting Started <Steps> <Step title="Add to Page Template"> The Page Banner section is typically already included in the Page template. If not, add it through the Theme Customizer </Step> <Step title="Configure Breadcrumbs"> Enable or disable breadcrumb navigation above the title (recommended: keep enabled for navigation) </Step> <Step title="Customize Title (Optional)"> Leave empty to use page title automatically, or override with custom text </Step> <Step title="Set Content Width"> Choose Narrow (default, centered column) or Fullwidth (spans entire page width) </Step> </Steps> ## Settings <AccordionGroup> <Accordion title="Enable Breadcrumbs" icon="map-location-dot"> **Type:** Checkbox\ **Default:** Enabled (checked) Show breadcrumb navigation trail above the page title, helping customers understand their location in site hierarchy and providing easy navigation back to parent pages. ### What Breadcrumbs Show Breadcrumbs display the navigation path from homepage to current page: **Standard page breadcrumbs:** ``` Home > About Us Home > Shipping Policy Home > Blog > Article Title ``` The breadcrumbs automatically generate based on: * Where the customer navigated from * Page type (standard page, blog article, etc.) * Site structure and navigation ### When to Enable Breadcrumbs **Enable (Default - Recommended):** * **Navigation utility:** Helps customers orient themselves and navigate back * **SEO benefit:** Search engines use breadcrumbs for understanding site structure * **Professional appearance:** Standard web convention for information pages * **Deep pages:** Especially valuable on blog articles, policies, or nested pages **Best for:** * About pages * Policy pages (Shipping, Returns, Privacy) * Blog articles * FAQs or Help pages * Any page 2+ levels deep in site structure ### When to Disable Breadcrumbs **Disable:** * **Minimalist aesthetic:** Clean, sparse page designs * **Landing pages:** Pages designed as entry points (not part of navigation flow) * **Single-level pages:** Homepage or other top-level pages where breadcrumbs add no value * **Custom navigation:** When you've built custom navigation and breadcrumbs are redundant **Best for:** * Brand story pages (full immersive experience) * Campaign landing pages * Contest/giveaway pages * Pages accessed directly from external links (not via site navigation) ### SEO Considerations Breadcrumbs provide **SEO value** beyond navigation: * **Rich snippets:** Google may display breadcrumbs in search results * **Crawl efficiency:** Helps search engines understand site structure * **Link equity:** Creates internal linking between pages Even if aesthetically you prefer not to show breadcrumbs, the SEO benefits often outweigh the visual preference. Consider enabling and styling breadcrumbs subtly rather than disabling entirely. </Accordion> <Accordion title="Title" icon="heading"> **Type:** Text field\ **Default:** Empty (uses page title)\ **Info:** "Defaults to page title" Custom title text to display instead of the default page title. Leave empty to automatically use the page's title. ### How Title Works **When Empty (Default Behavior):** The section automatically displays the title you set in: * **Shopify Admin > Online Store > Pages > \[Page Name]** - uses the "Title" field * **Blog Articles:** Uses article title This is **recommended for most use cases** because: * Maintains consistency (page title and banner title match) * Simplifies management (one place to update titles) * SEO-friendly (title matches metadata) **When Custom Text Added:** Overrides the default page title with your custom text. The page's original title (from Admin) is still used for: * Browser tab/title bar * Search engine results * Social media shares * Navigation menus Only the **visible banner title on the page** changes. ### When to Use Custom Title **Use custom title when:** **Long-form page titles:** * Page title (for SEO/metadata): "Shipping & Delivery Information - Continental US" * Banner title: "Shipping Information" **Creative formatting:** * Page title: "About XYZ Company" * Banner title: "About Us\ Crafting Quality Since 1995" **Context-specific phrasing:** * Page title: "Return Policy" * Banner title: "Returns & Exchanges" **Brand voice adjustment:** * Page title: "Contact Us" (formal, searchable) * Banner title: "Let's Talk!" (friendly, on-brand) **Don't use custom title when:** * Titles are already concise and clear * You want SEO and visible title to match exactly * Managing multiple pages (extra work to keep two titles in sync) ### Multi-line Titles The text field supports **line breaks** for multi-line titles: ``` Our Story Handcrafted With Love ``` **Best practice:** Keep secondary line shorter and in a complementary tone (tagline or context). </Accordion> <Accordion title="Content" icon="paragraph"> **Type:** Rich text editor\ **Default:** Empty (uses page content)\ **Info:** "Defaults to page content" Optional introductory content displayed below the title. Leave empty to automatically show the page's content from Shopify Admin. ### How Content Works **When Empty (Default Behavior):** The banner displays content from: * **Shopify Admin > Pages > \[Page Name]** - uses the "Content" field * Blog articles: Uses article excerpt or beginning of content **Typical behavior:** * For pages with long content, only the first 1-3 paragraphs appear * Content may be truncated with "Read more" or shown in full depending on theme configuration **When Custom Text Added:** Completely replaces the default page content **in the banner only**. The original page content (from Admin) can still be displayed in: * Subsequent page sections (if template includes additional content sections) * RSS feeds * Search results ### When to Use Custom Content **Use custom content when:** **Banner-specific intro:** * Page has detailed content below, need brief banner intro * Example: "Welcome to our Shipping Policy. Find estimated delivery times for your region below." **Enhanced formatting:** * Page Admin content is plain text, want rich formatting in banner * Add bold emphasis, links, or styled paragraphs **Context-setting:** * Provide page context beyond what's in page content * Example on About page: "Founded in Portland in 2015, we're on a mission to make sustainable fashion accessible." **Multi-purpose pages:** * Page serves both navigation landing and detail purposes * Banner content provides navigation context, page content has details **Don't use custom content when:** * Page content is already well-formatted and appropriate for banner * You want to maintain single source of truth (easier content management) * Page is simple with short content (no need for separate banner intro) ### Rich Text Features The Content field supports: * **Paragraphs** (line breaks) * **Bold and italic** text * **Links** to other pages or external URLs * **Lists** (bulleted or numbered) **Avoid:** * Very long content (3+ paragraphs become overwhelming in banner) * Images (not supported in this field, use dedicated image sections instead) * Complex formatting (keep banner content simple and scannable) </Accordion> <Accordion title="Content Width" icon="arrows-left-right"> **Type:** Select dropdown\ **Options:** Narrow, Fullwidth\ **Default:** Narrow Controls the maximum width of the banner content area (title, breadcrumbs, content text). ### Width Options **Narrow (Default)** ← **Recommended** * Content constrained to centered column (typically 800-1000px max width) * Prevents excessively long line lengths on large screens * **Better readability:** Optimal line length for reading (60-80 characters per line) * Creates focused, centered page headers **Best for:** * Standard informational pages (About, Policies, FAQ) * Blog articles * Pages with significant text content * Most use cases (default for good reason) **Fullwidth** * Content spans entire page width (edge-to-edge with page padding) * Creates more expansive, dramatic header feel * **Caution:** Long line lengths on large monitors reduce readability **Best for:** * Pages with minimal banner content (short title, no content text) * Aesthetic preference for larger, bolder headers * Pages viewed primarily on mobile (line length less of an issue) * When you have very short title/content that looks lost in narrow column ### Readability Guidelines **Why Narrow is Default:** Typography research shows optimal reading line length is **60-80 characters**. On large desktop monitors (1920px+), fullwidth content can exceed **120+ characters per line**, which: * Slows reading speed * Increases eye strain * Reduces comprehension * Feels overwhelming **Narrow width prevents this** by constraining content to readable line lengths while still being visually prominent. ### Mobile Behavior On mobile devices, **both options behave similarly**: * Content spans full screen width (with standard page padding) * Narrow vs Fullwidth distinction is negligible on small screens The Content Width setting primarily affects **desktop experience** (1200px+ screens). ### Combining with Content Length **Short content + Narrow:** May feel sparse (consider Fullwidth) **Short content + Fullwidth:** Balanced, bold statement **Long content + Narrow:** Optimal readability **Long content + Fullwidth:** Poor readability on large screens (avoid) </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Keep Breadcrumbs Enabled" icon="toggle-on"> Leave breadcrumbs enabled for SEO and navigation utility unless you have strong aesthetic reasons to remove them. They add minimal visual weight and significant functional value. </Card> <Card title="Use Default Title and Content" icon="sparkles"> For most pages, leave Title and Content empty to auto-populate from page settings. This maintains consistency and simplifies content management across your site. </Card> <Card title="Stick with Narrow Width" icon="text-width"> Narrow content width provides better readability. Use Fullwidth only for pages with very short titles/content where centered narrow column feels sparse. </Card> <Card title="Keep Banner Content Concise" icon="compress"> If using custom content, keep it to 1-2 short paragraphs. Lengthy banner content overwhelms customers. Save detailed content for page body sections. </Card> <Card title="Match Banner Tone to Page Purpose" icon="comments"> Informational pages (policies, FAQ): Professional, clear tone. Brand pages (About, Our Story): Personality-driven, engaging tone. Match banner to context. </Card> <Card title="Test Custom Titles for Scannability" icon="eye"> If using custom titles, ensure they're still clear and searchable. Overly creative banner titles can confuse if they don't match what customers searched for. </Card> <Card title="Coordinate with Page Sections Below" icon="layer-group"> Page Banner is typically just the header. Ensure you have appropriate content sections below (Rich Text, Images, etc.) to complete the page. </Card> <Card title="Preview on Multiple Screen Sizes" icon="mobile"> Always preview page banners on desktop, tablet, and mobile. Content Width and breadcrumb visibility can look different across devices. </Card> </CardGroup> ## Common Use Cases ### Standard About Page Header **Settings:** * Enable breadcrumbs: Checked * Title: Empty (uses "About Us" from page title) * Content: Empty (uses page content intro) * Content width: Narrow **Result:** Clean, professional page header with automatic title/content, optimal readability, breadcrumb navigation ### Shipping Policy with Custom Banner Intro **Settings:** * Enable breadcrumbs: Checked * Title: Empty (uses "Shipping Policy" page title) * Content: "We offer free shipping on orders over \$50 to the Continental US. See detailed delivery times below." * Content width: Narrow **Result:** Custom banner intro sets expectations, detailed policy content follows in page sections below ### Minimalist Brand Story Page **Settings:** * Enable breadcrumbs: Unchecked (clean aesthetic) * Title: "Our Beginning" * Content: "Every great brand starts with a story. Here's ours." * Content width: Fullwidth **Result:** Bold, immersive header without breadcrumbs, sets tone for brand storytelling page ### FAQ/Help Center Landing Page **Settings:** * Enable breadcrumbs: Checked * Title: "How Can We Help?" * Content: "Find answers to common questions below, or contact us directly." * Content width: Narrow **Result:** Friendly, supportive tone, breadcrumbs for navigation, narrow for readability with FAQ accordions below ### Contact Page Header **Settings:** * Enable breadcrumbs: Checked * Title: Empty (uses "Contact Us" page title) * Content: "We typically respond within 24 hours on business days." * Content width: Narrow **Result:** Sets response time expectations immediately, standard professional header ## Layout Behavior ### Desktop Layout (1200px+) The Page Banner section displays as a vertically-centered content area: **With Breadcrumbs:** ``` [Breadcrumbs: Home > Current Page] ↓ [Page Title (Large Heading)] ↓ [Content Text (1-2 paragraphs)] ↓ [Visual spacing before next section] ``` **Content Width Impact:** * **Narrow:** Content constrained to centered column (\~800-1000px) * **Fullwidth:** Content spans full page width (minus page margins) ### Mobile Layout (Under 768px) On mobile, the layout stacks vertically with **full-width content** (both Narrow and Fullwidth behave similarly): ``` [Breadcrumbs] [Title] [Content] ``` **Mobile Optimizations:** * Title font size reduces for mobile screens * Content text size adjusts for mobile readability * Breadcrumbs may simplify (show only parent, not full trail) * Spacing compresses vertically to reduce scrolling ### Default Content Behavior **When Title/Content are empty (default):** The section automatically pulls content from the page's Shopify Admin settings: * **Title field** → Displays page title * **Content field** → Displays page content (typically first few paragraphs shown in banner) This happens **server-side** during page render—no JavaScript delays or content flashes. ### Breadcrumb Structure Breadcrumbs render as an ordered list with schema.org markup for SEO: ```html theme={null} <nav aria-label="Breadcrumb"> <ol> <li><a href="/">Home</a></li> <li><a href="/pages/about">About</a></li> </ol> </nav> ``` **Last item (current page)** is not clickable and styled differently to indicate current location. ### Vertical Spacing The Page Banner section includes: * **Top padding:** Spacing above breadcrumbs/title * **Bottom padding:** Spacing below content before next section * **Internal spacing:** Between breadcrumbs, title, and content Spacing is responsive—tighter on mobile, more generous on desktop. ## Related Sections * **[Rich Text](/themes/mojave/richtext)** - Add detailed content sections below Page Banner * **[Accordions](/themes/mojave/accordions)** - Ideal below banner for FAQ or policy details * **[About](/themes/mojave/about)** - Use on about pages for visual split-screen content after banner * **[Images with Text](/themes/mojave/images-with-text)** - Add after banner for visual storytelling * **[Contact Form](/themes/mojave/contact-form)** - Natural pairing on contact pages below banner ## Technical Notes ### Breadcrumb Schema Markup The breadcrumbs use **JSON-LD structured data** for search engines: ```json theme={null} { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://yourstore.com/" }, { "@type": "ListItem", "position": 2, "name": "About Us", "item": "https://yourstore.com/pages/about" } ] } ``` This helps Google display rich breadcrumb snippets in search results. ### Title Hierarchy The page title uses an **`<h1>` heading tag**, following semantic HTML best practices: * Only one `<h1>` per page (the main page title) * Screen readers announce this as the primary page heading * SEO best practice for page structure **Important:** If you use custom title, ensure the text is still semantically appropriate as the page's primary heading. ### Content Sanitization When using the Page Admin content (not custom content), Shopify automatically sanitizes the HTML to prevent: * Script injection * Malicious code * Unsafe HTML tags **Custom content** in the banner is also sanitized, but supports safe rich text formatting (bold, italic, links, paragraphs). ### Template Context The Page Banner section is designed for **Page templates** (main-page.liquid) but can be added to other templates: * **Works on:** Page, Article, Collection, Custom page templates * **Not ideal for:** Product pages (use product-specific sections), Cart, Checkout The section adapts its breadcrumb generation based on template type. ### Default Content Fallback **If page has no content in Admin:** * Section displays only breadcrumbs and title * Content area is hidden (not shown as empty space) * No error or placeholder message **If page has no title in Admin:** * Section uses template name as fallback (e.g., "Page" or "Article") * Generally not recommended—always set page titles in Admin ### Performance Considerations The Page Banner section: * **No images:** Fast loading, no external resources * **Static content:** Renders server-side, no JavaScript dependencies * **Lightweight HTML:** Minimal DOM elements * **CSS-based styling:** No layout reflow issues **Performance impact:** Negligible. Adding this section doesn't affect page load times. ### Accessibility Features The section follows accessibility best practices: * **Semantic HTML:** Proper heading hierarchy (`<h1>`) * **Breadcrumb ARIA:** `aria-label="Breadcrumb"` for screen reader context * **Keyboard navigation:** All links are keyboard-accessible * **Focus styles:** Visible focus indicators on breadcrumb links * **Skip links compatible:** Works with skip-to-content links Screen readers announce the breadcrumb trail before the main page title, providing navigation context. ### Customization Options **Theme code customization:** To adjust default styling (requires theme code editing): * **Breadcrumb styling:** Edit `page-banner.liquid` CSS * **Title font size:** Modify heading size classes * **Content width values:** Adjust max-width in CSS for Narrow option * **Spacing:** Change padding values in section CSS **Liquid variables available:** * `page.title` - Page title from Admin * `page.content` - Page content from Admin * `template.name` - Current template name * `request.path` - Current page path (for breadcrumbs) ## Troubleshooting **Breadcrumbs not showing:** * Verify "Enable breadcrumbs" is checked * Check that page is not the homepage (breadcrumbs hide on homepage) * Ensure theme's breadcrumb template file (`breadcrumbs.liquid` snippet) exists * Clear browser cache and hard refresh **Custom title not displaying:** * Ensure you've clicked Save after entering custom title * Verify text was entered in "Title" field (not "Content" field) * Check that section is published (not in draft mode) * Preview page to confirm changes are live **Content looks different than Shopify Admin:** * Banner content may truncate long Admin content (by design) * If using custom content, verify you're editing the correct field * Rich text formatting in Admin may not fully transfer to banner * Some HTML from Admin may be sanitized (removed) for security **Content width not changing:** * Preview on desktop screen (1200px+) where width difference is visible * Mobile devices show similar width for both options (expected) * Hard refresh browser to clear cached CSS * Verify you're adjusting "Content Width" setting (not other width settings) **Breadcrumbs show wrong path:** * Breadcrumbs generate based on navigation history and page type * If customer arrived from external link, breadcrumbs may simplify * Collection breadcrumbs depend on which collection customer came from * This is expected Shopify behavior, not a bug **Title and content both missing:** * Check that page has title and content set in Shopify Admin > Pages * Verify you're editing the correct page template * Ensure Page Banner section is actually on the template (check Theme Customizer) * Try entering custom text temporarily to confirm section is working **SEO: Page shows duplicate H1 tags:** * Only the Page Banner title should be `<h1>` * Check that page content (below banner) doesn't have additional `<h1>` tags * Use heading hierarchy: `<h1>` for title, `<h2>` for subheadings in content * Edit page content in Admin to use proper heading levels # Pickup Availability (Component) Source: https://docs.digifist.com/themes/mojave/sections/pickup-availability Automatic component displaying store pickup availability on product pages ## What It Does The **Pickup Availability** component automatically displays on product pages when: 1. Store has physical locations configured in Shopify Admin 2. "Local pickup" fulfillment method enabled 3. Product available for pickup at one or more locations Shows "Pick up available at \[Location Name]" with estimated pickup time and link to view all available locations. <Note> This is an **automatic component** with no customizable settings. Displays automatically when pickup conditions met. Cannot be added/removed/configured in Theme Customizer. </Note> ## How It Works ### Automatic Display **Component appears when:** * Product page loaded * Store has locations with "local pickup" enabled (Admin → Settings → Locations → Enable pickup) * Current product/variant available at location(s) * Inventory at pickup location(s) sufficient **Component hidden when:** * No pickup locations configured * Product unavailable for pickup (out of stock at all locations, or pickup disabled) * Product marked "Continue selling when out of stock" but inventory 0 ### Display Content **Pickup available:** * Icon + "Pick up available at \[Location name]" * Estimated pickup time (e.g., "Usually ready in 24 hours") * "View store information" link (or "Check other stores" if multiple locations) * Clicking opens modal showing all pickup locations with availability **Pickup unavailable:** * ⊗ Icon + "Pick up unavailable at \[Location name]" * No additional info or modal ## Configuration (Shopify Admin) ### Enable Store Pickup **Steps:** 1. Shopify Admin → Settings → Locations 2. Add/Edit location 3. Enable "This location offers local pickup" 4. Configure pickup instructions (optional) 5. Save **Result:** Products with inventory at this location show pickup availability on product pages ### Set Pickup Availability **Per-location settings:** * **Pickup enabled:** Checkbox to allow/disallow pickup at this location * **Pickup instructions:** Custom message (e.g., "Pickup at rear entrance," "Call upon arrival") * **Estimated pickup time:** Auto-calculated based on fulfillment settings (usually 24-48 hours) **Inventory requirement:** * Product must have inventory at pickup location (tracked inventory > 0) * If inventory = 0, "unavailable" message displays ## Best practices <CardGroup> <Card title="Enable for Retail Locations" icon="store"> If you have physical retail stores, enable pickup to drive foot traffic and offer customers convenient fulfillment option. </Card> <Card title="Accurate Inventory" icon="boxes-stacked"> Keep pickup location inventory accurate. Customers frustrated if pickup shows available but item out of stock on arrival. </Card> <Card title="Clear Pickup Instructions" icon="clipboard-list"> Add pickup instructions in Admin (e.g., "Pickup at customer service desk"). Helps customers find pickup area. </Card> <Card title="Realistic Pickup Times" icon="clock"> Set realistic estimated pickup times. If orders take 48 hours to prepare, configure fulfillment settings accordingly. </Card> </CardGroup> ## Related Components * **[Product Page (Template)](/themes/mojave/products/product-page)** - Product page where pickup availability displays * **[Cart](/themes/mojave/pages-templates/cart)** - Cart page (pickup availability may display here too) ## Key Takeaways * **Automatic component** - No Theme Customizer settings, displays automatically when conditions met * **Requires Admin setup** - Enable pickup in Settings → Locations * **Shows nearest location** - Displays closest store with availability first * **Modal for multiple locations** - Click link to see all pickup locations * **Inventory-dependent** - Only shows if product in stock at pickup location * **No customization** - Cannot modify appearance/position without code editing To enable/configure store pickup, go to Shopify Admin → Settings → Locations → Enable local pickup. # Predictive Search (Component) Source: https://docs.digifist.com/themes/mojave/sections/predictive-search Automatic search dropdown component displaying instant search results ## What It Does The **Predictive Search** component automatically displays when customers type in the header search bar, showing instant search results before submitting the search query. Results include products, pages, articles, and collections matching the search term. <Note> This is an **automatic component** with no customizable settings. Displays automatically when customer types in search field. Cannot be configured in Theme Customizer. </Note> ## How It Works ### Automatic Display **Component appears when:** * Customer types in header search bar * After 2-3 characters entered (minimum trigger) * Search query matches store content (products, pages, articles, collections) **Component hidden when:** * Search field empty * Customer clicks outside search area * Customer submits search (redirects to full search results page) ### Display Content **Predictive search dropdown shows:** * **Products** - Product title, image, price (up to 4-6 products) * **Pages** - Page titles matching query (e.g., "About Us," "FAQ") * **Blog articles** - Article titles from store blog * **Collections** - Collection names matching query * **"View all results" link** - Links to full search results page **Grouped by type:** * Products section * Pages section (if matches) * Articles section (if matches) * Collections section (if matches) ### Search Behavior **Real-time updates:** * Dropdown updates as customer types (live search) * Debounced (waits 200-300ms after typing stops before querying) * Reduces server load vs querying every keystroke **Click result:** * Clicking product → Redirects to product page * Clicking page/article/collection → Redirects to that page * Clicking "View all results" → Full search results page (`/search?q=[query]`) ## Configuration (Theme Settings) ### Predictive Search Settings **Shopify Admin → Online Store → Themes → Customize → Theme settings → Search:** **Typical settings:** * **Enable predictive search** - Toggle on/off (some themes) * **Number of products to show** - Limit predictive results (4-8 products) * **Show vendor** - Display product vendor/brand in results * **Show price** - Display product price in results **Note:** Settings location varies by theme. Some themes have no predictive search settings (always enabled, defaults used). ## Best practices <CardGroup> <Card title="Fast Server Required" icon="gauge-high"> Predictive search queries server on every keystroke. Fast hosting essential for responsive experience. </Card> <Card title="Optimize Product Data" icon="tag"> Ensure product titles, descriptions contain searchable keywords. Improves predictive search accuracy. </Card> <Card title="Limit Results" icon="list-ol"> Show 4-6 products max in dropdown (avoid overwhelming). "View all results" link for full list. </Card> <Card title="Mobile-Friendly" icon="mobile"> Predictive search dropdown must work on mobile (touch-friendly, readable on small screens). </Card> </CardGroup> ## Related Components * **[Header](/themes/mojave/header/header)** - Contains search bar that triggers predictive search * **[Search Results Page](/themes/mojave/collections/search)** - Full search results (where "View all results" redirects) ## Key Takeaways * **Automatic component** - No section settings, displays automatically when customer searches * **Real-time search** - Updates dropdown as customer types * **Shows multiple content types** - Products, pages, articles, collections * **Theme settings may apply** - Some themes allow configuring product count, show/hide price * **No Theme Customizer control** - Cannot add/remove/reposition without code editing * **Performance-dependent** - Requires fast hosting for responsive live search Predictive search configured automatically by theme. For advanced customization, edit theme code or explore search apps. # Press Source: https://docs.digifist.com/themes/mojave/sections/press Showcase media mentions, partner logos, certifications, or client brands with optional testimonial slider for credibility and social proof ## What this section does The **Press** section displays logos in a horizontal row or slider, perfect for showcasing media coverage, brand partnerships, certifications, or client portfolios. Features include: * **Up to 6 logo blocks** with images and optional testimonials * **Two display modes**: Static grid or testimonial slider * **Optional control arrows** for slider navigation (when testimonials enabled) * **Custom logo width** per logo (120-400px) * Heading above logos * Narrow container default (Page or Fullwidth options) Perfect for social proof (press mentions), B2B trust indicators (clients, partners), certifications, awards, or "As Featured In" sections. <Frame> <img alt="Press Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Press** </Step> <Step title="Add logo blocks"> Click **Add Logo** block. Each block creates one logo. Add 3-6 logos (maximum 6 blocks). </Step> <Step title="Upload logo images"> For each block, upload logo image. Optionally set custom width (120-400px) per logo. </Step> <Step title="Optional: Enable testimonials"> Check "Enable testimonials" to activate slider mode. Add testimonial text to each logo block for rotation. </Step> </Steps> ## Section settings <AccordionGroup> <Accordion title="Enable testimonials" icon="quote-left"> **Checkbox** (default: unchecked) Activates testimonial slider mode: * Unchecked: Logos display in static horizontal row (default) * Checked: Logos become slider with testimonial text rotation **Info**: "Show testimonial for each selected logo" When enabled, section displays one logo at a time with its testimonial text. Control arrows navigate between logos. </Accordion> <Accordion title="Enable control arrows" icon="arrows-left-right"> **Checkbox** (default: unchecked) Shows previous/next navigation arrows for slider: * Only functional when "Enable testimonials" is checked * Allows manual navigation between testimonials **Info**: "For control arrows to appear, the 'Enable testimonials' setting must be active." Without arrows, slider auto-advances or requires swipe/drag navigation. </Accordion> <Accordion title="Heading" icon="heading"> **Text field** (default: "Express your brand") Section heading above logos: * Centered above logo row or slider Examples: "As Featured In", "Trusted By", "Our Partners", "Certified By", "Awards & Recognition" Change default text to match your context. "Express your brand" is a generic preset. </Accordion> <Accordion title="Spacing - Desktop & Mobile" icon="arrows-up-down"> **Desktop** (default: Compact) and **Mobile** (default: Compact) Vertical spacing above and below section: * **Default**: Standard spacing * **Medium**: Moderate spacing * **Compact**: Minimal spacing (default) Compact default works well for trust indicator sections that sit between larger content sections. </Accordion> <Accordion title="Section width" icon="maximize"> **Dropdown** (default: Narrow) Container width: * **Page**: Standard page width * **Narrow**: Medium width (default, optimal for logo rows) * **Fullwidth**: Edge-to-edge **Narrow** (default) creates focused, centered logo display. Fullwidth can make logos feel too spread out unless you have many. </Accordion> </AccordionGroup> ## Block: Logo **Type**: logo (maximum: 6 blocks) Each block creates one logo with optional testimonial text. <AccordionGroup> <Accordion title="Image" icon="image"> **Image picker** (required) Logo image file: * Use PNG with transparent background for flexibility * Upload logos at 2x resolution for retina displays (e.g., if display width is 200px, upload 400px wide) * Aspect ratio preserved—upload original logo dimensions Standard logo dimensions: 240-480px wide (actual logo artwork, not canvas) at 2x resolution. </Accordion> <Accordion title="Set custom image width" icon="ruler"> **Checkbox** (default: unchecked) Enables manual width control for this logo: * Unchecked: Logo uses automatic sizing based on section layout * Checked: Unlocks "Image width" slider below Use when specific logo needs different sizing (e.g., wordmark logo needs more width than icon logo). </Accordion> <Accordion title="Image width" icon="arrows-left-right"> **Range**: 120-400px (step: 10px, default: 240px) Controls logo display width (desktop/tablet only): * Only active when "Set custom image width" is checked * **Info**: "Affects only tablet and desktop. On mobile width is tied to the container." Adjust per logo for visual balance. Text-heavy horizontal logos may need 300-400px, while square icon logos work at 120-200px. </Accordion> <Accordion title="Testimonial" icon="comment"> **Textarea** (optional) Testimonial text displayed with this logo in slider mode: * Only shown when section setting "Enable testimonials" is checked * **Info**: "Shown, if the section testimonials are enabled." Use for press quotes, partner testimonials, or award descriptions. Examples: * Press: "Best Product of 2024" — TechCrunch * Partner: "Working with \[Brand] transformed our business." — Partner CEO * Award: "Winner - Innovation Excellence Award 2024" </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="3-6 logos optimal" icon="hashtag"> Maximum is 6 blocks. Use 3-6 for balanced display. Fewer than 3 looks sparse, especially in narrow container. </Card> <Card title="Transparent PNG logos" icon="image"> Upload PNG files with transparent backgrounds. Adapts to any background color and looks professional. </Card> <Card title="Consistent visual weight" icon="scale-balanced"> Balance logo sizes for visual harmony. Adjust custom widths so all logos feel similar in prominence/weight. </Card> <Card title="Grayscale for unity" icon="palette"> Convert color logos to grayscale or single tone. Creates unified, professional look regardless of brand color variety. </Card> <Card title="Recognizable brands first" icon="star"> Order logos left-to-right by recognition/prestige. Most recognizable or prestigious logos leftmost (viewed first). </Card> <Card title="Static for simple trust" icon="grid"> Use default static display (testimonials disabled) for simple "As Featured In" or partnership rows. Cleaner, faster scanning. </Card> <Card title="Testimonials for detail" icon="quote-right"> Enable testimonials when you have meaningful quotes or want to highlight specific press coverage details. </Card> <Card title="Narrow width default" icon="align-center"> Keep default Narrow width. Logos centering creates focused trust indicator. Fullwidth spreads logos too thin visually. </Card> </CardGroup> ## Common use cases **Press mentions / "As Featured In"** — Media outlet logos (TechCrunch, Forbes, Wired, etc.) with optional testimonials showing quotes or headlines **Client/customer logos** — B2B brands showcasing enterprise clients or partners (static display, no testimonials) **Certifications & awards** — Certification body logos (organic, fair trade, B Corp) or award badges with optional descriptions **Partner brands** — Retail partners, distribution partners, or brand collaborations (e.g., "Available At...") **Social proof indicators** — Trust badges (Better Business Bureau, secure payment, etc.) for credibility **Investor/backing logos** — Startups showcasing venture capital or investment partners ## Layout behavior **Static mode (testimonials disabled)**: * All logos display in horizontal row * Evenly spaced, centered in container * Logo count determines individual logo width * Responsive: On mobile, logos stack or wrap to multiple rows **Testimonial slider mode (testimonials enabled)**: * **One logo + testimonial visible at a time** * Logo centered above testimonial text * Auto-advancing slider (timing varies by theme) * Manual navigation: Control arrows (if enabled) or swipe/drag * Dots/pagination indicators showing slide count **Desktop (static)**: * Logos in horizontal row, centered * Each logo respects custom width or auto-sizing * Ample spacing between logos **Mobile (static)**: * Logos stack vertically or wrap to 2 columns depending on count * Custom width settings ignored—logos size to fit mobile container * Maintains aspect ratios ## Logo guidelines **File format**: * **PNG with transparency** (strongly recommended) * SVG accepted by some themes (check upload) * Avoid JPG—white backgrounds look unprofessional on colored page backgrounds **Dimensions**: * Upload at **2x resolution** for retina displays * Display width 240px → upload 480px wide * Display width 200px → upload 400px wide * Maintain original logo aspect ratio (don't stretch/squish) * Crop excess whitespace around logo artwork **Color treatment**: * **Monochrome recommended**: Convert color logos to black, white, or gray * Grayscale creates visual unity across diverse brand colors * Some themes offer CSS filters to enforce monochrome styling **Optimization**: * Compress PNGs (TinyPNG, ImageOptim) * Target \< 50KB per logo for fast loading * Transparency allows smaller file sizes vs. full backgrounds ## Testimonial content guidelines **When to use testimonials**: * You have actual quotes from press, partners, or customers * You want to add context beyond just logo recognition * You have 3-6 meaningful quotes (matches logo count) **Testimonial text best practices**: * **Short quotes**: 1-3 sentences, 20-50 words * **Attribution**: Include source/speaker name at end ("— TechCrunch" or "— Jane Doe, CEO") * **Specific praise**: Avoid generic quotes—use specific claims * **Consistent formatting**: Same structure across all testimonials **Examples**: * Press: ""Best ecommerce platform we've tested." — The Verge" * Award: "Winner, Best Innovation in Retail Technology 2024 — RetailWeek Awards" * Partner: "Our sales increased 200% after partnering with \[Brand]." — Partner Company CEO" * Customer (B2B): "Reduced operational costs by 40% within 6 months." — Enterprise Client CTO" ## Customization tips **For press mentions (homepage)**: * Static display (testimonials off) * 4-6 recognizable media logos * Heading: "As Featured In", "Press & Media" * Grayscale logos for professional look * Narrow width (default) **For client showcase (B2B)**: * Static display * 5-6 client logos * Heading: "Trusted By", "Our Clients", "Partners" * Custom widths to balance diverse logo types * Page or Narrow width **For awards/certifications**: * Testimonials enabled (show award details) * 3-4 certification/award logos * Heading: "Certified & Awarded", "Recognized For Excellence" * Testimonial: Award name, year, category * Control arrows on for manual browsing **For investor/backing (startups)**: * Static display * 3-5 investor/VC logos * Heading: "Backed By", "Supported By" * Equal-weighted sizing * Narrow width ## Slider behavior (testimonials enabled) **Auto-advance**: * Slides automatically change every 5-8 seconds (theme-dependent) * Smooth transitions between logo/testimonial pairs * Loops continuously (after last slide, returns to first) **Manual navigation**: * **Control arrows**: Previous/next buttons (if enabled) * **Swipe/drag**: Touch or mouse drag on mobile/desktop * **Pagination dots**: Click specific dot to jump to that slide **Pause on interaction**: * Many themes pause auto-advance on hover (desktop) or tap (mobile) * Resumes auto-advance after interaction ends **Accessibility**: * Keyboard navigation support (arrow keys) * Screen reader announcements for slide changes * Descriptive alt text on logos ## Related sections * **Testimonials** — Dedicated customer review section with star ratings * **Marquees** — Scrolling text/logo banners for continuous display * **Multi Column Text** — Alternative for text-based trust indicators without logos * **Content Tiles** — Grid-based layouts for more complex partner showcases ## Technical notes **6-block maximum**: Hard limit of 6 logos per section. If you need more, add multiple Press sections or use alternative approaches (Marquees for continuous scroll). **Static vs. slider**: "Enable testimonials" completely changes section behavior. Static = all logos visible. Slider = one at a time with rotation. **Custom width desktop-only**: Mobile widths are responsive-based, ignoring custom width settings. Logos auto-size to fit mobile container (typically 60-80% of screen width). **Testimonial requirement**: If testimonials enabled but testimonial text field is empty, logo still appears but without accompanying text—may look odd. Ensure all blocks have testimonial text when slider is active. **Grayscale filter**: Some themes include CSS filters to force grayscale. Check theme settings—manual grayscale logo uploads ensure consistent results across all themes. **Logo linking**: This section doesn't include URL fields for logos. Logos are non-clickable. For clickable logo grids, consider Content Tiles or Featured Collections Links sections. **Slider indicators**: Pagination dots or other indicators appear when testimonials enabled. Number of dots = number of logo blocks. **Performance**: 6 logos at \~50KB each = \~300KB total. Optimize images for fast loading, especially above-the-fold placements. # Product Recommendations Source: https://docs.digifist.com/themes/mojave/sections/product-recommendations Display Shopify's AI-powered product recommendations based on the current product for intelligent cross-selling and upselling on product pages ## What this section does The **Product recommendations** section displays automatically-generated product suggestions powered by Shopify's native recommendation engine. Features include: * **AI-powered recommendations**: Shopify analyzes product relationships, purchase patterns, and customer behavior * **Dynamic content**: Recommendations change based on the current product being viewed * **Customizable display**: 2-10 products, adjustable heading, heading size * **Automatic updates**: No manual product selection—recommendations improve over time * Template-only section (usable on Product page template only) Perfect for PDP cross-selling, "You may also like" sections, and increasing average order value through intelligent product discovery. <Frame> <img alt="Product Recommendations Section" /> </Frame> ## Getting started <Steps> <Step title="Add to Product template"> In Theme Customizer, navigate to **Product** template, then click **Add section** and select **Product recommendations** </Step> <Step title="Configure settings"> Adjust heading text (e.g., "You may also like", "Customers also bought"), heading size, and products to show (2-10) </Step> <Step title="Position the section"> Typically placed below product details or at bottom of PDP for maximum visibility after viewing main product </Step> </Steps> <Note> This section only works on the Product template (main-product). It will not display on other templates as it requires a product context to generate recommendations. </Note> ## Section settings <AccordionGroup> <Accordion title="Heading" icon="heading"> **Text field** (default: "You may also like") Section title displayed above recommended products. Popular alternatives: * "You may also like" (default, general) * "Customers also bought" * "Complete the look" * "Recommended for you" * "Similar products" * "Pair with" Match tone to your brand voice and product relationships. </Accordion> <Accordion title="Heading size" icon="text-size"> **Dropdown** (default: h4) Controls heading prominence: * **h4**: Small/subtle (default) * **h3**: Medium * **h2**: Large * **h1**: Extra large (rarely used for secondary sections) Smaller sizes (h4, h3) work best for PDP sections—keeps focus on main product while offering suggestions. </Accordion> <Accordion title="Products to show" icon="hashtag"> **Range**: 2-10 (default: 10) Maximum number of recommended products to display: * Shopify API returns up to this many recommendations * If fewer recommendations available, section displays available count * Grid layout adjusts to product count (typically 4-5 per row on desktop) **Recommendation**: 4-6 products optimal for most stores. Shows variety without overwhelming user. </Accordion> <Accordion title="Customization info" icon="info-circle"> **Paragraph content**: "Recommendations are customizable. [Read more.](https://help.shopify.com/en/manual/online-store/search-and-discovery/product-recommendations)" Informational only—displayed in Theme Customizer for reference. Shopify's recommendation algorithm considers: * Products frequently bought together * Products viewed in same session * Similar product attributes (type, vendor, tags) * Store-wide purchase patterns </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Below product details" icon="arrow-down"> Place after Add to Cart button and product description. Capitalizes on users ready to buy—suggests complementary items. </Card> <Card title="4-6 products optimal" icon="grid"> Show 4-6 recommendations. Provides choice without decision paralysis. More products = more scrolling, lower engagement. </Card> <Card title="Let AI work" icon="robot"> Don't overthink heading text. Focus on product data quality (tags, types, collections) for better recommendations. </Card> <Card title="Clear heading" icon="comment"> Use descriptive headings that set expectations: "You may also like" (general) vs "Complete the outfit" (specific). </Card> <Card title="Monitor performance" icon="chart-line"> Track click-through rates and add-to-cart from recommendations. Adjust product count and heading based on data. </Card> <Card title="Product data quality" icon="database"> Improve recommendations by properly tagging products, setting product types, and organizing collections logically. </Card> <Card title="h4 heading size" icon="text-size"> Keep default h4 or h3. Recommendations are supplementary—dominant heading pulls focus from main product. </Card> <Card title="Complement main product" icon="link"> Recommendations work best when main product has sufficient history. New products may show generic suggestions initially. </Card> </CardGroup> ## Common use cases **Standard PDP cross-sell** — Below product description, heading "You may also like", 4-6 products for additional purchase suggestions **Fashion/apparel completion** — After "Add to Cart", heading "Complete the look", shows coordinating items (shoes with dress, belt with jeans) **Electronics accessories** — Bottom of PDP, heading "Customers also bought", suggests cases, chargers, screen protectors for phones/laptops **Home goods coordination** — "Pairs well with", suggests complementary decor items, matching furniture, coordinating colors **Beauty product regimens** — "Build your routine", suggests complementary skincare steps, matching shades, full regimens **Gift bundles** — "Frequently bought together", encourages multiple-item purchases for gifting or personal use ## How recommendations work **Shopify's recommendation engine**: * **Machine learning algorithm**: Analyzes store-wide purchase patterns, view history, cart additions * **Product relationships**: Identifies products frequently bought together or viewed in sequence * **Contextual relevance**: Considers current product's type, vendor, tags, collections, price range * **Real-time updates**: Recommendations improve as more customer data accumulates **Recommendation sources**: 1. **Purchase history**: Products bought together in past orders 2. **Browsing behavior**: Products viewed in same browsing sessions 3. **Product similarity**: Matching attributes (type, tags, vendor, collection) 4. **Fallback logic**: If insufficient data, shows products from same collection or vendor **Timeline for accuracy**: * **New stores**: Generic recommendations initially (same collection, random) * **Growing stores**: Improves after 20-50 orders with those products * **Mature stores**: Highly accurate after months of data collection ## Layout behavior **Desktop**: * Horizontal product grid (typically 4-5 products per row) * Products displayed as cards: image, title, price, quick view/add button * Section full-width or contained depending on theme defaults * Heading centered or left-aligned above grid **Mobile**: * Horizontal scrollable carousel OR 2-column grid (theme-dependent) * Swipe to see additional products * Compact product cards optimized for touch * Heading above grid/carousel **Empty state**: * If no recommendations available, section doesn't display (hidden automatically) * Common for brand-new products with no data * Section remains in template but invisible to customers ## Maximizing recommendation quality **Product data optimization**: * **Accurate product types**: Set consistent product types (e.g., "Tops", "Dresses", not random text) * **Strategic tagging**: Use tags for attributes (color, size, style, season) * **Logical collections**: Group related products in collections (algorithm notices patterns) * **Vendor consistency**: Standardize vendor names for brand-based recommendations **Store strategies**: * **Bundle suggestions**: Create bundles/kits to train algorithm on complementary items * **Related products**: Manually link products via "Related Products" apps to influence recommendations * **Order history**: Encourage repeat purchases—more data = better recommendations **Testing approaches**: * Test different heading text to see what drives clicks ("You may also like" vs "Complete the look") * Experiment with product count (4 vs 6 vs 8) and track engagement * Monitor which recommendations get clicked most—inform manual curation elsewhere ## Related sections * **Recommended Products** — Manual or API-powered recommendations (more control, custom products) * **Featured Products** — Manually curated product showcases * **Recently Viewed** — Browser-based recently viewed products section * **Complementary Products** — Shopify Plus feature for curated complementary items ## Technical notes **Shopify Recommendations API**: This section uses Shopify's `recommendations/products` API endpoint. Completely server-side, no merchant configuration needed beyond section settings. **Template requirement**: Only functions on Product template (`main-product.liquid` or equivalent). Other templates lack product context for recommendations. **Recommendation limits**: Shopify API can return 0-10 products per request. Empty response = section hidden automatically. **Performance**: API call is server-side during page render. No client-side JavaScript delays. Recommendations rendered同步 with page load. **Intent types**: Shopify's API supports `related` (default, most common) and `complementary` intent types. This section typically uses `related`—products similar or frequently bought together. **Fallback behavior**: If recommendations unavailable (new product, insufficient data), API returns empty array. Theme handles gracefully by hiding section. **No configuration required**: Unlike apps, no backend setup, no manual product linking. Fully automatic based on store data. **Shopify Plus note**: Shopify Plus stores have access to additional recommendation features and customization via App extensions and API customization. ## Customization beyond settings **Liquid customization** (for developers): * Adjust product card design (image ratio, show/hide elements) * Change grid layout (products per row, gaps) * Customize empty state messaging * Add custom intent types (`related` vs `complementary`) **CSS customization**: * Style product cards, hover states, buttons * Adjust heading typography, colors, spacing * Modify grid gaps, responsive breakpoints **JavaScript enhancements**: * Add quick view modals for recommended products * Track recommendation click analytics * Implement custom product card interactions ## Troubleshooting **No recommendations showing**: * **New product**: Requires purchase/view history to generate recommendations * **Insufficient data**: Store needs more orders for algorithm to identify patterns * **Product mismatch**: No similar products in catalog for algorithm to match * **Template placement**: Confirm section is on Product template, not other templates **Poor recommendation quality**: * **Improve product data**: Add/fix product types, tags, collections * **Increase catalog**: Larger catalogs provide more recommendation opportunities * **Wait for data**: New stores need time to accumulate behavioral data * **Check related apps**: Some apps interfere with Shopify's recommendations **Section displaying incorrectly**: * **Theme compatibility**: Ensure theme supports native product recommendations * **Customization conflicts**: Custom code may override section styling * **Product count**: Try adjusting product count setting (some themes handle counts differently) # Recently Viewed Source: https://docs.digifist.com/themes/mojave/sections/recently-viewed Display products customers recently browsed using browser localStorage tracking for personalized product discovery and easy return navigation ## What this section does The **Recently viewed** section automatically tracks and displays products customers have recently browsed on your store, enabling easy return to previously viewed items. Features include: * **Automatic tracking**: Browser localStorage records viewed products (no cookies) * **Personalized display**: Each visitor sees their own browsing history * **Persistent across sessions**: Tracked products persist even after browser close (until cleared) * **Minimal configuration**: Only heading customizable—tracking is automatic * Works on any template Perfect for improving product discovery, reducing bounce rates, enabling easy product comparison, and recovering abandoned browsing sessions. <Frame> <img alt="Recently Viewed Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From Theme Customizer (any template), click **Add section** and select **Recently viewed** </Step> <Step title="Customize heading"> Adjust heading text (default: "Recently viewed") to match your brand voice </Step> <Step title="Position strategically"> Common placements: bottom of PDP, homepage, cart page, or thank-you page for continued browsing </Step> <Step title="Browse products to test"> View multiple products on your storefront. Return to page with section—recently viewed products now display. </Step> </Steps> <Note> Recently viewed tracking begins immediately. The section will be empty on first visit until customer browses products. Track persists across sessions via browser localStorage. </Note> ## Section settings <AccordionGroup> <Accordion title="Title" icon="heading"> **Text field** (default: "Recently viewed") Section heading displayed above products. Alternative heading options: * "Recently viewed" (default, clear) * "You recently viewed" * "Continue browsing" * "Your browsing history" * "Items you viewed" * "Back to browsing" Keep concise and descriptive—sets expectation for personalized content. </Accordion> </AccordionGroup> <Note> This section has **only one setting** (title). All tracking, product display, and limits are handled automatically by theme JavaScript. </Note> ## How it works **Automatic product tracking**: 1. Customer views any product page (PDP) 2. JavaScript records product ID to browser's localStorage 3. localStorage maintains list of recently viewed product IDs (typically 10-20 products) 4. Recently Viewed section reads localStorage and displays products from that list **Tracking method**: * **localStorage** (not cookies)—larger capacity, persists after browser close * **Client-side** tracking—no server requests, instant updates * **Privacy-friendly**—data stored locally in customer's browser, not sent to servers **Persistence**: * Tracked products persist across browsing sessions * Survives browser close/reopen * Only clears when: customer clears browser data, localStorage quota exceeded, or manual script clearing **Display order**: * Most recently viewed product appears first * Older products appear after * Chronological reverse order (newest → oldest) ## Best practices <CardGroup> <Card title="Bottom of PDP optimal" icon="arrow-down"> Place at bottom of product pages. Customers can easily return to previously viewed items for comparison after viewing details. </Card> <Card title="Homepage for retention" icon="home"> Add to homepage. Returning customers see personalized browsing history immediately—faster reengagement. </Card> <Card title="Cart page for decisions" icon="cart-shopping"> Include on cart page. Customers comparing options can revisit viewed products before finalizing purchase. </Card> <Card title="Clear heading" icon="comment"> Use descriptive heading. "Recently viewed" immediately signals personalized content vs generic product displays. </Card> <Card title="Test tracking behavior" icon="vial"> Browse multiple products yourself. Verify section populates correctly and ordering makes sense (most recent first). </Card> <Card title="Empty state awareness" icon="eye-slash"> Section is empty for first-time visitors or after localStorage clear. Consider placing where empty state isn't jarring. </Card> <Card title="Combine with recommendations" icon="link"> Stack with Product Recommendations or Featured Products. Recently Viewed (personalized) + Recommendations (algorithmic) = comprehensive discovery. </Card> <Card title="Mobile-friendly placement" icon="mobile"> Bottom-of-page placement works best on mobile. Doesn't interrupt primary content, provides continued browsing after main content. </Card> </CardGroup> ## Common use cases **PDP bottom placement** — After product details, show "Recently viewed" to enable easy comparison with just-viewed product **Homepage personalization** — Returning visitors see recent browsing history immediately, creating personalized homepage experience **Cart page browsing** — On cart page, show recently viewed items so customers can reconsider alternatives before checkout **Collection page discovery** — Bottom of collection pages, help customers revisit individual products from browsing session **Thank-you page continuation** — Post-purchase, show "Continue browsing" with recently viewed items for next order **Search page support** — Bottom of search results, remind customers of products viewed before searching ## Layout behavior **Desktop**: * Horizontal product grid (typically 4-5 products per row) * Product cards: image, title, price, optional quick-view * Section full-width or contained (theme-dependent) * Heading centered or left-aligned * Displays up to N products (theme defines limit, typically 8-12) **Mobile**: * Horizontal scrollable carousel OR 2-column grid (theme-dependent) * Swipe to view more products * Compact product cards * Touch-optimized * Typically shows 4-8 products **Empty state**: * Section hidden if no products in localStorage (no awkward empty display) * Appears only after customer has viewed at least one product * First-time visitors won't see section at all **Product limit**: * Theme defines maximum products to display (e.g., 8, 10, 12) * localStorage may track 20+ products, but section shows most recent N only * Ensures section doesn't become overwhelmingly long ## Tracking behavior **What triggers tracking**: * **Product page view**: Simply visiting any /products/\[handle] page adds product to localStorage * **Automatic**: No click, no add-to-cart required—just page load **What's NOT tracked**: * Collection page views (only individual product pages) * Quick-view modal views (unless theme implements custom tracking) * Product images clicked in other sections (unless they link to PDP) **Data stored**: * Product IDs (numerical Shopify product IDs) * Possibly variant IDs (theme-specific) * Timestamp (for ordering, theme-specific) **Storage limits**: * localStorage capacity: \~5-10MB per origin (plenty for product IDs) * Typical storage: 10-20 product IDs = few KB * If quota exceeded: oldest entries removed (FIFO - first in, first out) ## Technical details **JavaScript implementation**: * Theme JavaScript listens for PDP page loads * On load, extracts product ID from page or meta tags * Writes product ID to localStorage array * Recently Viewed section reads localStorage on page render * Fetches product data via Shopify Ajax API * Renders product cards dynamically **localStorage key**: * Typically `theme.recentlyViewed` or similar custom key * Stores JSON array of product IDs: `[12345, 67890, 24680]` **Product data fetching**: * Section reads IDs from localStorage * Makes Ajax API requests to `/products/[id].js` or GraphQL * Retrieves product title, price, images, URLs * Renders product cards client-side **Performance**: * **Initial load**: Section may be empty, filled after JS executes (async) * **Cache-friendly**: Product data cached by browser for repeat views * **No server rendering**: Products loaded client-side after page render ## Privacy & data considerations **GDPR/privacy compliance**: * **localStorage is not a cookie**—different regulations * **No personal data**: Only product IDs stored, no customer identifiable information * **Local only**: Data never transmitted to servers (unless deliberately implemented) * **User control**: Users can clear localStorage via browser settings **Privacy policy**: * Disclose use of localStorage for product tracking * Explain purpose: improve browsing experience, personalize content * Provide instructions for clearing (standard browser methods) **Opt-out options**: * Some themes provide "Clear recently viewed" button * Users can manually clear via browser: Developer Tools → Application → Local Storage → Clear ## Customization tips **For PDP (product comparison)**: * Place at bottom of product page * Heading: "Recently viewed" * Allows quick return to previous products for comparison **For homepage (returning visitors)**: * Place mid-page or bottom * Heading: "Continue where you left off", "Your recent browsing" * Creates personalized homepage experience **For cart page (decision support)**: * Place below cart items or after recommendations * Heading: "Still deciding?", "Compare these items" * Helps indecisive customers revisit alternatives **For thank-you page (re-engagement)**: * Place at bottom of post-purchase page * Heading: "Continue browsing", "Shop more items" * Encourages next purchase or wishlist building ## Related sections * **Product Recommendations** — AI-powered product suggestions (algorithmic vs browsing history) * **Recommended Products** — Manual or API-driven recommendations (curated vs personalized) * **Featured Products** — Static curated product showcases (universal vs personalized) * **Collection Products** — Collection-based product displays (category vs history) ## Comparison: Recently Viewed vs Recommendations | Feature | Recently Viewed | Product Recommendations | | ------------------- | -------------------------------------- | ------------------------------------------ | | **Source** | Customer's browsing history | Shopify's AI algorithm | | **Personalization** | 100% personalized (unique per visitor) | Contextual (based on current product/cart) | | **Data required** | None (works immediately) | Requires order history, view data | | **Control** | Automatic (no curation) | Automatic (algorithm decides) | | **Empty state** | Empty for new visitors | Empty for new products/stores | | **Purpose** | Return to browsing,comparison | Discovery, cross-sell, upsell | | **Best placement** | PDP bottom, homepage, cart | PDP, cart, post-purchase | **When to use both**: * Stack Recently Viewed + Product Recommendations on PDP * Recently Viewed: Helps comparison * Recommendations: Encourages discovery * Together: Maximum product exposure and engagement ## Troubleshooting **Section not appearing**: * **No products viewed yet**: Browse some products first * **JavaScript disabled**: Tracking requires JavaScript enabled * **localStorage disabled**: Browser may block localStorage (privacy settings) * **Theme compatibility**: Ensure theme includes recently-viewed JavaScript **Wrong products showing**: * **Cache issue**: Clear browser cache and localStorage * **Multiple stores**: localStorage shared per domain—test on unique domain * **Product availability**: Out-of-stock or deleted products may still appear (until localStorage cleared) **Order incorrect (not most recent first)**: * **Theme implementation**: Check theme's JS sorting logic * **Timestamp missing**: Some themes don't store timestamps, affecting order * **localStorage corruption**: Clear and rebuild data **Products not updating**: * **Cache aggressive**: Browser caching product data too long * **JS errors**: Check browser console for JavaScript errors preventing updates * **Conflicting apps**: Third-party apps may interfere with localStorage **Empty after browser close/reopen**: * **localStorage being cleared**: Check browser settings (incognito mode clears on close) * **Theme using sessionStorage**: sessionStorage clears on close (not localStorage) * **Privacy extensions**: Browser extensions may auto-clear storage ## Advanced implementation notes **Custom tracking**: * Developers can extend tracking to capture variants, timestamps, scroll depth * Custom events: Track clicks on recently viewed items for analytics * External storage: Save to customer metafields for cross-device persistence (requires Shopify API) **Product limit configuration**: * Theme may expose setting for max products (typically theme settings, not section settings) * Check `theme settings > Product > Recently viewed limit` * If not exposed, requires theme code modification **Styling customization**: * CSS targets: `.recently-viewed`, `.recently-viewed__product-card` (class names vary) * Adjust grid layout, card styling, hover effects via CSS * Responsive breakpoints for mobile optimization **JavaScript hooks**: * Listen for `theme:recentlyviewed:updated` custom events (theme-specific) * Track analytics when recently viewed products are clicked * Implement "Remove from recently viewed" functionality # Recommended Products Source: https://docs.digifist.com/themes/mojave/sections/recommended-products Display curated product recommendations using Shopify's API or manual product selection with customizable heading and call-to-action ## What this section does The **Recommended products** section showcases product suggestions with flexible sourcing: automatic Shopify recommendations OR manual product selection. Features include: * **Two modes**: Shopify recommendation API (automatic) or manual product blocks * **API mode**: AI-powered recommendations based on first product added to cart * **Manual mode**: Curate specific products via product blocks * **1-10 product limit** (configurable) * Heading, link/CTA button * Works on any template (not restricted to Product template) Perfect for cart page upsells, post-cart recommendations, homepage suggestions, or any page where you want flexible product showcasing. <Frame> <img alt="Recommended Products Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer (any template), click **Add section** and select **Recommended products** </Step> <Step title="Choose mode"> **Enable recommended API** (checked) = Automatic Shopify recommendations. Unchecked = Manual product blocks. </Step> <Step title="Configure settings"> Set product limit (1-10), heading, link text/URL. If manual mode, add product blocks. </Step> <Step title="Position strategically"> Common placements: cart page, post-purchase page, homepage, collection pages for cross-selling </Step> </Steps> ## Section settings <AccordionGroup> <Accordion title="Enable recommended API" icon="robot"> **Checkbox** (default: checked) Controls product sourcing method: * **Checked (default)**: Uses Shopify recommendation API—automatic product suggestions * **Unchecked**: Uses manual product blocks—you select specific products **Info**: "When enabled, product blocks from this section are ignored. Instead, automatically-generated list of product recommendations are displayed, based on the first product, that was added to cart. [More details](https://help.shopify.com/en/manual/online-store/search-and-discovery/product-recommendations)." **API mode** = intelligent, hands-off recommendations.\ **Manual mode** = full control, curated selection. </Accordion> <Accordion title="Recommended products limit" icon="hashtag"> **Range**: 1-10 (default: 4) Maximum number of products to display: * **API mode**: Requests this many recommendations from Shopify * **Manual mode**: Limits how many product blocks are displayed (even if more blocks exist) Typical sweet spot: 3-6 products for balanced display without overwhelming. </Accordion> <Accordion title="Heading" icon="heading"> **Textarea** (default: "You may also like") Section title above products. Context-specific suggestions: * Cart page: "Complete your order", "Don't forget these" * Homepage: "Trending now", "Staff picks" * Post-purchase: "Customers also bought", "Recommended for you" * Collection page: "You might also love" </Accordion> <Accordion title="Link text & URL" icon="link"> **Link text** (text field, default: "Shop all") * CTA button text below products **Link URL** (URL field, default: /collections) * Button destination Use to drive users to broader catalog: "View all products" → /collections/all, "Shop more" → /collections/bestsellers. </Accordion> </AccordionGroup> ## Block: Product **Type**: product (unlimited blocks, but limited by "Recommended products limit" setting) Only used when "Enable recommended API" is **unchecked** (manual mode). <AccordionGroup> <Accordion title="Product" icon="box"> **Product picker** (required) Select specific product to feature in this block. Manual product blocks are ignored when API mode is enabled. When API is disabled, these blocks define which products display (up to the Products Limit). **Example**: Limit set to 4, but you add 6 product blocks → only first 4 blocks display. </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="API for cart pages" icon="shopping-cart"> Enable API mode on cart page. Shopify's algorithm suggests products based on what's already in cart—intelligent upselling. </Card> <Card title="Manual for curation" icon="hand"> Use manual mode for curated selections: bestsellers, new arrivals, seasonal must-haves where you control exact products. </Card> <Card title="3-6 product limit" icon="grid"> Display 3-6 products optimal. Provides choice without scroll fatigue. More products = diluted focus, lower conversion. </Card> <Card title="Context-specific heading" icon="heading"> Match heading to page context. Cart: "Complete your order". Homepage: "Trending now". Makes intent clear. </Card> <Card title="Strategic link placement" icon="link"> Link button drives broader discovery. "Shop all" → full catalog. Use when recommendations serve as teaser, not complete selection. </Card> <Card title="Test both modes" icon="flask"> A/B test API vs manual on same template. API learns from data, manual reflects your merchandising strategy. </Card> <Card title="Update manual regularly" icon="calendar"> If using manual mode, refresh product blocks seasonally or monthly. Stale recommendations reduce effectiveness. </Card> <Card title="Monitor API quality" icon="chart-line"> API recommendations improve over time. New stores: manual mode initially, switch to API as data accumulates. </Card> </CardGroup> ## Common use cases **Cart page upsells** — API mode enabled, heading "Complete your order", 4 products based on cart contents **Post-add-to-cart popup** — After customer adds product, show "Customers also bought" with API recommendations (requires theme support) **Homepage trending products** — Manual mode, heading "Trending now", hand-picked bestsellers or new arrivals (4-6 products) **Collection page cross-sell** — Manual mode, heading "You might also love", complementary products from related collections **Checkout page recommendations** — API mode, "Don't forget these", last-chance upsell items based on order contents **Thank-you page follow-up** — Manual or API, "For your next order", encourages repeat purchase with relevant products ## API mode vs Manual mode ### API Mode (Enable recommended API: **checked**) **How it works**: * Shopify analyzes **first product added to cart** * Generates recommendations based on purchase patterns, product relationships, browsing data * Returns up to Products Limit products dynamically **Pros**: * Hands-free—no manual product management * Intelligent—learns from store data * Contextual—relevant to cart contents **Cons**: * Requires cart context (works best on cart/checkout pages) * New stores have limited data = generic recommendations * Less control over exact products shown **Best for**: Cart page, post-add-to-cart, checkout upsells ### Manual Mode (Enable recommended API: **unchecked**) **How it works**: * You add product blocks, selecting specific products * Section displays products from blocks (up to Products Limit) * Static—same products for all visitors **Pros**: * Full control—handpick exact products * Merchandising strategy—showcase what YOU want to sell * Consistent—reliable product selection **Cons**: * Manual maintenance—requires updating * Not contextual—same for everyone * No learning—doesn't adapt to customer behavior **Best for**: Homepage features, seasonal promotions, curated collections ## Layout behavior **Desktop**: * Horizontal product grid (typically 3-4 products per row) * Product cards: image, title, price, optional quick-add button * Heading centered or left-aligned above grid * Link button below grid (centered) * Full-width or contained section (theme-dependent) **Mobile**: * 2-column grid OR horizontal scrollable carousel (theme-dependent) * Compact product cards * Heading above products * Link button below products * Touch-optimized interactions **Empty state**: * **API mode**: If no recommendations available, section hidden automatically * **Manual mode**: If no product blocks added (or all hidden), section may show empty or hide ## API mode behavior **Cart context requirement**: * API returns recommendations **based on first product in cart** * If cart is empty, recommendations may be generic or empty * Works best on Cart template, Cart drawer, Checkout pages **Recommendation logic**: * Shopify analyzes first cart item * Finds products frequently bought together or viewed with that product * Returns up to Products Limit recommendations * Falls back to similar products if insufficient data **Data requirements**: * **New stores**: Limited data = generic or empty recommendations * **Growing stores**: Recommendations improve after 50-100 orders * **Mature stores**: Accurate, intelligent suggestions based on patterns **Real-world example**: * Customer adds "Blue Denim Jacket" to cart * API recommends: "White T-Shirt", "Black Jeans", "Brown Boots" (items frequently bought with jackets) ## Manual mode workflow **Setting up manual products**: 1. Uncheck "Enable recommended API" 2. Click "Add product" block 3. Select product from picker 4. Repeat for desired products (add more than limit for flexibility) 5. Rearrange blocks to control display order **Product limit interaction**: * **Limit = 4, Blocks = 6**: First 4 blocks display, last 2 ignored * **Limit = 8, Blocks = 3**: All 3 display, section requests more but none available **Updating products**: * Seasonal refresh: Swap products every quarter * Performance-based: Remove low-performers, add high-margin items * Stock awareness: Hide/remove out-of-stock products ## Customization tips **For cart page (API mode)**: * Enable API: Checked * Products limit: 4-6 * Heading: "Complete your order", "Customers also bought" * Link: "Continue shopping" → /collections **For homepage (Manual mode)**: * Enable API: Unchecked * Products limit: 6 * Heading: "Trending now", "Bestsellers" * Link: "Shop all" → /collections/all * Products: Hand-picked new arrivals, bestsellers, high-margin **For collection page (Manual mode)**: * Enable API: Unchecked * Products limit: 4 * Heading: "You might also love" * Link: "View related" → complementary collection * Products: Related products from other collections **For post-purchase page (API mode)**: * Enable API: Checked (recommendations based on order) * Products limit: 4 * Heading: "For your next order", "Recommended for you" * Link: "Keep shopping" → /collections ## Related sections * **Product Recommendations** — Shopify's native PDP-specific recommendation section * **Featured Products** — Collection-based or manual product showcases * **Recently Viewed** — Browser-based recently viewed tracking * **Cart Recommendations** — Cart-drawer-specific product suggestions (theme-dependent) ## Technical notes **API endpoint**: Uses Shopify's `/recommendations/products` API, same as Product Recommendations section. Difference: accepts cart context, not just single product. **Template flexibility**: Unlike Product Recommendations (PDP only), this section works on ANY template—cart, homepage, collection, pages, etc. **Product block limit**: Unlimited product blocks can be added, but only up to "Products limit" setting will display. Add extras for flexibility and A/B testing. **API vs blocks precedence**: When API mode is enabled, product blocks are completely ignored—doesn't matter if they exist. When API disabled, blocks take over. **Cart dependency (API mode)**: API mode effectiveness depends on cart state. Empty cart = no/generic recommendations. Single item in cart = recommendations for that item. **Manual block order**: Product blocks display in the order they appear in Theme Customizer (top to bottom). Drag blocks to reorder. **Empty state handling**: Theme determines empty state behavior—some hide section, others show "No recommendations" message. **Performance**: API calls are server-side (fast). Manual mode has no API overhead (even faster). ## Troubleshooting **API mode shows no products**: * **Empty cart**: Add item to cart to trigger recommendations * **New store**: Insufficient data for recommendations to generate * **Products limit too high**: API returns fewer than requested * **Template mismatch**: Some templates may not pass cart context properly **Manual mode not working**: * **API still enabled**: Uncheck "Enable recommended API" * **No product blocks**: Add at least one product block * **Products limit = 0 or very low**: Increase limit to at least 3-4 * **Blocks hidden**: Check product block visibility settings **Products displaying incorrectly**: * **Theme styling**: Check theme's product card CSS * **Product limit mismatch**: Verify limit matches desired product count * **Responsive issues**: Test on multiple devices, adjust theme layout settings **API recommendations poor quality**: * **Low order volume**: New stores need 50-100+ orders for good data * **Product data quality**: Improve product types, tags, collections * **Unrelated cart items**: API struggles with very diverse cart contents * **Switch to manual**: Temporarily use manual mode until data improves # Rich Text (SEO Content) Source: https://docs.digifist.com/themes/mojave/sections/richtext Create focused content blocks with headings, rich text, and optional links for editorial content, brand storytelling, or informational sections ## What this section does The **Rich Text** section creates clean, focused content blocks perfect for editorial content, brand storytelling, FAQs, or any text-heavy pages. It supports: * Heading (optional, limit 1) * Rich text content with formatting (optional, limit 1) * Link/CTA (optional, limit 1) This minimalist section is ideal for About pages, Store Policy pages, brand story sections, or anywhere you need clean, readable text content without distractions. <Frame> <img alt="Rich Text Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Richtext** </Step> <Step title="Add content blocks"> Add **Heading**, **Content**, and/or **Link** blocks as needed (each limited to 1 per section) </Step> <Step title="Configure layout"> Set text alignment, adjust max width and section width, and configure spacing for your page design </Step> </Steps> ## Section settings <AccordionGroup> <Accordion title="Text horizontal align" icon="align-left"> **Dropdown** (default: Center) Controls horizontal alignment of all text content in the section: * **Start** (Left): Left-aligned text * **Center**: Centered text (default, works well for focused content) * **End** (Right): Right-aligned text Center alignment is most common for rich text sections as it creates a focused, editorial feel. </Accordion> <Accordion title="Max width" icon="arrows-left-right"> **Dropdown** (default: Wide) Controls the maximum width of the text content area: * **Default**: Narrower, more focused reading width (optimal for readability) * **Wide**: Wider content area for more expansive text **Default** width is recommended for long-form content as it keeps line length optimal for reading (\~60-80 characters per line). </Accordion> <Accordion title="Section width" icon="maximize"> **Dropdown** (default: Full) Controls the overall section container width: * **Narrow**: Tighter container (medium width) * **Full**: Full-width container (edge-to-edge) **Best practices**: * Use **Narrow** with center alignment for focused, editorial content * Use **Full** when Rich Text is part of a broader page layout </Accordion> <Accordion title="Add decoration" icon="sparkles"> **Checkbox** (default: unchecked) Adds a decorative element (typically a small graphic or line) to enhance the visual appeal of the section. </Accordion> <Accordion title="Spacing - Desktop" icon="arrows-up-down"> **Dropdown** (default: Compact) Controls vertical spacing above and below the section on desktop: * **Default**: Standard spacing * **Medium**: Moderate spacing * **Compact**: Minimal spacing (recommended for text sections) * **None**: No spacing for seamless layouts </Accordion> <Accordion title="Spacing - Mobile" icon="mobile"> **Dropdown** (default: Default) Controls vertical spacing above and below the section on mobile: * **Default**: Standard mobile spacing (recommended) * **Compact**: Reduced spacing * **None**: No spacing </Accordion> </AccordionGroup> ## Block types ### Heading block **Limit: 1 per section** <AccordionGroup> <Accordion title="Heading" icon="heading"> **Textarea** (default: "Talk about your brand") Main heading for the rich text section. Supports multiple lines. Keep concise (3-7 words) for section headings. </Accordion> </AccordionGroup> ### Content block **Limit: 1 per section** <AccordionGroup> <Accordion title="Content" icon="align-left"> **Rich text editor** (default: "Share information about your brand...") Full-featured rich text content with formatting options: * **Bold** and *italic* text * Headings (H1-H6) * Bullet and numbered lists * Links * Paragraphs Use for long-form content, brand stories, product descriptions, or any formatted text. </Accordion> </AccordionGroup> ### Link block **Limit: 1 per section** <AccordionGroup> <Accordion title="Link text" icon="link"> **Text field** (default: "Shop all") Text displayed for the call-to-action link. </Accordion> <Accordion title="Link URL" icon="arrow-up-right-from-square"> **URL field** (default: /collections) Destination URL for the CTA link. Common destinations: collection pages, product pages, other content pages, external links. </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Optimal line length" icon="text"> Use Default max width (not Wide) for long-form content. Shorter line lengths (\~60-80 characters) improve readability. </Card> <Card title="Center for focus" icon="align-center"> Center-aligned text works best for standalone rich text sections. Use left alignment when rich text is part of a larger layout. </Card> <Card title="One of each block" icon="layer-group"> Add exactly one Heading, one Content, and one Link block for complete sections. Each block is optional but limited to 1. </Card> <Card title="Rich text formatting" icon="paragraph"> Use Content block formatting (bold, lists, headings) to break up long text and guide readers through your content. </Card> <Card title="Narrow + Center" icon="compress"> Combine Narrow section width with Center text alignment for highly focused, editorial-style content display. </Card> <Card title="Compact spacing" icon="arrows-up-down"> Use Compact spacing (default) for text sections that should flow naturally without excessive whitespace. </Card> <Card title="Skip the link" icon="link-slash"> Not every rich text section needs a CTA link. Skip the Link block for pure informational content. </Card> <Card title="Decoration sparingly" icon="sparkles"> Enable decoration for special sections (About, Brand Story) but keep it off for utilitarian content (Policies, FAQs). </Card> </CardGroup> ## Common use cases **About page** — Tell your brand story with a heading, rich formatted content, and a link to learn more or shop **Policy pages** — Display shipping, return, or privacy policies in clean, readable format **FAQ sections** — Create question-and-answer content with rich text formatting **Homepage brand story** — Add editorial content blocks between product sections to build brand narrative **Landing page copy** — Provide detailed product, campaign, or collection information in formatted text **Informational blocks** — Add context, details, or instructions anywhere on your site with clean typography ## Layout behavior **All screen sizes**: * Content spans max width (Default or Wide) within section width (Narrow or Full) * Text alignment (center/left/right) applies to all blocks * Blocks stack vertically in this order: Heading → Content → Link **Desktop**: * Full rich text formatting visible * Optimal line length maintained by max width setting **Mobile**: * Responsive text sizing for mobile readability * Maintains alignment and max width proportionally ## Content structure Typical rich text section includes (all optional): 1. **Heading block** (1 max): Section title 2. **Content block** (1 max): Formatted body text 3. **Link block** (1 max): CTA link at bottom You can use any combination—heading only, content only, or all three blocks together. ## Related sections * **Multi Column Text** — Rich text content spread across multiple columns * **Accordions** — Collapsible rich text content for FAQs or long content * **Images with Text** — Rich text combined with images in layout # Shop the Look Source: https://docs.digifist.com/themes/mojave/sections/shop-the-look Create interactive lifestyle images with clickable product hotspots, perfect for editorial styling and 'shop the look' campaigns ## What this section does The **Shop the look** section creates a split-screen layout featuring a lifestyle image with clickable product hotspots, enabling customers to instantly shop items from styled photography. Features include: * **Split-screen layout**: Image on one side, text content on other * **Unlimited product hotspots** positioned via X/Y coordinates * **Interactive dots/pins** overlay the lifestyle image * Heading, link/CTA button * Flip toggle to swap image/content positions * Fullwidth or Page container options * Responsive design (stacks on mobile) Perfect for editorial styling, lookbook presentations, outfit showcases, room designs, or any "shop this look" campaigns. <Frame> <img alt="Shop the Look Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Shop the look** </Step> <Step title="Upload lifestyle image"> Add a styled lifestyle image (1440x1200px recommended) showing products in context </Step> <Step title="Add product hotspots"> Click **Add Link product** block for each product in the image. Configure product and position (X/Y coordinates). </Step> <Step title="Configure content"> Add heading (e.g., "Shop This Look"), link text/URL, and adjust flip/spacing settings </Step> </Steps> ## Section settings <Tabs> <Tab title="Layout"> <AccordionGroup> <Accordion title="Spacing - Desktop & Mobile" icon="arrows-up-down"> **Desktop** (default: Default) and **Mobile** (default: Compact) Vertical spacing above and below the section: * **Default**: Standard spacing * **Medium**: Moderate spacing * **Compact**: Minimal spacing * **None**: No spacing (desktop only) Mobile options: Default, Compact, None. </Accordion> <Accordion title="Flip image/content position" icon="right-left"> **Checkbox** (default: unchecked) Swaps the position of image and content: * Unchecked: Image left, content right (default) * Checked: Content left, image right Use flip for visual variety when stacking multiple Shop the Look sections on a page. </Accordion> <Accordion title="Section width" icon="arrows-left-right"> **Dropdown** (default: Fullwidth) Container width: * **Page**: Standard page width * **Fullwidth**: Edge-to-edge (default) Fullwidth creates more dramatic, magazine-style layouts. Page width integrates better with other contained sections. </Accordion> </AccordionGroup> </Tab> <Tab title="Content"> <AccordionGroup> <Accordion title="Heading" icon="heading"> **Textarea** (default: "Meet the designer") Main heading for the section: * Supports multiple lines (use Shift+Enter) * Prominent display in content area Examples: "Shop This Look", "Get The Look", "Style It Your Way", "Outfit Essentials" Change default to match your use case—"Meet the designer" is a preset default but should be customized. </Accordion> <Accordion title="Link label & URL" icon="link"> **Link label** (text field, default: "Show now") * CTA button text **Link URL** (URL field, optional) * Button destination Use when you want to drive users beyond individual products (e.g., link to full collection: "View Full Collection" → /collections/spring-2024). <Note>Default text "Show now" appears to be a typo—customize to "Shop now" or your preferred CTA.</Note> </Accordion> <Accordion title="Image" icon="image"> **Image picker** (required) Lifestyle/styled photograph showing products in context: * **Recommended size**: 1440x1200px * **Info**: "Recommended sizes: 1440x1200px" * Should clearly show products that will have hotspots Use high-quality photography with products clearly visible. Lighting and composition should make product identification easy. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block: Link product **Type**: showcase\_dot (unlimited blocks) Each block creates one clickable product hotspot positioned on the lifestyle image. <AccordionGroup> <Accordion title="Product" icon="tag"> **Product picker** (required) Select product to link from this hotspot: * Clicking hotspot navigates to product page (PDP) * Product info (title, price) shown in tooltip on hover * Product must be active and published Choose products that are clearly visible in the lifestyle image. </Accordion> <Accordion title="Position X & Y" icon="crosshairs"> **Position X** (range: 0-100%, default: 25%) * Horizontal position from left edge * 0% = far left, 100% = far right **Position Y** (range: 0-100%, default: 25%) * Vertical position from top edge * 0% = top, 100% = bottom **Header**: "Position" Position hotspot precisely over the product in the image. Fine-tune to ensure pin appears directly on the product. **Example**: Jacket at top-right → X: 75%, Y: 20% </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="1440x1200 image size" icon="image"> Use recommended 1440x1200px for optimal quality. Split-screen layout displays large—lower resolution looks pixelated. </Card> <Card title="3-5 products optimal" icon="hashtag"> Too few (1-2) doesn't justify the section. Too many (8+) creates visual clutter. 3-5 products creates balanced "shop the look". </Card> <Card title="Clear product visibility" icon="eye"> Ensure products are clearly visible, well-lit, and distinguishable in lifestyle image. Avoid busy backgrounds that obscure items. </Card> <Card title="Precise hotspot placement" icon="bullseye"> Position pins directly on products, not nearby. Accurate placement creates intuitive, trustworthy "shop this" experience. </Card> <Card title="Curated product selection" icon="star"> Feature complementary products that work together. Don't just add every item in photo—select hero pieces customers should shop. </Card> <Card title="Flip for variety" icon="shuffle"> When using multiple sections, alternate flip toggle. Creates visual rhythm: left-right, right-left pattern down the page. </Card> <Card title="Fullwidth for impact" icon="maximize"> Use default Fullwidth for homepage or landing pages. Page width works better for PDP or mid-page styling sections. </Card> <Card title="Consistent photography style" icon="camera"> If using multiple sections, maintain consistent photography style (lighting, angle, aesthetic) for cohesive brand experience. </Card> </CardGroup> ## Common use cases **Fashion lookbooks** — Complete outfit showcases with hotspots on jacket, pants, shoes, accessories (e.g., "Spring Capsule Wardrobe") **Home decor room styling** — Styled room with hotspots on furniture, lighting, decor items (e.g., "Living Room Essentials") **Beauty/skincare routines** — Flatlay or lifestyle shot with skincare/makeup products (e.g., "My Morning Routine") **Product collections** — Hero image showcasing new collection with key pieces clickable (e.g., "New Arrivals - Shop Now") **Editorial content** — Magazine-style product features with editorial photography and strategic hotspots **Gift guides** — Curated gift selections in lifestyle context (e.g., "Holiday Gift Guide", "Gifts Under \$50") ## Layout behavior **Desktop**: * Split-screen: 50% image, 50% content * Image side: Lifestyle photo with product hotspots overlaid * Content side: Heading + link button, vertically centered * Flip toggle swaps which side is which * Hotspots appear as interactive dots/pins * Hover: Product tooltip with title, price, image **Mobile**: * Stacks vertically: Image → Content * Image: Full width with hotspots * Content: Heading + button below image * Flip setting has no effect (always image-first) * Hotspots remain interactive (tap to view product or navigate) **Hotspot interaction**: * **Visual**: Small circular dot/pin on image * **Hover (desktop)**: Tooltip popup with product card (image, title, price) * **Click**: Navigate to product page (PDP) * **Touch (mobile)**: Tap to show tooltip or navigate directly ## Image guidelines **Recommended size: 1440x1200px** * Aspect ratio: 6:5 (slightly wider than tall) * High resolution for split-screen display—image takes 50% of screen * Optimize: JPG, quality 80-85%, aim for \< 300KB **Photography best practices**: * **Clear product focus**: Products should be primary subjects, clearly visible * **Balanced composition**: Distribute products across image area (not all clustered) * **Even lighting**: Avoid harsh shadows that obscure products * **Minimal busy backgrounds**: Clean, simple backgrounds let products stand out * **Brand-consistent styling**: Matches your brand aesthetic and photography style **Product placement in photo**: * Products positioned with space for hotspots (not edges/corners) * Products not overlapping significantly (each needs clear hotspot position) * Hero product most prominent, supporting products visible but secondary ## Hotspot positioning tips **Finding X/Y coordinates**: 1. Start with rough estimate: "Product is top-right → X: 70-80%, Y: 20-30%" 2. Preview section, adjust sliders until pin is directly on product 3. Fine-tune in 1-5% increments for precision **Positioning challenges**: * **Overlapping products**: Place hotspot on most prominent part of main product * **Small accessories**: Center hotspot on item, may need slightly larger click area * **Background products**: Use lower Y values (closer to bottom) for items further back **Testing**: * Preview on multiple screen sizes—hotspots may shift slightly with responsive images * Test both hover and click behavior * Ensure tooltips don't overlap (space hotspots adequately) ## Content strategy **Heading text**: * Action-oriented: "Shop This Look", "Get The Style" * Descriptive: "Coastal Living Room", "Date Night Outfit" * Seasonal: "Fall Favorites", "Summer Essentials" * 2-5 words ideal **Product selection**: * **Hero products**: Focus on new arrivals, bestsellers, or high-margin items * **Complement**: Choose products that work together (outfit, room set, routine) * **Price mix**: Mix price points—include accessible and aspirational items * **Stock awareness**: Only feature in-stock products (broken links hurt UX) **Link/CTA usage**: * Use link when directing to collection ("View Full Spring Collection") * Omit link if primary action is individual product clicks via hotspots * Link text should be specific, not generic ("Shop All Looks" vs "Click Here") ## Customization tips **For fashion lookbook**: * Fullwidth layout * Lifestyle model or flatlay showing complete outfit * 4-6 hotspots: main garments (top, bottom, outerwear) + 1-2 accessories * Heading: "Get The Look", "Outfit Inspiration" * No link button (focus on product hotspots) **For home decor**: * Page width for contained look * Styled room photography (living room, bedroom, etc.) * 3-5 hotspots: furniture, lighting, decor pieces * Heading: "\[Room Name] Essentials", "Shop This Space" * Link: "View Full Collection" → room category **For product launch**: * Fullwidth for impact * Hero product photography with supporting items * 3 hotspots: main product + 2 complementary * Heading: "New Arrival", "Just Launched" * Link: "Explore New Collection" **For gift guide**: * Multiple sections stacked, alternating flip * Themed photography per section (budget, recipient, occasion) * 3-4 products per section * Heading: "Gifts Under \$50", "For Him", "Stocking Stuffers" * Link: Corresponding gift guide collection page ## Related sections * **Images with Text** — Similar split-screen but with separate primary/secondary image areas * **Featured Collections Links** — Multi-collection showcase with product tiles * **Banner - Fullwidth** — Fullwidth promotional banners with optional hotspots * **Content Tiles** — Grid-based product/content tiles without hotspot functionality ## Technical notes **Unlimited hotspots**: No block limit—add as many product hotspots as needed. However, 3-6 recommended for optimal UX. **Hotspot positioning**: Uses absolute CSS positioning with percentage-based coordinates. Responsive images may cause slight shifting—test across devices. **Product data**: Hotspot tooltips pull live product data (title, price, image) from Shopify. Product changes reflect automatically. **Mobile hotspot behavior**: Theme-dependent—some themes show tooltips on tap, others navigate directly to PDP. Test mobile behavior. **Image focal point**: Shopify's focal point setting affects how image crops on different screen sizes. Set focal point to ensure products remain visible. **Link vs. hotspots**: Section link/button is optional—many implementations skip it and rely solely on product hotspots for interaction. **Flip implementation**: Flip toggle uses CSS flexbox order or transform to swap positions without reloading. Instant visual change in editor. # Spacing Source: https://docs.digifist.com/themes/mojave/sections/spacing Utility section for adding customizable vertical spacing between sections ## What It Does The **Spacing** section provides a simple, customizable way to add vertical whitespace between sections on your pages. Perfect for creating visual breathing room, separating distinct content areas, or adjusting page rhythm without custom CSS. ## Getting Started <Steps> <Step title="Add the Section"> Add the Spacing section between other sections where you want additional vertical space </Step> <Step title="Choose Desktop Spacing"> Select your desired spacing amount for desktop screens (Default, Medium, Compact, or None) </Step> <Step title="Choose Mobile Spacing"> Select your mobile spacing (typically kept at Compact to reduce scrolling on small screens) </Step> <Step title="Preview and Adjust"> Preview your page and adjust spacing values until you achieve the desired visual separation </Step> </Steps> ## Settings <AccordionGroup> <Accordion title="Spacing - Desktop" icon="desktop"> **Type:** Select dropdown\ **Options:** Default, Medium, Compact, None\ **Default:** Default Controls the amount of vertical spacing (height) on desktop screens (typically 1200px and wider). ### Spacing Options **None (0px spacing)** * No additional spacing added * Adjacent sections directly touch * **Use when:** You want completely continuous visual flow or you're using this section as a placeholder for future content **Compact (\~20-30px spacing)** * Minimal vertical space * Subtle separation between sections * **Use when:** You need slight breathing room but want to maintain a tight, content-dense layout * **Best for:** Long pages with many sections where cumulative spacing would create excessive scrolling **Default (\~40-60px spacing)** ← **Most Common** * Standard vertical spacing matching most theme sections * Balanced separation without feeling empty * **Use when:** You need standard breathing room between distinct content areas * **Best for:** General-purpose spacing on most pages (homepage, about, collection pages) **Medium (\~80-100px spacing)** * Generous vertical space * Creates strong visual separation between sections * **Use when:** You want to emphasize distinct page "chapters" or create a more spacious, luxury aesthetic * **Best for:** Minimalist designs, high-end brands, pages with fewer sections that benefit from breathing room ### Choosing the Right Desktop Spacing **Consider Page Context:** * **Homepage:** Default or Medium (establish visual hierarchy) * **About page:** Default (balanced storytelling flow) * **Collection pages:** Compact (keep products visible) * **Single-section pages:** Medium (add prominence to limited content) **Consider Adjacent Sections:** * Between hero and product grid: Default or Medium * Between similar content sections: Compact or Default * Between drastically different sections: Default or Medium * After full-width imagery: Medium (let image breathe) </Accordion> <Accordion title="Spacing - Mobile" icon="mobile"> **Type:** Select dropdown\ **Options:** Default, Compact, None\ **Default:** Compact Controls the amount of vertical spacing on mobile devices (typically under 768px). Note that mobile has **fewer options** than desktop (no Medium option) to prevent excessive scrolling. ### Mobile Spacing Options **None (0px spacing)** * No additional spacing * Sections directly touch * **Use when:** Continuous visual flow desired or placeholder for future content **Compact (\~15-20px spacing)** ← **Default & Recommended** * Minimal vertical space optimized for mobile * Reduces scrolling while maintaining visual separation * **Use when:** Standard use case—provides breathing room without excessive scrolling * **Best for:** Most mobile layouts (homepage, product pages, about pages) **Default (\~30-40px spacing)** * Standard spacing similar to desktop Default * More generous breathing room * **Use when:** Page has few sections and you can afford extra space * **Best for:** Minimalist designs, luxury brands, or pages where scrolling isn't a concern ### Mobile Spacing Best Practices **Why Compact is Default:** Mobile screens are vertically constrained. Excessive spacing forces more scrolling, which creates friction. The theme defaults to **Compact** on mobile to optimize for mobile UX while still providing visual separation. **When to Increase Mobile Spacing:** * Single-section pages (minimal scrolling impact) * Luxury/minimalist brands (spacious aesthetic) * After visually dense sections (let content breathe) * When desktop uses Medium (maintain relative proportions) **When to Use None:** * Rarely appropriate on mobile * Only when sections are intentionally designed to be continuous * Testing page designs (temporary placeholder) </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Use Sparingly" icon="minimize"> Don't add Spacing sections between every section. Most theme sections already have built-in spacing. Add Spacing only where you need *additional* separation beyond theme defaults. </Card> <Card title="Match Spacing to Context" icon="ruler"> Use Medium spacing to separate major page areas (e.g., hero from content). Use Default between related sections. Use Compact for content-dense pages with many sections. </Card> <Card title="Keep Mobile Compact" icon="mobile-screen"> Default mobile spacing to Compact unless you have specific reason for more space. Excessive vertical spacing on mobile creates scrolling fatigue. </Card> <Card title="Consider Cumulative Impact" icon="layer-group"> Multiple Spacing sections with Medium spacing can create excessively long pages. Balance generous spacing in key areas with tighter spacing elsewhere. </Card> <Card title="Preview Before Publishing" icon="eye"> Always preview spacing changes on both desktop and mobile. What feels "right" on desktop may feel excessive on mobile, and vice versa. </Card> <Card title="Use for Visual Hierarchy" icon="stairs"> Strategic spacing creates page rhythm. More space = stronger separation. Use Medium spacing before/after key sections to draw attention. </Card> <Card title="Coordinate with Section Settings" icon="sliders"> Many sections have their own spacing settings. Check adjacent sections—they may have spacing controls that eliminate need for separate Spacing section. </Card> <Card title="Document Your Spacing Strategy" icon="note"> For complex pages, note why you added each Spacing section (e.g., "Separates hero from products"). Makes future editing easier for you or team members. </Card> </CardGroup> ## Common Use Cases ### Homepage Visual Hierarchy **Scenario:** Create breathing room between major homepage sections ``` [Hero Section] → Spacing: Medium desktop, Default mobile [Featured Collection] → Spacing: Default desktop, Compact mobile [Newsletter Signup] ``` **Result:** Hero gets strong emphasis, featured collection has standard separation, newsletter feels naturally integrated ### Content-Dense Collection Page **Scenario:** Separate collection banner from filter/product grid without excessive space ``` [Collection Banner] → Spacing: Compact desktop, Compact mobile [Collection Product Grid with Filters] ``` **Result:** Minimal but visible separation maintains tight layout, keeps products above the fold ### About Page Chapter Breaks **Scenario:** Divide about page into distinct "chapters" (story, values, team) ``` [About: Our Story] → Spacing: Medium desktop, Default mobile [About: Our Values] → Spacing: Medium desktop, Default mobile [About: Meet the Team] ``` **Result:** Each section feels like distinct chapter, creating natural reading rhythm ### Single Landing Page with Hero **Scenario:** Emphasize spacious, high-end aesthetic for product landing page ``` [Hero: Full-width product imagery] → Spacing: Medium desktop, Default mobile [Rich Text: Product story] → Spacing: Default desktop, Compact mobile [Featured Products] ``` **Result:** Luxury feel, hero image breathes, content has balanced spacing ### Contact Page Separation **Scenario:** Separate contact form from supplementary information ``` [Contact Form Section] → Spacing: Default desktop, Compact mobile [Rich Text: Additional Contact Info / FAQ] ``` **Result:** Form and supplementary content are distinct but not overly separated ### Temporary Content Placeholder **Scenario:** Reserve space for upcoming section (holiday banner, announcement) ``` [Existing Section] → Spacing: Medium desktop, Default mobile (placeholder for Black Friday banner) [Next Section] ``` **Result:** Space is reserved; when ready, replace Spacing section with actual banner (maintains layout consistency) ## Layout Behavior ### Desktop Behavior The Spacing section renders as a `<div>` with vertical padding (top and bottom) determined by the **Spacing - Desktop** setting: * **None:** No height, section essentially invisible * **Compact:** \~20-30px total height (minimal visual gap) * **Default:** \~40-60px total height (standard breathing room) * **Medium:** \~80-100px total height (generous separation) **Note:** Exact pixel values may vary slightly based on theme styling and may be updated in theme versions. ### Mobile Behavior On mobile devices (typically under 768px), the Spacing section uses the **Spacing - Mobile** setting: * **None:** No height * **Compact:** \~15-20px total height (mobile-optimized minimal space) * **Default:** \~30-40px total height (standard space, tighter than desktop Default) **Mobile Optimization:** Mobile spacing values are generally **tighter than desktop equivalents** to optimize for vertical scrolling constraints. ### Responsive Breakpoints The theme switches from desktop to mobile spacing at the **tablet/mobile breakpoint** (typically 768px). Between desktop and mobile breakpoints (tablet range), spacing may use intermediate values for smooth responsive transitions. ### Empty Content Section The Spacing section contains **no visible content**—it's purely a structural element. It doesn't render text, images, or other visual elements, only vertical space via CSS padding. ## Related Sections * **Any Content Section** - Use Spacing between any sections to create custom vertical separation * **Hero** - Add Spacing after hero sections to create strong visual breaks before content * **Rich Text** - Use Spacing before/after rich text to emphasize text content * **Banner Fullwidth** - Add Spacing around fullwidth banners for dramatic effect * **Newsletter** - Add Spacing before newsletter to create clear call-to-action separation ## Technical Notes ### Implementation Method The Spacing section is implemented as a semantic `<section>` element with CSS classes that apply padding: ```html theme={null} <section class="spacing spacing--desktop-default spacing--mobile-compact"> <!-- Empty content --> </section> ``` The padding is applied via CSS variables and classes based on the selected spacing options. Since there's no content, the section height is entirely determined by padding values. ### Accessibility Considerations The empty Spacing section is **semantically neutral**: * No ARIA landmarks (it's decorative spacing, not content) * Not announced by screen readers (no content to read) * Doesn't interfere with keyboard navigation (no focusable elements) * Doesn't affect semantic page structure (treated as whitespace) **Best practice:** Use Spacing sections purely for visual design. Don't try to use them for functional purposes. ### Performance Impact The Spacing section has **negligible performance impact**: * No images or external resources to load * Minimal HTML (one empty element) * Simple CSS (padding values only) * No JavaScript You can safely add multiple Spacing sections to a page without measurable performance degradation. ### CSS Specificity and Customization If you need custom spacing values beyond the four provided options: **Option 1: Use Custom CSS** ```css theme={null} .spacing.custom-spacing { padding-top: 150px !important; padding-bottom: 150px !important; } ``` Add a custom CSS class to the Spacing section (requires theme code editing). **Option 2: Use Custom Liquid Section** For highly specific spacing needs, create a custom Liquid section with range sliders for precise pixel control. **Option 3: Adjust Global Spacing Variables** Edit theme CSS variables to change default spacing values theme-wide (advanced, affects all spacing instances). ### Comparison with Section Spacing Settings Many theme sections have **built-in spacing settings** (e.g., "Spacing - Desktop", "Padding Top", "Padding Bottom"). These settings control spacing *around that specific section*. **When to use Section Spacing Settings:** * Adjusting space around a single section * Section has built-in spacing controls **When to use Spacing Section:** * Need spacing that's independent of adjacent sections * Neither adjacent section has suitable spacing controls * Want to separate two sections that both have "None" spacing ### Multiple Spacing Sections You can add **multiple Spacing sections consecutively**, but spacing doesn't stack additively in expected ways: **Two Default Spacing sections in a row:** * Expected: 2x spacing (120px total) * Actual: \~1.5-1.8x spacing (CSS margin collapse may reduce cumulative effect) **Best practice:** Use one Spacing section with appropriate size (Medium, Default, etc.) rather than stacking multiple Spacing sections. ### Spacing vs Padding vs Margin The Spacing section uses **CSS padding** (not margin): * **Padding** creates space *inside* the section element * **Margin** would create space *outside* the section element This technical choice prevents CSS margin collapse issues and ensures consistent spacing regardless of adjacent section styling. ## Troubleshooting **Spacing section not creating any space:** * Check that spacing isn't set to **None** on both desktop and mobile * Verify adjacent sections aren't using negative margins that collapse the space * Preview changes are saved (click Save in Theme Customizer) * Browser cache: Hard refresh (Cmd/Ctrl + Shift + R) to see changes **Too much space between sections:** * Check if **both adjacent sections have spacing settings** creating cumulative space * Verify you didn't accidentally add multiple Spacing sections consecutively * Reduce Spacing section from Medium → Default or Default → Compact * Review mobile spacing separately (may need tighter mobile values) **Spacing looks different on mobile vs desktop:** * This is expected behavior—mobile uses different spacing scale * Check that Mobile spacing is set appropriately (typically Compact) * Preview on actual mobile device or browser DevTools mobile emulation * Consider if you've set custom mobile spacing that's too large **Can't see Spacing section in Theme Customizer:** * Spacing section appears in section list with no visual preview (empty section) * Look for "Spacing" by name in the section list * Click on it to reveal the two spacing dropdown settings **Spacing doesn't match other sections:** * Verify you're using consistent spacing values (e.g., all Default or all Medium) * Check that adjacent sections' built-in spacing settings aren't set to None * Some sections have different default spacing—adjust Spacing section to compensate **Page feels too long on mobile:** * Reduce all Spacing sections to Compact on mobile * Consider removing Spacing sections that aren't essential * Check individual section spacing settings (many may be set to Default when Compact would suffice) * Test on actual mobile device (perceived scrolling distance differs from desktop preview) # Store Locator Source: https://docs.digifist.com/themes/mojave/sections/store-locator Interactive Google Maps with store locations, search, and detailed store information ## What It Does The **Store Locator** section displays an interactive Google Maps showing your physical store locations with pins, detailed store information, and search functionality. Customers can view store addresses, hours, contact info, and get directions—perfect for brick-and-mortar retailers with multiple locations. Each store location is a "Pin" block with customizable details (name, address, image, phone, hours, coordinates). The section offers three layout modes: interactive map with sidebar, static images with sidebar, or map-only display. Search functionality helps customers find nearest locations. ## Getting Started <Steps> <Step title="Get Google Maps API Key"> Create a free Google Maps API key at [Google Cloud Console](https://console.cloud.google.com/google/maps-apis/). Enable Maps JavaScript API and paste key in section settings. </Step> <Step title="Add Store Pin Blocks"> Add a Pin block for each location. Section includes 2 sample pins by default—edit or delete them. </Step> <Step title="Configure Store Details"> For each pin, add store name, address, phone, hours, and image. Find latitude/longitude coordinates using Google Maps (right-click location → coordinates). </Step> <Step title="Choose Layout & Appearance"> Select layout (map + sidebar, image + sidebar, or map only), section width (fullwidth/page), and height (55-100vh). </Step> </Steps> ## Settings <Tabs> <Tab title="Section Settings"> <AccordionGroup> <Accordion title="Google Maps API Key" icon="key"> **Type:** Textarea\ **Required:** Yes (for map display)\ **Info:** "You should create a Google Maps API key and add it here to display the map. [Learn more](https://developers.google.com/maps/documentation/javascript/get-api-key)" API key authenticates your site with Google Maps to display interactive maps. ### How to Get API Key **Step 1: Google Cloud Console** * Go to [Google Cloud Console](https://console.cloud.google.com/) * Sign in with Google account (free) * Create new project or select existing one **Step 2: Enable APIs** * Navigate to "APIs & Services" → "Library" * Search for "Maps JavaScript API" * Click "Enable" **Step 3: Create Credentials** * Go to "APIs & Services" → "Credentials" * Click "Create credentials" → "API key" * Copy the generated API key **Step 4: Secure Your Key** (Important!) * Click "Edit API key" * Under "Application restrictions," select "HTTP referrers" * Add your store domain: `yourdomain.com/*` * Add Shopify CDN: `*.myshopify.com/*` * Save restrictions **Step 5: Paste in Theme** * Paste API key in "Google Maps API Key" field * Save section * Map should now display \###billing & Costs **Free tier:** * \$200 monthly credit (covers \~28,000 map loads) * Most small-medium stores stay within free tier * No credit card required initially (but recommended) **Pricing past free tier:** * Maps JavaScript API: \$7 per 1,000 loads * Rarely exceeded unless high traffic **Monitor usage:** * Check [Google Cloud Console](https://console.cloud.google.com/) → "Billing" * Set up budget alerts ### Without API Key **If left empty:** * Map won't display (empty gray box or error message) * Store info sidebar still works (addresses, hours, images) * Consider using "Image and sidebar" layout if no API key ### Troubleshooting **Map not showing:** * Verify API key copied correctly (no extra spaces) * Check Maps JavaScript API is enabled * Confirm domain restrictions include your store URL * Check browser console for API errors **"This page can't load Google Maps correctly" error:** * API key restrictions too strict (temporarily remove restrictions to test) * Billing not enabled (add credit card to Google Cloud account) * Daily quota exceeded (check Google Cloud Console usage) **Best practice:** Always restrict API key to your domain(s) to prevent unauthorized use. </Accordion> <Accordion title="Zoom Level" icon="magnifying-glass-plus"> **Type:** Range slider\ **Range:** 0-21 (step: 1)\ **Default:** 4 Controls initial map zoom when section loads. Lower numbers show wider geographic area, higher numbers show closer street-level detail. ### Zoom Level Guide **0-3: World/Continent** (Very zoomed out) * 0: Entire world visible * 1: Continent-level view * 2: Large countries/regions * 3: Multiple countries **Use when:** International locations across continents **4-6: Country/State** ← **Default: 4** * 4: Large country (USA, China, Brazil) * 5: Multiple states/provinces * 6: Single state/large region **Use when:** Locations across different states/regions **7-9: Region/City Area** (Common for multiple locations) * 7: Metropolitan area * 8: City + suburbs * 9: Single city **Use when:** Multiple stores within metro area (most common) **10-13: Neighborhood/District** * 10: Large neighborhood * 11: District * 12: Small neighborhood * 13: Few blocks **Use when:** Stores very close together (downtown locations) **14-21: Street Level** (Very zoomed in) * 14-15: Street view * 16-18: Building level * 19-21: Extreme close-up (rarely used) **Use when:** Single store location only ### Choosing Optimal Zoom **Multiple far-apart locations:** * Zoom: 4-7 (shows all pins on initial load) * Example: Stores across entire country **Multiple nearby locations:** * Zoom: 8-10 (city/metro area visible) * Example: 3 stores in Chicago metro area **Single store:** * Zoom: 14-16 (street-level detail) * Example: Only one flagship location **Tip:** After setting zoom, test on live site. Customers can zoom in/out manually, but initial zoom sets first impression. **Recommendation:** Use 4-7 for multi-location businesses (default 4 works well), 14+ for single locations. </Accordion> <Accordion title="Section Width" icon="arrows-left-right"> **Type:** Select dropdown\ **Options:** Full width, Page width\ **Default:** Full width Controls maximum width of the store locator section. ### Full Width (Default) * Section spans entire viewport width (edge to edge with global margins) * Map fills maximum space * **Best for:** Interactive map layouts (map + sidebar, map only) * **Rationale:** Maps benefit from wider space for better browsing ### Page Width * Constrained to standard page content width (\~1000-1400px depending on theme) * Creates more contained, focused appearance * **Best for:** Image + sidebar layout, single store * **Rationale:** Matches width of other page sections for consistency ### Choosing Width **Use Full Width when:** * Layout is "Map and sidebar" or "Map" only * Multiple stores (large area to display) * Map is primary feature * Want immersive, full-screen map experience **Use Page Width when:** * Layout is "Image and sidebar" * Single store (no need for wide map) * Other page sections are page-width (maintains consistency) * Prefer more traditional page structure **Recommendation:** Stick with Full Width for map-based layouts, use Page Width for image-based or single-location pages. </Accordion> <Accordion title="Height" icon="arrows-up-down"> **Type:** Range slider\ **Range:** 55-100vh (step: 5vh)\ **Default:** 100vh\ **Note:** Desktop only Controls vertical height of the store locator section using viewport height (vh) units. ### Understanding "vh" Units **1vh = 1% of viewport (browser window) height** * 100vh = Full screen height * 50vh = Half screen height * 75vh = Three-quarters screen height **Dynamic sizing:** * Adjusts to user's screen size automatically * Tall monitor = taller section * Short monitor = shorter section ### Height Options **100vh (Full screen)** ← **Default** * Section fills entire browser window height * **Pro:** Immersive, app-like experience * **Con:** Hides content below fold * **Best for:** Dedicated store locator page, map is primary content **80-90vh (Nearly full screen)** * Shows top of next section (hints at more content below) * **Pro:** Immersive but signals scroll-ability * **Best for:** Map is main feature but other content exists below **70-75vh (Three-quarters)** * Balanced—significant presence without dominating * **Pro:** Room for content above/below without scrolling * **Best for:** Multi-section pages (hero, store locator, testimonials, footer) **60-65vh (Two-thirds)** * More compact, leaves substantial space for other sections * **Pro:** Integrates well with content-heavy pages * **Best for:** Homepage with multiple sections **55vh (Minimum)** * Smallest allowed, still functional * **Pro:** Doesn't dominate page, more like standard section * **Best for:** Store locator as supporting feature, not main content ### Desktop Only Note **Mobile behavior:** * Height setting ignored on mobile (under 768px typically) * Mobile uses auto height based on content and screen size * Map typically \~400-500px on mobile * Sidebar scrolls independently **Why desktop-only:** * Mobile screens vary widely (iPhone SE vs iPad) * Fixed vh on mobile creates usability issues (too tall or too short) * Auto height ensures optimal mobile experience ### Choosing Height **Dedicated "Store Locator" page:** * Height: 90-100vh (full/nearly full screen) * Map is the page (like Google Maps app) **Store locator on homepage:** * Height: 60-75vh (significant but not dominating) * Allows room for hero, products, etc. **"Contact Us" or footer area:** * Height: 55-65vh (compact integration) * Part of larger content mix **Recommendation:** Use 100vh for dedicated pages, 70-75vh for multi-section pages, 55-60vh for secondary features. </Accordion> <Accordion title="Section Layout" icon="table-columns"> **Type:** Select dropdown\ **Options:** Map and sidebar, Image and sidebar, Map\ **Default:** Image and sidebar Controls the primary layout configuration of the store locator section. ### Image and Sidebar (Default) **Desktop layout:** ``` [Store Images Vertical] | [Map] ``` * Left: Scrollable sidebar with store cards (images, addresses, hours) * Right: Interactive Google Map with pins **Best for:** * Showcasing store aesthetics (photos of locations) * Visual browsing experience * Businesses where store ambiance matters (cafes, boutiques, showrooms) **When API key empty:** * Sidebar still works (customers can browse store info) * Map area empty (graceful degradation) ### Map and Sidebar **Desktop layout:** ``` [Store List (No Images)] | [Map] ``` * Left: Scrollable list of store information (no large images, more compact) * Right: Interactive Google Map with pins **Best for:** * Functional/utility focus (find nearest store fast) * Many locations (list format handles more stores) * Faster loading (fewer/smaller images) * Professional/corporate aesthetic **Difference from "Image and sidebar":** * No prominent store images (images smaller or absent) * More stores visible in sidebar without scrolling * Less visual, more informational ### Map (Full width) **Desktop layout:** ``` [Full Width Interactive Map] ``` * Map occupies entire section * No sidebar visible initially * Click pins to see store info in map tooltip/popup **Best for:** * Many locations (50+) * Focus on geographic distribution * Clean, uncluttered interface * Customers prefer exploring map directly vs scrolling list **Store info access:** * Click map pins opens info window (name, address, directions link) * Hover/click shows tooltip ### Mobile Behavior (All Layouts) **All layouts on mobile:** * Stacked vertically (map above or below store list) * Store list becomes swipeable carousel (if 2+ stores) * Map height reduced (\~400px) * Layout setting has minimal visual effect (mobile optimizes automatically) ### Choosing Layout **Image and sidebar when:** * Store aesthetics are important (design-forward retail, hospitality) * Under 10-15 locations (sidebar remains scannable) * You have high-quality store photos * Visual browsing preferred over map-based searching **Map and sidebar when:** * You have many locations (15+) * Function over form (customers just need address/hours) * Limited or no store photos * Faster page load priority (fewer images) **Map only when:** * You have many locations (20+) * Customers know what they're looking for (browse map, not list) * Clean, minimal interface preferred * Geographic distribution is key selling point ("We're everywhere!") **Recommendation:** Start with "Image and sidebar" (default) for visual appeal, switch to "Map and sidebar" for many locations, use "Map" for 50+ locations or minimal aesthetic. </Accordion> <Accordion title="Spacing - Desktop" icon="up-down"> **Type:** Select dropdown\ **Options:** Default, Medium, Compact, None\ **Default:** Default Controls vertical spacing (padding) above and below the section on desktop. * **None:** No spacing (section touches adjacent sections edge-to-edge) * **Compact:** Minimal spacing (\~20-30px) * **Default:** Standard spacing (\~40-60px) ← **Recommended** * **Medium:** Generous spacing (\~80-100px) ### When to Adjust **Default (most cases):** * Balanced spacing between sections * Professional appearance * Breathes without feeling disconnected **Compact:** * When map is part of dense content flow * Faster vertical page scanning * More content visible without scrolling **Medium:** * Store locator is featured/hero section * Standalone page (only section) * Dramatic, separated presentation **None:** * Edge-to-edge layout (rare) * Custom designs where spacing handled elsewhere * Map immediately follows hero with no gap **Recommendation:** Keep Default for standard layouts. </Accordion> <Accordion title="Spacing - Mobile" icon="mobile"> **Type:** Select dropdown\ **Options:** Default, Compact, None\ **Default:** Compact Controls vertical spacing on mobile devices. * **None:** No spacing * **Compact:** Minimal spacing (\~15-20px) ← **Default** * **Default:** Standard spacing (\~30-40px) **Mobile default is Compact** to reduce scrolling on smaller screens. **When to adjust:** * **Default:** More breathing room on mobile (use if section feels cramped) * **None:** Edge-to-edge mobile design (rare) **Recommendation:** Stick with Compact (default) for mobile. </Accordion> </AccordionGroup> </Tab> <Tab title="Pin Blocks (Stores)"> <AccordionGroup> <Accordion title="Store Pin Block" icon="location-dot"> **Block Type:** Pin\ **Limit:** Unlimited\ **Preset:** 2 sample pins (Paris, Rome coordinates) Each Pin block represents one physical store location with all details. ### Pin Settings **Store Info:** **Store Name** (Text, required) * Name of this specific location * Examples: "Downtown Chicago," "SoHo Flagship," "Portland Store" * Appears: Map tooltip, sidebar card title, search results **Address** (Textarea) * Full mailing address * Format: Street, City, State ZIP, Country * Example: "123 Main St, Seattle, WA 98101, USA" * Appears: Sidebar card, map info window * **Best practice:** Use full address with ZIP/postal code for accuracy **Phone** (Text) * Store contact phone number * Format: Include country code for international ("+1 555-123-4567") * Appears: Sidebar card, map info window * **Clickable:** Automatically becomes "tel:" link on mobile (tap to call) **Opening Hours** (Rich text) * Store hours of operation * Supports formatting (bold days, line breaks) * Example: ``` Mon-Fri: 10am-8pm Saturday: 10am-6pm Sunday: Closed ``` * Appears: Sidebar card (below address) * **Tip:** Use line breaks (`<br/>`) for multi-line hours **Store Image** (Image picker) * Photo of storefront, interior, or location landmark * **Recommended size:** 800x600px to 1200x900px * **Aspect ratio:** 4:3 or 16:9 works well * **File size:** Under 300KB (compress before upload) * Appears: Sidebar card (large image in "Image and sidebar" layout) * **Optional:** Leave blank for "Map and sidebar" or "Map" layouts **Store Location (Coordinates):** **Latitude** (Text, required for map pin) * North/South coordinate * Format: Decimal degrees (e.g., "48.85850418716008") * **How to find:** Right-click location in Google Maps → Copy coordinates (first number) * [Learn more](https://support.google.com/maps/answer/18539) **Longitude** (Text, required for map pin) * East/West coordinate * Format: Decimal degrees (e.g., "2.294803163425021") * **How to find:** Right-click location in Google Maps → Copy coordinates (second number) * [Learn more](https://support.google.com/maps/answer/18539) **Custom Tooltip Text** (Textarea, optional) * Text shown when hovering over map pin * **Default:** Uses "Store Name" if empty * **Use when:** You want different text on hover vs sidebar (e.g., "Click for directions" vs store name) * **Most cases:** Leave empty (store name is sufficient) **Actions:** **Directions Button Name** (Text) * Label for "Get Directions" button * Default: "Directions" * Alternatives: "Get Directions," "Navigate," "View on Map" * Appears: Sidebar card as button **Custom Directions Link** (URL, optional) * Override automatic Google Maps directions link * **Default behavior (empty):** Generates Google Maps directions URL automatically based on coordinates * **Use custom link when:** * You prefer Apple Maps, Waze, or other nav app * You have specific directions page * Building entrance is tricky (link to detailed instructions) * Example: `https://waze.com/ul?ll=48.8585,2.2948&navigate=yes` * **Most cases:** Leave empty (auto-generated link works best) ### Finding Coordinates (Step-by-Step) 1. Go to [Google Maps](https://www.google.com/maps/) 2. Search for your store address 3. Right-click on the exact location (red pin) 4. Click "Copy" on the coordinates that appear 5. Paste into Notepad—format is: `latitude, longitude` 6. **First number = Latitude** (paste in Latitude field) 7. **Second number = Longitude** (paste in Longitude field) **Example:** `48.85850418716008, 2.294803163425021` * Latitude: 48.85850418716008 * Longitude: 2.294803163425021 ### Preset Sample Data **Pin 1 (Paris):** * Store Name: "Your store name" * Address: "Your store address" * Hours: "Mon-Sat: 10am-8pm, Sunday" * Phone: "+01 234 567 8900" * Latitude: 48.85850418716008 (Eiffel Tower area) * Longitude: 2.294803163425021 **Pin 2 (Rome):** * Same sample data, different coordinates * Latitude: 41.902331905731444 (Colosseum area) * Longitude: 12.45445667605574 **Action:** Replace sample data with your actual store information. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Secure Your API Key" icon="lock"> Always restrict API key to your domain(s) in Google Cloud Console. Unrestricted keys can be stolen and used, incurring charges to your account. </Card> <Card title="Accurate Coordinates" icon="crosshairs"> Use exact latitude/longitude from Google Maps (right-click location). Approximate coordinates place pin in wrong spot, confusing customers. </Card> <Card title="Complete Store Info" icon="circle-info"> Fill all fields (name, address, phone, hours, image). Incomplete info frustrates customers trying to visit. Hours and phone are especially critical. </Card> <Card title="High-Quality Store Photos" icon="camera"> Use clear, well-lit photos of storefront or interior (under 300KB). Helps customers recognize location and builds trust in brick-and-mortar presence. </Card> <Card title="Test Directions Links" icon="route"> Click "Directions" button for each store to verify link works. Auto-generated links usually work, but test custom links thoroughly. </Card> <Card title="Optimize Zoom Level" icon="magnifying-glass"> Set zoom to show all pins on initial load (4-7 for multi-location, 14+ for single store). Customers shouldn't have to zoom out to find locations. </Card> <Card title="Mobile-Friendly Hours" icon="clock"> Use simple, readable hour formats. "Mon-Fri: 10am-8pm" better than "Monday through Friday: 10:00 AM - 8:00 PM" (takes less space on mobile). </Card> <Card title="Monitor API Usage" icon="chart-line"> Check Google Cloud Console monthly for map load count. Set budget alerts at \$50 to catch unexpected usage before bills accumulate. </Card> </CardGroup> ## Common Use Cases ### Multi-Location Retail Chain **Stores:** 5-20 locations across state or region **Setup:** * Layout: "Map and sidebar" (efficient list + map) * Zoom: 7-9 (shows city/metro area) * Height: 75vh (significant presence on "Locations" page) * Each pin: Store name, full address, phone, hours (M-Sat 10-8, Sun 12-6), storefront photo **Best for:** Apparel, home goods, bookstores, sporting goods ### Franchise/Quick-Service Restaurant **Stores:** 10-50+ locations **Setup:** * Layout: "Map" only (many locations, list would be long) * Zoom: 6-8 (regional view) * Height: 100vh (full-screen map experience) * Each pin: Restaurant name, address, phone, hours (daily 11am-10pm), no images (speeds up loading) **Best for:** Fast food, coffee shops, car washes, gyms ### Single Flagship Store **Stores:** 1 location **Setup:** * Layout: "Image and sidebar" (showcase beautiful storefront) * Zoom: 15-16 (street-level detail, exact building visible) * Height: 70vh (integrated on "Contact" or "Visit Us" page) * Single pin: Store name, address, phone, detailed hours, high-quality store photo **Best for:** Boutiques, flagship stores, galleries, brand showrooms ### Regional Business (Showrooms/Offices) **Stores:** 3-8 locations across multiple cities **Setup:** * Layout: "Image and sidebar" * Zoom: 5-7 (state/region level) * Height: 80vh (prominent on "Locations" page) * Each pin: Office name (e.g., "Seattle Showroom"), address, phone, hours (appointment-based: "By appointment: Call to schedule"), professional office photo **Best for:** Furniture showrooms, B2B offices, design studios, real estate agencies ### Hospitality/Multiple Properties **Stores:** 2-10 properties (hotels, vacation rentals, venues) **Setup:** * Layout: "Image and sidebar" (showcase each property visually) * Zoom: 8-10 (metro area if nearby, 5-7 if spread out) * Height: 85vh (major page feature) * Each pin: Property name, address, phone, check-in hours, hero photo of property **Best for:** Hotels, Airbnb hosts with multiple properties, event venues, resorts ### Pop-Up/Temporary Locations **Stores:** 1-3 current pop-ups **Setup:** * Layout: "Map and sidebar" (simple, quick updates) * Zoom: 9-11 (neighborhood level) * Height: 70vh * Each pin: "Pop-up: \[City Name]", address, hours (include dates: "Open Nov 1-30, Daily 10am-6pm"), phone, event photo **Best for:** Seasonal shops, market vendors, temporary installations, trade show locations ## Layout Behavior ### Desktop Layout by Mode **Image and Sidebar:** ``` Desktop: [Sidebar - Scrollable] [Map - Interactive] [Store 1 Card - Large] [Pin 1] [Store 2 Card - Large] [Pin 2] [Store 3 Card - Large] [Pin 3] [Search Bar - Top] [Zoom Controls] ``` * Sidebar: \~30-40% width, scrollable, prominent images * Map: \~60-70% width, full height * Click pin: Map pans to location, sidebar scrolls to matching card **Map and Sidebar:** ``` Desktop: [Sidebar - Compact List] [Map - Interactive] [Store 1 - Text] [Pin 1] [Store 2 - Text] [Pin 2] [Store 3 - Text] [Pin 3] [Search Bar - Top] [Zoom Controls] ``` * Sidebar: \~30-40% width, more stores visible (compact cards, smaller/no images) * Map: \~60-70% width, full height **Map Only:** ``` Desktop: [Full Width Map] [Pin 1] [Pin 2] [Pin 3] [Zoom Controls, Search] ``` * Map: 100% width, full height * No sidebar visible * Click pin: Info window/tooltip shows store details ### Mobile Layout (All Modes) ``` Mobile (Stacked): [Map - 400-500px height] [Pin 1] [Pin 2] [Pin 3] [Store Cards - Swipeable Carousel] [← Store 1 →] (Swipe left/right) [Store 2] (Hidden until swiped) [Store 3] (Hidden until swiped) ``` * Map: Full width, \~40-50vh height * Store carousel: Full width, swipe to browse (if 2+ stores) * Search: Above map or in collapsed dropdown * All layout modes look similar on mobile (stack pattern) ### Search Functionality **Search bar** (appears when 2+ pins): * Desktop: Top of sidebar * Mobile: Above map or in dropdown * **Function:** Filters visible pins by location name/address * **Example:** Type "Seattle" → only Seattle stores visible, map pans to Seattle area * **Autocomplete:** May suggest store names as you type (theme-dependent) ### Pin Interaction **Click pin behavior:** 1. Map centers on clicked pin 2. Sidebar scrolls to matching store card (highlights it) 3. Info window/tooltip opens on map with store name + address 4. "Directions" link in info window (opens Google Maps directions) **Click store card in sidebar:** 1. Map pans to that store's pin 2. Pin bounces/highlights briefly 3. Info window opens on pin ## Related Sections * **[Contact Form](/themes/mojave/contact-form)** - Often paired with store locator on Contact page * **[Footer](/themes/mojave/footer/footer)** - May include condensed store info or "Find a Store" link * **[Rich Text](/themes/mojave/richtext)** - Use for additional location details or instructions above/below map ## Technical Notes ### Google Maps API **API used:** Maps JavaScript API **Required features:** * Map rendering (basic map display) * Markers (store location pins) * Info windows (store details on pin click) * Geocoding (address → coordinates, used for search) **Optional enhancements (requires additional APIs):** * Directions API (custom routing) * Places API (nearby POI, autocomplete) ### Coordinate Precision **Decimal places significance:** * **4 decimals** (48.8585): \~11 meters accuracy (city block level) * **6 decimals** (48.858504): \~0.1 meters (building entrance exact) * **8+ decimals**: \~1mm (unnecessarily precise) **Recommendation:** Use 6-8 decimals from Google Maps (sufficient for storefront accuracy). ### Performance Optimization **Image loading:** * Store images lazy load (only visible sidebar cards) * Compress images to under 300KB each * Use WebP format if theme supports (smaller file size, faster) **Map loading:** * Map renders after page load (non-blocking) * API script loads asynchronously * Total section load: 500ms-2s depending on image count **Search performance:** * Client-side filtering (no server requests) * Instant results as you type * Scales to 50+ stores without performance issues ### Browser Compatibility **Supported browsers:** * Chrome, Firefox, Safari, Edge (latest 2 versions) * Mobile Safari (iOS 12+) * Chrome Mobile (Android 5+) **Graceful degradation:** * No API key: Sidebar still works, map empty * JavaScript disabled: Static list of stores (no map interaction) * Old browsers: Fallback to basic map (no advanced features) ### Accessibility **Keyboard navigation:** * Tab through store cards in sidebar * Enter to select store (pans map to pin) * Arrow keys to pan map * +/- keys to zoom **Screen reader support:** * Store cards have semantic HTML (`<address>`, `<time>`, etc.) * Map pins have ARIA labels with store names * "Get Directions" links clearly labeled **Focus management:** * Clicking pin brings focus to info window * Clicking sidebar card brings focus to map pin * Focus visible (outline on interactive elements) ## Troubleshooting **Map not displaying (empty gray box):** * Verify Google Maps API key is correct (copy/paste carefully) * Check Maps JavaScript API is enabled in Google Cloud Console * Confirm API key restrictions allow your domain * Check browser console for API error messages (F12 → Console tab) * Verify billing is enabled on Google Cloud account (even with free tier, card required after initial setup) **Pins in wrong location:** * Verify latitude/longitude coordinates are correct (swap lat/long by mistake?) * Re-copy coordinates from Google Maps (right-click exact location) * Check for typos in coordinates * Use 6-8 decimal places (4 or fewer = imprecise) **Search not working:** * Search requires 2+ store pins (hidden with only 1 store) * Clear browser cache and reload * Check if store names/addresses contain searchable text * Verify JavaScript isn't blocked (some ad blockers affect search) **Directions link broken:** * If using "Custom Directions Link," verify URL is valid (test in browser directly) * If using auto-generated (field empty), verify coordinates are correct * Check for special characters in address breaking URL encoding * Test link by clicking "Directions" button in live preview **Images not loading in sidebar:** * Check image file sizes (keep under 500KB, ideally under 300KB) * Try different image format (JPG vs PNG) * Verify images uploaded successfully (re-upload if needed) * Check if images are too large (browser may timeout loading) **Zoom level not saving:** * Verify you're editing correct section (multiple store locator sections if on different pages?) * Hard refresh browser after saving (Cmd/Ctrl + Shift + R) * Clear theme cache if available in theme settings * Test on live site (Theme Customizer may cache differently) **Section too short/tall on desktop:** * Adjust "Height" setting (55-100vh range) * Remember setting is desktop-only (mobile uses auto height) * Preview on live site (editor may render differently) * Check other CSS isn't conflicting (contact theme support if section height locked) **Mobile layout broken:** * Test on actual device (not just browser resize) * Clear mobile browser cache * Check image sizes (very large images may cause layout issues on mobile) * Verify theme JavaScript isn't conflicting (disable other sections temporarily to isolate issue) **API usage/billing concerns:** * Monitor usage in Google Cloud Console → "APIs & Services" → "Dashboard" * Set budget alerts at $50, $100 thresholds * Most stores stay within \$200/month free tier (\~28,000 map loads) * High usage? Consider caching strategies or alternative map providers (Mapbox, OpenStreetMap) **Store hours not displaying:** * Verify "Opening Hours" field has content * Use rich text formatting (`<p>Mon-Fri: 10-8</p>`) * Check for HTML errors (unclosed tags) * Preview on live site (Theme Customizer may not render rich text fully) **Too many stores (performance issues):** * Consider "Map only" layout (no image loading in sidebar) * Compress store images aggressively (under 100KB each) * Reduce number of visible stores (group by region, use multiple pages) * Consider alternative: external store locator service (Storemapper, etc.) # Testimonials Source: https://docs.digifist.com/themes/mojave/sections/testimonials Display customer reviews and testimonials in a carousel format with star ratings, customizable styling, and flexible layout options ## What this section does The **Testimonials** section showcases customer reviews and social proof with: * **Carousel/slider** displaying 1 or 2 reviews at once (desktop) * **Star ratings** (1-5 stars) * Author name and role/title * Three style variations: Main, Light, or Dark * Optional heading and CTA link Perfect for building trust, showcasing customer satisfaction, and providing social proof on homepages, product pages, or landing pages. <Frame> <img alt="Testimonials Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Testimonials** </Step> <Step title="Add review blocks"> Add multiple **Review** blocks (typically 3-6 reviews). Each block represents one customer testimonial. </Step> <Step title="Configure reviews"> For each review, set star rating, add review text, and include author name and role </Step> <Step title="Choose style & layout"> Select style (Main/Light/Dark), set reviews showing at once (1 or 2), and add optional heading/link </Step> </Steps> ## Section settings <AccordionGroup> <Accordion title="Style" icon="palette"> **Dropdown** (default: Dark) Controls the color scheme and background of the testimonials section: * **Main**: Uses primary theme colors with main background * **Light**: Light background with dark text * **Dark**: Dark background with light text (default) **Dark** creates the most contrast and draws attention. **Light** blends with light pages. **Main** matches your brand colors. </Accordion> <Accordion title="Reviews showing at once" icon="grip"> **Dropdown** (default: Two) — **Desktop only** Controls how many review cards display simultaneously on desktop: * **One**: Single review card (centered, focused) * **Two**: Two review cards side-by-side (default) <Note>Mobile always displays one review at a time regardless of this setting.</Note> **When to use One**: Longer reviews, more prominent display, focused attention **When to use Two**: Shorter reviews, show more social proof at once, dynamic layout </Accordion> <Accordion title="Heading" icon="heading"> **Text field** (default: "Reviews heading") Main heading displayed above the reviews carousel. Use to introduce testimonials section. Examples: "What Our Customers Say", "Trusted by Thousands", "Customer Reviews" </Accordion> <Accordion title="Link text & URL" icon="link"> **Link text** (text, default: "Reviews link") * CTA text displayed below reviews **Link URL** (URL, default: /collections/all) * Destination for the CTA link Common destinations: Reviews page, all products, specific collection, external review platform (Trustpilot, etc.) </Accordion> <Accordion title="Spacing - Desktop" icon="arrows-up-down"> **Dropdown** (default: Default) Controls vertical spacing above and below the section on desktop: * **Default**: Standard spacing * **Medium**: Moderate spacing * **Compact**: Minimal spacing </Accordion> <Accordion title="Spacing - Mobile" icon="mobile"> **Dropdown** (default: Compact) Controls vertical spacing above and below the section on mobile: * **Default**: Standard mobile spacing * **Compact**: Reduced spacing (recommended) </Accordion> </AccordionGroup> ## Block types ### Review block **No limit** — Add as many review blocks as needed <AccordionGroup> <Accordion title="Star/s count" icon="star"> **Range slider** — 1 to 5 stars (default: 4) Number of stars to display for this review. Shows filled star icons based on rating. **Recommendation**: Mix ratings (mostly 4-5 stars with occasional 3 stars) for authenticity. All 5-star reviews can look fake. </Accordion> <Accordion title="Content" icon="quote-left"> **Textarea** (default: ""Lorem ipsum dolor sit amet consectetur adipisicing elit..."") The actual review text/testimonial content from the customer. **Best practices**: * Keep to 2-4 sentences for readability * Include specific details (product names, results, experiences) * Use customer's actual language (including minor grammar quirks adds authenticity) * Highlight benefits, outcomes, or emotional responses </Accordion> <Accordion title="Author name" icon="user"> **Text field** (default: "Author name") Name of the reviewer/customer. Can be full name or first name + last initial for privacy. Examples: "Sarah Johnson", "Michael T.", "Emma K." </Accordion> <Accordion title="Author role" icon="briefcase"> **Text field** (default: "Author role") Optional additional context about the reviewer—role, location, or descriptor. Examples: "Verified Buyer", "New York, NY", "Repeat Customer", "Fashion Blogger" <Tip>Adding location or "Verified Buyer" increases trust and credibility.</Tip> </Accordion> </AccordionGroup> **How to add reviews**: 1. Click **Add block** → Select **Review** 2. Set star count, add review text, author name, and role 3. Repeat for each testimonial (typically 3-6 reviews) 4. Reviews rotate in carousel in the order blocks are arranged ## Best practices <CardGroup> <Card title="Use real reviews" icon="shield-check"> Always use genuine customer feedback. Authenticity builds trust—fake reviews damage credibility and may violate regulations. </Card> <Card title="Mix star ratings" icon="star-half-stroke"> Include mostly 4-5 star reviews with occasional 3-star reviews for authenticity. All 5-star reviews appear suspicious. </Card> <Card title="Keep reviews concise" icon="compress"> Limit reviews to 2-4 sentences (50-100 words). Shorter reviews are more readable and allow customers to scan multiple testimonials. </Card> <Card title="Show 3-6 reviews" icon="hashtag"> Add 3-6 review blocks for optimal carousel length. Too few (1-2) lacks impact, too many (10+) becomes overwhelming. </Card> <Card title="Specific over generic" icon="bullseye"> Prioritize reviews that mention specific products, features, or outcomes over vague praise like "Great product!" </Card> <Card title="Add context with role" icon="user-tag"> Use author role to add credibility: "Verified Buyer", location, or customer type. This builds trust and relatability. </Card> <Card title="Dark for contrast" icon="moon"> Use Dark style (default) when placing testimonials between light sections to create visual separation and draw attention. </Card> <Card title="Link to more reviews" icon="arrow-up-right-from-square"> Always include a link to view all reviews (review platform, collection page, or dedicated reviews page) for customers wanting more social proof. </Card> </CardGroup> ## Common use cases **Homepage social proof** — Place testimonials section on homepage (often near bottom) to build trust before visitors make purchase decisions **Post-product sections** — Add below product sections or featured products to reinforce purchase intent with social validation **Landing page credibility** — Include on campaign landing pages to overcome skepticism and increase conversion rates **About page validation** — Feature customer testimonials on About page to validate brand claims and build emotional connection **Pre-footer trust builder** — Position just before footer as final trust signal before visitors leave or make decision ## Layout behavior **Desktop**: * **Reviews showing at once = Two**: Two review cards side-by-side in carousel * **Reviews showing at once = One**: Single centered review card in carousel * Navigation arrows on left/right for manual browsing * Dots/indicators at bottom showing position in carousel **Mobile**: * Always displays **one review at a time** regardless of desktop setting * Full-width review card * Swipeable carousel (touch gesture support) * Navigation arrows and dots for browsing **Carousel behavior**: * Auto-rotation: None (reviews do not auto-advance) * Manual navigation: Click arrows or swipe * Infinite loop: Carousel loops from last review back to first ## Star rating display Stars display as filled/unfilled icons based on rating: * **5 stars**: 5 filled stars * **4 stars**: 4 filled, 1 unfilled * **3 stars**: 3 filled, 2 unfilled * **2 stars**: 2 filled, 3 unfilled * **1 star**: 1 filled, 4 unfilled Star color typically matches theme accent color. Unfilled stars appear lighter/gray. ## Content guidelines **Review text best practices**: * Include specific product names or features mentioned * Highlight concrete benefits or results experienced * Keep emotional language authentic (not hyperbolic) * Vary review length and tone across reviews * Include minor imperfections for authenticity **Author attribution**: * Use real names (full names or first name + last initial) * Add location for geographic relevance * Include "Verified Buyer" when applicable * Show recency when relevant ("Recent Purchase", "Long-time Customer") ## Related sections * **Trust Indicators** — Static trust badges and certifications * **Featured Articles** — Customer stories or long-form testimonials via blog * **Press** — Media mentions and press coverage for additional social proof * **Multi Column Text** — Text-based content that could include testimonials in alternative format # Trust Indicators Source: https://docs.digifist.com/themes/mojave/sections/trust-indicators Display trust badges and guarantees with icons, titles, and descriptions in horizontal or vertical layouts ## What It Does The **Trust Indicators** section showcases key trust-building messages like free shipping, secure checkout, money-back guarantees, or customer service highlights. Display up to 4 indicators with custom icons, titles, and descriptions in flexible layouts to build customer confidence throughout the shopping journey. ## Getting Started <Steps> <Step title="Add the Section"> Add the Trust Indicators section to templates where you want to build trust (homepage, product pages, cart) </Step> <Step title="Add Indicator Blocks"> Add up to 4 indicator blocks (section comes with 4 by default) </Step> <Step title="Customize Each Indicator"> For each block, add an icon, title ("Free Shipping"), and description ("On orders over \$50") </Step> <Step title="Configure Layout"> Choose content direction (horizontal/vertical), alignment, and icon style to match your design </Step> </Steps> ## Settings <Tabs> <Tab title="Section Settings"> <AccordionGroup> <Accordion title="Swipe on Mobile" icon="hand-pointer"> **Type:** Checkbox\ **Default:** Enabled (checked) Enable touch-swipe navigation on mobile devices, allowing customers to swipe through indicators horizontally. ### How It Works **When Enabled (Default):** * Mobile users can swipe left/right to see all indicators * Useful when you have 3-4 indicators that don't fit on mobile screen * Creates carousel-like experience on mobile **When Disabled:** * All indicators display stacked vertically on mobile * No swiping interaction * Customers scroll down to see all indicators ### When to Enable **Enable when:** * You have 3-4 indicators (multiple indicators benefit from swipe) * Horizontal layout on desktop (maintains consistency) * Want interactive, carousel-style mobile experience * Screen space is premium (swipe saves vertical space) **Disable when:** * Only 1-2 indicators (swipe unnecessary for so few items) * Vertical layout (stacking already works well) * Prefer traditional scroll over swipe interaction * Indicators are critical (ensure all visible without interaction) **Best practice:** Keep enabled (default) for most use cases. Swipe is intuitive for mobile users and optimizes space. </Accordion> <Accordion title="Autoplay Interval" icon="rotate"> **Type:** Range slider\ **Range:** 0-10 seconds (step: 1 second)\ **Default:** 3 seconds Controls automatic rotation speed when indicators display as a slideshow on mobile. Set to 0 to disable autoplay. ### How Autoplay Works **With autoplay (1-10s):** * Indicators automatically advance after specified interval * Only functions on mobile when swipe is enabled * Creates animated carousel effect * Pauses when customer interacts (swipe or tap) **Without autoplay (0s):** * Indicators remain static until customer swipes * Gives customers full control over viewing pace * More traditional, less distracting ### Choosing Interval Speed **Fast (1-2 seconds):** * Very quick rotation * **Downside:** May be too fast to read descriptions * **Use when:** Indicators are icon + short title only (no description) **Medium (3-5 seconds)** ← **Recommended** * Comfortable reading time * Balanced between movement and comprehension * **Use when:** Standard indicators with title + 1 line description * **Default: 3s** is optimal for most use cases **Slow (6-10 seconds):** * Leisurely pace, ample reading time * **Use when:** Longer descriptions or detailed indicators * May feel sluggish for simple indicators **Disabled (0 seconds):** ← **Conservative choice** * No automatic rotation * **Use when:** You prefer manual control only * **Best for:** Accessibility (some users prefer no auto-movement) **Accessibility note:** Autoplay can be distracting for users with cognitive disabilities. Consider 0s for maximum accessibility or 5s+ for slower pace. </Accordion> <Accordion title="Content Direction" icon="arrows-left-right-to-line"> **Type:** Select dropdown\ **Options:** Horizontal, Vertical\ **Default:** Horizontal\ **Note:** Desktop only Controls whether indicators display in a horizontal row or vertical stack on desktop screens. ### Horizontal (Default) Indicators display side-by-side in a horizontal row: ``` [Free Shipping] [Secure] [Returns] [Support] ``` **Best for:** * **4 indicators:** Standard trust bar across page * **Below hero sections:** Spans width, feels banner-like * **Product pages:** Above/below product details as trust bar * **Minimalist designs:** Clean horizontal line **Considerations:** * Icons + titles only work best (descriptions can crowd) * With 4 indicators, each gets \~25% width (can feel cramped with long text) ### Vertical Indicators stack vertically in a column: ``` Free Shipping On orders over $50 Secure Checkout 256-bit SSL encryption Easy Returns 30-day money back 24/7 Support We're here to help ``` **Best for:** * **Detailed descriptions:** More space for multi-line explanations * **Sidebar placement:** Works well in narrow columns * **Product pages:** Next to product details as list * **1-3 indicators:** Vertical feels natural for fewer items **Considerations:** * Takes more vertical space than horizontal * Less "banner-like", more "list-like" presentation ### Desktop Only Note This setting **only affects desktop** (1200px+). On mobile, layout adapts based on: * **Swipe enabled:** Horizontal carousel (regardless of desktop setting) * **Swipe disabled:** Vertical stack (regardless of desktop setting) </Accordion> <Accordion title="Content Alignment" icon="align-center"> **Type:** Select dropdown\ **Options:** Start (Left), Center, End (Right)\ **Default:** Start (Left)\ **Note:** Desktop only Controls horizontal alignment of content within each indicator block. ### Start (Left-aligned) Content aligns to left edge of each indicator: ``` [Icon on left] Free Shipping On orders over $50 ``` **Best for:** * **Horizontal layouts:** Standard left-to-right reading flow * **Vertical layouts:** Traditional list appearance * **Icon + text horizontal:** Icon left, text right (natural pairing) * **Readability:** Most readable for multi-line descriptions ### Center Content centers within each indicator: ``` [Icon] Free Shipping On orders over $50 ``` **Best for:** * **Horizontal layouts:** Symmetric, balanced appearance * **Short content:** Icon + title only (no long descriptions) * **Fullwidth sections:** Creates formal, balanced presentation * **Minimalist aesthetics:** Clean, centered design **Considerations:** * Longer descriptions harder to read when centered * Works best with vertical content direction (icon above text) ### End (Right-aligned) Content aligns to right edge of each indicator: ``` [Icon] [Icon on right] Free Shipping On orders over $50 ``` **Best for:** * Rarely used (unconventional reading direction) * RTL languages (Arabic, Hebrew) - though theme should auto-handle * Specific design requirements **Generally avoid** unless you have specific aesthetic reason. ### Interaction with Content Direction **Horizontal direction + Center alignment:** * Each indicator centered within its column * Creates balanced, symmetrical horizontal bar * **Most common combination** for horizontal layouts **Vertical direction + Start alignment:** * Indicators align left as list * Natural reading flow for detailed descriptions * **Most common combination** for vertical layouts **Desktop Only:** This setting only affects desktop. Mobile alignment adapts to swipe/stack layout automatically. </Accordion> <Accordion title="Icon Style" icon="circle"> **Type:** Select dropdown\ **Options:** Default, Circle, Square\ **Default:** Circle Applies background shape to icons, enhancing visual prominence and style. ### Default (No background) Icons display as-is without background shape: * Icon appears in its original form * Clean, minimal aesthetic * Best when icons are already designed with shapes/backgrounds * Modern, flat design appearance **Best for:** * Simple, line-style icons * When icons have sufficient visual weight without backgrounds * Minimalist designs * When you want icons to blend subtly ### Circle (Default) Icons display with circular background: ``` [Icon] ← Icon in circle ``` **Best for:** * **Standard choice:** Works with most icon styles * **Professional appearance:** Polished, refined look * **Consistency:** All icons get uniform shape regardless of original design * **Prominence:** Circle draws attention to icons **Effects:** * Background color (typically subtle, from theme colors) * Padding around icon (prevents icon from touching circle edge) * Unified visual language (all indicators look cohesive) ### Square Icons display with square/rounded-square background: ``` [Icon] ← Icon in square ``` **Best for:** * **Modern, geometric aesthetics:** Angular, bold style * **Tech/digital brands:** Square feels contemporary * **Grid-based designs:** Complements other square elements * **Contrast with rounded elements:** Creates visual variety **Effects:** * Similar to circle but with square/rounded-square shape * May have slightly rounded corners (theme-dependent) * Stronger geometric presence than circles ### Choosing Icon Style **Consider your brand:** * **Classic/elegant:** Circle (softer, traditional) * **Modern/tech:** Square (contemporary, structured) * **Minimalist:** Default (clean, unadorned) **Consider your icons:** * **Detailed custom icons:** Default (let icon design shine) * **Simple line icons:** Circle or Square (add weight and presence) * **Emoji icons:** Default or Circle (emoji already colorful) **Theme consistency:** * Match button styles (rounded buttons → circles, square buttons → squares) * Align with product cards and other UI elements </Accordion> <Accordion title="Spacing - Desktop" icon="up-down"> **Type:** Select dropdown\ **Options:** Default, Medium, Compact, None\ **Default:** Default Controls vertical spacing (padding) above and below the section on desktop screens. * **None:** No spacing (section touches adjacent content) * **Compact:** Minimal spacing (\~20-30px) * **Default:** Standard spacing (\~40-60px) ← **Recommended** * **Medium:** Generous spacing (\~80-100px) **When to adjust:** * **Default:** Most use cases (balanced separation) * **Compact:** Below hero with minimal gap, or in crowded layouts * **Medium:** Standalone trust indicators as prominent section * **None:** Integrated into custom layouts (rare) </Accordion> <Accordion title="Spacing - Mobile" icon="mobile"> **Type:** Select dropdown\ **Options:** Default, Compact, None\ **Default:** Compact Controls vertical spacing on mobile devices. * **None:** No spacing * **Compact:** Minimal spacing (\~15-20px) ← **Default** * **Default:** Standard spacing (\~30-40px) **Mobile default is Compact** to reduce scrolling. Adjust to Default for more breathing room when trust indicators are primary feature. </Accordion> <Accordion title="Section Width" icon="arrows-left-right"> **Type:** Select dropdown\ **Options:** Page Width, Fullwidth\ **Default:** Fullwidth Controls the maximum width of the section. ### Fullwidth (Default) * Spans entire page width (edge-to-edge with page margins) * Creates banner-like trust bar appearance * **Best for:** Horizontal layouts (maximizes space for 4 indicators in a row) ### Page Width * Constrained to standard page width (\~1200px) * Creates more contained, focused appearance * **Best for:** Vertical layouts or when adjacent sections are also page-width **Recommendation:** Keep Fullwidth for horizontal layouts (default), use Page Width if other sections are page-width for consistency. </Accordion> </AccordionGroup> </Tab> <Tab title="Indicator Blocks"> <AccordionGroup> <Accordion title="Indicator Block" icon="certificate"> **Block Type:** Indicator\ **Limit:** Maximum 4 blocks Individual trust indicator with custom icon, title, and description. ### Block Settings **Custom Icon** (Image picker) * Upload icon image for this indicator * **Recommended size:** 64x64px to 128x128px (square) * **Format:** PNG with transparent background (SVG not supported in image picker) * **Style:** Simple, clear icons work best **Icon sources:** * Custom designed icons (brand-specific) * Icon libraries (download from Flaticon, Noun Project, etc.) * Emoji (screenshot emoji at large size, crop to square) * Theme default icons (if you leave empty, theme may use defaults) **Title** (Inline rich text) * Main heading for the indicator * **Default:** "Title of the trust indicator" * **Length:** 2-5 words ideal ("Free Shipping", "Secure Checkout") * Supports bold/italic formatting **Title examples:** * "Free Shipping" * "Easy Returns" * "Secure Checkout" * "24/7 Support" * "Price Match Guarantee" * "100% Organic" **Description** (Inline rich text) * Supporting text below title * **Default:** "Description of the trust indicator" * **Length:** 5-15 words ideal (one line, concise) * Supports bold/italic formatting **Description examples:** * "On all orders over \$50" * "30-day money-back guarantee" * "256-bit SSL encryption" * "Real humans, ready to help" * "We'll beat any competitor price" * "Certified USDA Organic" ### Creating Effective Indicators **Keep it scannable:** * Title: Benefit in 2-3 words * Description: Details in 5-10 words * Avoid lengthy paragraphs **Focus on benefits, not features:** * "Free Shipping Over \$50" (benefit) * "We Offer Shipping" (feature) **Use specific details:** * "30-Day Returns" (specific timeframe) * "Easy Returns" (vague) **Match your value proposition:** * E-commerce: Shipping, returns, secure checkout * Services: Guarantees, support, certifications * Luxury: Quality, authenticity, heritage </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Limit to 4 Indicators" icon="list"> Section enforces 4 maximum. Use your most compelling trust factors—free shipping, returns, support, security. More than 4 dilutes impact and creates clutter. </Card> <Card title="Use Clear, Simple Icons" icon="icons"> Choose recognizable icons (truck for shipping, lock for security, return arrow for returns). Avoid abstract or overly detailed icons that don't communicate instantly. </Card> <Card title="Keep Text Concise" icon="compress"> Title: 2-5 words. Description: 5-15 words. Longer text defeats "quick scan" purpose of trust indicators. Details go elsewhere. </Card> <Card title="Match Icons to Text" icon="link"> Ensure icon visually represents the indicator. Truck icon for "Free Shipping", lock for "Secure Checkout". Mismatched icons confuse customers. </Card> <Card title="Prioritize Relevant Indicators" icon="star"> Show indicators that address customer concerns for YOUR products. Apparel needs sizing help, electronics need warranty info, food needs certifications. </Card> <Card title="Use Horizontal for 3-4 Indicators" icon="grip-lines"> Horizontal layout with 3-4 indicators creates effective trust bar. Vertical works better for 1-2 detailed indicators with longer descriptions. </Card> <Card title="Place Strategically" icon="location-dot"> Common placements: Below homepage hero, above product details on PDP, in cart before checkout. Place where trust matters most in customer journey. </Card> <Card title="Test Mobile Swipe Behavior" icon="mobile"> If using 4 indicators, test mobile swipe to ensure all indicators are easily accessible. Consider 3-second autoplay for automatic display. </Card> </CardGroup> ## Common Use Cases ### Homepage Trust Bar (Below Hero) **Indicators:** 1. Free Shipping | On orders over \$50 2. Secure Checkout | 256-bit SSL encryption 3. 30-Day Returns | Money-back guarantee 4. 24/7 Support | Real humans, ready to help **Settings:** Horizontal, Center alignment, Circle icons, Fullwidth, Default spacing **Best for:** E-commerce stores wanting to immediately build trust on homepage ### Product Page Trust Indicators **Indicators:** 1. Authentic Products | 100% genuine, verified 2. Easy Returns | 60-day return window 3. Warranty Included | 2-year manufacturer warranty 4. Fast Shipping | Ships within 24 hours **Settings:** Horizontal, Center alignment, Circle icons, Fullwidth, Compact spacing **Placement:** Below product title or above Add to Cart button **Best for:** Building confidence before purchase decision ### Cart Page Reassurance **Indicators:** 1. Secure Payment | Your data is protected 2. Free Shipping | Qualified! Orders over \$50 3. Need Help? | Call us: (555) 123-4567 4. Easy Returns | 30-day guarantee **Settings:** Horizontal, Center alignment, Fullwidth **Best for:** Final reassurance before customers proceed to checkout ### Sustainable Brand Values **Indicators:** 1. 100% Organic | USDA certified organic materials 2. Carbon Neutral | Offset all shipping emissions 3. Fair Trade | Ethically sourced, fairly paid 4. Cruelty-Free | Never tested on animals **Settings:** Horizontal or Vertical (if longer descriptions), Circle icons **Best for:** Eco-conscious brands highlighting certifications and values ### Service Business Guarantees **Indicators:** 1. Satisfaction Guaranteed | Love it or your money back 2. 5-Star Rated | 4.9/5 from 2,000+ reviews 3. Flexible Scheduling | Book 24/7 online 4. Price Match | We'll beat competitor prices **Settings:** Vertical or Horizontal, Left alignment, Square icons **Best for:** Service-based businesses (consultants, home services, repair shops) ### Luxury Product Authenticity **Indicators:** 1. Certified Authentic | Verified by experts 2. Certificate Included | Documentation provided 3. Insured Shipping | Fully protected delivery 4. Lifetime Guarantee | We stand behind quality **Settings:** Horizontal, Center alignment, Circle icons, Medium spacing **Best for:** Luxury goods, jewelry, collectibles, high-ticket items ## Layout Behavior ### Desktop Layout **Horizontal Direction:** ``` [Icon] [Icon] [Icon] [Icon] Title Title Title Title Desc Desc Desc Desc ``` * 4 equal-width columns * Icons aligned horizontally * Each indicator occupies \~25% width **Vertical Direction:** ``` [Icon] Title Description [Icon] Title Description [Icon] Title Description [Icon] Title Description ``` * Single column, stacked vertically * More space for descriptions * Each indicator full width ### Mobile Layout **With Swipe Enabled (Default):** * Horizontal carousel * One indicator visible at a time * Swipe left/right to see others * Autoplay rotates automatically (if enabled) * Dots/indicators show position (1 of 4) **With Swipe Disabled:** * Vertical stack * All indicators visible, scroll to see * No carousel interaction ### Icon Styling Effects **Default (No background):** * Icon appears with no shape behind it * Minimal, clean appearance **Circle:** * Icon centered in circular background * Subtle color tint (from theme palette) * \~60-80px circle diameter (theme-dependent) **Square:** * Icon centered in square background * May have rounded corners (4-8px radius) * Same size as circle option (\~60-80px) ## Related Sections * **[Featured Products](/themes/mojave/featured-products)** - Often paired with trust indicators on homepage * **[Hero](/themes/mojave/hero)** - Trust indicators commonly placed below hero sections * **[Rich Text](/themes/mojave/richtext)** - For longer trust/guarantee explanations * **[Testimonials](/themes/mojave/testimonials)** - Complement trust indicators with social proof * **[Footer](/themes/mojave/footer/footer)** - Add simplified trust indicators in footer ## Technical Notes ### Mobile Carousel Implementation When swipe is enabled, the section uses: * **Touch events:** `touchstart`, `touchmove`, `touchend` for swipe detection * **CSS transforms:** `translateX` for smooth sliding * **Autoplay timer:** `setInterval` for automatic advancement **Performance:** Lightweight implementation, minimal JavaScript overhead. ### Icon Image Handling Icon images use Shopify's image URL filter: ```liquid theme={null} {{ block.settings.custom_icon | image_url: width: 128 }} ``` **Automatic optimizations:** * Lazy loading (icons below fold) * Responsive sizing (smaller on mobile) * WebP format (if browser supports) **File size target:** Under 10KB per icon for fast loading. ### Inline Rich Text Support Title and description fields use `inline_richtext` type: * **Allowed:** Bold, italic, links * **Not allowed:** Line breaks, headings, images * **Output:** Single-line formatted text This prevents multi-paragraph descriptions that would break layout. ### Max Blocks Enforcement The section enforces 4-block maximum via schema: ```json theme={null} "max_blocks": 4 ``` **Why 4?** * Optimal for horizontal layouts (fits desktop width) * Manageable on mobile (not too many to swipe through) * Forces prioritization (show most important factors only) ### Responsive Breakpoints Layout adapts at these breakpoints: * **Desktop (1200px+):** Horizontal/vertical as per setting * **Tablet (768-1199px):** May compress to 2x2 grid (theme-dependent) * **Mobile (under 768px):** Carousel (swipe enabled) or vertical stack (swipe disabled) ### Accessibility Features The section includes: * **Semantic HTML:** Uses `<ul>` for list of indicators * **ARIA labels:** Carousel has `aria-label="Trust indicators"` * **Focus management:** Keyboard users can tab through indicators * **Reduced motion:** Respects `prefers-reduced-motion` (disables autoplay) **Autoplay consideration:** Users with vestibular disorders may find autoplay disorienting. Setting autoplay to 0s improves accessibility. ### Performance Considerations **Lightweight section:** * Icons: \~5-20KB total (4 icons × 5KB each) * HTML: Minimal markup (\~500 bytes) * CSS: Shared theme styles * JavaScript: Only loaded if swipe enabled **Mobile performance:** Fast loading, smooth swipe animation (60fps target). ## Troubleshooting **Icons not displaying:** * Verify images uploaded successfully (re-upload if needed) * Check image file isn't corrupted (open directly in browser) * Ensure image file size under 5MB (Shopify limit) * Try different image format (PNG, JPG) **Swipe not working on mobile:** * Confirm "Swipe on Mobile" is enabled * Test on actual mobile device (not desktop browser mobile view) * Check theme JavaScript isn't conflicting * Clear browser cache and reload **Autoplay not functioning:** * Verify interval is set to 1s or higher (0 disables autoplay) * Ensure swipe is enabled (autoplay only works with swipe) * Check browser console for JavaScript errors * Test on different devices/browsers **Indicators crowded/overlapping on desktop:** * Reduce to 3 indicators if 4 feel cramped * Switch to vertical direction for more space * Use shorter titles and descriptions * Consider Page Width instead of Fullwidth **Text not fitting in indicators:** * Shorten title to 2-5 words maximum * Reduce description to one line (5-15 words) * Check for very long words causing overflow * Test on mobile (text may wrap awkwardly) **Icons inconsistent sizes:** * Upload all icons at same dimension (e.g., all 128x128px) * Ensure all icons square aspect ratio (not rectangular) * Use same icon style/weight across all blocks * Check icon style setting (circle/square may mask size differences) **Layout breaks on tablet:** * Preview on actual tablet device * Check content direction setting * Try different section width (Fullwidth vs Page) * May be theme-specific CSS issue (contact theme support) **Content alignment not changing:** * Setting only affects desktop (check on desktop screen, not mobile) * Hard refresh browser (Cmd/Ctrl + Shift + R) to clear cache * Verify you clicked Save after changing setting * Preview on live storefront (editor may not show all styling) # Video Source: https://docs.digifist.com/themes/mojave/sections/video Embed YouTube/Vimeo videos or upload self-hosted videos with customizable aspect ratios, autoplay options, and optional cover images ## What this section does The **Video** section creates professional video players with: * **YouTube/Vimeo embedding** or **self-hosted video uploads** * Six aspect ratio options (1:1, 4:3, 16:9, 3:1, 3:2, fullscreen) * Optional cover image before video plays * Autoplay muted video option * Fullwidth or contained layout * Accessibility-friendly video descriptions Perfect for product demos, brand stories, tutorials, testimonials, or any video content that enhances your store experience. <Frame> <img alt="Video Section" /> </Frame> ## Getting started <Steps> <Step title="Add the section"> From the Theme Customizer, click **Add section** and select **Video** </Step> <Step title="Add your video"> Either paste a YouTube/Vimeo URL in **External video** OR upload an MP4 file in **Video**. Self-hosted video takes priority if both are provided. </Step> <Step title="Configure display"> Select aspect ratio, optionally add a cover image, enable fullwidth mode, and add accessibility description </Step> </Steps> ## Section settings <AccordionGroup> <Accordion title="Cover image" icon="image"> **Image picker** (optional) Static image displayed before video plays (video poster/thumbnail): * Shows until visitor clicks play button * Useful for branding or creating visual interest before video loads * Should be representative frame from video or custom thumbnail * If empty, video first frame appears or video loads immediately (if autoplay enabled) <Tip>Use high-quality cover images that entice visitors to click play. Include play button overlay for clarity.</Tip> </Accordion> <Accordion title="Video" icon="file-video"> **Video file upload** Upload self-hosted video files (MP4 recommended): * Recommended aspect ratio: 16:9 * File format: MP4 (most compatible) * **Takes priority** over External video if both are provided * Videos loop automatically when autoplay is enabled **When to use self-hosted**: * Full control over video quality and compression * No external dependencies (YouTube/Vimeo) * Faster load times with optimized files * No branding from external platforms <Warning>Keep video files under 10-15MB for optimal performance. Compress before uploading.</Warning> </Accordion> <Accordion title="External video" icon="video"> **Video URL field** (default: YouTube example) Paste YouTube or Vimeo video URL to embed from external platforms: * Accepts: YouTube and Vimeo URLs * Recommended aspect ratio: 16:9 * **Ignored if Video (self-hosted) is uploaded** **When to use external**: * Leveraging existing YouTube/Vimeo content * Very long videos (no file size concerns) * YouTube/Vimeo analytics integration Example URLs: * YouTube: `https://www.youtube.com/watch?v=VIDEO_ID` * Vimeo: `https://vimeo.com/VIDEO_ID` </Accordion> <Accordion title="Video description text" icon="text"> **Text field** (optional but recommended) Accessibility description for screen reader users: * Describes video content for visually impaired visitors * Does not display visually, only read by assistive technologies * **Best practice**: Briefly describe what's happening in the video Example: "Product demo showing how to assemble the bookshelf in 5 easy steps" <Note>Providing video descriptions improves accessibility compliance and SEO.</Note> </Accordion> <Accordion title="Make section full width" icon="maximize"> **Checkbox** (default: checked) Controls section container width: * **Checked**: Video spans full browser width (edge-to-edge) * **Unchecked**: Video contained within standard page width Fullwidth creates dramatic, cinematic video presentations. Contained width works better when video is part of a broader content layout. </Accordion> <Accordion title="Autoplay muted video" icon="circle-play"> **Checkbox** (default: unchecked) Automatically plays video on page load (muted, as required by browsers): * **Checked**: Video starts playing immediately, muted, in a loop * **Unchecked**: Video requires click to play (shows cover image or first frame) <Warning>**Important**: When autoplay is enabled, the cover image will NOT appear. Video loads and plays immediately.</Warning> **When to use autoplay**: * Short ambient/lifestyle videos (5-15 seconds) * Background videos without important audio * Hero sections with looping visuals **When NOT to use**: * Talking-head videos or content with important dialogue * Tutorials or demos requiring audio * Long-form content </Accordion> <Accordion title="Aspect ratio" icon="expand"> **Dropdown** (default: 16:9) Controls the width-to-height proportions of the video player: * **1:1** — Square (Instagram-style) * **4:3** — Classic TV format * **16:9** — Widescreen (most common, recommended) * **3:1** — Ultra-wide cinematic * **3:2** — Standard photography * **Fullscreen** — Matches viewport height (100vh) **Recommendations**: * **16:9**: Default for most YouTube/Vimeo content * **1:1**: Product videos shot for social media * **Fullscreen**: Hero videos or immersive brand stories * Match aspect ratio to your source video to avoid black bars </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="16:9 for compatibility" icon="rectangle-wide"> Use 16:9 aspect ratio for most videos—it matches YouTube/Vimeo standards and looks professional on all devices. </Card> <Card title="Compress videos" icon="file-zipper"> For self-hosted videos, compress files to under 10MB. Use tools like HandBrake to optimize without quality loss. </Card> <Card title="Cover images are key" icon="image"> Always provide compelling cover images unless using autoplay. Good thumbnails significantly increase play rates. </Card> <Card title="Autoplay only for ambient" icon="volume-xmark"> Only use autoplay for short (5-15s), looping, ambient videos. Never autoplay videos with important dialogue or sound. </Card> <Card title="Add descriptions" icon="universal-access"> Always provide video description text for accessibility. It improves SEO and helps visually impaired customers. </Card> <Card title="Fullwidth for impact" icon="maximize"> Use fullwidth mode for hero videos or standalone video sections. Disable for videos within broader content layouts. </Card> <Card title="External for analytics" icon="chart-line"> Use YouTube/Vimeo external videos when you need view analytics, engagement metrics, or existing video library. </Card> <Card title="Self-hosted for control" icon="server"> Use self-hosted videos for critical brand content where you need full control over quality, performance, and branding. </Card> </CardGroup> ## Common use cases **Product demonstrations** — Show products in action with 16:9 videos featuring usage, assembly, or styling **Brand storytelling** — Feature fullwidth, autoplay muted videos with your brand story or mission statement **Customer testimonials** — Embed YouTube testimonial videos with cover images to build trust **Tutorial content** — Step-by-step guides for product usage, styling tips, or how-to content **Homepage hero videos** — Fullscreen aspect ratio with autoplay muted for dramatic, immersive homepage experience **Category intros** — Place videos at top of collection pages to introduce product categories or showcase collections ## Layout behavior **Desktop**: * Fullwidth mode: Video spans edge-to-edge across full browser width * Contained mode: Video centered within standard page width container * Aspect ratio maintains proportions regardless of screen size **Mobile**: * Always responsive, scaling proportionally * Fullwidth spans full mobile screen width * Play button overlay for non-autoplay videos * Autoplay videos may pause on mobile depending on browser/connection **Video player controls**: * External videos: YouTube/Vimeo native controls (play, pause, volume, fullscreen) * Self-hosted videos: Browser default HTML5 video controls (play, pause, volume, scrubbing, fullscreen) ## Video priority When multiple video sources are configured, they're used in this priority order: 1. **Video** (self-hosted upload) — highest priority 2. **External video** (YouTube/Vimeo) — used if no self-hosted video 3. **Fallback**: If neither is provided, section displays empty or placeholder ## Autoplay vs. cover image | Setting | Cover Image Behavior | Video Behavior | | --------------------- | ---------------------------------------------- | --------------------------------- | | **Autoplay disabled** | Shows cover image (if provided) or first frame | Plays on click | | **Autoplay enabled** | **Hidden** (never displays) | Plays immediately, muted, looping | <Warning>**Key point**: Enabling autoplay **removes the cover image** from display. The cover image setting is ignored when autoplay is checked.</Warning> ## Related sections * **Hero** — Hero banners with background video support and text overlays * **Banner Fullwidth** — Promotional banners that can include video media * **Images with Text** — Combine video with editorial text layouts # Announcement bar Source: https://docs.digifist.com/themes/release/announcement-bar Display important messages at the top or bottom of your store using the announcement bar. The announcement bar displays site-wide messages for promotions, shipping updates, or time-sensitive information. It supports multiple display modes and countdown timers without disrupting the shopping experience. <img alt="Announcement bar section view" /> ## What this section controls This section manages the content, display behavior, and device visibility of messages shown at the top or bottom of your store. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Locate Announcement bar"> The section is pre-added under the Header in the left sidebar. If removed, you can re-add it using the "Add section" button. </Step> </Steps> <img alt="Location of announcement bar in Theme Customizer" /> ## Display behavior Control how announcement messages appear to visitors. This setting determines whether your text stays fixed, scrolls, or rotates through multiple messages. <AccordionGroup> <Accordion title="Static" icon="align-left"> Text stays fixed. Best for single, important messages that need maximum readability. </Accordion> <Accordion title="Marquee" icon="arrows-left-right"> Text scrolls horizontally. Useful for longer messages or creating visual movement. </Accordion> <Accordion title="Slideshow" icon="images"> Multiple messages rotate automatically. Set the **Autoplay interval** to control timing between slides. </Accordion> </AccordionGroup> <img alt="Display behavior options" /> ## Key settings <Tabs> <Tab title="Content"> ### Adding messages Click **Add block** and choose: * **Text slide** - Standard announcement with optional icon * **Localization** - Display language and currency selectors * **Link** - Standalone call-to-action button * **Countdown timer** - Adds urgency with time-based display Each block includes device visibility controls to show content on desktop, mobile, or both. <img alt="Adding announcement blocks" /> </Tab> <Tab title="Styling"> ### Typography Control visual emphasis with font weight: * **Normal** - Standard readability * **Medium** - Subtle emphasis * **Bold** - Maximum impact (use sparingly) <img alt="Font weight options" /> </Tab> </Tabs> ## Block settings Each block type offers unique configuration options to control how content appears and behaves across your store. <Tabs> <Tab title="Text slide"> The most versatile block for displaying announcement messages with optional styling and links. ### Available settings <AccordionGroup> <Accordion title="Message content" icon="message"> Enter your announcement text. Keep it concise for better mobile display. </Accordion> <Accordion title="Icon" icon="icons"> Add a visual icon before your text to draw attention. Leave blank for text-only display. <img alt="Text slide icon option" /> </Accordion> <Accordion title="Link" icon="link"> Add an optional destination URL to make the entire announcement clickable. </Accordion> <Accordion title="Link label" icon="tag"> Display a button with custom text like "Shop now" or "Learn more" next to your message. <img alt="Text slide link label option" /> </Accordion> </AccordionGroup> <Tip> Use text slides for promotional messages, shipping updates, or any store-wide announcements. </Tip> </Tab> <Tab title="Localization"> Display language and currency selectors for international stores. ### Available settings <AccordionGroup> <Accordion title="Device visibility" icon="eye"> Control where this selector appears: * **Desktop** - Large screens only * **Mobile** - Small screens only * **Both** - All devices (recommended) <img alt="Device visibility options" /> </Accordion> </AccordionGroup> <Note> Localization blocks only appear when multiple languages or currencies are enabled in your store settings. </Note> </Tab> <Tab title="Link block"> Standalone call-to-action button without announcement text. ### Available settings <AccordionGroup> <Accordion title="Link label" icon="tag"> The button text displayed to visitors. Use action-oriented phrases. <img alt="Link block label setting" /> </Accordion> <Accordion title="Link" icon="link"> The destination URL when the button is clicked. </Accordion> <Accordion title="Icon" icon="icons"> Optional icon to display before the button text for visual emphasis. </Accordion> <Accordion title="Device visibility" icon="eye"> Choose where this button appears: Desktop, Mobile, or Both. </Accordion> </AccordionGroup> <Tip> Use link blocks for prominent calls-to-action like "Free Shipping" or "Sale Ends Today". </Tip> </Tab> <Tab title="Countdown timer"> Create urgency with time-based displays that count down to a specific deadline. ### Available settings <AccordionGroup> <Accordion title="End date and time" icon="calendar"> Set when the countdown reaches zero. The timer will no longer display after this time. <img alt="Countdown timer end date setting" /> </Accordion> <Accordion title="Timer text" icon="message"> Message displayed before the countdown. Example: "Sale ends in" </Accordion> <Accordion title="Expired text" icon="clock"> Optional message shown after the countdown ends. Leave blank to hide the block entirely. </Accordion> <Accordion title="Device visibility" icon="eye"> Control timer visibility across Desktop, Mobile, or Both devices. </Accordion> </AccordionGroup> <Warning> Only use countdown timers for genuine deadlines. Fake urgency damages customer trust. </Warning> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Keep it brief" icon="text-size"> Aim for 2-5 words. Long messages get truncated on mobile. </Card> <Card title="Limit rotation" icon="clock"> If using slideshow, keep it to 2-3 messages maximum. Too many reduces effectiveness. </Card> <Card title="Time urgency wisely" icon="hourglass"> Only use countdown timers for genuine deadlines to maintain trust. </Card> <Card title="Test responsively" icon="mobile"> Always preview on mobile before publishing. </Card> </CardGroup> <Warning> Autoplay interval under 5 seconds can be distracting and reduce message comprehension. </Warning> ## Related guides <Card title="Header section" icon="window-maximize" href="/themes/release/header"> Configure header settings and navigation options </Card> # Collection list page (CLP) Source: https://docs.digifist.com/themes/release/collections/collection-list-page Customize the layout and features of your collection list pages. Collection list pages display a grid of collections, allowing customers to browse and shop from various collection categories. You can customize the grid layout, card appearance, pagination style, and choose between automatic or curated collection displays. <img alt="Collections list page overview" /> ## What this section controls This section manages: * **Collection grid layout** - Set items per row for desktop and mobile displays * **Collection card styling** - Control card title style, aspect ratios, and product count display * **Collection source** - Choose between all collections (automatic) or selected collections (manual curation) * **Pagination** - Control pagination style, load more button, and infinity scroll * **Section layout** - Adjust section width, color scheme, and spacing * **Individual collection blocks** - Customize per-collection images, headings, and color schemes ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer </Step> <Step title="Navigate to Collection list"> In the left sidebar, find the **Collection list** section </Step> <Step title="Choose collection source"> Decide between **All collections** (automatic display) or **Selected collections** (manual curation) </Step> <Step title="Configure grid layout"> Set items per row (3 or 4 columns) and card aspect ratio in the **Grid Layout** tab </Step> <Step title="Customize card appearance"> Set title style and product count display in the **Card Design** tab </Step> <Step title="Add collection blocks (optional)"> If using Selected mode, click **Add block** > **Collection** to manually add collections with custom styling </Step> </Steps> ## Section Settings <Tabs> <Tab title="Collections"> Control which collections are displayed and how many per page. <img alt="Collections display mode" /> <AccordionGroup> <Accordion title="Collections to show"> **Type:** Dropdown\ **Options:** All collections, Selected collections\ **Default:** All collections Choose which collections to display: * **All collections** - Automatically shows all store collections * **Selected collections** - Only shows collections added as blocks <Tip> Use "Selected collections" to curate order, visibility, and customize individual collection cards with custom images and headings. </Tip> </Accordion> <Accordion title="Collections per page"> **Type:** Range\ **Range:** 3-50\ **Default:** 12\ **Availability:** Only applies when "All collections" is selected Number of collections loaded before pagination appears. Higher values show more collections at once but may slow page loading. <Note> This setting is ignored when "Selected collections" mode is active. In selected mode, only manually added collection blocks appear. </Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Grid Layout"> Define the grid structure and how collection cards are arranged. <img alt="Grid layout options" /> <AccordionGroup> <Accordion title="Items per row"> **Type:** Dropdown\ **Options:** 3, 4\ **Default:** 4 Number of collection cards per row on desktop screens. * **3** - Larger cards with more prominent images * **4** - More collections visible at once, efficient browsing <Tip>Use 3 columns for premium brands where large imagery matters. Use 4 columns for stores with many collections where variety is key.</Tip> </Accordion> <Accordion title="Items per row for mobile"> **Type:** Dropdown\ **Options:** 1, 2\ **Default:** 2 Number of cards per row on mobile devices. * **1** - Single column layout, maximum card size * **2** - Two columns, balance between size and scrolling <Note>Most mobile users prefer 2 columns as it allows comparison while maintaining card readability.</Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Card Design"> Control the visual appearance of individual collection cards. <img alt="Collection card design" /> <AccordionGroup> <Accordion title="Card title style"> **Type:** Dropdown\ **Options:** Single text, Text with arrow\ **Default:** Single text Visual style for collection card titles. * **Single text** - Clean text-only display * **Text with arrow** - Text plus arrow icon for visual cue <Tip>Text with arrow encourages clicking and signals interactivity. Single text provides a cleaner, more minimal aesthetic.</Tip> </Accordion> <Accordion title="Collection product count"> **Type:** Dropdown\ **Options:** Hide, Show, With border\ **Default:** Show Display product count on collection cards. * **Hide** - No product count visible * **Show** - Display count below collection title * **With border** - Count with decorative border accent <Tip> Product counts help customers understand collection size and make informed browsing decisions. Always show for stores with varying collection sizes. </Tip> </Accordion> <Accordion title="Card media aspect ratio"> **Type:** Dropdown\ **Options:** Auto, 1:1, 4:3, 3:2, 5:4, 16:9, 2:1, 4:1, 8:1, 3:4, 2:3, 4:5, 9:16, 1:2\ **Default:** 3:4 (Portrait) Aspect ratio for collection images. **Landscape ratios:** * **1:1** - Square * **4:3, 3:2, 5:4, 16:9, 2:1, 4:1, 8:1** - Various landscape formats **Portrait ratios:** * **3:4, 2:3, 4:5, 9:16, 1:2** - Various portrait formats **Auto:** Adaptive to original image dimensions <Tip>3:4 portrait works well for most collection images and matches common product photography ratios.</Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Pagination"> Control how customers navigate through multiple pages of collections. <AccordionGroup> <Accordion title="Pagination style"> **Type:** Dropdown\ **Options:** Page numbers, Load more\ **Default:** Page numbers How customers navigate through collection pages. * **Page numbers** - Traditional pagination with numbered links (1, 2, 3...) * **Load more** - Single button that loads additional collections inline <Note> Pagination only applies when "All collections" mode is selected. Selected collections mode displays all added blocks without pagination. </Note> </Accordion> <Accordion title="Enable infinity scroll"> **Type:** Toggle\ **Default:** Disabled\ **Availability:** Only when "Load more" pagination is selected Automatically loads more collections while customer scrolls down the page, eliminating the need to click "Load more" button. <Tip>Infinity scroll works best for stores with 20+ collections. It improves mobile browsing experience by reducing interaction requirements.</Tip> <Warning>Some users prefer traditional pagination for better navigation control. Test with your audience before enabling.</Warning> </Accordion> </AccordionGroup> </Tab> <Tab title="Section"> Control the overall section layout, width, and spacing. <img alt="Section layout settings" /> <AccordionGroup> <Accordion title="Section width"> **Type:** Dropdown\ **Options:** max-w-page, max-w-fluid\ **Default:** max-w-page Maximum width of the collections section. * **max-w-page** - Standard container matching theme's page width * **max-w-fluid** - Wider container utilizing more screen space <Tip>Use max-w-page for visual consistency with other pages. Use max-w-fluid for large grids where maximum visibility is beneficial.</Tip> </Accordion> <Accordion title="Color scheme"> **Type:** Dropdown\ **Default:** scheme-1 Select the color scheme for the section. Available schemes are defined in **Theme settings > Colors**. <Note>Color scheme affects background, text, borders, and button colors throughout the section.</Note> </Accordion> <Accordion title="Spacing top"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding above the collections section, controlling vertical space from the previous section. </Accordion> <Accordion title="Spacing bottom"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding below the collections section, controlling vertical space to the next section. <Tip>Use consistent spacing (M or L) across pages for visual rhythm. Reduce to S for tighter, magazine-style layouts.</Tip> </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block Settings ### Collection Block Add individual collections with custom styling. Only used in "Selected collections" mode. Maximum 50 blocks. <Note>Collection blocks are only visible when "Selected collections" is chosen in the Collections tab.</Note> <img alt="Collection block settings" /> <AccordionGroup> <Accordion title="Collection"> **Type:** Collection picker\ **Required:** Yes Select which collection to display in this card position. Opens the Shopify collection selector. </Accordion> <Accordion title="Image"> **Type:** Image picker\ **Optional:** Yes Custom image that overwrites the collection's default featured image. Use this to create consistent branding or highlight specific aspects of the collection. <Tip>Override images in blocks for consistent brand look across all collection cards, even if individual collections have varying image styles.</Tip> </Accordion> <Accordion title="Heading"> **Type:** Text field\ **Optional:** Yes Custom heading that overwrites the collection's default title. Use this for marketing-friendly names or seasonal messaging. <Tip>Use custom headings for "Sale Collections" or "New Arrivals" when the actual collection name is generic.</Tip> </Accordion> <Accordion title="Heading size"> **Type:** Dropdown\ **Options:** XS (h6), S (h5), M (h4), L (h3)\ **Default:** M (h4) Size of collection title text. Larger headings draw more attention to priority collections. </Accordion> <Accordion title="Subheading"> **Type:** Text field\ **Optional:** Yes Additional text below the main heading. Perfect for descriptive content like "New", "Sale", "Limited Time", or product count. <Tip>Use subheadings for "New", "Sale", "Limited Time" messaging to create urgency and highlight special collections.</Tip> </Accordion> <Accordion title="Color scheme"> **Type:** Dropdown\ **Default:** scheme-1 Per-collection color scheme. Allows individual cards to have different background and text colors for visual hierarchy. <Tip>Use contrasting color schemes for sale or featured collections to make them stand out in the grid.</Tip> </Accordion> </AccordionGroup> ## Common use cases <Tabs> <Tab title="All collections page"> Display all store collections automatically in a standard grid. **Configuration:** * Collections: All collections * Items per row: 4 * Product count: Show * Collections per page: 12 * Pagination: Page numbers </Tab> <Tab title="Curated navigation"> Hand-pick specific collections in priority order for featured landing pages. **Configuration:** * Collections: Selected collections * Add blocks: Priority collections first * Custom images: Yes, for brand consistency * Heading sizes: Vary (L for hero, M for others) </Tab> <Tab title="Category pages"> Visual merchandising with custom images and headings per collection. **Configuration:** * Collections: Selected collections * Custom images: All collections * Custom headings: Marketing-friendly names * Subheadings: Descriptive text </Tab> <Tab title="Sale section"> Highlight sale collections with distinctive styling. **Configuration:** * Collections: Selected collections * Color schemes: scheme-2 (contrast color) for sale items * Subheadings: "Up to 50% off", "Limited time" * Card title style: Text with arrow </Tab> <Tab title="Seasonal display"> Create seasonal collection pages with timely messaging. **Configuration:** * Collections: Selected collections * Subheadings: "New", "Sale", "Limited Time" * Custom images: Seasonal photography * Heading sizes: L for featured seasonal collection </Tab> <Tab title="Large catalogs"> Efficiently display stores with 50+ collections. **Configuration:** * Collections: All collections * Pagination style: Load more * Enable infinity scroll: Yes * Collections per page: 16-24 </Tab> <Tab title="Brand storytelling"> Use custom content to tell brand narrative through collections. **Configuration:** * Collections: Selected collections * Custom images: Brand lifestyle photography * Subheadings: Descriptive brand messaging * Items per row: 3 (larger cards) </Tab> <Tab title="Department store"> Display major collection categories like a traditional department store. **Configuration:** * Collections: All collections mode * Items per row: 3 (larger card display) * Card ratio: 4:3 landscape * Product count: With border </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Grid layout optimization" icon="grid"> Use 4 columns on desktop for optimal visibility and efficient browsing. This balances card size with variety, letting customers see many options at once. </Card> <Card title="Aspect ratio consistency" icon="image"> 3:4 portrait works well for most collection images and matches common product photography ratios. Maintain consistency across all cards for professional appearance. </Card> <Card title="Product count display" icon="hashtag"> Always show product counts to help customers understand collection size and make informed browsing decisions. This is especially valuable when collection sizes vary significantly. </Card> <Card title="Selected mode strategy" icon="hand-pointer"> Use "Selected collections" when you want to control order, visibility, or customize per-collection. Perfect for curated landing pages and seasonal campaigns. </Card> <Card title="All mode efficiency" icon="layer-group"> Use "All collections" for stores with many collections that change frequently. This automates display and reduces manual maintenance. </Card> <Card title="Card style choice" icon="arrow-pointer"> Text with arrow encourages clicking and signals interactivity. Single text provides cleaner, more minimal aesthetic. Choose based on brand style. </Card> <Card title="Image consistency" icon="images"> Override images in blocks for consistent brand look across all collection cards, even when individual collections have varying image styles. </Card> <Card title="Mobile optimization" icon="mobile"> 2 columns on mobile provides good balance between card size and scrolling length. Single column makes cards too large for quick browsing. </Card> <Card title="Pagination strategy" icon="arrows-rotate"> Enable infinity scroll for stores with 20+ collections to improve mobile experience. Traditional pagination works better for smaller collection counts where users want page-level control. </Card> </CardGroup> ## Related guides <CardGroup> <Card title="Collection Pages" icon="layer-group" href="/themes/release/collections/collection-page"> Configure individual collection page layouts and filtering </Card> <Card title="Featured Collections" icon="star" href="/themes/release/sections/highlighted-collections"> Display featured collections on homepage sections </Card> </CardGroup> # Collection page (PLP) Source: https://docs.digifist.com/themes/release/collections/collection-page Customize the layout and features of your collection pages. Collection pages (PLP) display a group of products, allowing customers to browse and shop from a curated selection. You can customize the layout, filters, sorting options, and optional promotional text cards to enhance the shopping experience. <img alt="Collection page overview" /> ## What this section controls This section manages: * **Product grid layout** - Set products per row for desktop and mobile * **Filtering system** - Control how customers filter products (drawer, sidebar, or hidden) * **Sorting capabilities** - Enable/disable sorting dropdown options * **Pagination style** - Choose between traditional pagination, load more button, or infinite scroll * **Promotional text cards** - Insert branded content within the product grid * **Section spacing and colors** - Adjust layout width, color scheme, and spacing ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer </Step> <Step title="Navigate to Collections"> In the left sidebar, click **Collections** then select **Default collection** </Step> <Step title="Configure utilities bar"> Adjust filter display, sorting, and product count settings in the **Utilities Bar** tab </Step> <Step title="Customize product grid"> Set products per row, pagination style, and spacing in the **Product Grid** tab </Step> <Step title="Add text cards (optional)"> Click **Add block** > **Text card** to insert promotional cards within the product grid </Step> </Steps> ## Section Settings <Tabs> <Tab title="Utilities Bar"> The utilities bar appears above the product grid, containing filters, sorting, and product count. <img alt="Utilities bar settings" /> <AccordionGroup> <Accordion title="Show top border for utilities bar"> **Type:** Toggle\ **Default:** Disabled Adds a decorative border above the utilities bar to visually separate it from the content above. <Note>This border uses the theme's border color from your color scheme settings.</Note> </Accordion> <Accordion title="Enable products count"> **Type:** Toggle\ **Default:** Enabled Displays the total number of products in the collection (e.g., "24 products"). <Tip>Product count helps customers understand collection size and is especially useful for large collections.</Tip> </Accordion> <Accordion title="Enable sorting"> **Type:** Toggle\ **Default:** Enabled Shows the sorting dropdown allowing customers to sort products by: * Featured * Best selling * Alphabetically (A-Z) * Alphabetically (Z-A) * Price (low to high) * Price (high to low) * Date (old to new) * Date (new to old) </Accordion> <Accordion title="Filters"> **Type:** Dropdown\ **Options:** Hide, Drawer, Sidebar\ **Default:** Drawer Choose how filters are displayed to customers: * **Hide** - Removes all product filters * **Drawer** - Filters slide in from the side when the "Filter" button is clicked * **Sidebar** - Filters are always visible in a left sidebar <img alt="Filter display styles" /> <Tip>Use drawer for cleaner layouts with fewer filters, or sidebar for collections with extensive filtering needs.</Tip> </Accordion> <Accordion title="Open filter accordions by default"> **Type:** Toggle\ **Default:** Enabled Sets all filter accordions to open when the page loads, making all filter options immediately visible. <Note>This setting only affects desktop sidebar and drawer views. Mobile filters always start collapsed.</Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Filters"> Advanced filtering options for collection pages. <AccordionGroup> <Accordion title="Display style"> **Type:** Dropdown\ **Options:** Hide, Drawer, Sidebar\ **Default:** Drawer Controls the visual presentation of product filters: * **Hide** - Completely removes filtering functionality * **Drawer** - Filters appear in a slide-out panel, saving screen space * **Sidebar** - Filters are permanently visible in a left column <img alt="Filter display options" /> <Tip>Sidebar works best for desktop collections with 5+ filter types. Drawer is ideal for mobile-first designs.</Tip> </Accordion> <Accordion title="Enable range slider for price filter"> **Type:** Toggle\ **Default:** Disabled Replaces checkbox-style price filtering with an interactive range slider allowing customers to set custom min/max price ranges. <Warning>Range slider requires JavaScript and may not work with all third-party filter apps. Test thoroughly before enabling on live stores.</Warning> <Tip>Range sliders work best for collections with wide, continuous price ranges (e.g., $10-$500). Use checkboxes for narrow or discrete price bands.</Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Product Grid"> Defines how products are displayed within the grid layout. <img alt="Product grid settings" /> <AccordionGroup> <Accordion title="Products per row"> **Type:** Range\ **Options:** 3 or 4\ **Default:** 4 Number of product cards displayed in each row on desktop screens. * **3 products** - Larger product images, more detail visible * **4 products** - More products visible at once, efficient browsing <Tip>Use 3 columns for premium products where image quality matters. Use 4 columns for large catalogs where variety is key.</Tip> </Accordion> <Accordion title="Products per row for mobile"> **Type:** Range\ **Options:** 1 or 2\ **Default:** 2 Number of product cards displayed per row on mobile devices. * **1 product** - Maximum product detail on small screens * **2 products** - Balance between detail and variety <Note>Most mobile users prefer 2 columns as it allows comparison while maintaining readability.</Note> </Accordion> <Accordion title="Products per page"> **Type:** Range\ **Range:** 12-50 products\ **Default:** 16 Total number of products loaded before pagination or load more button appears. <Note>The actual product count may adjust slightly to maintain grid consistency when text cards are inserted.</Note> <Tip>For large collections (100+ products), use lower values (12-24) to improve page load speed. For curated collections, use higher values (36-50) to show the full selection.</Tip> </Accordion> <Accordion title="Pagination style"> **Type:** Dropdown\ **Options:** Default (page numbers), Load more\ **Default:** Default Choose how customers navigate through multiple pages of products: * **Default** - Traditional numbered pagination (1, 2, 3...) * **Load more** - Single button that loads more products inline <Tip>Load more creates a seamless browsing experience and works well with infinite scroll.</Tip> </Accordion> <Accordion title="Enable infinity scroll"> **Type:** Toggle\ **Default:** Disabled\ **Availability:** Only when "Load more" pagination is selected Automatically load more products as the customer scrolls down the page, eliminating the need to click "Load more". <img alt="Infinity scroll behavior" /> <Tip>Infinity scroll works best with load more pagination for large collections (50+ products). It improves mobile browsing experience significantly.</Tip> <Warning>Some users prefer traditional pagination for better control. Test with your audience before enabling site-wide.</Warning> </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> Control the overall section layout, width, and spacing. <img alt="Layout settings" /> <AccordionGroup> <Accordion title="Section width"> **Type:** Dropdown\ **Options:** max-w-page, max-w-fluid\ **Default:** max-w-page Maximum width of the collection section: * **max-w-page** - Contained width matching your theme's standard page width * **max-w-fluid** - Full browser width, edge-to-edge layout <Tip>Use max-w-page for most collections to maintain visual consistency. Use max-w-fluid for large product grids where maximum visibility is needed.</Tip> </Accordion> <Accordion title="Color scheme"> **Type:** Dropdown\ **Default:** scheme-1 Select the color scheme for the collection section. Available schemes are defined in **Theme settings > Colors**. <Note>Color scheme affects background, text, borders, and button colors throughout the section.</Note> </Accordion> <Accordion title="Spacing top"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding above the collection section, controlling vertical space from the previous section. </Accordion> <Accordion title="Spacing bottom"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding below the collection section, controlling vertical space to the next section. <Tip>Use consistent spacing (M or L) across collection pages for visual rhythm. Reduce spacing to S for tight, magazine-style layouts.</Tip> </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block Settings ### Text Card Block Insert promotional or informational cards within the product grid. Text cards are perfect for highlighting sales, cross-selling, or telling your brand story. <Note>Maximum 5 text cards per collection page.</Note> <img alt="Text card block example" /> <AccordionGroup> <Accordion title="Content"> **Text**\ **Type:** Rich text editor\ **Default:** `<h3>Heading goes here</h3>` Rich text content for the card. Supports headings, paragraphs, bold, italic, and basic formatting. *** **Button link**\ **Type:** URL field Destination URL for the card button or click action. *** **Link type**\ **Type:** Dropdown\ **Options:** Button, Card\ **Default:** Button How the link functions: * **Button** - Traditional button element below content * **Card** - Entire card surface is clickable *** **Button label**\ **Type:** Text field Text displayed on the button. Leave empty to hide button entirely. *** **Button style**\ **Type:** Dropdown\ **Options:** Filled, Outlined, Text\ **Default:** Text Visual style of the button: * **Filled** - Solid background color, high contrast * **Outlined** - Border with transparent background * **Text** - Text-only link style, minimal </Accordion> <Accordion title="Layout"> **Position**\ **Type:** Number\ **Range:** 1-50\ **Default:** 8 Where the text card appears in the product grid. Position 1 means after the first product, position 8 means after the 7th product, etc. <Note>If position exceeds products per page setting, the card appears at the end of the grid.</Note> *** **Column factor**\ **Type:** Range\ **Range:** 1-4\ **Default:** 1 How many columns the card spans horizontally. 1 = single column width, 2 = double width, etc. <Tip>Column factor automatically adjusts based on "Products per row" setting. A factor of 2 on a 4-column grid creates a half-width card.</Tip> *** **Row factor**\ **Type:** Range\ **Range:** 1-4\ **Default:** 1 How many rows the card spans vertically. 1 = single row height, 2 = double height, etc. <Tip>Use column\_factor: 2 and row\_factor: 2 to create a large featured card that stands out in the grid.</Tip> </Accordion> <Accordion title="Position & Alignment"> **Content position**\ **Type:** Dropdown\ **Options:** Start, Center, End\ **Default:** Center Vertical positioning of content within the card: * **Start** - Top aligned * **Center** - Vertically centered * **End** - Bottom aligned *** **Content alignment**\ **Type:** Dropdown\ **Options:** Start, Center, End\ **Default:** Center Horizontal alignment of text: * **Start** - Left aligned * **Center** - Center aligned * **End** - Right aligned *** **Content position for mobile**\ **Type:** Dropdown\ **Options:** Start, Center, End\ **Default:** Center Vertical positioning on mobile devices. Same options as desktop. *** **Content alignment for mobile**\ **Type:** Dropdown\ **Options:** Start, Center, End\ **Default:** Center Horizontal alignment on mobile. Same options as desktop. <Note>Mobile alignment settings override desktop settings on screens smaller than 768px.</Note> </Accordion> <Accordion title="Visual Settings"> **Color scheme**\ **Type:** Dropdown\ **Default:** scheme-1 Color scheme for the text card. Available schemes match your theme's color settings. *** **Card image**\ **Type:** Image picker Background image for the text card. When set, text content overlays the image. <Tip>Use high-contrast images and adjust content position/alignment for optimal text readability.</Tip> </Accordion> </AccordionGroup> ## Common use cases <Tabs> <Tab title="Sale collections"> Insert text cards promoting "Extra 20% off" or free shipping thresholds at strategic positions (e.g., position 5 or 12) to maintain engagement throughout scrolling. </Tab> <Tab title="Category collections"> Use sidebar filters for extensive categorization (size, color, material, brand). Enable sorting and product count to help customers navigate large selections efficiently. </Tab> <Tab title="New arrivals"> Enable sorting by date with default sort set to "Date (new to old)". Use 4-column grid to showcase variety. Disable filters if the collection is curated. </Tab> <Tab title="Seasonal campaigns"> Large text cards (column\_factor: 2, row\_factor: 2) at position 5 featuring campaign messaging, countdown timers, or exclusive offers. </Tab> <Tab title="Price-sensitive"> Enable range slider for price filtering on electronics, furniture, or luxury goods where customers have specific budget ranges in mind. </Tab> <Tab title="Large inventories"> Use infinite scroll + load more for collections with 100+ products. Set lower products per page (16-24) to maintain fast initial load times while enabling endless browsing. </Tab> <Tab title="Curated collections"> Disable filters entirely, use 3-column grid for premium product presentation. Higher products per page (36-50) to show complete curated selection without pagination. </Tab> <Tab title="Flash sales"> Text card at position 1 (immediately visible) with countdown timer and "Card" link type so entire card is clickable. Use filled button style for urgency. </Tab> <Tab title="Brand storytelling"> Multiple text cards throughout grid (positions 5, 12, 20) telling brand narrative. Use card images with overlay text, centered content alignment. </Tab> <Tab title="Cross-sell"> Text cards linking to complementary product collections. Position 8 or 12 after customers have seen initial products. Use "Shop accessories" or "Complete the look" messaging. </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Grid layout optimization" icon="grid"> Use 4 products per row on desktop for balanced visibility and detail. This provides the best compromise between seeing multiple products and maintaining adequate product card size. </Card> <Card title="Mobile optimization" icon="mobile"> Use 2 columns on mobile for better product card readability. Single column makes cards too large, while 2 columns allows comparison without sacrificing detail. </Card> <Card title="Filter placement strategy" icon="filter"> Choose drawer for minimal filter collections (1-3 filters), sidebar for extensive filtering needs (5+ filters). Drawer keeps the layout clean while sidebar provides constant filter visibility. </Card> <Card title="Text card strategy" icon="square"> Place cards every 8-12 products to maintain engagement without disrupting browsing flow. Too frequent placement becomes annoying, too infrequent loses impact. </Card> <Card title="Pagination performance" icon="arrows-rotate"> Enable infinite scroll or load more for collections over 50 products to improve performance. Traditional pagination works better for smaller collections where customers want page-level control. </Card> <Card title="Price filtering" icon="dollar-sign"> Use range slider only for collections with wide, continuous price ranges (e.g., $10-$500). For narrow or discrete price bands, checkbox filters are more intuitive. </Card> <Card title="Product count visibility" icon="hashtag"> Always enable product count to set customer expectations about collection size. This is especially important for filtered results where count changes dynamically. </Card> <Card title="Text card sizing" icon="maximize"> Use column\_factor 2 and row\_factor 2 for promotional cards to make them stand out against standard product cards. Single-cell cards blend in too much. </Card> <Card title="Filter defaults" icon="check"> Keep accordions open by default for collections with 3-5 key filters. For 10+ filters, collapsed is better to prevent overwhelming customers. </Card> <Card title="Spacing consistency" icon="ruler"> Use M (2) spacing for standard collections to maintain rhythm. Reduce to S (1) for featured/minimal layouts, increase to L (4) for luxury brands. </Card> </CardGroup> ## Related guides <CardGroup> <Card title="Product Cards" icon="rectangle-wide" href="/themes/release/theme-settings/products"> Configure product card display settings including image ratios, badges, and quick view </Card> <Card title="Filtering & Search" icon="magnifying-glass" href="/themes/release/collections/search"> Advanced filtering and search configuration for collection pages </Card> <Card title="Collection List Page" icon="list" href="/themes/release/page-vendors"> Display multiple collections on a list page for easier navigation </Card> </CardGroup> # Search Source: https://docs.digifist.com/themes/release/collections/search Customize the layout and features of your search results pages. Search pages display the results of customer searches on your store. You can customize the product grid, filtering, sorting, and pagination options to help customers find what they're looking for more easily. <img alt="Search results page overview" /> ## What this section controls This section manages: * **Search results product grid** - Display search results in an organized grid layout * **Filtering system** - Control filter display (drawer only for search pages) * **Sorting dropdown** - Enable sorting options for search results * **Results count** - Display number of matching search results * **Pagination** - Control pagination style, load more button, and infinity scroll * **Section layout** - Adjust section width, color scheme, and spacing ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer </Step> <Step title="Navigate to Search"> In the left sidebar, find the **Search** section </Step> <Step title="Configure utilities bar"> Enable sorting, product count, and filter settings in the **Utilities Bar** tab </Step> <Step title="Customize product grid"> Set products per row (3 or 4 columns) and pagination style in the **Product Grid** tab </Step> <Step title="Adjust layout"> Set section width, color scheme, and spacing in the **Layout** tab </Step> </Steps> ## Section Settings <Tabs> <Tab title="Utilities Bar"> Controls how filtering and sorting tools appear on the search results page. <img alt="Search utilities bar" /> <AccordionGroup> <Accordion title="Show top border for utilities bar"> **Type:** Toggle\ **Default:** Disabled Adds a decorative border above the search utilities bar to visually separate it from content above. <Note>This border uses the theme's border color from your color scheme settings.</Note> </Accordion> <Accordion title="Enable products count"> **Type:** Toggle\ **Default:** Enabled Displays the number of search results found (e.g., "12 results found"). <Tip> Product count is especially important on search pages to show customers how many results matched their query and indicates search effectiveness. </Tip> </Accordion> <Accordion title="Enable sorting"> **Type:** Toggle\ **Default:** Enabled Shows sorting dropdown for search results, allowing customers to sort by: * Relevance (default) * Best selling * Alphabetically (A-Z) * Alphabetically (Z-A) * Price (low to high) * Price (high to low) * Date (old to new) * Date (new to old) <Tip>Enable sorting to help users find relevant products quickly based on their preferences.</Tip> </Accordion> <Accordion title="Open filter accordions by default"> **Type:** Toggle\ **Default:** Enabled Automatically expands all filter accordions in the drawer when customers open filters, making all filter options immediately visible. <Note>This setting only affects the drawer view. Collapsed accordions require additional clicks to see filter options.</Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Filters"> Advanced filtering options for search results. <img alt="Search filters drawer" /> <AccordionGroup> <Accordion title="Filters display"> **Type:** Dropdown\ **Options:** Hide, Drawer\ **Default:** Drawer Choose how product filters appear on search results: * **Hide** - Removes all product filtering functionality * **Drawer** - Filters appear in a slide-out overlay panel <Note> Search pages only support drawer or hidden filters. Sidebar option is not available for search results to maintain a cleaner layout focused on search results. </Note> <Tip>Drawer filters provide cleaner search experience without overwhelming the page with filter options.</Tip> </Accordion> <Accordion title="Enable range slider for price filter"> **Type:** Toggle\ **Default:** Disabled Use interactive price range slider instead of checkbox-style price filtering. Allows customers to set custom minimum and maximum price values. <Warning>Range slider requires JavaScript and may not work with all third-party filter apps. Test thoroughly before enabling on live stores.</Warning> <Tip>Enable range slider for catalogs with wide price ranges (e.g., $10-$500) to give customers more control over price filtering.</Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Product Grid"> Defines how search result products are displayed within the grid layout. <img alt="Search results grid" /> <AccordionGroup> <Accordion title="Products per row"> **Type:** Dropdown\ **Options:** 3, 4\ **Default:** 4 Number of product cards displayed per row on desktop screens. * **3** - Larger product cards with more detail visible * **4** - More results visible at once, efficient browsing <Tip>Use 4 products per row for optimal search result viewing - it provides the best balance between product detail and results density.</Tip> </Accordion> <Accordion title="Products per row for mobile"> **Type:** Dropdown\ **Options:** 1, 2\ **Default:** 2 Number of products per row on mobile devices. * **1** - Single column layout, maximum product detail * **2** - Two columns, balance between detail and variety <Tip>Use 2 columns on mobile for better product visibility and comparison without excessive scrolling.</Tip> </Accordion> <Accordion title="Products per page"> **Type:** Range\ **Range:** 12-50\ **Default:** 16 Total number of products loaded before pagination appears. <Note>The actual product count may adjust slightly to maintain grid consistency when text cards or other blocks are inserted.</Note> <Tip>For search results with many matches, use lower values (12-16) to improve page load speed and help customers refine their search.</Tip> </Accordion> <Accordion title="Pagination style"> **Type:** Dropdown\ **Options:** Page numbers, Load more\ **Default:** Page numbers How customers navigate through multiple pages of search results: * **Page numbers** - Traditional numbered pagination (1, 2, 3...) * **Load more** - Single button that loads additional results inline <Tip>Load more creates a seamless browsing experience for search results and works well with infinity scroll.</Tip> </Accordion> <Accordion title="Enable infinity scroll"> **Type:** Toggle\ **Default:** Disabled\ **Availability:** Only when "Load more" pagination is selected Automatically loads more search results as the customer scrolls down the page, eliminating the need to click "Load more". <Tip> Infinity scroll works well for mobile search experiences with many results. It reduces friction and keeps customers engaged with search results. </Tip> <Warning>Some users prefer traditional pagination for better navigation control. Test with your audience before enabling site-wide.</Warning> </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> Control the overall section layout, width, and spacing. <img alt="Search layout settings" /> <AccordionGroup> <Accordion title="Section width"> **Type:** Dropdown\ **Options:** max-w-page, max-w-fluid\ **Default:** max-w-page Maximum width of the search section: * **max-w-page** - Standard container matching theme's page width * **max-w-fluid** - Wider container utilizing more screen space <Tip>Use max-w-page for visual consistency with other pages. Use max-w-fluid for large search result grids where maximum visibility is needed.</Tip> </Accordion> <Accordion title="Color scheme"> **Type:** Dropdown\ **Default:** scheme-1 Color scheme for the search section. Available schemes are defined in **Theme settings > Colors**. <Note>Color scheme affects background, text, borders, and button colors throughout the section.</Note> </Accordion> <Accordion title="Spacing top"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** No (0) Padding above the search section, controlling vertical space from the previous section. <Tip>Keep top spacing minimal (0 or S) to prioritize search results and reduce scrolling before customers see results.</Tip> </Accordion> <Accordion title="Spacing bottom"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding below the search section, controlling vertical space to the next section. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Common use cases <Tabs> <Tab title="Basic search"> Standard search configuration for most stores. **Configuration:** * Enable sorting and product count * Drawer filters * 4-column desktop grid * 2-column mobile grid * Page numbers pagination </Tab> <Tab title="Large catalogs"> Optimized for stores with extensive inventories and many search results. **Configuration:** * Range slider for price filtering * Infinity scroll enabled * 4-column desktop / 2-column mobile * 16-24 products per page * All sorting options enabled </Tab> <Tab title="Mobile-optimized"> Focus on mobile-first search experience. **Configuration:** * Drawer filters (mobile-friendly) * Load more pagination with infinity scroll * 2-column mobile grid * Sorting enabled * Minimal top spacing </Tab> <Tab title="Minimal search"> Clean, focused search for curated stores with fewer products. **Configuration:** * Disable filters entirely * Focus on sorting and results count * 3-column desktop for larger cards * Traditional page numbers </Tab> <Tab title="Advanced search"> Full-featured search for complex catalogs. **Configuration:** * All filters enabled in drawer * Range slider for price * Sorting enabled * Visible product count * Open filter accordions by default </Tab> <Tab title="Fast navigation"> Optimized for power users who want quick filtering. **Configuration:** * Infinity scroll enabled * Drawer filters with open accordions * Quick sort options * 4-column grid for maximum results * Minimal spacing </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Results count visibility" icon="hashtag"> Always enable product count to show search effectiveness and help customers understand result quality. This is especially important for search pages where query quality varies. </Card> <Card title="Sorting enablement" icon="arrow-down-a-z"> Enable sorting to help users find relevant products quickly based on their preferences. Search results benefit from multiple sort options beyond just relevance. </Card> <Card title="Grid layout optimization" icon="grid"> Use 4 products per row for optimal search result viewing on desktop. This provides the best balance between product detail and results density. </Card> <Card title="Filter placement" icon="filter"> Drawer filters provide cleaner search experience than sidebar without overwhelming the page. Search pages work best with focused, uncluttered layouts. </Card> <Card title="Mobile optimization" icon="mobile"> Use 2 columns on mobile for better product visibility and comparison. Single column creates too much scrolling for search results. </Card> <Card title="Pagination strategy" icon="arrows-rotate"> Use infinity scroll or load more for large result sets to improve browsing. This keeps customers engaged with search results without interruption. </Card> <Card title="Price filtering" icon="dollar-sign"> Enable range slider for catalogs with wide price ranges for better filtering precision. This is especially useful for broad search queries. </Card> <Card title="Spacing minimization" icon="ruler"> Keep top spacing minimal (0 or S) to prioritize results and reduce scrolling before customers see search results. Time-to-results is critical for search pages. </Card> </CardGroup> ## Related guides <CardGroup> <Card title="Search Banner" icon="search" href="/themes/release/sections/main-search-banner"> Configure the search page banner section above search results </Card> <Card title="Collection Pages" icon="layer-group" href="/themes/release/collections/collection-page"> Similar filtering and layout options for collection pages </Card> </CardGroup> # Common settings Source: https://docs.digifist.com/themes/release/common-settings Shared settings that appear across most sections: width, color scheme, and spacing. Common settings appear in most sections and control fundamental aspects of layout and appearance. Once you understand these settings, you can customize any section consistently without needing to learn section-specific configuration. ## What these settings control * Section width (how wide content appears) * Color scheme selection for individual sections * Vertical spacing (margin above and below sections) These settings are "common" because they appear in nearly every section throughout your theme, from homepage sections to product pages. ## Where to find common settings Common settings appear at the bottom of most section settings panels in the Theme Customizer. <Steps> <Step title="Select any section"> Click on a section in the Theme Customizer to open its settings panel. </Step> <Step title="Scroll to common settings"> Scroll to the bottom of the section settings panel. </Step> <Step title="Adjust width, scheme, or spacing"> Modify common settings to change section appearance. </Step> <Step title="Save changes"> Click **Save** to apply your changes. </Step> </Steps> ## Settings ### Section width Controls how wide the section content appears on the page. **Options**: #### Page Content width matches the global **Page width** setting defined in [Layout settings](/themes/release/theme-settings/layout) (typically 1200-1600px). **When to use**: * Standard sections with text and images * Product grids and collection displays * Most homepage sections * Default choice for balanced layouts #### Narrow Content width is reduced to approximately 75-80% of the page width. **When to use**: * Text-heavy sections for improved readability * Blog posts and articles * Forms and contact sections * When you want to draw attention to specific content #### Narrower Content width is significantly reduced to approximately 50-60% of the page width. **When to use**: * Single-column text content * Newsletter signup forms * Quotes or testimonials * Minimal, focused content that benefits from tight framing #### Fluid Content extends to fill the browser viewport with minimal side padding. **When to use**: * Large hero images or videos * Full-width galleries * Immersive visual sections * When you want content to feel expansive #### Full Content extends completely to the screen edges with no padding. **When to use**: * Edge-to-edge images or videos * Sections that should bleed to screen edges * Maximum visual impact * Background images or color blocks <Tip>Start with "Page" width for most sections. Use "Narrow" or "Narrower" for text-heavy content, and "Fluid" or "Full" for visual impact sections.</Tip> ### Color scheme Choose which color scheme applies to the section. Options include: * **Scheme 1**: Your primary color scheme * **Scheme 2**: Alternative scheme for contrast * **Scheme 3**: Additional variation * **Inverse**: High-contrast scheme (often dark) Color schemes are defined in [Colors settings](/themes/release/theme-settings/colors) and control: * Background colors * Text colors * Button colors * Accent colors **We recommend** alternating color schemes between adjacent sections to create visual separation and rhythm on the page. <Note>When you change a section's color scheme, all colors (background, text, buttons) update automatically based on the scheme definition.</Note> ### Spacing Controls the vertical margin (space) above and below the section. **Options**: #### No spacing Removes all vertical spacing. The section sits directly against adjacent content. **When to use**: * Sections that should visually connect * Full-width sections that bleed together * When creating seamless visual flows #### S (Small) Minimal spacing, approximately 20-30px. **When to use**: * Related sections that should feel connected * Dense layouts where space is limited * Mobile-optimized layouts #### M (Medium) Standard spacing, approximately 40-60px. **When to use**: * Default choice for most sections * Balanced layouts with good separation * Standard page construction #### L (Large) Generous spacing, approximately 60-80px. **When to use**: * Premium, spacious layouts * Creating clear section separation * Highlighting important content * Luxury or high-end brand aesthetics #### XL (Extra Large) Maximum spacing, approximately 80-100px or more. **When to use**: * Maximum section separation * Editorial or storytelling layouts * Dramatic visual breaks * Specific design requirements **We recommend** using **M (Medium)** as your default and adjusting up to **L** or **XL** for sections you want to emphasize, or down to **S** or **No spacing** when sections should feel connected. <Tip>Consistent spacing creates visual rhythm. Use the same spacing value for similar sections, and vary it intentionally to create hierarchy.</Tip> ## Best practices * **Establish a width pattern**: Use "Page" width for most sections, "Narrow" for text, and "Fluid/Full" for hero images * **Alternate color schemes**: Change schemes between sections to create natural visual breaks * **Maintain spacing consistency**: Use Medium spacing as your baseline and deviate only with purpose * **Consider mobile**: Width and spacing automatically adjust for mobile devices, but preview to ensure good appearance * **Create visual hierarchy**: Combine larger spacing with contrasting color schemes to emphasize important sections * **Test combinations**: Preview how different width, scheme, and spacing combinations work together before committing <Warning>Sections set to "No spacing" with the same color scheme will appear as one continuous section, which may be confusing to visitors if not intentional.</Warning> ## Common patterns ### Standard homepage * Hero section: **Fluid** width, **Scheme 1**, **No spacing** * Features: **Page** width, **Scheme 2**, **L spacing** * Products: **Page** width, **Scheme 1**, **M spacing** * Testimonials: **Narrow** width, **Scheme 2**, **L spacing** ### Text-focused page * All sections: **Narrow** width, **Scheme 1**, **M spacing** * Pull quotes: **Narrower** width, **Scheme 2**, **L spacing** ### Visual-heavy layout * All sections: **Fluid** or **Full** width, alternating schemes, **No** or **S spacing** ## Related guides * [Layout](/themes/release/theme-settings/layout) - Configure global page width and spacing * [Colors](/themes/release/theme-settings/colors) - Define color schemes applied to sections * [Homepage sections](/themes/release/sections/index) - Learn about specific section types # Footer Source: https://docs.digifist.com/themes/release/footer/footer Customize your store's footer with menus, newsletter signup, social links, and more. The footer section appears at the bottom of every page and provides navigation, brand information, newsletter signup, social links, and legal content. Once configured, it creates a consistent footer experience across your entire store with flexible block-based layout options. A well-designed footer helps customers find important information, subscribe to updates, and connect with your brand across platforms. <img alt="Footer Overview" /> ## What this section controls This section controls the layout, content, and appearance of the footer, including brand blocks, navigation menus, newsletter forms, social media links, payment icons, and custom content blocks. ## Getting started <Steps> <Step title="Open Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Locate footer section"> Scroll to the bottom of any page or select **Footer** from the sections list in the sidebar. </Step> <Step title="Add blocks"> Click **Add block** to add footer elements like menus, brand info, or newsletter forms. </Step> <Step title="Configure layout"> Adjust column and row factors to control block sizing and positioning within the 6-column grid. </Step> </Steps> <img alt="Footer Location" /> ## Section settings <Tabs> <Tab title="Layout"> ### Section width Controls how wide the footer content appears on the page. <AccordionGroup> <Accordion title="Page" icon="align-center"> Content width matches the global page width setting with standard side margins. Creates alignment with your main content. </Accordion> <Accordion title="Fluid" icon="arrows-left-right"> Content extends with minimal side margins for an edge-to-edge appearance. Provides maximum horizontal space for footer blocks. </Accordion> <img alt="Footer Section Width" /> </AccordionGroup> <Tip> Use **Page** width to align with your main content, or **Fluid** for edge-to-edge footer designs. </Tip> ### Spacing grid Controls the space between footer blocks in the grid layout. **Available options:** No, S, M (default), L, XL <Note> Medium (M) spacing provides balanced separation between blocks without excessive gaps. </Note> </Tab> <Tab title="Appearance"> ### Show border top When enabled, adds a thin border line across the top of the footer to visually separate it from page content. ### Color scheme Choose which color scheme applies to the footer. **Available schemes:** Scheme 1, Scheme 2, Scheme 3, Inverse <img alt="Footer Color Scheme" /> <Tip> Typically use an inverse or darker scheme to differentiate the footer from main content and create visual hierarchy. </Tip> </Tab> <Tab title="Spacing"> ### Spacing top Controls the padding above the footer content. **Available options:** No, S, M (default), L, XL ### Spacing bottom Controls the padding below the footer content. **Available options:** No, S, M (default), L, XL </Tab> </Tabs> ## Block types The footer uses a flexible block-based system. Add, remove, and arrange blocks to create your ideal footer layout. <Tabs> <Tab title="Brand & Content"> ### Brand block Displays your brand logo and description text. Only one brand block can be added. <AccordionGroup> <Accordion title="Logo options" icon="image"> **Logo**: Upload a PNG or JPG logo via the image picker. **SVG code**: Paste raw SVG code for vector logo. If provided, this overrides the uploaded image and allows perfect scaling at any size. **Logo width**: Set maximum logo width on desktop (default: 240px). **Logo width mobile**: Set maximum logo width on mobile (default: 150px). </Accordion> <Accordion title="Brand text" icon="text"> **Text**: Add brand description text below the logo. Supports rich text formatting. **Default**: "Share contact information, store details, and brand content with your customers." </Accordion> <Accordion title="Layout" icon="grid"> **Column factor**: Controls horizontal space (1-6 columns). **Row factor**: Controls vertical space (1-6 rows). **Content position vertical**: Aligns content within the grid cell (start, center, end). **Content alignment**: Horizontal text alignment (start, center, end). **Content alignment for mobile**: Separate mobile text alignment. </Accordion> </AccordionGroup> <Tip> We recommend using column factor 2 for brand blocks to give them appropriate prominence in the footer layout. </Tip> ### Rich text block Custom HTML/text content, commonly used for copyright notices and legal disclaimers. You can add up to 2 rich text blocks. <AccordionGroup> <Accordion title="Content" icon="file-lines"> **Heading**: Optional heading above the content. **Text**: Content text with rich text formatting support. **Special feature**: Type `[year]` and it automatically displays the current year. </Accordion> <Accordion title="Example usage" icon="copyright"> ``` Copyright ©[year] DigiFist. All rights reserved. ``` Renders as: ``` Copyright ©2026 DigiFist. All rights reserved. ``` </Accordion> <Accordion title="Layout" icon="grid"> **Column factor**: Controls horizontal space (1-6 columns). **Row factor**: Controls vertical space (1-6 rows). **Content position vertical**: Vertical alignment (start, center, end). **Content alignment**: Horizontal alignment (start, center, end). **Content alignment for mobile**: Separate mobile alignment. </Accordion> </AccordionGroup> </Tab> <Tab title="Navigation"> ### Link list block (Menu) Displays navigation menus with links. You can add up to 6 menu blocks to organize navigation into categories. <AccordionGroup> <Accordion title="Menu configuration" icon="bars"> **Menu**: Select which Shopify menu to display. Supports up to 3 levels of nested links. **Default**: "footer" menu **Custom title**: Optionally override the menu name with custom heading text. **Title URL**: Make the menu heading clickable by adding a URL. </Accordion> <Accordion title="Display options" icon="table-layout"> **Menu layout**: * **Vertical** (default): Links stacked in a column * **Horizontal**: Links displayed in a row <img alt="Footer Menu Layout" /> **Link opacity**: Adjust transparency of menu links (0-100%, default: 100%). <img alt="Footer Link Opacity" /> **Show first menu on mobile**: When enabled, the first menu item displays expanded on mobile devices. </Accordion> <Accordion title="Mobile behavior" icon="mobile"> Menus automatically become accordion-style collapsible sections on mobile devices for better space efficiency. The first menu can be set to display expanded by default on mobile for immediate access to important links. </Accordion> <Accordion title="Layout" icon="grid"> **Column factor**: Controls horizontal space (1-6 columns). **Row factor**: Controls vertical space (1-6 rows). <img alt="Footer Menu Row/Column Factor" /> </Accordion> </AccordionGroup> <Warning> Menus must be created in **Shopify admin → Navigation** before they can be selected in footer menu blocks. </Warning> </Tab> <Tab title="Engagement"> ### Newsletter block Email signup form for newsletter subscriptions. <AccordionGroup> <Accordion title="Content" icon="envelope"> **Heading**: Newsletter section heading (default: "Newsletter"). **Text**: Optional description text explaining the newsletter benefits. </Accordion> <Accordion title="Functionality" icon="check-circle"> * Uses Shopify's customer newsletter subscription * Built-in email validation * Displays success/error messages * GDPR compliant </Accordion> <Accordion title="Layout" icon="grid"> **Column factor**: Controls horizontal space (1-6 columns). **Row factor**: Controls vertical space (1-6 rows). <img alt="Newsletter Layout Factor" /> **Content position vertical**: Vertical alignment (start, center, end). **Content alignment**: Horizontal alignment (start, center, end). **Content alignment for mobile**: Separate mobile alignment. <img alt="Newsletter Content Alignment" /> </Accordion> </AccordionGroup> <Tip> Include clear value proposition text like "Get exclusive discounts and product updates" to encourage signups. </Tip> ### Social media block Displays links to your social media profiles. Only one social media block can be added. <AccordionGroup> <Accordion title="Display options" icon="share-nodes"> **Show icons**: When enabled, displays icon-only buttons. When disabled, shows text labels. **Open in new tab**: When enabled (default), social links open in a new browser tab. **Heading**: Optional heading above social links. </Accordion> <Accordion title="Configuration" icon="gear"> Social media URLs are set globally in [Theme settings → Social media](/themes/release/theme-settings/social-media). The footer automatically displays icons for configured platforms including: * Instagram * Facebook * TikTok * X (Twitter) * Pinterest * YouTube * LinkedIn * Snapchat * Vimeo </Accordion> <Accordion title="Layout" icon="grid"> **Column factor**: Controls horizontal space (1-6 columns). **Row factor**: Controls vertical space (1-6 rows). **Content position vertical**: Vertical alignment (start, center, end). **Content alignment**: Horizontal alignment (start, center, end). **Content alignment for mobile**: Separate mobile alignment. </Accordion> </AccordionGroup> ### Follow on Shop block Displays "Follow on Shop" button for Shop app integration. Only one Follow on Shop block can be added. <AccordionGroup> <Accordion title="Requirements" icon="shop"> **Shop Pay must be enabled** for customers to follow your store via the Shop app. To enable: Go to **Shopify Settings → Payments** and activate Shop Pay. </Accordion> <Accordion title="Layout" icon="grid"> **Column factor**: Controls horizontal space (1-6 columns). **Row factor**: Controls vertical space (1-6 rows). **Content position vertical**: Vertical alignment (start, center, end). **Content alignment**: Horizontal alignment (start, center, end). **Content alignment for mobile**: Separate mobile alignment. </Accordion> </AccordionGroup> </Tab> <Tab title="Utilities"> ### Localization block Provides country/region and language selectors for international stores. Only one localization block can be added. <AccordionGroup> <Accordion title="Country selector" icon="globe"> **Enable country selector**: Shows country/market selector. **Requirements**: Shopify Markets must be configured in your admin. To configure: Go to **Shopify Settings → Markets** and set up your target markets. </Accordion> <Accordion title="Language selector" icon="language"> **Enable language selector**: Shows language selector. **Requirements**: Multiple languages must be enabled in Shopify admin. To configure: Go to **Shopify Settings → Languages** and add additional languages. </Accordion> <Accordion title="Layout" icon="grid"> **Column factor**: Controls horizontal space (1-6 columns). **Row factor**: Controls vertical space (1-6 rows). **Content position vertical**: Vertical alignment (start, center, end). **Content alignment**: Horizontal alignment (start, center, end). **Content alignment for mobile**: Separate mobile alignment. </Accordion> </AccordionGroup> ### Payment icons block Displays accepted payment method icons. Only one payment icons block can be added. <AccordionGroup> <Accordion title="Payment sources" icon="credit-card"> Icons automatically pull from enabled payment methods in **Shopify Settings → Payments**. The block displays icons for all active payment providers in your store. </Accordion> <Accordion title="Custom payments" icon="plus"> **Custom payment types**: Add comma-separated payment method names for custom icons. **Example**: `cash, check, bitcoin` Custom icons appear alongside automatic payment provider icons. </Accordion> <Accordion title="Icon style" icon="palette"> **Colorful icons**: * When enabled: Shows full-color branded payment icons * When disabled (default): Shows grayscale/monochrome icons for a subtle appearance </Accordion> <Accordion title="Layout" icon="grid"> **Column factor**: Controls horizontal space (1-6 columns). **Row factor**: Controls vertical space (1-6 rows). **Content position vertical**: Vertical alignment (start, center, end). **Content alignment**: Horizontal alignment (start, center, end). **Content alignment for mobile**: Separate mobile alignment. </Accordion> </AccordionGroup> </Tab> <Tab title="Advanced"> ### Spacer block Empty space block for layout control and visual separation. <AccordionGroup> <Accordion title="Visibility control" icon="eye"> **Show on**: * **Desktop**: Only visible on desktop screens * **Mobile**: Only visible on mobile screens * **Both**: Always visible on all devices </Accordion> <Accordion title="Use cases" icon="lightbulb"> * Create visual separation between blocks * Balance grid layout when blocks don't fill all columns * Adjust responsive layouts for different screen sizes * Push content to specific positions within the grid </Accordion> <Accordion title="Layout" icon="grid"> **Column factor**: Controls horizontal space (1-6 columns). **Row factor**: Controls vertical space (1-6 rows). </Accordion> </AccordionGroup> ### Custom Liquid block Insert custom Liquid code, app snippets, or advanced customizations. <AccordionGroup> <Accordion title="Code input" icon="code"> **Custom Liquid**: Field for any valid Liquid code, including: * App embeds * Third-party widgets * Custom functionality * Advanced Liquid logic </Accordion> <Accordion title="Visibility control" icon="eye"> **Show on**: Control visibility by device (desktop, mobile, or both). </Accordion> <Accordion title="Common uses" icon="puzzle-piece"> * App integrations (reviews, chat widgets) * Third-party service embeds * Custom promotional content * Dynamic content based on customer data </Accordion> <Accordion title="Layout" icon="grid"> **Heading**: Optional heading above the custom content. **Column factor**: Controls horizontal space (1-6 columns). **Row factor**: Controls vertical space (1-6 rows). **Content alignment**: Horizontal alignment (start, center, end). **Content alignment for mobile**: Separate mobile alignment. </Accordion> </AccordionGroup> <Warning> Custom Liquid blocks require Liquid knowledge. Incorrect code may cause display issues or break the footer layout. </Warning> </Tab> </Tabs> ## Grid layout system The footer uses a **6-column grid system**. Each block can span 1-6 columns (column factor) and 1-6 rows (row factor) to create flexible, responsive layouts. <Tabs> <Tab title="Column system"> ### Column factor (1-6) Controls how much horizontal space a block occupies: <AccordionGroup> <Accordion title="1 column" icon="grip-lines-vertical"> Takes 1/6 of row width (narrowest). Ideal for compact elements like social icons or single menu columns. </Accordion> <Accordion title="2 columns" icon="grip-lines-vertical"> Takes 1/3 of row width. Good for brand blocks, primary menus, or newsletter forms. </Accordion> <Accordion title="3 columns" icon="grip-lines-vertical"> Takes 1/2 of row width (half). Suitable for prominent content or wide menus. </Accordion> <Accordion title="4 columns" icon="grip-lines-vertical"> Takes 2/3 of row width. Use for featured content or multi-column menus. </Accordion> <Accordion title="5 columns" icon="grip-lines-vertical"> Takes 5/6 of row width. Rarely used, for specific asymmetric layouts. </Accordion> <Accordion title="6 columns (full width)" icon="grip-lines-vertical"> Takes full width. Perfect for copyright notices, disclaimers, or content that spans the entire footer. </Accordion> </AccordionGroup> </Tab> <Tab title="Row system"> ### Row factor (1-6) Controls vertical height and spacing for each block. Higher values create more vertical space and visual prominence. <Note> Row factor primarily affects spacing and doesn't strictly enforce height. Content can still expand beyond the row height if needed. </Note> </Tab> <Tab title="Typical layouts"> ### Standard footer layout **Row 1** (total: 6 columns): * Brand: column 2 * Menu 1: column 1 * Menu 2: column 1 * Menu 3: column 1 * Newsletter: column 1 **Row 2** (total: 6 columns): * Copyright (Rich text): column 3 * Localization: column 1 * Social Media: column 1 * Payment Icons: column 1 ### Minimal footer layout **Row 1** (total: 6 columns): * Brand: column 2 * Menu: column 2 * Newsletter: column 2 **Row 2** (total: 6 columns): * Copyright (Rich text): column 6 (full width) ### E-commerce focused layout **Row 1** (total: 6 columns): * Menu 1: column 1 * Menu 2: column 1 * Menu 3: column 1 * Menu 4: column 1 * Newsletter: column 2 **Row 2** (total: 6 columns): * Brand: column 2 * Social Media: column 1 * Payment Icons: column 2 * Copyright: column 1 </Tab> <Tab title="Block positioning"> ### Vertical position (content\_position\_vertical) <AccordionGroup> <Accordion title="Start" icon="arrow-up"> Aligns content to the top of the grid cell. Best for text-heavy blocks. </Accordion> <Accordion title="Center" icon="minus"> Vertically centers content within the grid cell. Creates balanced visual appearance. </Accordion> <Accordion title="End" icon="arrow-down"> Aligns content to the bottom of the grid cell. Useful for baseline alignment across blocks. </Accordion> </AccordionGroup> ### Horizontal alignment (content\_alignment) <AccordionGroup> <Accordion title="Start" icon="align-left"> Left-aligned content (default for most blocks). Natural reading flow for Western languages. </Accordion> <Accordion title="Center" icon="align-center"> Center-aligned content. Creates symmetry and works well for brand blocks or standalone elements. </Accordion> <Accordion title="End" icon="align-right"> Right-aligned content. Useful for specific design aesthetics or RTL languages. </Accordion> </AccordionGroup> ### Mobile-specific alignment Most blocks support separate alignment settings for mobile devices (`content_alignment_for_mobile`) to optimize layout on small screens. </Tab> </Tabs> ## Best practices <AccordionGroup> <Accordion title="Organization strategy" icon="sitemap"> * **Brand first**: Place brand block in the first column for immediate recognition * **Menus in the middle**: Use 2-4 menu blocks for organized navigation categories * **Utilities last**: Position newsletter, social, and localization in final columns * **Bottom row for legal**: Copyright and payment icons typically span the full width in a second row </Accordion> <Accordion title="Grid balance" icon="scale-balanced"> * Distribute blocks evenly across the 6-column grid * Typical patterns: 1+1+1+1+2 = 6, or 2+2+2 = 6 * Avoid having too many narrow blocks (all 1-column) * Use column factors strategically for visual hierarchy </Accordion> <Accordion title="Visual design" icon="palette"> * Enable top border to create clear separation from page content * Use a contrasting color scheme (often inverse or darker) for the footer * Maintain consistent spacing between blocks (Medium spacing recommended) * Match footer spacing with overall site rhythm </Accordion> <Accordion title="Mobile optimization" icon="mobile"> * Set important menus to show expanded on mobile * Use `content_alignment_for_mobile` for better mobile layouts * Consider spacer blocks with `show_on: mobile` for mobile-specific adjustments * Keep mobile logo width reasonable (150px default works well) </Accordion> <Accordion title="Content clarity" icon="lightbulb"> * Keep menu link text concise and descriptive * Use clear newsletter heading with value proposition * Update copyright with `[year]` tag for automatic updates * Ensure social links are configured in Theme Settings </Accordion> <Accordion title="Navigation depth" icon="layer-group"> * While 3 levels of menu nesting are supported, simpler is often better * Limit top-level items to 5-7 per menu for clarity * Create separate menu blocks for different topic categories * Avoid overly complex hierarchies that confuse customers </Accordion> <Accordion title="Performance" icon="gauge-high"> * Use SVG logos when possible for faster loading and better scaling * Limit the number of custom Liquid blocks to reduce complexity * Test footer load impact with browser developer tools * Avoid embedding heavy third-party scripts via custom Liquid unless necessary </Accordion> <Accordion title="Prerequisites" icon="list-check"> * Create menus in **Shopify admin → Navigation** before adding link list blocks * Configure Shopify Markets for country/language selectors * Set up social media URLs in **Theme Settings → Social Media** * Enable Shop Pay for "Follow on Shop" functionality * Configure payment methods in **Shopify Settings → Payments** for payment icons </Accordion> </AccordionGroup> ## Related guides * [Header](/themes/release/header/header) - Configure the header navigation and layout * [Social media](/themes/release/theme-settings/social-media) - Set up social media profile links * [Colors](/themes/release/theme-settings/colors) - Define color schemes for the footer * [Navigation](/essentials/navigation) - Create and manage Shopify menus # Megamenu Source: https://docs.digifist.com/themes/release/header/mega-menu Enrich top-level navigation items with visual cards to highlight collections and key categories. Megamenus combine standard navigation links with image-based cards to create visually rich navigation experiences. They appear on desktop when hovering over a top-level navigation item, allowing you to showcase featured content alongside traditional menu links. Megamenu behavior is determined by the presence of Image and text card blocks in the Header section. ## What this feature controls Megamenus control the visual layout and card-based navigation for top-level menu items. They allow you to: * Display image cards within navigation dropdowns * Combine text links with visual elements * Create featured collection highlights * Build campaign-focused navigation structures ## How megamenus work Megamenus rely on **Image and text card blocks** to determine their behavior: * If **Image and text card blocks exist**, the navigation item opens as a **megamenu** * If **no Image and text card blocks exist**, the navigation item falls back to a **standard dropdown menu** <Note> Megamenu functionality depends entirely on the presence of Image and text card blocks. </Note> ## Requirements To activate a megamenu layout, **both of the following must be true**: 1. Megamenu settings are configured in the **Header** section 2. At least one **Image and text card** block is added to the Header section If no Image and text card blocks are added, the menu will not render as a megamenu and will behave as a normal dropdown. ## Configuring megamenu settings <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Select Header section"> Click on the Header section in the left sidebar. </Step> <Step title="Configure megamenu settings"> Adjust typography, spacing, and card layout options. </Step> </Steps> <Note> These settings control the global appearance of all megamenus. They do not create cards—cards are added separately using blocks. </Note> ## Megamenu settings <Tabs> <Tab title="Typography"> ### Parent link size Controls the size of top-level menu item labels inside the megamenu. **Available options:** S, M, L ### Parent without submenu link size Controls the size of parent links that do not contain submenus. **Available options:** S, M, L </Tab> <Tab title="Card layout"> ### Spacing between cards Controls the spacing between Image and text card blocks inside the megamenu. **Available options:** No, S, M, L, XL ### Card aspect ratio Controls the aspect ratio of Image and text card blocks on desktop. **Available presets:** Auto, Square, Portrait, Landscape ### Card aspect ratio for mobile Controls the aspect ratio of Image and text card blocks specifically for mobile devices. **Available presets:** Auto, Square, Portrait, Landscape </Tab> </Tabs> ## Adding image and text card blocks Image and text card blocks define the visual content of megamenus. <Steps> <Step title="Open Theme Customizer"> Go to Online Store → Themes → Customize. </Step> <Step title="Access Header section"> Click on the Header section. </Step> <Step title="Add block"> Click **Add block** and select **Image and text card**. </Step> <Step title="Configure block"> Set the block settings according to your needs. </Step> </Steps> ## Image and text card block settings Each Image and text card block represents a single card inside a megamenu. <Tabs> <Tab title="Visibility & Position"> ### Show on Controls which devices the card is visible on. **Available options:** * Desktop * Mobile * Both ### Menu item position Defines which top-level navigation item the card belongs to using a numeric system. **How it works:** * Position `1` → First tier-1 menu item * Position `2` → Second tier-1 menu item * Position `3` → Third tier-1 menu item This numeric system ensures cards stay correctly linked even if menu labels change. <Tip> Enter a tier-1 link position to tie the block to its parent element. </Tip> </Tab> <Tab title="Appearance"> ### Color scheme Controls the background and text colors of the card using Shopify's color scheme system. ### Image Selects the image shown on the card. * Optional * If left empty, the card uses the selected color scheme background ### Card aspect ratio Controls the card's aspect ratio on desktop only. **Available groups:** * **General**: Same as Section, Auto * **Square** * **Landscape** * **Portrait** Some aspect ratio groups include multiple size presets. </Tab> <Tab title="Content"> ### Content alignment Controls horizontal alignment of text content. **Options:** Start, Center, End ### Content position Controls vertical alignment of text content. **Options:** Top, Center, Bottom ### Heading Main title displayed on the card. * Supports rich text * Allows bold, italic, and links ### Subheading Secondary text displayed below the heading. * Supports rich text * Allows bold, italic, and links ### Link Defines the destination URL for the card. When set, the entire card becomes clickable. </Tab> </Tabs> ## Creating different megamenu layouts <AccordionGroup> <Accordion title="Megamenu with navigation + cards" icon="list"> Use this layout when you want to keep standard navigation links while highlighting selected items visually. **How to set it up:** 1. Create a standard Shopify navigation menu 2. Add submenu items as usual 3. Add Image and text card blocks for the same menu item position 4. Keep navigation links enabled **Result:** * Text links remain visible * Image cards appear alongside navigation links **Best for:** * Featured collections * Campaign highlights * Balanced navigation structures </Accordion> <Accordion title="Card-only megamenu" icon="images"> Use this layout when you want the megamenu to be entirely visual. **How to set it up:** 1. Create a Shopify menu with minimal or no submenu links 2. Add Image and text card blocks for the target menu item position 3. Do not rely on text-based submenu items **Result:** * Megamenu displays only image cards * Navigation behaves like a visual catalog **Best for:** * Visual brands * Product-driven navigation * Campaign-focused menus </Accordion> </AccordionGroup> ## Best practices * Always verify menu item positions after reordering navigation * Keep card aspect ratios consistent across all cards * Use clear, concise headings that communicate value quickly * Avoid overcrowding megamenus with too many cards * Test megamenu behavior across different screen sizes * Ensure sufficient color contrast between card content and backgrounds ## Related guides <CardGroup> <Card title="Header section" icon="arrow-up-from-bracket" href="/themes/release/header"> Learn about header configuration and layout options </Card> <Card title="Navigation structure" icon="sitemap" href="/themes/release/header"> Understand how to organize your store navigation </Card> </CardGroup> # Introduction Source: https://docs.digifist.com/themes/release/index Boldly Unique, Lightning-Fast Impact. Release is a Shopify theme for brands that want a modern, conversion-focused storefront. It includes a flexible section system, advanced product features, and a full set of customizable templates. ## Presets Release comes with 4 ready-made designs for your store. <Columns> <Card title="Release" href="https://essence-main.myshopify.com"> A modern, clean design that puts your products front and center. </Card> <Card title="Grasse" href="https://essence-grasse.myshopify.com"> A fresh, vibrant design with a focus on imagery and color. </Card> <Card title="Serenity" href="https://release-serenity.myshopify.com"> A calming, minimalist design that enhances the shopping experience. </Card> <Card title="Forest" href="https://release-living.myshopify.com"> A nature-inspired design with earthy tones and organic shapes. </Card> </Columns> ## Products <Columns> <Card title="Product Page (PDP)" icon="box" href="/themes/release/products/product-page"> Flexible block-based product page with media gallery, variants, and dynamic checkout. </Card> <Card title="Product Groups" icon="layer-group" href="/themes/release/products/product-groups"> Link separate products to behave like variants using swatches, images, or text. </Card> <Card title="Product Badges" icon="tag" href="/themes/release/products/product-badges"> Highlight products with Sale, New, Bestseller, and custom tag-based badges. </Card> <Card title="Pre-order" icon="clock" href="/themes/release/products/pre-order"> Accept advance orders with metafield-driven messaging and estimated shipping dates. </Card> </Columns> ## Collections <Columns> <Card title="Collection Page (PLP)" icon="grid-2" href="/themes/release/collections/collection-page"> Product grid with filtering, sorting, and promotional card injection. </Card> <Card title="Collection List Page (CLP)" icon="list" href="/themes/release/collections/collection-list-page"> Display all or selected collections with custom imagery and pagination. </Card> <Card title="Search" icon="magnifying-glass" href="/themes/release/collections/search"> Full search results with filtering, sorting, and multi-type results. </Card> </Columns> ## Pages & Templates <Columns> <Card title="404 Error Page" icon="triangle-exclamation" href="/themes/release/pages-templates/404"> Customizable error page that guides lost visitors back to your store. </Card> <Card title="Blog & Article" icon="newspaper" href="/themes/release/pages-templates/blog"> Article feed with tag filtering and block-based individual article layout. </Card> <Card title="Cart" icon="cart-shopping" href="/themes/release/pages-templates/cart"> Full-page cart with item management, discounts, and express checkout. </Card> <Card title="Contact" icon="envelope" href="/themes/release/pages-templates/contact"> Contact page template with form and store information. </Card> <Card title="Customer Accounts" icon="user-circle" href="/themes/release/pages-templates/customer-accounts"> Account dashboard, login, register, addresses, and order details. </Card> <Card title="FAQ" icon="circle-question" href="/themes/release/pages-templates/faq"> Frequently asked questions page template with accordion layout. </Card> <Card title="Page Template" icon="file" href="/themes/release/pages-templates/page"> Generic content template for About, policies, and more. </Card> <Card title="Vendors" icon="store" href="/themes/release/pages-templates/vendors"> Vendor listing page for multi-brand stores. </Card> <Card title="Password Page" icon="lock" href="/themes/release/password"> Coming soon page with email signup for pre-launch stores. </Card> </Columns> ## Sections & Theme Settings <Columns> <Card title="Sections" icon="rectangles-mixed" href="/themes/release/sections"> Browse the full library of sections available for any page in your store. </Card> <Card title="Theme Settings" icon="sliders" href="/themes/release/theme-settings"> Control colors, typography, buttons, layout, and global behavior. </Card> <Card title="Header & Mega Menu" icon="window-maximize" href="/themes/release/header"> Set up navigation, mega menu, announcement bar, and footer content. </Card> <Card title="FAQ" icon="circle-question" href="/themes/release/faq"> Browse frequently asked questions about the Release theme. </Card> </Columns> ## Resources <Columns> <Card title="Common settings" icon="gear" href="/themes/release/common-settings"> Spacing, borders, color schemes, and section width options explained. </Card> <Card title="Changelog" icon="clock-rotate-left" href="/themes/release/changelog"> See what's new and what's changed in each Release release. </Card> </Columns> # 404 Error Page Source: https://docs.digifist.com/themes/release/pages-templates/404 Customizable 404 error page to help visitors navigate when they reach non-existent pages. The 404 Error Page template displays when visitors reach a non-existent page, helping them navigate back to your store content. <img alt="404 error page" /> ## What this section controls * Error page messaging * Call-to-action button * Page layout and styling * Navigation recovery ## Section settings <Tabs> <Tab title="Content"> ### Heading Main error page heading. * **Default:** "404 - Page not found" ### Text Error message and explanation. * **Default:** "Sorry, the page you are looking for does not exist." * Supports rich text formatting <Tip> Keep messaging friendly and helpful rather than technical or frustrating. </Tip> <img alt="Content settings" /> </Tab> <Tab title="Button"> ### Button label Text for the call-to-action button. * **Default:** "Continue shopping" ### Button link Destination URL for the button. * **Default:** `/collections/all` * Commonly used: homepage, best sellers, new arrivals ### Button style Visual appearance of the button. **Available options:** * **Filled** - Solid background * **Outlined** - Border with transparent fill * **Text** - Text-only link style **Default:** Filled <Note> Link to your most popular collection or homepage to maximize recovery. </Note> <img alt="Button configuration" /> </Tab> <Tab title="Layout"> ### Section width **Available options:** * **max-w-page** - Standard container * **max-w-narrower** - Narrow focused layout * **max-w-fluid** - Wider container **Default:** max-w-narrower ### Color scheme Select color scheme for the error page. * **Default:** scheme-1 ### Spacing top & bottom **Options:** No (0), S (1), M (2), L (4), XL (6) * **Default:** M (2) <img alt="Layout settings" /> </Tab> </Tabs> ## Best practices * **Friendly tone:** Use approachable, helpful language * **Clear navigation:** Link to homepage or popular collections * **Narrow width:** Use max-w-narrower for focused reading * **Search option:** Consider adding search functionality * **Popular links:** Add links to key sections (shop, about, contact) * **Brand personality:** Maintain brand voice even in error messages * **Mobile friendly:** Test readability on mobile devices ## Common use cases * **Broken links** - Old URLs from marketing campaigns * **Deleted products** - Product pages removed from store * **Mistyped URLs** - Customer typos in address bar * **External links** - Outdated links from blogs or social media * **SEO recovery** - Redirect broken links found by search engines * **Migration errors** - Issues after platform migration ## Related guides <Card title="Password Page" icon="lock" href="/themes/release/sections/main-password"> Configure password-protected pages </Card> <Card title="Search Page" icon="search" href="/themes/release/sections/main-search"> Help customers find products </Card> # Article Template (main-article) Source: https://docs.digifist.com/themes/release/pages-templates/article Main template section for individual blog post pages. This is the core template section for individual blog post pages. For detailed information, see the [Blog Posts Page](/themes/release/blog-posts) guide. ## Quick overview Controls: * Article content display * Featured image * Author and date information * Social sharing buttons * Comments section <Note> This is a template section that cannot be removed. Customization is done through the blog post settings in the Theme Customizer. </Note> ## Related documentation <Card title="Blog Posts" icon="newspaper" href="/themes/release/blog-posts"> Complete blog post customization guide </Card> # Blog Template (main-blog) Source: https://docs.digifist.com/themes/release/pages-templates/blog Main template section for blog index pages. This is the core template section for blog index pages. For detailed information, see the [Blogs Page](/themes/release/blogs) guide. ## Quick overview Controls: * Blog post grid layout * Post card design * Pagination * Featured image display <Note> This is a template section that cannot be removed. Customization is done through the blog page settings in the Theme Customizer. </Note> ## Related documentation <Card title="Blogs Page" icon="newspaper" href="/themes/release/blogs"> Complete blog index customization guide </Card> # Cart page Source: https://docs.digifist.com/themes/release/pages-templates/cart Customize the appearance and functionality of your shopping cart page. The cart page displays customer's selected items with prices, quantities, and checkout options. You can configure shipping notifications, terms acceptance, dynamic checkout buttons, upsell products, order notes, and layout settings to optimize the checkout experience. <img alt="Cart page overview" /> ## What this section controls This page template manages: * **Cart items display** - Show selected products with images, prices, quantities, and variants * **Free shipping notifications** - Display progress bars and messages for shipping thresholds * **Terms and conditions** - Require customer agreement before checkout * **Dynamic checkout buttons** - Enable express checkout options (Shop Pay, Apple Pay, etc.) * **Upsell products** - Recommend additional products based on cart contents * **Order notes** - Allow customers to add special instructions * **Empty cart content** - Customize messaging and button when cart is empty * **Section layout** - Adjust cart page width, color scheme, and spacing ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer to design your cart page </Step> <Step title="Navigate to Cart page"> In the left sidebar, click **Pages** > **Cart** </Step> <Step title="Configure shipping notifications"> Enable free shipping notifications and set your threshold price to encourage higher cart values </Step> <Step title="Set terms and conditions"> Add terms checkbox text and choose where to display it (cart page, cart drawer, or both) </Step> <Step title="Enable upsell products"> Turn on product recommendations to increase average order value with AI-powered suggestions </Step> <Step title="Configure empty cart"> Set the button URL for empty cart state (typically to collections or homepage) </Step> <Step title="Adjust layout settings"> Choose section width (recommend max-w-page), color scheme, and spacing for optimal cart experience </Step> </Steps> ## Section Settings <Tabs> <Tab title="Shipping Notification"> Display free shipping progress and notifications to encourage higher cart values. <AccordionGroup> <Accordion title="Enable shipping notification"> **Type:** Toggle\ **Default:** Disabled Show a free shipping notification based on cart price. Displays a progress bar or message showing how much more customers need to spend to qualify for free shipping. When enabled, customers see: * Progress bar showing amount remaining for free shipping * Celebratory message when threshold is reached * Real-time updates as cart value changes <Tip>Free shipping notifications can increase average order value by 10-30%. Enable this to encourage customers to add more items.</Tip> <Note> The notification appears above cart items and updates dynamically as customers adjust quantities or add products. </Note> </Accordion> <Accordion title="Threshold cart price"> **Type:** Number input\ **Default:** 0 (always free shipping) Minimum cart price value for free delivery qualification. When cart total reaches this amount, free shipping notification shows success message. **How it works:** * Set to `0` or leave blank: Always shows "Free shipping available" * Set to `50`: Shows progress until cart reaches \$50 * Set to `100`: Customers see how much more to add for free shipping **Example values by store type:** * Budget stores: $25-$35 * Mid-range stores: $50-$75 * Premium stores: $100-$150 <Tip>Set threshold slightly above your average order value to encourage customers to add one more item. If AOV is $45, try a $60 threshold.</Tip> <Warning> Ensure this threshold matches your actual shipping settings in Shopify. Don't promise free shipping here if you charge shipping at checkout. </Warning> </Accordion> </AccordionGroup> </Tab> <Tab title="Cart Page"> Configure cart page specific features and customer agreement options. <AccordionGroup> <Accordion title="Terms checkbox text"> **Type:** Text input\ **Default:** Empty Text for the terms and conditions checkbox that appears before checkout. Shows a required checkbox that customers must accept before proceeding to checkout. **Example terms text:** * "I agree to the [Terms of Service](/pages/terms) and [Privacy Policy](/pages/privacy)" * "I have read and accept the [Terms & Conditions](/policies/terms-of-service)" * "I agree to the terms of sale and understand the return policy" Supports HTML links to your policy pages: ```html theme={null} I agree to the <a href="/pages/terms">Terms of Service</a> ``` <Tip>Include clickable links to your full terms and privacy policy pages. Use relative URLs like `/pages/terms` or `/policies/terms-of-service`.</Tip> <Warning> If you add terms text but don't specify where to show it (see next setting), the checkbox won't appear anywhere. </Warning> </Accordion> <Accordion title="Show cart terms on"> **Type:** Dropdown\ **Options:** None, Cart page, Cart drawer, Both\ **Default:** None Choose where to display the terms checkbox: * **None** - Terms checkbox is hidden (not recommended if you have terms text) * **Cart page** - Shows only on full cart page * **Cart drawer** - Shows only in cart drawer/popup * **Both** - Shows on both cart page and cart drawer <Tip>Choose "Both" for consistent terms acceptance across all cart experiences. This ensures customers always agree to terms regardless of how they checkout.</Tip> <Note> When terms checkbox is required and unchecked, the checkout button is disabled until customer accepts. </Note> </Accordion> <Accordion title="Show dynamic checkout buttons"> **Type:** Toggle\ **Default:** Enabled Enable or disable dynamic checkout buttons on the cart page. Dynamic checkout buttons provide express payment options like: * **Shop Pay** - Shopify's one-click checkout * **Apple Pay** - For Apple device users * **Google Pay** - For Google account users * **PayPal** - Direct PayPal checkout * **Amazon Pay** - Amazon account checkout **When enabled:** * Customers see express checkout options above standard checkout button * Can complete purchase faster with saved payment info * Typically increases conversion rates by 5-15% **When disabled:** * Only standard "Checkout" button appears * Simpler, cleaner cart interface * May be preferred for wholesale or B2B stores <Tip>Keep dynamic checkout buttons enabled for most stores. They significantly improve conversion rates by reducing checkout friction.</Tip> <Warning> Third-party apps can sometimes disable these buttons. If enabled but not showing, check for app conflicts. </Warning> </Accordion> </AccordionGroup> </Tab> <Tab title="Upsell Products"> Configure product recommendations in the cart to increase average order value. <AccordionGroup> <Accordion title="Enable upsell products"> **Type:** Toggle\ **Default:** Disabled Enable or disable the display of upsell product recommendations in the cart. When enabled, shows recommended products based on: * **First cart product** - Primary product in customer's cart * **Shopify Recommendations API** - AI-powered product suggestions * **Search & Discovery app** - Shopify's native recommendation engine **Recommendation logic:** 1. Analyzes first product in cart 2. Finds complementary or frequently bought together products 3. Displays 3-6 recommended products below cart items 4. Updates dynamically as cart changes <Tip>Enable upsell products to increase average order value by 15-25%. Most effective for stores with diverse product catalogs and clear product relationships.</Tip> <Note> Upsell products use Shopify's native recommendation system. No manual product selection needed - recommendations are automatic and personalized. </Note> </Accordion> <Accordion title="Upsell products title"> **Type:** Text input\ **Default:** "You may also like" Set the heading text for the upsell products section in the cart. **Example titles:** * "You may also like" * "Complete your order" * "Recommended for you" * "Frequently bought together" * "Add these to your order" * "Customers also purchased" * "Don't forget these" <Tip>Use action-oriented titles that create urgency or FOMO. "Complete your order" performs better than generic "Related products".</Tip> </Accordion> <Accordion title="Color scheme for upsell"> **Type:** Dropdown\ **Default:** scheme-1 Choose a color scheme for the upsell products section. This controls the background, text, and card styling of recommended products. Available schemes are defined in **Theme settings > Colors**. **Best practices:** * Use a contrasting scheme to make upsells stand out * Or use the same scheme as cart for cohesive experience * Test which approach drives more upsell conversions <Tip>A subtly different color scheme can draw attention to upsell products without being jarring. Try scheme-2 or scheme-3 if cart uses scheme-1.</Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Additional Features"> Configure optional cart features like order notes. <AccordionGroup> <Accordion title="Enable order notes"> **Type:** Toggle\ **Default:** Disabled Enable or disable the order notes feature in the cart. When enabled, displays a text area where customers can add special instructions or messages with their order. **Common uses for order notes:** * Gift messages * Delivery instructions * Special requests * Customization details * Packaging preferences **Note field appears as:** * Text area below cart items * Optional (not required) * Labeled "Order notes" or "Special instructions" * Submitted with order and visible in Shopify admin <Tip>Enable for stores selling gifts, custom products, or offering special services. Disable for streamlined checkout with fewer fields.</Tip> <Note> Order notes appear in order details in Shopify admin. They're visible on packing slips and can be included in order notifications. </Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Empty Cart"> Customize what customers see when their cart is empty. <AccordionGroup> <Accordion title="Button link"> **Type:** URL input\ **Default:** /collections Set the destination URL for the call-to-action button on the empty cart page. This button helps customers navigate to products when cart is empty. **Common button destinations:** * `/collections` - All collections page * `/collections/all` - All products * `/collections/new-arrivals` - Latest products * `/collections/best-sellers` - Popular items * `/` - Homepage * `/collections/sale` - Sale/discounted products **Button text is managed in theme locales** under the cart section. <Tip>Link to your best-converting collection or featured products. For most stores, new arrivals or best sellers work better than generic "all products".</Tip> <Note> Empty cart title and description text are managed via theme locales (language files), not in Theme Customizer. Edit via theme code or language settings. </Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> Control the overall cart page layout, width, and spacing. <AccordionGroup> <Accordion title="Section width"> **Type:** Dropdown\ **Options:** max-w-page, max-w-narrow, max-w-fluid, max-w-full\ **Default:** max-w-page Maximum width of the cart page section: * **max-w-page** - Standard container matching theme width (recommended) * **max-w-narrow** - Narrower width for focused checkout experience * **max-w-fluid** - Wider container utilizing more screen space * **max-w-full** - Full browser width (not recommended for cart) <Tip>Use max-w-page (default) for balanced cart layout. Use max-w-narrow for minimal, distraction-free checkout experience.</Tip> </Accordion> <Accordion title="Color scheme"> **Type:** Dropdown\ **Default:** scheme-1 Select the color scheme for the cart page section. Available schemes are defined in **Theme settings > Colors**. <Tip>Use your primary/neutral color scheme for cart page. Avoid busy or colorful schemes that distract from checkout.</Tip> </Accordion> <Accordion title="Spacing top"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding above the cart section, controlling vertical space from the header. <Tip>Medium (M) spacing works well for most stores. Increase to Large (L) for premium stores with spacious design.</Tip> </Accordion> <Accordion title="Spacing bottom"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding below the cart section, controlling vertical space to the footer. </Accordion> </AccordionGroup> </Tab> </Tabs> ## How the cart page works The cart page is a crucial step in the customer journey from browsing to purchase: ### Cart page flow 1. **Customer adds products** - Items are added to cart from product pages 2. **Cart page displays** - Shows all cart items with images, prices, quantities 3. **Customer reviews order** - Can adjust quantities, remove items, see totals 4. **Optional features engage:** * Free shipping notification encourages adding more * Upsell products suggest complementary items * Terms checkbox ensures agreement to policies * Order notes field collects special requests 5. **Checkout initiated** - Customer clicks checkout or dynamic checkout button 6. **Redirect to checkout** - Shopify's checkout process begins ### Empty cart experience When cart is empty (no items added or all items removed): 1. Empty cart message appears (managed via locales) 2. Call-to-action button shows with configured URL 3. Customer clicks button to browse products 4. Redirects to configured collection or page <Note> Empty cart title and description are managed through theme locale files, not Theme Customizer. Only the button URL is configurable in settings. </Note> ## Common use cases <Tabs> <Tab title="Standard e-commerce"> Typical online store cart optimized for conversions. **Configuration:** * Enable shipping notification: Yes * Threshold cart price: $50-$75 (slightly above AOV) * Show cart terms on: Both * Show dynamic checkout buttons: Yes * Enable upsell products: Yes * Enable order notes: No (streamlined) * Section width: max-w-page **Strategy:** * Encourage higher cart values with free shipping * Reduce friction with express checkout options * Increase AOV with AI-powered upsells * Keep checkout simple without extra fields </Tab> <Tab title="High-value/luxury"> Premium store emphasizing quality over speed. **Configuration:** * Enable shipping notification: Yes * Threshold cart price: $150-$200 * Show cart terms on: Both * Show dynamic checkout buttons: Optional * Enable upsell products: Yes * Enable order notes: Yes (gift messages) * Section width: max-w-narrow **Strategy:** * Higher free shipping threshold matches premium positioning * Order notes for personalized service * Narrow width creates focused, premium experience * Upsells show complementary luxury items </Tab> <Tab title="B2B/wholesale"> Business customer cart with minimal distractions. **Configuration:** * Enable shipping notification: No * Show cart terms on: Cart page * Terms text: Custom B2B terms * Show dynamic checkout buttons: No * Enable upsell products: No * Enable order notes: Yes (PO numbers, instructions) * Section width: max-w-page **Strategy:** * No shipping notifications (custom freight) * No upsells (B2B knows what they need) * No dynamic checkout (requires approval workflows) * Order notes for business-specific info </Tab> <Tab title="Gift shop"> Store optimized for gift purchases and personalization. **Configuration:** * Enable shipping notification: Yes * Threshold cart price: $35-$50 * Show cart terms on: Both * Show dynamic checkout buttons: Yes * Enable upsell products: Yes * Upsell title: "Complete your gift" * Enable order notes: Yes (gift messages) * Section width: max-w-page **Strategy:** * Order notes essential for gift messages * Upsells suggest gift wrap, cards, complementary gifts * Free shipping threshold encourages gift bundles * Express checkout for last-minute shoppers </Tab> <Tab title="Subscription box"> Recurring subscription cart experience. **Configuration:** * Enable shipping notification: No (free shipping included) * Show cart terms on: Both * Terms text: Subscription terms and cancellation policy * Show dynamic checkout buttons: Yes * Enable upsell products: Yes * Upsell title: "Add to this month's box" * Enable order notes: Yes (preferences) * Section width: max-w-narrow **Strategy:** * Clear subscription terms required * Upsells for box add-ons or upgrades * Order notes for dietary/preference details * Narrow focused layout for subscription clarity </Tab> <Tab title="Minimal checkout"> Streamlined cart reducing all friction points. **Configuration:** * Enable shipping notification: No * Show cart terms on: None * Show dynamic checkout buttons: Yes * Enable upsell products: No * Enable order notes: No * Section width: max-w-narrow **Strategy:** * Remove everything non-essential * Maximum simplicity for fastest checkout * Only cart items and checkout button * Best for single-product stores or low-complexity catalogs </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Free shipping threshold" icon="truck-fast"> Set free shipping threshold 10-20% above your average order value to encourage customers to add one more item. If AOV is $45, try $55-60 threshold. </Card> <Card title="Enable upsells" icon="sparkles"> Product recommendations in cart increase AOV by 15-25% on average. Enable upsells unless you're a B2B or single-product store. </Card> <Card title="Dynamic checkout buttons" icon="bolt"> Keep express checkout buttons enabled. They improve conversion rates by 5-15% by reducing checkout friction for returning customers. </Card> <Card title="Terms placement" icon="file-contract"> Show terms checkbox on "Both" cart page and drawer for consistent policy acceptance regardless of how customers checkout. </Card> <Card title="Empty cart destination" icon="arrow-right"> Link empty cart button to your best-converting collection (new arrivals or best sellers) rather than generic "all products" page. </Card> <Card title="Order notes consideration" icon="note-sticky"> Only enable order notes if you need them (gifts, customization). Each extra field increases checkout friction slightly. </Card> <Card title="Cart width" icon="ruler-horizontal"> Use max-w-page or max-w-narrow for cart. Narrow width creates more focused checkout experience with fewer distractions. </Card> <Card title="Shipping accuracy" icon="circle-check"> Ensure shipping notification threshold matches your actual Shopify shipping rates. Don't promise free shipping you won't honor. </Card> <Card title="Mobile optimization" icon="mobile"> Test cart page on mobile devices. Ensure upsells, shipping notifications, and buttons work well on small screens. </Card> <Card title="Terms link clarity" icon="link"> In terms checkbox text, use clear HTML links to your full policy pages. Test that links work before launching. </Card> </CardGroup> ## Related guides <CardGroup> <Card title="Cart Drawer" icon="shopping-cart" href="/themes/release/sections/cart-drawer"> Configure the slide-out cart drawer popup </Card> <Card title="Checkout Settings" icon="credit-card" href="https://help.shopify.com/en/manual/checkout-settings"> Customize Shopify checkout page and payment options </Card> <Card title="Shipping Settings" icon="truck" href="https://help.shopify.com/en/manual/shipping"> Configure shipping rates and free shipping rules </Card> <Card title="Product Recommendations" icon="robot" href="https://help.shopify.com/en/manual/online-store/search-and-discovery/product-recommendations"> Learn how Shopify's AI recommendation engine works </Card> </CardGroup> # Contact page Source: https://docs.digifist.com/themes/release/pages-templates/contact Customize the layout and features of your contact page. The contact page provides customers with a way to reach you for inquiries, support, or feedback. It includes a customizable contact form with flexible field types, customer data binding, and optional map display for your store location. <img alt="Contact page overview" /> ## What this section controls This section manages: * **Contact form fields** - Customizable text, email, phone, checkbox, and radio fields * **Field layout** - Control field width (full or half) and column spanning * **Customer data binding** - Auto-fill fields for logged-in customers * **Required field validation** - Enforce mandatory field completion * **Form submission** - Handle form submissions and success messaging * **Map display** - Optional Google Maps integration for store location * **Section layout** - Adjust section width, color scheme, and spacing ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer </Step> <Step title="Navigate to Contact page"> In the left sidebar, click **Pages** > **Contact** </Step> <Step title="Add form fields"> Click **Add block** > **Field** to add form input fields </Step> <Step title="Configure field settings"> Set field type, label, width, and whether it's required </Step> <Step title="Add map (optional)"> Configure Google Maps API key and address to display store location </Step> <Step title="Adjust layout"> Set section width, color scheme, and spacing in the Layout tab </Step> </Steps> ## Section Settings <Tabs> <Tab title="Layout"> Control the overall form layout, width, and spacing. <img alt="Form layout settings" /> <AccordionGroup> <Accordion title="Section width"> **Type:** Dropdown\ **Options:** max-w-page, max-w-narrower, max-w-fluid\ **Default:** max-w-narrower Control the maximum width of the contact form: * **max-w-page** - Standard container matching theme width * **max-w-narrower** - Narrow focused layout for better readability * **max-w-fluid** - Wider container utilizing more screen space <Tip> Narrower width improves form readability and completion rates by reducing visual noise and focusing attention on the form. </Tip> </Accordion> <Accordion title="Color scheme"> **Type:** Dropdown\ **Default:** scheme-1 Select the color scheme for the form section. Available schemes are defined in **Theme settings > Colors**. <Note>Color scheme affects background, text, input borders, and button colors throughout the form.</Note> </Accordion> <Accordion title="Spacing top"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Adjust padding above the form section, controlling vertical space from the header. </Accordion> <Accordion title="Spacing bottom"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Adjust padding below the form section, controlling vertical space to the footer. </Accordion> </AccordionGroup> </Tab> <Tab title="Map"> Optional Google Maps integration to display your store location. <AccordionGroup> <Accordion title="Google Maps API key"> **Type:** Text field\ **Required:** Yes (to enable map) Your Google Maps API key required to display the map. Get your API key from [Google Cloud Console](https://console.cloud.google.com/). <Warning>Without a valid API key, the map will not display on the contact page.</Warning> </Accordion> <Accordion title="Address"> **Type:** Text field\ **Default:** Shop address from store settings The address to display on the map. Uses your shop address by default but can be manually overridden. **Format:** `street, city, country/state`\ **Example:** `123 Main Street, New York, NY` <Tip>Use your full store address for accurate map positioning.</Tip> </Accordion> <Accordion title="Zoom"> **Type:** Range slider\ **Range:** 1-20\ **Default:** 14 Controls the initial zoom level of the map. Higher values show more detail, lower values show broader area. <Note>Zoom level 14 provides a good balance between showing surrounding area and store detail.</Note> </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block Settings ### Field Block Add customizable form fields to build your contact form. Each field can span full or half width and supports various input types. <Tabs> <Tab title="Basic Settings"> Configure the fundamental properties of each form field. <img alt="Basic field settings" /> <AccordionGroup> <Accordion title="Block width / Column factor"> **Type:** Dropdown\ **Options:** Full width (6), Half width (3)\ **Default:** Full width Control the width of the field: * **Full width (6)** - Spans entire form width * **Half width (3)** - Takes up half the row, allowing two fields side-by-side <Tip>Use half-width for related pairs like first name/last name or city/zip code to save vertical space.</Tip> </Accordion> <Accordion title="Label / Heading"> **Type:** Text field\ **Default:** "Label"\ **Required:** Yes The label text displayed above the field. This will also be used to generate the field name in form submissions. <Tip>Use clear, descriptive labels like "Full Name", "Email Address", "Phone Number" to help users understand what information to provide.</Tip> </Accordion> <Accordion title="Type"> **Type:** Dropdown\ **Default:** Text Choose the field input type: **Input fields:** * **Text** - Single line text input for names, subjects, etc. * **Email** - Email address input with validation * **Tel** - Telephone number input **Selection fields:** * **Checkbox** - Multiple choice checkboxes (allows multiple selections) * **Radio** - Single choice radio buttons (allows one selection) <Note> Checkbox fields allow multiple selections, while radio fields allow only one selection at a time. </Note> </Accordion> <Accordion title="Required field / Required"> **Type:** Toggle\ **Default:** Disabled Mark the field as required for form submission. Customers cannot submit the form without filling required fields. <Tip>Mark name, email, and message fields as required minimum to ensure you can respond to inquiries.</Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Input Fields"> Additional settings available for Text, Email, and Tel field types. <img alt="Input field settings" /> <AccordionGroup> <Accordion title="Placeholder"> **Type:** Text field\ **Optional:** Yes Placeholder text shown inside the field when empty. Provides hints about expected input format. **Examples:** * Email field: `john@example.com` * Phone field: `+1 (555) 123-4567` * Text field: `Enter your full name` <Tip>Use placeholders to provide format hints without cluttering the form with extra instructions.</Tip> </Accordion> <Accordion title="Binding"> **Type:** Dropdown\ **Default:** Custom\ **Availability:** Text, Email, and Tel fields only Bind field to customer data for logged-in users. Auto-fills the field with customer information. **Available options:** * **Custom** - No binding, manual input * **Email** - Customer email address * **Name** - Full name * **First name** - First name only * **Last name** - Last name only * **ID** - Customer ID * **Phone** - Phone number * **Last order** - Last order number <Tip> Use email binding for email fields to auto-fill for logged-in customers, improving form completion rates by 30-40%. </Tip> <Note>Binding only works for logged-in customers. Guest visitors must manually fill all fields.</Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Selection Fields"> Settings for Checkbox and Radio field types. <img alt="Selection field options" /> <AccordionGroup> <Accordion title="Checked field / Checked"> **Type:** Toggle\ **Default:** Unchecked Set default checked state for the first checkbox/radio option. <Tip>Enable for consent checkboxes or default selections to streamline form completion.</Tip> </Accordion> <Accordion title="Label description"> **Type:** Text field\ **Optional:** Yes Additional descriptive text displayed below the field label. Use to provide context or instructions. <Tip>Add descriptions like "Select all that apply" for checkboxes or "Choose one option" for radio buttons.</Tip> </Accordion> <Accordion title="Form options / Options 1-4"> **Type:** Text fields (4 options)\ **Availability:** Checkbox and Radio fields only Define up to 4 options for checkbox or radio selection: * **Option 1** - First selectable choice * **Option 2** - Second selectable choice * **Option 3** - Third selectable choice * **Option 4** - Fourth selectable choice Leave blank to hide unused options. <Tip>For inquiry types, use options like "General Question", "Technical Support", "Billing Issue", "Partnership Inquiry".</Tip> </Accordion> </AccordionGroup> </Tab> </Tabs> ## Common use cases <Tabs> <Tab title="Basic contact"> Standard contact form for general inquiries. **Configuration:** * Name (Text, Full width, Required) * Email (Email, Full width, Required, Binding: Email) * Subject (Text, Full width) * Message (Text, Full width, Required) </Tab> <Tab title="Support inquiry"> Detailed form for customer support requests. **Configuration:** * Name (Text, Full width, Required) * Email (Email, Full width, Required, Binding: Email) * Order ID (Text, Full width, Binding: Last order) * Issue type (Radio: Technical/Billing/General/Other) * Description (Text, Full width, Required) </Tab> <Tab title="Newsletter signup"> Simple form focused on email collection. **Configuration:** * Email (Email, Full width, Required, Binding: Email) * Consent checkbox (Checkbox, Required, "I agree to receive newsletters") </Tab> <Tab title="Quote request"> Professional quote request form with detailed fields. **Configuration:** * First name + Last name (Text, Half width each, Required) * Email (Email, Full width, Required, Binding: Email) * Phone (Tel, Full width, Binding: Phone) * Service type (Checkbox: Consulting/Development/Design/Marketing) * Budget range (Radio: \<$5k/$5k-$10k/$10k-$25k/$25k+) * Project details (Text, Full width, Required) </Tab> <Tab title="Partnership inquiry"> Form for business partnership opportunities. **Configuration:** * Company name (Text, Full width, Required) * Contact name (Text, Full width, Required) * Email (Email, Full width, Required, Binding: Email) * Phone (Tel, Full width, Binding: Phone) * Partnership type (Radio: Affiliate/Wholesale/Collaboration/Distribution) * Message (Text, Full width, Required) </Tab> <Tab title="Product inquiry"> Form for specific product questions. **Configuration:** * Name (Text, Full width, Required) * Email (Email, Full width, Required, Binding: Email) * Product interest (Radio: Product A/Product B/Product C/Other) * Quantity needed (Text, Half width) * Timeline (Radio: Immediate/1-2 weeks/1 month/Flexible, Half width) * Additional information (Text, Full width) </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Form width optimization" icon="arrows-left-right"> Use max-w-narrower (default) for better readability and completion rates. Narrower forms reduce visual noise and focus attention on form fields. </Card> <Card title="Required fields strategy" icon="asterisk"> Mark name, email, and message as required minimum. Too many required fields (>5) can reduce completion rates by 30-40%. </Card> <Card title="Half-width pairing" icon="columns"> Use half-width fields for related pairs like first name/last name or city/zip code to save vertical space and improve form flow. </Card> <Card title="Full-width priority" icon="window-maximize"> Use full-width fields for message/textarea and single important fields like email to emphasize their importance. </Card> <Card title="Email binding" icon="at"> Always bind email field to customer email for convenience. This improves form completion rates by 30-40% for logged-in users. </Card> <Card title="Field order logic" icon="list-ol"> Follow standard flow: Name → Email → Subject/Reason → Message. Users expect this pattern and complete forms faster when it's followed. </Card> <Card title="Placeholder hints" icon="input-text"> Use placeholders to provide format hints like "[john@example.com](mailto:john@example.com)" or "+1 (555) 123-4567" without cluttering the form. </Card> <Card title="Consent checkbox" icon="square-check"> Add required checkbox for terms/privacy acceptance if legally required. Place at the end, before submit button. </Card> <Card title="Radio for categories" icon="circle-dot"> Use radio buttons for predefined options like inquiry type or department. This standardizes responses and improves support routing. </Card> <Card title="Form length" icon="ruler"> Keep it short: 4-6 fields maximum for higher completion rates. Each additional field can reduce completion by 5-10%. </Card> </CardGroup> ## Related guides <CardGroup> <Card title="Newsletter Popup" icon="envelope" href="/themes/release/sections/newsletter-popup"> Configure newsletter signup popup for email collection </Card> <Card title="Page Settings" icon="file" href="/themes/release/pages-templates/page"> Create and customize additional pages </Card> </CardGroup> # Customer Account Templates Source: https://docs.digifist.com/themes/release/pages-templates/customer-accounts Template sections for customer account pages (login, register, orders, addresses). These template sections control customer account functionality. They are system-managed sections that cannot be customized extensively through the Theme Customizer. ## Account page templates ### Login (main-login) Customer login form with password recovery link. ### Register (main-register) New customer account creation form. ### Account Dashboard (main-account) Customer account overview with order history and account details. ### Addresses (main-addresses) Manage shipping and billing addresses. ### Order Details (main-order) Individual order details and tracking information. <Note> These are system template sections with limited customization options. Most styling is controlled through theme settings rather than individual section settings. </Note> ## Customization Account page appearance is primarily controlled by: * Theme Settings > Colors * Theme Settings > Typography * Theme Settings > Buttons and Inputs ## Related resources <Card title="Shopify Customer Accounts" icon="user" href="https://help.shopify.com/en/manual/customers"> Learn about Shopify customer accounts </Card> # FAQ page Source: https://docs.digifist.com/themes/release/pages-templates/faq Customize the layout and features of your FAQ page. The FAQ page provides answers to common questions your customers may have using collapsible accordion sections. This template helps reduce support requests, improve customer experience, and can be organized into multiple question groups using the Accordions section. <img alt="FAQ page with accordions overview" /> ## What this section controls This section manages: * **Expandable accordion topics** - Create collapsible Q\&A items * **Default expanded state** - Control which topics show on page load * **Rich text content** - Format answers with bold, italic, links * **Dynamic page content** - Connect accordion bodies to Shopify pages * **Multiple accordion groups** - Organize FAQs into logical categories * **Progressive disclosure** - Reduce visual clutter with collapsible content * **Section layout** - Adjust heading size, color scheme, and spacing ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer </Step> <Step title="Navigate to FAQ page"> In the left sidebar, click **Pages** > **FAQ** </Step> <Step title="Add Accordions section"> Click **Add section** > **Accordions** to create an accordion group </Step> <Step title="Configure section heading"> Set the main heading for this FAQ group (e.g., "Shipping Questions", "Returns & Exchanges") </Step> <Step title="Add topics"> Click **Add block** > **Topic** to create individual Q\&A accordion items </Step> <Step title="Configure topics"> Add question as heading, answer as text content, and set default expand state </Step> <Step title="Add more sections (optional)"> Create multiple Accordions sections to organize FAQs by category </Step> </Steps> <img alt="FAQ accordions in Theme Customizer" /> ## Section Settings ### Accordions Section Section settings control the main heading and appearance of each accordion group on the FAQ page. <Tabs> <Tab title="Heading"> Configure the main heading for this FAQ category group. <img alt="Heading configuration" /> <AccordionGroup> <Accordion title="Heading"> **Type:** Rich text field\ **Default:** Empty Main title displayed above the accordion list. Use this to categorize groups of related questions. **Examples:** * "Shipping & Delivery" * "Returns & Exchanges" * "Product Information" * "Account & Orders" Rich text formatting supported: * **Bold**, *Italic*, <u>Underline</u> * Links to other pages <Tip>Use descriptive category headings to help customers quickly find relevant questions.</Tip> </Accordion> <Accordion title="Heading size"> **Type:** Dropdown\ **Options:** XS, S, M, L, XL\ **Default:** M Controls the size of the section heading. * **XS** - Extra small, subtle category labels * **S** - Small, secondary categories * **M** - Medium, standard category headings * **L** - Large, primary section headings * **XL** - Extra large, prominent main headings <Tip>Use larger sizes (L or XL) for main FAQ categories, smaller sizes (S or M) for subcategories.</Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> Control the overall section layout, width, and spacing. <AccordionGroup> <Accordion title="Section width"> **Type:** Dropdown\ **Options:** max-w-page, max-w-narrow, max-w-fluid\ **Default:** max-w-page Maximum width of the FAQ accordion section: * **max-w-page** - Standard container matching theme width * **max-w-narrow** - Narrow focused layout for better readability * **max-w-fluid** - Wider container utilizing more screen space <Tip>Use max-w-page or max-w-narrow for better FAQ readability. Wide layouts can make long text harder to read.</Tip> </Accordion> <Accordion title="Color scheme"> **Type:** Dropdown\ **Default:** scheme-1 Select the color scheme for the FAQ section. Available schemes are defined in **Theme settings > Colors**. <Note>Color scheme affects background, text, accordion headers, and borders throughout the section.</Note> </Accordion> <Accordion title="Spacing top"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding above the FAQ section, controlling vertical space from the previous section. </Accordion> <Accordion title="Spacing bottom"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding below the FAQ section, controlling vertical space to the next section. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block Settings ### Topic Block Topic blocks control individual accordion items. Each block represents a single FAQ question and answer. <Tabs> <Tab title="Content"> Configure the question and answer content for each accordion item. <img alt="Topic content configuration" /> <AccordionGroup> <Accordion title="Heading"> **Type:** Text field\ **Required:** Yes Title of the accordion topic - your FAQ question. **Examples:** * "What are your shipping times?" * "How do I return an item?" * "Do you ship internationally?" * "What payment methods do you accept?" <Tip>Write questions from the customer's perspective using natural language they would search for.</Tip> </Accordion> <Accordion title="Text"> **Type:** Rich text field\ **Default:** Empty Main answer content displayed when the topic is expanded. Rich text formatting supported: * Paragraphs and line breaks * **Bold**, *Italic* text * Bulleted and numbered lists * Links to other pages or external resources <Tip>Keep answers concise (2-4 sentences) and use bullet points for steps or multiple points.</Tip> <Note>If a Page is selected, this Text field will be overridden by the page content.</Note> </Accordion> <Accordion title="Page"> **Type:** Shopify page picker\ **Optional:** Yes Outputs the content of a selected Shopify page as the accordion body. Use this for lengthy or frequently updated answers. <Warning> Selecting a page overwrites the Text field content. The page's full content will display when the accordion is expanded. </Warning> <Tip> Use this option to manage large policies (shipping, returns, privacy) or reusable content from a single Shopify page that can be updated independently. </Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Display"> Control how the accordion item displays on page load. <img alt="Show content on page load setting" /> <AccordionGroup> <Accordion title="Show content on page load"> **Type:** Toggle\ **Default:** False (collapsed) Controls whether the accordion content is visible when the page loads: * **True (Enabled)** - Content is expanded by default, answer visible immediately * **False (Disabled)** - Content is hidden until the user clicks the heading <Tip> Enable for the first topic in each category to demonstrate functionality and provide immediate value. Keep others collapsed to maintain clean initial page state. </Tip> <Note>Don't expand too many topics by default (2-3 maximum per page) to avoid overwhelming visitors with information.</Note> </Accordion> </AccordionGroup> </Tab> </Tabs> ## How the FAQ page works The FAQ page uses a block-based accordion system: * **Multiple Accordions sections** - Add multiple sections to organize FAQs by category * **Independent topics** - Each Q\&A can be expanded/collapsed independently * **Progressive disclosure** - Customers reveal only information they need * **Default states** - Control which questions show answers on page load * **Rich or dynamic content** - Use inline rich text or connect to Shopify pages * **Clean organization** - Reduces visual clutter on pages with many questions <Note> The FAQ page template itself has no page-level settings. All content and customization is managed through Accordions sections added to the page. </Note> ## Common use cases <Tabs> <Tab title="General FAQs"> Comprehensive FAQ page covering all store policies. **Structure:** * Accordions Section 1: "Shipping & Delivery" (5-7 questions) * Accordions Section 2: "Returns & Exchanges" (4-6 questions) * Accordions Section 3: "Orders & Payments" (5-8 questions) * Accordions Section 4: "Product Information" (3-5 questions) **Configuration:** * First topic in each section: Show on load (enabled) * Others: Collapsed by default * Section width: max-w-page * Heading size: L for category headings </Tab> <Tab title="Product FAQs"> Product-specific questions on product pages. **Structure:** * Single Accordions Section: "Frequently Asked Questions" * Topics: Sizing, materials, care, compatibility (4-6 questions) **Configuration:** * All topics: Collapsed by default * Section width: max-w-narrow * Heading size: M * Rich text answers with size charts, care instructions </Tab> <Tab title="Policy FAQs"> Detailed policy information using page content. **Structure:** * Accordions Section: "Policies & Legal" * Topics connected to Shopify pages: * Shipping Policy (Page: shipping-policy) * Return Policy (Page: return-policy) * Privacy Policy (Page: privacy-policy) * Terms of Service (Page: terms-of-service) **Configuration:** * All topics: Collapsed by default * Use Page picker for each topic * Section width: max-w-page </Tab> <Tab title="Support center"> Organized support documentation by topic. **Structure:** * Accordions Section 1: "Getting Started" * Accordions Section 2: "Account Management" * Accordions Section 3: "Troubleshooting" * Accordions Section 4: "Contact Us" **Configuration:** * 3-5 topics per section * First topic per section: Show on load * Include links to contact form in answers * Section width: max-w-page </Tab> <Tab title="Size guides"> Detailed sizing information with tables. **Structure:** * Accordions Section: "Size Guide" * Topics: Clothing sizes, shoe sizes, fit guide, measurements **Configuration:** * First topic: Show on load (general sizing) * Use rich text with tables for size charts * Include measurement instructions with images * Section width: max-w-fluid (for wide tables) </Tab> <Tab title="Shipping FAQs"> Focused shipping information page. **Structure:** * Accordions Section 1: "Domestic Shipping" * Accordions Section 2: "International Shipping" * Accordions Section 3: "Tracking & Delivery" **Configuration:** * 4-6 topics per section * Include shipping time estimates * Link to carrier tracking pages * First topic per section: Show on load </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Concise headings" icon="heading"> Keep headings concise and descriptive (5-8 words maximum) for quick scanning. Use customer language, not internal jargon. </Card> <Card title="Default state strategy" icon="eye"> Avoid opening too many topics by default to maintain clean initial page state. 1-2 expanded per section maximum. </Card> <Card title="Page content for long answers" icon="file-lines"> Use Page content for long or frequently updated information to simplify management. Ideal for policies that need legal review. </Card> <Card title="Logical grouping" icon="layer-group"> Group related topics together logically for better user experience. Use multiple Accordions sections for different categories. </Card> <Card title="FAQ placement" icon="location-dot"> Ideal for FAQs, size guides, and policy sections where users seek specific information without overwhelming them. </Card> <Card title="Mobile testing" icon="mobile"> Test accordion interactions on mobile to ensure smooth expand/collapse. Accordions are particularly valuable on mobile for saving screen space. </Card> <Card title="First topic expanded" icon="arrow-down"> Consider using first topic as expanded by default to demonstrate functionality and provide immediate value. </Card> <Card title="Priority ordering" icon="arrow-up-1-9"> Order topics by importance or frequency of access. Most common questions should appear first in each category. </Card> <Card title="Consistent formatting" icon="align-left"> Use consistent formatting within accordion content for professional appearance. Maintain same tone, structure, and style. </Card> <Card title="Answer brevity" icon="compress"> Keep answers concise (2-4 sentences) and use bullet points for steps or multiple points. Link to detailed pages if needed. </Card> </CardGroup> ## Related guides <CardGroup> <Card title="Contact Page" icon="envelope" href="/themes/release/pages-templates/contact"> Create contact forms for questions not covered in FAQs </Card> <Card title="Page Settings" icon="file" href="/themes/release/pages-templates/page"> Create custom pages to link from FAQ answers </Card> </CardGroup> # Page Template (main-page) Source: https://docs.digifist.com/themes/release/pages-templates/page Main template section for standard pages. This is the core template section for standard pages (About, Contact, etc.). For detailed information, see the [Page Template](/themes/release/page) guide. ## Quick overview Controls: * Page content display * Section availability * Layout options <Note> This is a template section that cannot be removed. Customization is done through the page settings in the Theme Customizer. </Note> ## Related documentation <Card title="Page Template" icon="file" href="/themes/release/page"> Complete page template customization guide </Card> # Password page Source: https://docs.digifist.com/themes/release/pages-templates/password Customize your password-protected store page with email signup and launch messaging. The password page displays when your store is password-protected, allowing you to collect email signups while building anticipation for your store launch. Customers see this page until you remove password protection or enter the correct password. <img alt="Password page overview" /> ## What this section controls This page template manages: * **Launch messaging** - Headline and description for your upcoming store opening * **Email signup form** - Collect customer emails for launch notifications * **Password access** - Display password-protected page before store launch * **Pre-launch branding** - Present your brand identity before official opening * **Coming soon content** - Build anticipation and excitement for launch * **Section layout** - Adjust page width, color scheme, and spacing ## Getting started <Steps> <Step title="Enable password protection"> First, password-protect your store in Shopify settings: 1. Go to **Online Store → Preferences** in Shopify admin 2. Scroll to **Password protection** section 3. Enable **Restrict access to visitors with the password** 4. Set your password 5. Add optional message for visitors 6. Save changes <Note> Once enabled, all visitors will see the password page unless they enter the correct password or you share a preview link. </Note> </Step> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer to design your password page </Step> <Step title="Navigate to Password page"> In the left sidebar, click **Pages** > **Password** </Step> <Step title="Set launch messaging"> Add compelling title and description text that explains when you're launching and what makes your store special </Step> <Step title="Configure email signup"> Enable the email signup form to collect customer emails for launch notifications. Customize the signup title and description. </Step> <Step title="Adjust layout"> Set section width (recommend narrow for focus), choose color scheme, and adjust spacing </Step> <Step title="Preview and test"> Use the preview link to see how your password page appears to visitors. Test the email signup form. </Step> </Steps> ## Section Settings <Tabs> <Tab title="Content"> Control the main messaging displayed on your password-protected page. <AccordionGroup> <Accordion title="Title"> **Type:** Text input\ **Default:** "Opening soon" Main heading for the password page. This is the first thing visitors see. **Example titles:** * "Opening soon" * "Coming this fall" * "Launching March 2026" * "Under construction" * "Something amazing is coming" <Tip>Include a specific date or timeframe when possible. "Opening March 15" creates more anticipation than "Coming soon".</Tip> </Accordion> <Accordion title="Text"> **Type:** Rich text editor\ **Default:** Empty Description or announcement text below the title. Use this to explain your store concept, launch timeline, or value proposition. Supports rich text formatting: * Bold and italic text * Line breaks * Multiple paragraphs **Example text:** * "We're putting the finishing touches on our new online store. Sign up below to be the first to know when we launch!" * "Premium sustainable fashion arrives this spring. Join our list for exclusive launch-day offers." * "Currently redesigning our shopping experience. We'll be back soon with exciting new products!" <Tip>Keep messaging exciting and clear. Focus on what makes your store unique and why customers should sign up for notifications.</Tip> </Accordion> </AccordionGroup> <img alt="Content settings for password page" /> </Tab> <Tab title="Email Signup"> Configure the email collection form for building your launch audience. <AccordionGroup> <Accordion title="Enable email signup"> **Type:** Toggle\ **Default:** Enabled Display an email collection form for launch notifications. When enabled, visitors can submit their email address to be notified when you launch. Collected emails are stored in Shopify admin and can be exported for email marketing campaigns. <Tip>Always enable email signup for pre-launch stores. Building an email list before launch creates immediate sales opportunities when you open.</Tip> <Note> Collected emails appear in Shopify admin under **Marketing → Email subscribers**. Export them to use with email marketing platforms like Klaviyo or Mailchimp. </Note> </Accordion> <Accordion title="Email signup title"> **Type:** Text input\ **Default:** Empty Heading for the email signup section. This introduces the email form and encourages signups. **Example titles:** * "Get notified when we launch" * "Be the first to shop" * "Join the waitlist" * "Subscribe for launch updates" * "Don't miss our opening" <Tip>Use action-oriented language that emphasizes the benefit of signing up (early access, exclusive offers, first look).</Tip> </Accordion> <Accordion title="Email signup text"> **Type:** Text input\ **Default:** Empty Description or call-to-action text for the email signup form. Explains what subscribers will receive. **Example text:** * "Be the first to know about our grand opening and exclusive launch offers" * "Get early access to new arrivals and a special welcome discount" * "Join our VIP list for exclusive previews and launch-day deals" * "Subscribe to receive opening date alerts and insider updates" <Tip>Mention specific benefits like "exclusive launch discount" or "early access" to increase signup rates.</Tip> </Accordion> </AccordionGroup> <img alt="Email signup form configuration" /> </Tab> <Tab title="Layout"> Control the overall page layout, width, and spacing. <AccordionGroup> <Accordion title="Section width"> **Type:** Dropdown\ **Options:** max-w-page, max-w-narrower, max-w-fluid\ **Default:** max-w-narrower Maximum width of the password page content: * **max-w-narrower** - Narrow focused layout (recommended) - Creates focused, centered experience * **max-w-page** - Standard container width - Matches regular page width * **max-w-fluid** - Wider container - Uses more screen space <Tip>Use max-w-narrower (default) for best results. The narrow layout keeps visitor focus on your message and email signup form.</Tip> </Accordion> <Accordion title="Color scheme"> **Type:** Dropdown\ **Default:** scheme-1 Select the color scheme for the password page. Available schemes are defined in **Theme settings > Colors**. <Tip>Choose a color scheme that reflects your brand identity. This is often visitors' first impression of your store.</Tip> </Accordion> <Accordion title="Spacing top"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding above the password page content, controlling vertical space from the top of the page. </Accordion> <Accordion title="Spacing bottom"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding below the password page content, controlling vertical space to the bottom of the page. </Accordion> </AccordionGroup> <img alt="Layout configuration options" /> </Tab> </Tabs> ## How password protection works The password page is a special template that appears when you enable password protection in your Shopify store settings. Here's how the flow works: 1. **Password protection enabled** - Store is locked to public visitors 2. **Visitor arrives** - Sees password page with your custom messaging 3. **Three options:** * Enter correct password → Access store * Submit email → Added to launch notification list * Leave page → Can return later with password or when you launch **Accessing your store:** * **Password holders** - Anyone with the password can access the full store * **Preview link** - Share a special preview link that bypasses password (useful for partners, investors, testers) * **Store owner** - You always have access through Shopify admin **When to remove password protection:** Remove password protection when you're ready for public launch. Your store becomes immediately accessible to everyone. <Warning> Removing password protection cannot be easily undone. Make sure your store is fully ready for public access before removing the password. </Warning> ## Common use cases <Tabs> <Tab title="Pre-launch store"> Building anticipation before your official store opening. **Configuration:** * Title: "Opening \[specific date]" * Text: Clear value proposition and what makes store unique * Enable email signup: Yes * Email signup title: "Be the first to shop" * Section width: max-w-narrower **Strategy:** * Set specific launch date * Offer launch-day discount for email subscribers * Share preview link with close network * Build email list for 30-90 days before launch <Tip>Collect 100-500+ emails before launch to generate immediate sales on opening day.</Tip> </Tab> <Tab title="New product line"> Launching a new collection or product category. **Configuration:** * Title: "New collection launching soon" * Text: Tease the upcoming products * Enable email signup: Yes * Email signup title: "Get notified at launch" * Section width: max-w-narrower **Strategy:** * Build anticipation for major product drop * Create exclusive access feeling * Use for limited edition or seasonal collections * Password protect specific pages, not entire store </Tab> <Tab title="Maintenance mode"> Temporary closure for store updates or redesign. **Configuration:** * Title: "We'll be back soon" * Text: "We're making improvements to your shopping experience" * Enable email signup: Optional (if major changes) * Section width: max-w-narrower **Strategy:** * Brief closure for technical work * Inform customers of expected return date * Maintain customer trust with clear communication * Use preview link for testing new features </Tab> <Tab title="Private B2B store"> Wholesale or trade-only store with password access. **Configuration:** * Title: "Wholesale account required" * Text: "This is our wholesale portal. Contact us for access." * Enable email signup: No * Section width: max-w-narrower **Strategy:** * Password protect permanently for B2B access * Share password with approved wholesale customers * Include contact information for account requests * Keep public retail store separate </Tab> <Tab title="Soft launch"> Limited access testing phase with select customers. **Configuration:** * Title: "Exclusive early access" * Text: "We're in beta testing with select customers" * Enable email signup: Yes * Email signup title: "Join the waitlist" * Section width: max-w-narrower **Strategy:** * Test with 50-200 customers before full launch * Gather feedback on products, pricing, UX * Share password with early adopters and brand advocates * Build testimonials and social proof * Transition to public launch after testing period </Tab> <Tab title="Seasonal reopening"> Temporary or seasonal businesses announcing next opening. **Configuration:** * Title: "We're closed for the season" * Text: "We'll reopen \[month/season]. Subscribe for opening alerts." * Enable email signup: Yes * Email signup title: "Get notified when we reopen" * Section width: max-w-narrower **Strategy:** * Seasonal stores (summer, holidays, etc.) * Pop-up shops between events * Build anticipation for next season * Stay connected with customers during off-season </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Specific launch date" icon="calendar"> State exactly when you're launching when possible. "Opening March 15" is far more effective than "Coming soon". Specific dates create urgency. </Card> <Card title="Always collect emails" icon="envelope"> Enable email signup for pre-launch stores. Building an email list before launch creates immediate sales opportunities when you open. </Card> <Card title="Value proposition" icon="star"> Clearly explain what makes your store unique and why customers should care about your launch. What problem do you solve? </Card> <Card title="Narrow layout" icon="align-center"> Use max-w-narrower (default) for focused experience. The narrow width keeps attention on your message and signup form. </Card> <Card title="Compelling copy" icon="pen"> Create excitement about your launch. Use enthusiastic, benefit-focused language. Avoid vague "coming soon" messaging. </Card> <Card title="Launch incentive" icon="gift"> Offer exclusive launch discount or early access to email subscribers. "Sign up for 15% off opening day" increases conversions. </Card> <Card title="Preview link sharing" icon="link"> Share password or preview link with testers, investors, partners, and press for feedback before public launch. </Card> <Card title="Social proof" icon="certificate"> Mention any press coverage, awards, founder credentials, or milestones that build credibility and trust. </Card> <Card title="Mobile optimization" icon="mobile"> Test password page on mobile devices. Many visitors will discover your store on mobile first. </Card> <Card title="Export email list" icon="download"> Before launch, export email list from Shopify admin. Import to email marketing platform for launch campaign. </Card> </CardGroup> ## Related guides <CardGroup> <Card title="Shopify Password Protection" icon="lock" href="https://help.shopify.com/en/manual/online-store/themes/password-page"> Learn how to enable and manage password protection in Shopify </Card> <Card title="404 Page" icon="exclamation-triangle" href="/themes/release/pages-templates/404"> Customize your 404 error page template </Card> <Card title="Email Marketing" icon="envelope-open-text" href="https://help.shopify.com/en/manual/promoting-marketing/create-marketing/email-marketing"> Use collected emails for launch campaigns in Shopify </Card> <Card title="Theme Settings - Colors" icon="palette" href="/themes/release/theme-settings/colors"> Configure color schemes used on password page </Card> </CardGroup> # Vendors page Source: https://docs.digifist.com/themes/release/pages-templates/vendors Customize the layout and features of your vendors page. The vendors page displays a list of brands or manufacturers featured in your store. You can customize vendor card appearance, logos, alphabetical navigation, and metaobject connections to create an organized directory of your brand partners. <img alt="Vendors page overview" /> ## What this section controls This section manages: * **Vendor directory display** - Showcase all brands/manufacturers in your store * **Vendor logos** - Display brand logos with customizable height * **Alphabetical navigation** - Enable A-Z quick navigation for browsing * **Metaobject integration** - Connect to Shopify metaobjects for vendor data * **Vendor cards** - Customize card appearance and color scheme * **Section layout** - Adjust section width, color scheme, and spacing ## Getting started <Steps> <Step title="Create vendor metaobject definition"> You need to create a metaobject definition for vendors. 1. In the Shopify admin, go to **Content → Metaobjects → Add definition** 2. Create a **Vendor** metaobject definition: * **Name:** Vendor * **Handle:** vendor 3. Add following fields to the definition: | Field Name | Type | | :--------- | :--------------------- | | Name | One : Single line text | | Logo | One : Multi-line text | | Image | One : Image (File) | 4. Save the definition <Warning> Field keys (handles) must be exactly: `name`, `logo`, `image`. If the handles differ, the theme will not be able to read the vendor data. </Warning> </Step> <Step title="Add vendor entries"> Create individual vendor entries in the metaobject: 1. Go to **Content → Metaobjects → Vendor** 2. Click **Add entry** 3. Fill in vendor details (Name, Logo, Image) 4. Repeat for all vendors </Step> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer </Step> <Step title="Navigate to Vendors page"> In the left sidebar, click **Pages** > **Vendor list** </Step> <Step title="Link metaobject"> In the Vendor List section, select the created **Vendor** metaobject definition </Step> <Step title="Configure display settings"> Enable logo display, alphabetical navigation, and set logo height and color scheme </Step> </Steps> <img alt="Vendor metaobject setup" /> ## Section Settings <Tabs> <Tab title="Vendor Display"> Control how vendor information is displayed on the page. <AccordionGroup> <Accordion title="Show vendor logo"> **Type:** Toggle\ **Default:** Enabled Displays the vendor's logo when available from the metaobject. If disabled, only vendor names will be shown. <Tip>Enable logos for a more visual, brand-focused directory. Logos help customers quickly identify familiar brands.</Tip> </Accordion> <Accordion title="Logo height"> **Type:** Range slider\ **Range:** 20-200 pixels\ **Default:** 60 Controls the displayed height of vendor logos. Width adjusts automatically to maintain aspect ratio. <Tip>Standard logo height of 50-80px works well for most stores. Larger sizes (100-150px) work better for premium brand showcases.</Tip> </Accordion> <Accordion title="Show navigation"> **Type:** Toggle\ **Default:** Enabled Enables alphabetical navigation (A-Z) for browsing vendors. Creates clickable letter links that jump to vendors starting with that letter. <Tip>Enable for stores with 20+ vendors to help customers quickly find specific brands. Less useful for smaller vendor lists.</Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Metaobject"> Connect the vendor data source from Shopify metaobjects. <AccordionGroup> <Accordion title="Metaobject for vendor list"> **Type:** Metaobject definition picker\ **Required:** Yes Select the metaobject that contains your vendor entries. This must be the "Vendor" metaobject definition created in setup. <Warning> Without selecting a metaobject, no vendors will display on the page. The metaobject must have the correct field structure (name, logo, image). </Warning> <Note> After selecting the metaobject, vendor entries will automatically appear on the Vendors page. No additional configuration needed. </Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Card Design"> Customize the appearance of individual vendor cards. <AccordionGroup> <Accordion title="Color scheme for cards"> **Type:** Dropdown\ **Default:** scheme-1 Sets the color scheme used for vendor cards. Available schemes are defined in **Theme settings > Colors**. <Tip>Use a neutral or branded color scheme that complements your vendor logos without overpowering them.</Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> Control the overall section layout, width, and spacing. <AccordionGroup> <Accordion title="Section width"> **Type:** Dropdown\ **Options:** max-w-page, max-w-fluid\ **Default:** max-w-page Maximum width of the vendors section: * **max-w-page** - Standard container matching theme width * **max-w-fluid** - Wider container utilizing more screen space <Tip>Use max-w-fluid for large vendor directories with many brands to display more vendors per row.</Tip> </Accordion> <Accordion title="Color scheme"> **Type:** Dropdown\ **Default:** scheme-1 Select the color scheme for the overall vendors section. Available schemes are defined in **Theme settings > Colors**. </Accordion> <Accordion title="Spacing top"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding above the vendors section, controlling vertical space from the header. </Accordion> <Accordion title="Spacing bottom"> **Type:** Dropdown\ **Options:** No (0), S (1), M (2), L (4), XL (6)\ **Default:** M (2) Padding below the vendors section, controlling vertical space to the footer. </Accordion> </AccordionGroup> </Tab> </Tabs> ## Metaobject setup requirements To display vendors on this page, you must create a properly structured metaobject definition. ### Required metaobject structure **Definition details:** * **Name:** Vendor * **Handle:** vendor (must be exactly this) **Required fields:** | Field Name | Handle | Type | Required | | ---------- | ------- | ---------------- | -------- | | Name | `name` | Single line text | Yes | | Logo | `logo` | Multi-line text | No | | Image | `image` | Image (File) | No | <Warning> **Critical:** Field handles must be exactly `name`, `logo`, and `image`. If handles differ, the theme cannot read vendor data. </Warning> ### Adding vendor entries After creating the metaobject definition: 1. Go to **Content → Metaobjects → Vendor** 2. Click **Add entry** for each vendor 3. Fill in required information: * **Name** - Vendor/brand name (e.g., "Nike", "Adidas") * **Logo** - SVG code or HTML for vector logos * **Image** - Upload brand logo as image file 4. Save each entry <Tip> Use **Logo** field for SVG code to maintain perfect quality at any size. Use **Image** field for PNG/JPG logos when SVG isn't available. </Tip> ## Common use cases <Tabs> <Tab title="Multi-brand store"> Showcase all brands carried in your store. **Configuration:** * Show vendor logo: Enabled * Logo height: 60-80px * Show navigation: Enabled (for 20+ brands) * Section width: max-w-fluid * Color scheme: Neutral (scheme-1) **Metaobject:** * 50+ vendor entries * Consistent logo sizing * All entries with logos </Tab> <Tab title="Premium brands"> Highlight luxury or premium brand partnerships. **Configuration:** * Show vendor logo: Enabled * Logo height: 100-120px (larger for impact) * Show navigation: Disabled (curated list) * Section width: max-w-page * Color scheme: Elegant/premium scheme **Metaobject:** * 10-20 vendor entries * High-quality logos * Selective brand curation </Tab> <Tab title="Manufacturer directory"> List product manufacturers for B2B or technical stores. **Configuration:** * Show vendor logo: Enabled * Logo height: 50-60px * Show navigation: Enabled * Section width: max-w-fluid * Color scheme: Professional scheme **Metaobject:** * 30-100+ manufacturer entries * Technical/industrial brands * Alphabetical organization </Tab> <Tab title="Local artisans"> Feature local makers and small businesses. **Configuration:** * Show vendor logo: Enabled * Logo height: 80-100px * Show navigation: Disabled * Section width: max-w-page * Color scheme: Warm/community scheme **Metaobject:** * 5-15 artisan entries * Personal brand stories * High-quality artisan logos/photos </Tab> <Tab title="Authorized retailers"> Display authorized dealer/retailer network. **Configuration:** * Show vendor logo: Enabled * Logo height: 60px * Show navigation: Enabled (for many locations) * Section width: max-w-fluid * Color scheme: Brand-aligned scheme **Metaobject:** * Store location entries * Consistent retailer logos * Organized by region/alphabetically </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Logo consistency" icon="images"> Maintain consistent logo sizing and quality across all vendors. Use vector (SVG) logos when possible for crisp display at any size. </Card> <Card title="Navigation threshold" icon="list-ol"> Enable alphabetical navigation for stores with 20+ vendors. For smaller lists, navigation adds unnecessary complexity. </Card> <Card title="Logo height standards" icon="ruler-vertical"> Standard 50-80px works for most stores. Premium brands: 100-150px. Many small logos: 40-60px to fit more per row. </Card> <Card title="Metaobject naming" icon="hashtag"> Use exact handles (`name`, `logo`, `image`) as specified. Any variation will break the integration. </Card> <Card title="Image optimization" icon="image"> Optimize logo images before upload. Use PNG with transparency or JPG. Keep file sizes under 200KB for fast loading. </Card> <Card title="SVG preference" icon="code"> Prefer SVG logos in the Logo field over image files. SVGs scale perfectly and maintain quality at any size. </Card> <Card title="Card color scheme" icon="palette"> Use neutral or branded color scheme that complements vendor logos without competing visually. </Card> <Card title="Vendor curation" icon="filter"> For premium positioning, curate vendor list to feature key partnerships. Don't feel obligated to list every brand. </Card> <Card title="Mobile optimization" icon="mobile"> Test vendor card layout on mobile. Logos should remain legible. Consider slightly larger logo height for mobile users. </Card> <Card title="Update frequency" icon="clock"> Keep vendor list current. Remove discontinued brands, add new partnerships. Update logos when brands rebrand. </Card> </CardGroup> ## Related guides <CardGroup> <Card title="Metaobjects" icon="database" href="https://help.shopify.com/en/manual/custom-data/metaobjects"> Learn more about Shopify metaobjects and custom data structures </Card> <Card title="Collection List Page" icon="layer-group" href="/themes/release/pages-templates/collection-list-page"> Similar list page layout for displaying collections </Card> </CardGroup> # Password Source: https://docs.digifist.com/themes/release/password Customize the layout and features of your password page. The password page is shown when your store is locked and only accessible with a password. It allows you to customize the message and optional email signup to welcome visitors while the store is under construction or preparing for launch. <SnippetPath /> <img alt="Password" /> ## Key Settings | **Setting** | **Description** | | :------------------ | :-------------------------------------------------------------------- | | Heading | Main message displayed on the page. | | Text | Optional supporting text shown under the heading. | | Email signup | Enable an email signup form for collecting subscribers before launch. | | Signup title & text | Title and text displayed above the signup field. | # Pre-order Source: https://docs.digifist.com/themes/release/products/pre-order Enable and configure pre-order functionality for upcoming product releases. Pre-orders allow customers to purchase products before they are officially released, helping you generate buzz, secure sales in advance, and gauge demand for new products. The theme supports pre-order messaging on product pages, custom buy button labels, optional estimated shipping dates, and pre-order badges on product cards. <img alt="Pre-order feature overview" /> ## What this feature controls Pre-order functionality manages: * **Pre-order availability** - Enable products for advance purchase before launch * **Custom button labels** - Replace "Add to cart" with "Pre-order" button * **Shipping date display** - Show estimated availability/shipping dates * **Product badges** - Display "Pre-order" badges on product cards * **Metafield integration** - Use Shopify metafields to mark pre-order products * **Inventory management** - Accept orders while awaiting stock arrival * **Customer expectations** - Clearly communicate future delivery dates * **Launch momentum** - Build anticipation and secure early sales ## Getting started <Steps> <Step title="Create pre-order metafield definition"> Set up the metafield to mark products as pre-order. 1. In Shopify admin, go to **Settings → Custom data → Metafield definitions** 2. Click **Products** → **Add definition** 3. Create the **Preorder** metafield: * **Name:** Preorder * **Namespace and key:** `theme.preorder` * **Type:** True or false * **Description:** "Enable pre-order for this product" 4. Save the definition <Note> The namespace and key must be exactly `theme.preorder` for the theme to recognize pre-order products. </Note> </Step> <Step title="Create shipping date metafield (optional)"> Add a metafield for estimated shipping/availability dates. 1. In **Settings → Custom data → Metafield definitions → Products** 2. Click **Add definition** 3. Create the **Preorder shipping date** metafield: * **Name:** Preorder shipping date * **Namespace and key:** `theme.preorder_shipping_date` * **Type:** Date * **Description:** "Estimated shipping or availability date" 4. Save the definition <Tip> Shipping dates are optional but highly recommended. They set clear customer expectations and reduce support inquiries about delivery timing. </Tip> </Step> <Step title="Enable pre-order for products"> Set metafields on products you want to offer as pre-order. 1. Go to **Products** and open a product 2. Scroll to the **Metafields** section 3. Set **Preorder** to `True` 4. (Optional) Add **Preorder shipping date** if you have an estimated date 5. Save the product <Note> You can enable pre-order on products with or without inventory. Pre-order works for both out-of-stock items awaiting restock and unreleased products. </Note> </Step> <Step title="Configure pre-order in Theme Customizer"> Enable pre-order display on product pages and cards. 1. Go to **Online Store → Themes → Customize** 2. Navigate to **Product pages** 3. Add the **Pre-order** block to the product page template 4. Configure block settings (messaging, date format) 5. Go to **Theme settings → Products** 6. Enable **Pre-order** option in product card settings 7. Save your changes </Step> <Step title="Test pre-order functionality"> Verify pre-order appears correctly on your storefront. 1. Visit a product with pre-order enabled 2. Check that "Pre-order" button replaces "Add to cart" 3. Verify shipping date displays (if set) 4. Check pre-order badge on product cards 5. Test adding pre-order item to cart </Step> </Steps> ## How pre-order works Pre-order transforms the standard purchase flow to accommodate unreleased or out-of-stock products: ### Standard purchase vs. Pre-order **Standard purchase:** * Product is in stock * "Add to cart" button * Ships immediately after order * Inventory decremented on purchase **Pre-order:** * Product not yet available * "Pre-order" button (customizable) * Ships on future date * Captures orders before availability * Inventory managed separately or accepts unlimited orders ### Pre-order flow 1. **Product marked as pre-order** - Metafield set to True 2. **Customer visits product page** - Sees "Pre-order" button and estimated date 3. **Customer adds to cart** - Item added with pre-order status 4. **Checkout process** - Standard checkout, payment collected 5. **Order fulfillment** - Held until product available 6. **Shipping on date** - Order fulfilled when inventory arrives ### Metafield structure <Tabs> <Tab title="Preorder metafield"> **Namespace and key:** `theme.preorder`\ **Type:** True or false\ **Purpose:** Indicates if product is available for pre-order **Values:** * `True` - Product is pre-order, shows pre-order messaging * `False` or empty - Standard product, normal buy button **Where it affects:** * Product page buy button text * Product page messaging * Product card badges * Cart item display (optional) <Warning> The namespace and key must be exactly `theme.preorder`. Any variation will not work. </Warning> </Tab> <Tab title="Shipping date metafield"> **Namespace and key:** `theme.preorder_shipping_date`\ **Type:** Date\ **Purpose:** Estimated shipping or availability date **Format:** YYYY-MM-DD (standard date format) **Display examples:** * "Ships March 15, 2026" * "Available April 2026" * "Estimated delivery: May 2026" **Benefits:** * Sets clear customer expectations * Reduces "when will this ship?" inquiries * Builds trust with transparency * Can be displayed on product page and cart <Tip> Even if you don't have an exact date, provide an estimated month/quarter. "Ships Q2 2026" is better than no date information. </Tip> </Tab> </Tabs> ## Pre-order configuration ### Product page settings Configure how pre-order appears on individual product pages: **Location:** Theme Customizer → **Product pages** → Add **Pre-order** block <AccordionGroup> <Accordion title="Pre-order block"> **Type:** Block\ **Location:** Product page template Add the Pre-order block to customize pre-order messaging and button text. **Block settings:** **Buy button text** * Customize "Pre-order" button label * Examples: "Pre-order now", "Reserve yours", "Order in advance" * Default: "Pre-order" **Pre-order message** * Text displayed near button * Explain pre-order terms * Example: "This item will ship when available" **Show shipping date** * Toggle to display estimated date * Uses `theme.preorder_shipping_date` metafield * Formats date based on locale **Date format** * Choose how date displays * Options: Full date, Month/Year, Custom <Tip> Place the Pre-order block near the buy button area for maximum visibility. Customers need to immediately understand this is a pre-order product. </Tip> </Accordion> <Accordion title="Button text customization"> **Type:** Text input\ **Default:** "Pre-order" Customize the buy button label for pre-order products. **Effective button text examples:** * "Pre-order" - Clear and standard * "Pre-order now" - Adds urgency * "Reserve yours" - Emphasizes exclusivity * "Order in advance" - Descriptive * "Secure your order" - Trust-building **Avoid:** * "Buy now" - Confusing, implies immediate shipment * "Add to cart" - Same as regular products * Overly long text that doesn't fit button <Tip> Keep button text short (1-3 words) so it fits comfortably on mobile devices. </Tip> </Accordion> <Accordion title="Pre-order messaging"> **Type:** Text input\ **Default:** Empty Additional message explaining pre-order terms or shipping timeline. **Effective messaging examples:** * "This item will ship when available in March 2026" * "Pre-order now. Estimated shipping: \[date]" * "Reserve yours today. Ships upon release." * "Launching soon. Pre-order to guarantee yours." * "Your card will be charged now. Item ships \[date]." **Key information to include:** * When product will ship * When payment is charged (now or later) * That this is a pre-order product * Any pre-order benefits (discount, exclusivity) <Tip> Be transparent about payment timing. Clarify if you charge immediately or upon shipping to avoid confusion and chargebacks. </Tip> </Accordion> <Accordion title="Shipping date display"> **Type:** Toggle\ **Default:** Enabled Show or hide the estimated shipping date from the `theme.preorder_shipping_date` metafield. **When enabled:** * Date displays prominently on product page * Formats automatically based on store locale * Updates if metafield date changes **When disabled:** * No date shown to customers * Use when dates are uncertain * Rely on pre-order message text instead <Tip> Always show shipping dates when available. Transparency about timing builds customer trust and reduces inquiries. </Tip> </Accordion> </AccordionGroup> ### Product card settings Configure pre-order badges and indicators on product cards: **Location:** Theme Customizer → **Theme settings → Products** <AccordionGroup> <Accordion title="Pre-order badge"> **Type:** Toggle\ **Default:** Enabled Display "Pre-order" badge on product cards for pre-order items. **When enabled:** * Badge appears on collection pages * Shows on search results * Visible on homepage product sections * Clearly identifies pre-order products **Badge appearance:** * Usually displays near product image * Styled to match theme badge design * Can combine with other badges (New, Sale) <Tip> Keep pre-order badges enabled. They help customers identify pre-order products before clicking through to product pages. </Tip> </Accordion> <Accordion title="Pre-order button text on cards"> **Type:** Text input\ **Default:** Inherits from product page setting Optional: Override button text specifically for product cards. **Use cases:** * Shorter text for cards: "Pre-order" vs "Pre-order now" * Different messaging for collection views * A/B test card vs. page button text <Note> If left empty, uses the same button text as product page pre-order block. </Note> </Accordion> </AccordionGroup> ## Common use cases <Tabs> <Tab title="New product launch"> Generate buzz and secure sales before official release. **Setup:** * Set `theme.preorder` to True * Add `theme.preorder_shipping_date` with launch date * Enable pre-order badges on cards * Button text: "Pre-order now" * Message: "Launches \[date]. Pre-order to guarantee yours." **Strategy:** * Open pre-orders 2-4 weeks before launch * Offer pre-order incentive (10% off, free shipping) * Build email list of pre-order customers * Create urgency with limited quantities * Send reminder emails as launch approaches **Benefits:** * Generate revenue before launch * Gauge demand accurately * Build anticipation and buzz * Reduce launch day traffic issues </Tab> <Tab title="Out of stock restock"> Accept orders while awaiting inventory arrival. **Setup:** * Set `theme.preorder` to True on out-of-stock products * Add estimated restock date to shipping date metafield * Button text: "Pre-order" * Message: "Currently out of stock. Pre-order now, ships \[date]" **Strategy:** * Enable pre-order when inventory depletes * Clearly communicate restock timeline * Update shipping date as restock approaches * Convert lost sales into pre-orders * Disable pre-order when inventory arrives **Benefits:** * Don't lose sales during stockouts * Keep customers engaged with brand * Forecast demand for restock quantity * Maintain revenue during supply gaps </Tab> <Tab title="Seasonal collection"> Take pre-orders for seasonal products before season starts. **Setup:** * Enable pre-order 1-3 months before season * Set shipping date to season start * Button text: "Reserve yours" * Message: "New \[Season] collection. Ships \[month]" **Strategy:** * Launch pre-orders for Fall collection in July * Spring collection pre-orders in January * Holiday collection in September * Give early customers first access **Benefits:** * Predict seasonal demand * Order correct inventory quantities * Build excitement before season * Reward loyal customers with early access </Tab> <Tab title="Limited edition"> Create exclusivity with limited pre-order quantities. **Setup:** * Enable pre-order with inventory tracking * Set limited quantity (e.g., 100 units) * Add shipping date 2-4 weeks out * Button text: "Secure yours" * Message: "Limited to \[X] units. Pre-order now." * Add `badge:limited_edition` tag **Strategy:** * Emphasize scarcity in messaging * Show inventory countdown * Close pre-orders at quantity limit * Create FOMO with limited availability **Benefits:** * Generate urgency and demand * Sell limited quantities quickly * Create collector appeal * Premium positioning </Tab> <Tab title="Made-to-order"> Accept orders for custom or handmade products. **Setup:** * Enable pre-order permanently * Set realistic production timeline (2-6 weeks) * Update shipping date regularly * Button text: "Order now" * Message: "Handmade to order. Ships in \[X] weeks" **Strategy:** * Use for artisan/handmade products * Custom or personalized items * Small batch production * Build-to-order business model **Benefits:** * No inventory costs * Reduce waste * Offer customization * Sustainable business model <Tip> For made-to-order, use a relative date ("Ships in 3-4 weeks") rather than specific date, as production time varies. </Tip> </Tab> <Tab title="Crowdfunded product"> Test demand before committing to production. **Setup:** * Enable pre-order with goal quantity * Set shipping date 2-3 months out * Button text: "Back this project" * Message: "Pre-order now. Production starts at \[X] orders." * Show progress toward goal **Strategy:** * Set minimum order quantity for production * Show progress bar (50 of 100 orders) * Offer early-bird pricing * Refund if goal not met **Benefits:** * Validate product demand * Fund production with pre-orders * Minimize financial risk * Build community around product </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Clear communication" icon="message"> Always clearly communicate that this is a pre-order. State when payment is charged (now or later) and when product ships. Transparency prevents confusion and disputes. </Card> <Card title="Set realistic dates" icon="calendar"> Only provide shipping dates you're confident you can meet. Missing pre-order dates damages trust and creates refund requests. Build in buffer time. </Card> <Card title="Update customers" icon="envelope"> Send regular updates to pre-order customers. Notify when shipping date changes, when product is ready, and when order ships. Keep customers informed. </Card> <Card title="Pre-order incentive" icon="gift"> Offer incentive to pre-order: 10-15% discount, free shipping, exclusive variants, or bonus items. Reward customers for committing early. </Card> <Card title="Transparent terms" icon="file-contract"> Include pre-order terms on product page: when charged, when ships, cancellation policy, refund terms. Link to full pre-order policy page. </Card> <Card title="Inventory management" icon="boxes-stacked"> Decide if pre-orders track inventory or accept unlimited orders. Set limits if you want to cap pre-order quantity at production capacity. </Card> <Card title="Payment timing" icon="credit-card"> Decide when to charge: immediately (most common) or upon shipping. Immediate payment is simpler. Charging later reduces chargebacks but complicates accounting. </Card> <Card title="Disable when available" icon="toggle-off"> Remove pre-order metafield when product becomes available. Switch to standard "Add to cart" button once inventory arrives and ships immediately. </Card> <Card title="Email segmentation" icon="users"> Tag pre-order customers in email system. Send targeted updates about their pre-order. Thank them for early support. Notify first when product launches. </Card> <Card title="Mobile optimization" icon="mobile"> Test pre-order messaging on mobile devices. Ensure shipping dates and messages display properly. Pre-order button should be clearly tappable. </Card> </CardGroup> ## Legal and operational considerations <Warning> **Payment timing regulations:** Some regions have laws about when you can charge for pre-orders (e.g., can't charge more than 30 days before shipping). Research applicable laws for your store's location and customer locations. </Warning> <Note> **Refund policies:** Clearly state your pre-order refund/cancellation policy. Some jurisdictions require allowing cancellations before shipping. Make policy easy to find. </Note> <Tip> **Shopify Payments:** If using Shopify Payments, be aware of their policies on pre-orders. Orders must ship within 7 days of the maximum estimated delivery date you provide at checkout. </Tip> ### Operational checklist Before launching pre-orders: * [ ] Create clear pre-order terms and policy page * [ ] Set up email templates for pre-order updates * [ ] Plan production/ordering timeline with buffer * [ ] Decide payment timing (now or at shipping) * [ ] Set up inventory tracking or limits * [ ] Configure notification systems for updates * [ ] Train support team on pre-order questions * [ ] Test full pre-order flow (order to fulfillment) * [ ] Prepare post-launch communication plan * [ ] Set calendar reminders for status updates ## Technical notes <Note> **Metafield namespace:** The theme specifically looks for `theme.preorder` and `theme.preorder_shipping_date` namespaces. Using different namespaces will not work without theme code modifications. </Note> <Warning> **Date format:** The shipping date metafield must use Shopify's Date type. String dates won't format properly. Ensure you select "Date" not "Single line text" when creating the metafield. </Warning> <Tip> **Bulk editing:** Use Shopify's bulk editor to add/remove pre-order metafields across multiple products. Filter by collection or tag, then edit metafields in bulk. </Tip> ### Combining with other features Pre-order works alongside: * **Product badges** - Add `badge:pre_order` tag for pre-order badge * **Inventory tracking** - Can track pre-order inventory or accept unlimited * **Variants** - Each variant can have separate pre-order dates * **Discounts** - Apply discount codes to pre-order products * **Back in stock notifications** - Disable when switching from pre-order to in-stock ## Related guides <CardGroup> <Card title="Product Page" icon="box" href="/themes/release/pages-templates/product-page"> Configure the product page template and Pre-order block </Card> <Card title="Product Badges" icon="tag" href="/themes/release/products/product-badges"> Add pre-order badges to product cards </Card> <Card title="Metafields Guide" icon="database" href="https://help.shopify.com/en/manual/custom-data/metafields"> Learn more about Shopify metafields and custom data </Card> <Card title="Inventory Management" icon="warehouse" href="https://help.shopify.com/en/manual/products/inventory"> Managing inventory for pre-order products </Card> </CardGroup> # Product badges Source: https://docs.digifist.com/themes/release/products/product-badges Learn how to enable and configure product badges for highlighting important product information. Product badges are visual indicators that highlight important product information like sale status, new arrivals, bestsellers, or custom promotional messages. They appear on product cards throughout your store and on product pages to draw attention to key product attributes. The theme uses a tag-based system with custom localization support for displaying badges in multiple languages. <img alt="Product badges overview" /> ## What this feature controls Product badges manages: * **Visual indicators** - Display badges on product cards and product pages * **Tag-based system** - Use product tags to trigger badge display * **Custom messages** - Create unlimited custom badge types * **Multi-language support** - Translate badges into multiple languages * **Pre-configured badges** - Built-in badges for common use cases (sale, new, bestseller) * **Placement control** - Show badges on cards, pages, or both * **Automatic display** - Badges appear automatically based on product tags * **Locale integration** - Seamless integration with Shopify's locale system ## Getting started <Steps> <Step title="Add badge tags to products"> Add specific tags to products you want to highlight with badges. 1. In Shopify admin, go to **Products** 2. Open the product you want to add a badge to 3. In the **Tags** section, add badge tags using this format: * **Format:** `badge:badge_key` * **Examples:** `badge:sale`, `badge:new`, `badge:best_seller` 4. Save the product <Tip> Use underscores (`_`) instead of spaces in badge keys. For example, use `badge:best_seller` not `badge:best seller`. </Tip> <Note> You can add multiple badge tags to a single product. All badges will display according to your theme settings. </Note> </Step> <Step title="Enable badges on product cards"> Configure badge display in Theme Customizer settings. 1. Go to **Online Store → Themes → Customize** 2. Open **Theme settings → Products** 3. Enable the **Product Badges** option for product cards 4. Save your changes <Note> This setting controls badge display on collection pages, search results, and anywhere product cards appear. </Note> </Step> <Step title="Enable badges on product pages"> Add the Badges block to product page template. 1. In Theme Customizer, navigate to **Product pages** 2. Add the **Badges** block to the product page template 3. Configure badge position and styling in block settings 4. Save your changes <Tip> Position the Badges block near the product title or price for maximum visibility. </Tip> </Step> <Step title="Test badge display"> Verify badges appear correctly on your storefront. 1. Visit a product with badge tags 2. Check badge appearance on collection pages 3. Check badge appearance on product page 4. Test with different languages if using translations </Step> </Steps> ## How product badges work Product badges use a simple but powerful tag-based system: ### Tag format Badges are triggered by product tags following this format: ``` badge:badge_key ``` **Components:** * **`badge:`** - Required prefix that identifies this as a badge tag * **`badge_key`** - Unique identifier for the badge type **Examples:** * `badge:sale` - Triggers "Sale" badge * `badge:new` - Triggers "New" badge * `badge:limited_edition` - Triggers "Limited Edition" badge ### Display logic 1. **Tag check** - Theme scans product tags for `badge:` prefix 2. **Key extraction** - Extracts badge\_key from tag 3. **Translation lookup** - Looks for translation in locale file 4. **Badge render** - Displays badge with translated text 5. **Fallback** - If no translation found, displays badge\_key as-is ### Pre-configured badges The theme includes seven built-in badge translations: <AccordionGroup> <Accordion title="New"> **Tag:** `badge:new`\ **Display:** "New"\ **Use for:** New arrivals, recent additions, latest products </Accordion> <Accordion title="Best seller"> **Tag:** `badge:best_seller`\ **Display:** "Best seller"\ **Use for:** Top-selling products, popular items, customer favorites </Accordion> <Accordion title="Featured"> **Tag:** `badge:featured`\ **Display:** "Featured"\ **Use for:** Highlighted products, editor's picks, curated selections </Accordion> <Accordion title="On sale"> **Tag:** `badge:on_sale`\ **Display:** "On sale"\ **Use for:** Discounted products, sale items, promotions </Accordion> <Accordion title="Coming soon"> **Tag:** `badge:coming_soon`\ **Display:** "Coming soon"\ **Use for:** Pre-launch products, upcoming releases, future availability </Accordion> <Accordion title="Pre-order"> **Tag:** `badge:pre_order`\ **Display:** "Pre-order"\ **Use for:** Products available for pre-order, advance purchases </Accordion> <Accordion title="Sold out"> **Tag:** `badge:sold_out`\ **Display:** "Sold out"\ **Use for:** Out of stock products, unavailable items </Accordion> </AccordionGroup> ### Locale file structure Badges are defined in theme locale files under the `badges` section: ```json locales/en.default.json theme={null} { "badges": { "new": "New", "best_seller": "Best seller", "featured": "Featured", "on_sale": "On sale", "coming_soon": "Coming soon", "pre_order": "Pre-order", "sold_out": "Sold out" } } ``` ## Creating custom badges <Tabs> <Tab title="Single language"> Add custom badges for one language. <Steps> <Step title="Choose badge key"> Decide on a unique key for your badge. **Guidelines:** * Use lowercase letters * Use underscores for spaces: `limited_edition` * Keep it short and descriptive * Examples: `eco_friendly`, `handmade`, `local`, `exclusive` </Step> <Step title="Edit locale file"> Add your custom badge to the locale file. 1. In your theme code, open `locales/en.default.json` 2. Find the `badges` section 3. Add your custom badge key and text: ```json theme={null} "badges": { "new": "New", "best_seller": "Best seller", "limited_edition": "Limited Edition", "eco_friendly": "Eco-Friendly", "handmade": "Handmade" } ``` 4. Save the file </Step> <Step title="Add tag to products"> Apply the badge tag to products. 1. Go to **Products** in Shopify admin 2. Open a product 3. Add tag: `badge:limited_edition` 4. Save the product </Step> </Steps> </Tab> <Tab title="Multiple languages"> Create translated badges for multiple languages. <Steps> <Step title="Add to primary locale"> Start with your default language. Edit `locales/en.default.json`: ```json theme={null} "badges": { "limited_edition": "Limited Edition", "eco_friendly": "Eco-Friendly" } ``` </Step> <Step title="Add translations"> Add the same keys to other locale files. Edit `locales/es.json`: ```json theme={null} "badges": { "limited_edition": "Edición Limitada", "eco_friendly": "Ecológico" } ``` Edit `locales/fr.json`: ```json theme={null} "badges": { "limited_edition": "Édition Limitée", "eco_friendly": "Écologique" } ``` Edit `locales/de.json`: ```json theme={null} "badges": { "limited_edition": "Limitierte Auflage", "eco_friendly": "Umweltfreundlich" } ``` </Step> <Step title="Test translations"> Verify badges appear correctly in each language. 1. Change storefront language 2. Visit product with badge 3. Confirm translated badge appears 4. Repeat for all supported languages </Step> </Steps> </Tab> </Tabs> ## Badge configuration ### Product card settings Configure badge display on product cards (collection pages, search results): **Location:** Theme Customizer → **Theme settings → Products** <AccordionGroup> <Accordion title="Product badges toggle"> **Type:** Toggle\ **Default:** Enabled Enable or disable badge display on product cards throughout the store. **When enabled:** * Badges appear on all product cards * Visible in collections, search, home page sections * Automatically displays based on product tags **When disabled:** * No badges show on product cards * Product page badges are unaffected * Clean minimal card appearance <Tip> Keep enabled for most stores. Badges increase engagement and help customers identify special products quickly. </Tip> </Accordion> </AccordionGroup> ### Product page settings Configure badge display on individual product pages: **Location:** Theme Customizer → **Product pages** → Add **Badges** block <AccordionGroup> <Accordion title="Badges block"> **Type:** Block\ **Location:** Product page template Add the Badges block to display badges on product pages. **Block settings:** * Position (above/below title, near price) * Badge style (color scheme, size) * Multiple badge display **Placement options:** * Above product title * Below product title * Near product price * In product info section <Tip> Place badges near the product title for maximum visibility. This draws immediate attention to special product attributes. </Tip> </Accordion> </AccordionGroup> ## Translation management ### Fallback behavior When a badge translation is missing: 1. **Tag:** Product has `badge:custom_badge` 2. **Lookup:** Theme searches locale file for `"custom_badge": "..."` 3. **Not found:** Translation doesn't exist in current locale 4. **Fallback:** Badge displays as "custom\_badge" (the key itself) **Example:** * Tag: `badge:summer_sale` * No translation defined * Displays: "summer\_sale" on storefront <Warning> Always provide translations for all badge keys in all supported languages to maintain consistent branding and user experience. </Warning> ### Translation best practices <CardGroup> <Card title="Match brand voice" icon="message"> Translate badges to match your brand voice in each language, not just literal translations. "Hot Deal" might be "Oferta Caliente" (literal) or "Oferta Especial" (better branding) in Spanish. </Card> <Card title="Keep it short" icon="text-width"> Badge text should be 1-3 words maximum. Long text doesn't fit well on badges. "Limited Edition" works better than "Available in Limited Quantities Only". </Card> <Card title="Use consistent keys" icon="hashtag"> Use the same badge keys across all products. Don't create `badge:sale1`, `badge:sale2`, etc. Use one `badge:sale` for consistency. </Card> <Card title="Test all locales" icon="language"> After adding translations, test badge appearance in every language your store supports. Ensure text fits and looks good. </Card> </CardGroup> ## Common use cases <Tabs> <Tab title="Sale promotions"> Highlight discounted products during sales. **Setup:** * Badge tag: `badge:on_sale` * Display: "On sale" (or translated) * Products: All items with active discounts **Implementation:** 1. Add `badge:on_sale` tag to sale products 2. Enable badges on product cards and pages 3. When sale ends, remove tags **Bulk tag management:** * Use bulk editor to add/remove tags quickly * Filter by collection or discount code * Add/remove sale badges en masse <Tip> Combine with product badges automation apps to automatically add sale badges when discount is applied and remove when sale ends. </Tip> </Tab> <Tab title="New arrivals"> Feature recently added products. **Setup:** * Badge tag: `badge:new` * Display: "New" * Products: Recent additions (last 30-60 days) **Implementation:** 1. Add `badge:new` to products when publishing 2. Create workflow to remove after 30-60 days 3. Badge draws attention to latest inventory **Automation options:** * Use Shopify Flow to auto-add "new" tag on publish * Schedule tag removal after X days * Keep new arrivals collection fresh </Tab> <Tab title="Bestsellers"> Showcase popular products. **Setup:** * Badge tag: `badge:best_seller` * Display: "Best seller" * Products: Top 10-20% by sales **Implementation:** 1. Review sales data monthly 2. Add badge to top performers 3. Social proof increases conversions **Selection criteria:** * Top 10% by unit sales * Top revenue generators * Highest rated products * Most favorited/wishlisted </Tab> <Tab title="Sustainability"> Highlight eco-friendly products. **Setup:** * Custom badges: `badge:eco_friendly`, `badge:organic`, `badge:recycled` * Products: Sustainable product line **Locale setup:** ```json theme={null} "badges": { "eco_friendly": "Eco-Friendly", "organic": "Organic", "recycled": "Recycled Materials", "carbon_neutral": "Carbon Neutral" } ``` **Implementation:** 1. Create custom sustainability badges 2. Add translations in all languages 3. Apply to certified/verified eco products 4. Build trust with eco-conscious customers </Tab> <Tab title="Limited editions"> Create urgency with limited availability. **Setup:** * Custom badge: `badge:limited_edition` * Display: "Limited Edition" * Products: Exclusive or time-limited items **Implementation:** 1. Add custom badge to locale files 2. Apply to limited quantity products 3. Remove badge when sold out 4. Creates FOMO and urgency **Variations:** * `badge:exclusive` - "Exclusive" * `badge:limited_stock` - "Limited Stock" * `badge:last_chance` - "Last Chance" </Tab> <Tab title="Made-to-order"> Inform customers about production time. **Setup:** * Custom badges: `badge:made_to_order`, `badge:handmade`, `badge:custom` * Products: Custom/made-to-order items **Locale setup:** ```json theme={null} "badges": { "made_to_order": "Made to Order", "handmade": "Handmade", "custom": "Customizable", "artisan": "Artisan Made" } ``` **Implementation:** 1. Create badges for production types 2. Set customer expectations upfront 3. Reduce support inquiries about shipping times </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Limit badge count" icon="hashtag"> Don't use more than 1-2 badges per product. Multiple badges create visual clutter and reduce impact. Choose the most important badge. </Card> <Card title="Use meaningful badges" icon="circle-check"> Every badge should provide valuable information to customers. Avoid generic badges that don't influence purchase decisions. </Card> <Card title="Consistent naming" icon="code"> Use underscore format consistently: `best_seller`, not `bestseller` or `best-seller`. Maintain consistent key formatting across all badges. </Card> <Card title="Translate everything" icon="language"> Provide translations for all badge keys in every language your store supports. Missing translations look unprofessional. </Card> <Card title="Regular maintenance" icon="clock-rotate-left"> Review and update badges regularly. Remove "new" badges after 60 days, update "bestseller" badges monthly based on sales data. </Card> <Card title="Bulk tag management" icon="tags"> Use Shopify's bulk editor to add/remove badge tags efficiently. Filter products by collection or condition, then edit tags in bulk. </Card> <Card title="Strategic placement" icon="location-dot"> Enable badges where they matter most. High-traffic collection pages benefit most. Consider disabling on pages where badges distract. </Card> <Card title="A/B test badge text" icon="flask"> Test different badge wording to see what drives conversions. "On Sale" vs "Limited Offer" vs "Special Price" may perform differently. </Card> <Card title="Automation consideration" icon="robot"> For large catalogs, consider Shopify Flow or apps to automatically manage badge tags based on rules (sales data, publish date, stock levels). </Card> <Card title="Visual consistency" icon="palette"> Ensure badge styling matches your brand. Customize badge colors and styles in theme settings to align with overall design. </Card> </CardGroup> ## Technical implementation ### Tag format requirements <Warning> **Critical:** Badge tags must follow this exact format: `badge:badge_key` **Correct:** * `badge:sale` * `badge:new_arrival` * `badge:limited_edition` **Incorrect:** * `Badge:sale` (capital B) * `badge: sale` (space after colon) * `badges:sale` (plural badges) * `sale` (missing badge: prefix) </Warning> ### Key naming rules <Note> **Badge key requirements:** * Use lowercase only * Use underscores for spaces: `best_seller` not `best seller` * No special characters except underscores * Keep under 20 characters * Use descriptive names: `eco_friendly` not `eco` </Note> ### Multiple badges per product Products can have multiple badge tags: ``` Tags: badge:new, badge:on_sale, badge:eco_friendly ``` **Display behavior:** * All badges appear on product * Order determined by theme settings * May stack or display inline depending on theme style * Consider limiting to 2 badges maximum for clean appearance ## Related guides <CardGroup> <Card title="Product Page" icon="box" href="/themes/release/pages-templates/product-page"> Configure the product page template and Badges block </Card> <Card title="Product Card Settings" icon="table-cells-large" href="/themes/release/theme-settings/products"> Manage product card display settings including badges </Card> <Card title="Product Tags" icon="tag" href="https://help.shopify.com/en/manual/products/details/tags"> Learn more about Shopify product tags and management </Card> <Card title="Theme Localization" icon="language" href="https://shopify.dev/docs/themes/architecture/locales"> Understanding Shopify theme locale files and translations </Card> </CardGroup> # Product groups Source: https://docs.digifist.com/themes/release/products/product-groups Organize products into groups for better navigation and cross-selling. Product Groups allow you to link separate products so they behave like variants of one another. Each product maintains its own description, variants, and images while being presented as part of a unified group on product cards and pages. This creates a seamless shopping experience where customers can switch between related products without leaving the product page. <img alt="Product groups overview" /> ## What this feature controls Product Groups manages: * **Product linking** - Connect separate products to act as variant options * **Navigation between products** - Allow customers to switch between grouped products * **Display types** - Show groups as swatches, images, text, or product thumbnails * **Metaobject integration** - Use Shopify metaobjects to define product relationships * **Custom option values** - Set custom images or text for variant options * **Card and page display** - Control how groups appear on product cards vs. pages * **Native variant integration** - Works alongside standard product variants ## Getting started <Steps> <Step title="Create Product Groups metaobject definition"> Set up the metaobject structure for product groups. 1. In Shopify admin, go to **Content → Metaobjects → Add definition** 2. Create a **Product Groups** metaobject definition: * **Name:** Product Groups * **Handle:** `product_groups` 3. Add the following fields to the definition: | Field Name | Handle | Type | | :------------------- | :--------------------- | :----------------------------------- | | Name | `name` | One : Single line text | | Group | `group` | List : Product | | Group by option | `group_by_option` | One : Choice list (Single line text) | | Type on card | `type_on_card` | One : Choice list (Single line text) | | Type on page | `type_on_page` | One : Choice list (Single line text) | | Custom label on page | `custom_label_on_page` | One : True or false | 4. For **Group by option** field, add common options: * Color * Size * Capacity * Material * Style 5. For **Type on card** and **Type on page** fields, add these options: * Swatch * Image * Text * Product 6. Save the definition <Warning> Field handles must be exactly as shown above. Incorrect handles will break the product groups functionality. </Warning> <img alt="Product groups metaobject setup" /> </Step> <Step title="Create Product Options Type Values metaobject"> Set up custom option values for images and text. 1. In Shopify admin, go to **Content → Metaobjects → Add definition** 2. Create a **Product Options Type Values** metaobject definition: * **Name:** Product Options Type Values * **Handle:** `product_options_type_values` 3. Add the following fields: | Field Name | Handle | Type | | :--------- | :------ | :--------------------- | | Name | `name` | One : Single line text | | Image | `image` | One : Image (File) | | Text | `text` | One : Single line text | 4. Save the definition <Note> This metaobject is optional. Only create it if you want custom images or text labels for your product group options. </Note> </Step> <Step title="Link metaobjects in Theme Settings"> Connect the metaobject definitions to your theme. 1. Go to **Online Store → Themes → Customize** 2. Open **Theme settings → Products** 3. Scroll to **Product Groups** section 4. Select the **Product Groups** metaobject definition you created 5. If you created it, select the **Product Options Type Values** metaobject 6. Save your changes </Step> <Step title="Create your first product group"> Add products to a group. 1. Go to **Content → Metaobjects → Product Groups → Add entry** 2. Fill in the fields: * **Name:** Descriptive name (e.g., "T-Shirt Collection") * **Group:** Select 2+ products to link together * **Group by option:** Choose what differentiates them (e.g., "Color") * **Type on card:** How to display on collection pages (e.g., "Swatch") * **Type on page:** How to display on product pages (e.g., "Product") * **Custom label on page:** Enable if using custom labels 3. Save the product group </Step> <Step title="Create custom option values (optional)"> Add custom images or text for option values. 1. Go to **Content → Metaobjects → Product Options Type Values → Add entry** 2. For each custom value, add: * **Name:** Option value name (must match variant option exactly) * **Image:** Upload custom image (for Image type display) * **Text:** Custom text label (for Text type display) 3. Save each entry <Tip> Name must exactly match the product variant option. For example, if your product has "Navy Blue" as a color, the custom value Name must be "Navy Blue". </Tip> </Step> <Step title="Test product groups"> Verify groups appear correctly on your storefront. 1. Visit a product that's part of a group 2. Check that group options appear as configured 3. Test switching between products in the group 4. Verify display on both collection cards and product pages </Step> </Steps> ## How Product Groups work Product Groups create relationships between separate products, making them appear as different variants of the same item: ### Standard variants vs. Product Groups **Standard variants:** * Single product with multiple variants (e.g., one t-shirt with colors) * All variants share same description and product details * Limited to 3 variant options (Shopify limit) * All managed within one product **Product Groups:** * Multiple separate products linked together * Each product has its own description, images, pricing * No limit on number of products in a group * Each product can have its own variants too ### Display types Product Groups can be displayed in four different ways: <AccordionGroup> <Accordion title="Swatch display"> **Best for:** Color variations, patterns, materials Displays small circular or square swatches representing each product in the group. Uses Shopify's native color swatch metaobject (`shopify--color-pattern`) by default. **When to use:** * Color variations (Red, Blue, Black) * Pattern variations (Striped, Solid, Checkered) * Material swatches (Cotton, Linen, Silk) **Appearance:** * Small clickable swatches below product image * Shows color or pattern visually * Hover to preview product name </Accordion> <Accordion title="Image display"> **Best for:** Style variations, design differences Displays small thumbnail images for each product option. Can use product's main image or custom images from Product Options Type Values metaobject. **When to use:** * Different styles or designs * Pattern variations needing visual display * Products where appearance matters more than text **Appearance:** * Small square thumbnails * Shows actual product or custom image * Click to switch products </Accordion> <Accordion title="Text display"> **Best for:** Size, capacity, specific names Displays text labels for each product option. Can use product's option value or custom text from metaobject. **When to use:** * Size variations (Small, Medium, Large) * Capacity options (8oz, 16oz, 32oz) * Named variations (Classic, Premium, Deluxe) **Appearance:** * Text buttons or pills * Clear readable labels * Selected state highlighting </Accordion> <Accordion title="Product display"> **Best for:** Complete product cards, related items Displays full product cards with images and details for each product in the group. **When to use:** * Very different products in the group * When customers need to see full product details * Related product recommendations **Appearance:** * Full product cards in a row * Shows image, title, price * More visual weight than other types </Accordion> </AccordionGroup> ### Custom option values When you want more control over how options appear, use the Product Options Type Values metaobject: **Without custom values:** * Theme uses product's variant option name (e.g., "Navy Blue") * Swatch type uses Shopify's color swatch metaobject * Image type uses product's featured image **With custom values:** * **Custom images** - Upload specific images for Image type display * **Custom text** - Use different text labels than variant names * **Better control** - Ensure consistent appearance across products <Note> Custom value **Name** must exactly match the product's variant option value. Matching is case-sensitive. </Note> ## Metaobject structure ### Product Groups metaobject <Tabs> <Tab title="Required Fields"> **Name** (`name`) * Type: Single line text * Purpose: Internal name for the product group * Example: "T-Shirt Collection - Summer 2024" **Group** (`group`) * Type: List of Products * Purpose: Select all products to include in this group * Requirement: Minimum 2 products * Example: \[Product A, Product B, Product C] **Group by option** (`group_by_option`) * Type: Choice list (Single line text) * Purpose: Variant option that differentiates products * Example: "Color", "Size", "Material" * Must match variant option name on products **Type on card** (`type_on_card`) * Type: Choice list (Single line text) * Purpose: How to display group on collection/card views * Options: Swatch, Image, Text, Product **Type on page** (`type_on_page`) * Type: Choice list (Single line text) * Purpose: How to display group on product pages * Options: Swatch, Image, Text, Product </Tab> <Tab title="Optional Fields"> **Custom label on page** (`custom_label_on_page`) * Type: True or false * Purpose: Enable custom labels on product pages * Default: False * When enabled: Uses custom text from Product Options Type Values </Tab> </Tabs> ### Product Options Type Values metaobject <Tabs> <Tab title="Field Structure"> **Name** (`name`) * Type: Single line text * Purpose: Must exactly match product variant option value * Example: "Navy Blue" (if product has Navy Blue variant) * Case-sensitive matching **Image** (`image`) * Type: Image (File) * Purpose: Custom image for Image type display * Recommended: 100x100px or larger * Format: JPG, PNG, WebP **Text** (`text`) * Type: Single line text * Purpose: Custom label for Text type display * Example: Use "L" instead of "Large" </Tab> </Tabs> ## Common use cases <Tabs> <Tab title="Color variations"> Link products that differ only by color. **Setup:** * Group by option: "Color" * Type on card: "Swatch" * Type on page: "Swatch" or "Product" * Products: Same item in different colors **Example:** * T-Shirt in Red, Blue, Black, White * Each color is a separate product * Customers switch colors without leaving page **Benefits:** * Each color has unique images showing actual color * Different colors can have different inventory * Each color product can have its own size variants </Tab> <Tab title="Style variations"> Group related products with different designs. **Setup:** * Group by option: "Style" * Type on card: "Image" * Type on page: "Product" * Products: Different designs/patterns **Example:** * T-Shirt in Striped, Solid, Graphic * Each style is separate product * Show style options as thumbnails **Benefits:** * Each style has unique descriptions * Different styles can have different prices * Separate inventory tracking per style </Tab> <Tab title="Capacity options"> Link products with different sizes or capacities. **Setup:** * Group by option: "Capacity" * Type on card: "Text" * Type on page: "Text" * Products: Same item in different capacities **Example:** * Water Bottle: 16oz, 24oz, 32oz * Candle: Small (8oz), Medium (16oz), Large (24oz) * Each capacity is separate product **Benefits:** * Different capacities have different prices * Separate descriptions explaining capacity benefits * Independent inventory management </Tab> <Tab title="Material variations"> Group products made from different materials. **Setup:** * Group by option: "Material" * Type on card: "Swatch" or "Image" * Type on page: "Image" * Products: Same design in different materials **Example:** * Bag in Leather, Canvas, Nylon * Shirt in Cotton, Linen, Silk * Each material is separate product **Benefits:** * Material-specific descriptions and care instructions * Different materials have different prices * Separate imagery showing material texture </Tab> <Tab title="Collection series"> Link products from the same collection or series. **Setup:** * Group by option: "Product" * Type on card: "Product" * Type on page: "Product" * Products: Related items from same collection **Example:** * Jewelry Set: Necklace, Earrings, Bracelet * Furniture Set: Chair, Sofa, Ottoman * Show as complete product cards **Benefits:** * Encourage purchasing multiple items * Show complete product information for each * Cross-sell related products </Tab> <Tab title="Product bundles"> Group standalone products that work together. **Setup:** * Group by option: "Type" * Type on card: "Text" * Type on page: "Product" * Products: Complementary products **Example:** * Phone Case, Screen Protector, Charger * Camera Body, Lens, Bag * Each item sold separately but grouped **Benefits:** * Customer sees all compatible products * Each product maintains separate pricing * Flexible purchasing options </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Match option names" icon="check"> Ensure "Group by option" exactly matches the variant option name on your products. If products have "Color" option, use "Color" not "Colour" or "Colors". </Card> <Card title="Consistent product structure" icon="equals"> All products in a group should have the same variant option structure. Don't mix products with "Color" option and products without it. </Card> <Card title="Choose right display type" icon="palette"> Use Swatch for colors, Image for styles, Text for sizes/capacities. Match display type to what customers need to see. </Card> <Card title="Different types per location" icon="window-restore"> Use different display types for cards vs. pages. Example: Swatch on card, Product on page for more detail. </Card> <Card title="Logical grouping" icon="layer-group"> Group products that truly belong together. Customers should understand why these products are linked. </Card> <Card title="Custom images quality" icon="image"> When using custom option images, use high-quality 100x100px+ images. Keep consistent style across all options. </Card> <Card title="Limit group size" icon="list-ol"> Don't create groups with 20+ products. Large groups overwhelm customers. Keep to 3-8 products per group typically. </Card> <Card title="Test switching behavior" icon="arrows-rotate"> Always test switching between products in a group. Ensure images, prices, and descriptions update correctly. </Card> <Card title="Mobile considerations" icon="mobile"> Test product groups on mobile. Swatches should be large enough to tap easily. Too many options may need scrolling. </Card> <Card title="Handle naming carefully" icon="code"> Metaobject field handles must be exact. Double-check handles when setting up. Incorrect handles break functionality. </Card> </CardGroup> ## Technical notes <Note> **Native swatch integration:** The theme automatically uses Shopify's native color swatch metaobject (`shopify--color-pattern`) for Swatch type display. You don't need to create custom swatches for standard colors. </Note> <Note> **Product type display:** When using "Product" as the display type, the theme shows each product's featured image and basic information. Clicking switches to that product while staying on the product page. </Note> <Warning> **Metaobject handles are critical:** Field handles in the metaobject definitions must exactly match the specified names. The theme code looks for these specific handles. Any variation will cause product groups to fail silently. </Warning> <Tip> **Combine with standard variants:** Each product in a group can still have its own standard variants. For example, products grouped by Color can each have their own Size variants. </Tip> ## Related guides <CardGroup> <Card title="Product Page" icon="box" href="/themes/release/pages-templates/product-page"> Configure the product page template where groups display </Card> <Card title="Product Badges" icon="tag" href="/themes/release/products/product-badges"> Add badges to products in groups for sales or new items </Card> <Card title="Metaobjects Documentation" icon="database" href="https://help.shopify.com/en/manual/custom-data/metaobjects"> Learn more about Shopify metaobjects and custom data </Card> <Card title="Product Variants" icon="list-check" href="https://help.shopify.com/en/manual/products/variants"> Understanding standard Shopify product variants </Card> </CardGroup> # Product page (PDP) Source: https://docs.digifist.com/themes/release/products/product-page Customize the layout and features of your product pages. Product pages display detailed information about individual products, including images, descriptions, pricing, and purchasing options. You can customize the gallery layout, thumbnails, navigation, sticky elements, and content blocks to enhance the shopping experience and make it easier for customers to find and buy products. ## What this section controls This section manages the product gallery, media display, thumbnails, variant selection, purchase options, and all content blocks that appear on individual product pages. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Navigate to Products"> In the left sidebar, click **Products** then select **Default product**. </Step> <Step title="Configure settings"> Adjust gallery layout, media options, and add or remove content blocks as needed. </Step> <Step title="Preview changes"> Use the preview to see how your product page looks on different devices before publishing. </Step> </Steps> ## Key settings <Tabs> <Tab title="Gallery"> ### Gallery layout Control how product media displays across devices and how customers interact with your product images. <AccordionGroup> <Accordion title="Layout on desktop" icon="desktop"> Choose how product media are displayed on desktop devices: * **Grid** - Display media in a grid format * **Slideshow** - Show one media item at a time with navigation controls * **Carousel** - Display media in a sliding carousel format </Accordion> <Accordion title="Layout on mobile" icon="mobile"> Choose how product media are displayed on mobile devices: * **Slideshow** - Show one media item at a time with navigation controls * **Carousel** - Display media in a sliding carousel format </Accordion> <Accordion title="Aspect ratio" icon="expand"> Choose how product media are displayed: * **Fit viewport** - Media are resized to fit the viewport * **Auto** - Display media in their original aspect ratio without being cropped * **Custom options** - Select from predefined aspect ratio options <Note>Fit viewport works only with slideshow and carousel layouts on desktop.</Note> </Accordion> <Accordion title="Media object fit" icon="image"> Choose how product media fit within their containers: * **Cover** - Media fill the container, cropping if necessary * **Contain** - Media are fully visible within the container, with possible empty space <Note>This setting is not effective with the gallery aspect ratio set to Auto.</Note> </Accordion> <Accordion title="Slider auto height" icon="arrows-up-down"> Enable to adjust the slider height automatically for each slide's media. Use only if product media have different aspect ratios, as it overrides your set aspect ratio settings. </Accordion> <Accordion title="Transparent background" icon="droplet"> Enable to make product media backgrounds transparent. Backgrounds will automatically match the background color defined in the Gallery color scheme setting. </Accordion> <Accordion title="Zoom behavior" icon="magnifying-glass"> Choose how zoom works on product media: * **None** - Zoom functionality is disabled * **On click** - Customers can click on a media to see a zoomed-in view * **Button** - A button appears to trigger the zoom functionality </Accordion> <Accordion title="Video controls" icon="play"> Enable playback controls for product videos. Works only for uploaded videos, not YouTube or Vimeo embeds. <Tip>Enable video controls to allow customers to pause, play, and control video playback directly.</Tip> </Accordion> <Accordion title="Adaptive ratio & auto height" icon="up-down-left-right"> Optimize gallery sizing for different image ratios: * **None** - Fixed height for all media * **Adaptive ratio** - Adjusts to image proportions to prevent letterboxing * **Auto height** - Dynamic height based on content <Tip>Use adaptive ratio when your product images have varying aspect ratios.</Tip> </Accordion> <Accordion title="Image vertical alignment" icon="up-down"> Control the vertical positioning of product images in the gallery: * **Top** - Align images to the top * **Center** - Center images vertically * **Bottom** - Align images to the bottom </Accordion> <Accordion title="Media gallery pagination" icon="ellipsis"> Show image pagination dots on mobile devices: * **None** - No pagination display * **Over gallery** - Overlaid on images * **Under gallery** - Below images <Note>This setting applies to mobile view only.</Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Thumbnails"> ### Thumbnail settings Configure how thumbnail images appear alongside the main product gallery. <AccordionGroup> <Accordion title="Display thumbnails" icon="images"> Choose whether to display: * **None** - Thumbnails are not displayed * **Desktop** - Thumbnails appear next to the main media on desktop devices * **Mobile** - Thumbnails appear below the main media on mobile devices * **Both** - Thumbnails appear on both desktop and mobile devices </Accordion> <Accordion title="Thumbnail image ratio" icon="square"> Choose the aspect ratio for thumbnail images: * **Auto** - Display thumbnails in their original aspect ratio * **Custom options** - Select from predefined aspect ratio options </Accordion> <Accordion title="Thumbnail image object fit" icon="crop"> Choose how thumbnail images fit within their containers: * **Cover** - Thumbnails fill the container, cropping if necessary * **Contain** - Thumbnails are fully visible within the container, with possible empty space <Note>This setting is not effective with the thumbnail image ratio set to Auto.</Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Navigation"> ### Navigation controls Manage how customers navigate through product media. <AccordionGroup> <Accordion title="Display arrows" icon="arrows-left-right"> Choose whether to display: * **None** - Arrows are not displayed * **Desktop** - Arrows appear on desktop devices * **Mobile** - Arrows appear on mobile devices * **Both** - Arrows appear on both desktop and mobile devices </Accordion> <Accordion title="Display pagination" icon="circle"> Choose the pagination style: * **None** - Hide pagination * **Dynamic**, **Dots**, **Line** - Show pagination controls in the selected style <Note>Pagination is available only on mobile. It is disabled when thumbnails are shown, and enabled when neither arrows nor thumbnails are active to maintain accessibility.</Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> ### Layout & positioning Control the overall layout structure and spacing of the product page. <AccordionGroup> <Accordion title="Sticky content" icon="thumbtack"> Enable to keep product details (such as title, price, and purchase options) visible while scrolling through product media on desktop devices. </Accordion> <Accordion title="Sticky add to cart bar" icon="cart-shopping"> Enable to keep the add to cart bar visible at the top of the screen when the main add to cart button is out of view. </Accordion> <Accordion title="Gallery width" icon="ruler-horizontal"> Choose the width of the product gallery on desktop (S, M, L). The gallery is automatically optimized for mobile. </Accordion> <Accordion title="Gallery position" icon="left-right"> Choose the position of the product gallery on desktop: * **Start** - Display the gallery before the product details * **End** - Display the gallery after the product details <Note>The gallery is automatically optimized for mobile.</Note> </Accordion> <Accordion title="Space between gallery and content" icon="arrows-left-right-to-line"> Choose the spacing between the product gallery and product details on desktop: * **No** - No extra space * **S, M, L, XL** - Increasing levels of spacing between the gallery and content </Accordion> <Accordion title="Bottom spacing unit" icon="grip-lines"> Set the spacing below each block. Value is in rem units (e.g., 1.6 = 1.6rem). </Accordion> <Accordion title="Content alignment" icon="align-center"> Choose how the content inside the section is aligned: * **Start** - Align content to the start * **Center** - Align content to the center * **End** - Align content to the end </Accordion> </AccordionGroup> </Tab> <Tab title="Features"> ### Additional features Configure special features and color schemes for the product gallery. <AccordionGroup> <Accordion title="Media gallery info" icon="circle-info"> Enter info text to display over the media gallery. This text can provide additional context or details about the product media. </Accordion> <Accordion title="As seen on metafield" icon="tag"> Enter the namespace and key for a product metafield to display images as 'As seen on' content. Example: `theme.as_seen_on` </Accordion> <Accordion title="Gallery color scheme" icon="palette"> Choose a color scheme for the media gallery from your theme's predefined options. This setting affects elements like background color, text color, and button styles within the gallery. </Accordion> <Accordion title="Show tags on mobile" icon="tags"> Display product tags on mobile devices. This helps mobile users discover related products and categories. </Accordion> <Accordion title="Breadcrumbs" icon="right-long"> Show navigation breadcrumbs on desktop devices. Breadcrumbs help customers understand their location within your store and improve navigation. <Note>Breadcrumbs are displayed on desktop only by default.</Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Section"> ### Section-level settings Control the overall appearance and spacing of the product page section. <AccordionGroup> <Accordion title="Section width" icon="left-right"> Maximum width of the product section: * **Page** - Contained width (standard page width) * **Fluid** - Wider container * **Full** - Full browser width </Accordion> <Accordion title="Color scheme" icon="palette"> Select the color scheme for the product page section. Choose from your theme's predefined color schemes (e.g., scheme-1, scheme-2). </Accordion> <Accordion title="Spacing top" icon="arrow-up-to-line"> Padding above the product section: * **No** (0), **S** (1), **M** (2), **L** (4), **XL** (6) </Accordion> <Accordion title="Spacing bottom" icon="arrow-down-to-line"> Padding below the product section: * **No** (0), **S** (1), **M** (2), **L** (4), **XL** (6) </Accordion> </AccordionGroup> </Tab> </Tabs> ## Block settings Each block type offers unique configuration options to control how content appears on your product pages. Add, remove, or reorder blocks to customize the product page layout. <Tabs> <Tab title="Basic blocks"> Essential blocks for displaying core product information. <AccordionGroup> <Accordion title="Back button" icon="arrow-left"> Add a button that allows customers to navigate back from the product page. **Available settings:** * **Button style** - Choose the button style: Filled or Text * **Button label** - Enter the text to display on the button (default: "Go Back") * **Display on mobile** - Choose whether the button appears on mobile devices: Top bar or On media * **Show on** - Choose the devices where the button is shown: Desktop, Mobile, or Both </Accordion> <Accordion title="Breadcrumbs" icon="right-long"> Add a breadcrumb navigation trail to help customers understand their location within your store. </Accordion> <Accordion title="Title" icon="heading"> Display the product title on the product page. **Available settings:** * **Heading size** - Choose the size of the product title: XS, S, M, L, XL * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Price" icon="dollar-sign"> Display the product price on the product page. **Available settings:** * **Show tax information** - Display product tax details next to the price * **Show shipping information** - Display product shipping details next to the price * **Show additional information** - Enter any extra information you'd like to display next to the price * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Description" icon="align-left"> Display the product description or variant-specific content. **Available settings:** * **Behaviour** - Choose how the description is displayed: Plain or Collapsible * **Heading** - Overwrite the default heading of the block with a custom heading * **Text truncate line limit** - Set the number of lines before the text is truncated (set to 0 to disable) * **Icon** - Choose an icon (e.g., theme-box). Leave blank to hide the icon * **Custom icon** - Upload a custom image to replace the icon * **Metafield for product variant** - Enter the related metafield namespace and key to display variant-specific content * **Show block content after variant specific content** - Enable to display the block content below the variant-specific content * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="SKU" icon="barcode"> Display the product SKU (Stock Keeping Unit) on the product page. <Note>SKU must be added to the product in Shopify admin to appear here.</Note> **Available settings:** * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Divider" icon="minus"> Add a visual separator line between blocks to improve content organization and readability. **Available settings:** * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> </AccordionGroup> </Tab> <Tab title="Ratings"> Blocks for displaying product ratings and reviews. <AccordionGroup> <Accordion title="Product rating" icon="star"> Display the product rating and number of reviews. To display a rating, add a product rating app. [Learn more](https://help.shopify.com/en/manual/online-sales-channels/shop/product-reviews). **Available settings:** * **Rating** - Set default rating value (1-5) if no reviews are available * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Feature rating" icon="chart-simple"> Display a feature rating with customizable labels and styles. **Available settings:** * **Heading** - Add an optional heading above the feature rating * **Rating** - Set the rating value as a number (e.g., 7) * **Scale max** - Define the maximum value of the scale (e.g., 10) * **Rating type** - Choose how the rating is displayed: Progress or Single * **First label** - Add a label for the lowest point on the scale (e.g., Small) * **Middle label** - Add a label for the midpoint on the scale (e.g., Medium) * **Last label** - Add a label for the highest point on the scale (e.g., Large) * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> </AccordionGroup> </Tab> <Tab title="Purchase"> Blocks related to product variants, purchasing, and checkout. <AccordionGroup> <Accordion title="Variant picker" icon="list-check"> Let customers select product variants. **Available settings:** * **Make variants clickable** - Allow out-of-stock variants to remain clickable **Variants display:** * **Display as** - Choose how variants are displayed: Dropdowns or Buttons * **Variant options with thumbnails** - Enable to show variant options as thumbnails when the option name includes keywords like "Color", "Material", etc. **Gift card settings:** * **Show gift card prices in options** - Display prices for gift card denominations in variant picker. Applies only to gift card products **Size guide:** * **Size guide content** - Display the content of a specific page in a popup for size guidance * **Size option label** - Define which variant option triggers the size guide popup (e.g., Size) * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL <Tip>Use buttons for 2-5 variants. Switch to dropdowns for products with many options to avoid overwhelming the page.</Tip> </Accordion> <Accordion title="Purchase options" icon="credit-card"> Display purchase and subscription options for the product. **Subscription info settings:** * **Show subscription title on info** - Display the subscription title within the info section * **Show subscription information** - Enter additional subscription details * **Show subscription policy link** - Display a link to the subscription policy <Note>To display subscription information, a subscription plan must be selected first.</Note> **Available settings:** * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Buy buttons" icon="cart-plus"> Display the add to cart button, quantity selector, and optional checkout features. **Available settings:** * **Show quantity** - Display a quantity selector next to the add to cart button * **Quantity and buttons layout** - Choose how the quantity selector and buttons are arranged: Inline or Separate * **Show dynamic checkout buttons** - Display accelerated checkout options (e.g., PayPal, Apple Pay) based on the customer's available payment methods. [Learn more](https://help.shopify.com/en/manual/payments/accelerated-checkout) * **Show recipient information form for gift cards** - Allow buyers to schedule gift card delivery and include a personal message for gift card products. [Learn more](https://help.shopify.com/en/manual/products/gift-card-products) * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL <Tip>Enable dynamic checkout to increase conversions with one-click payment options.</Tip> </Accordion> <Accordion title="Inventory notice" icon="box"> Display stock availability information on the product page. **Available settings:** * **Inventory threshold** - Set the exact stock level (e.g., 15) at which the inventory notice is shown. When stock drops to or below this number, the notice appears * **Notice just text** - Hide the exact stock quantity and display only the low-stock message for urgency without revealing specific numbers * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL <Tip>Set inventory threshold to create urgency without revealing exact stock levels that might discourage purchases.</Tip> </Accordion> <Accordion title="Pre-order" icon="clock"> Display a pre-order option on the product page when enabled. <Note>See [pre-order setup](/themes/release/products/pre-order) for details on configuring pre-orders.</Note> **Available settings:** * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Pickup availability" icon="store"> Display pickup availability information for products when enabled in your store. <Warning>Pickup availability requires **Local pickup** to be turned on in your Shopify settings.</Warning> **Available settings:** * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Badges" icon="award"> Display [product badges](/themes/release/products/product-badges) such as custom labels, discounts, or sold-out status. **Available settings:** * **Show custom badges** - Display custom product badges * **Show discount badges** - Display discount badges when a product is on sale * **Show sold out badges** - Display a badge when a product is out of stock * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> </AccordionGroup> </Tab> <Tab title="Content"> Flexible content blocks for additional product information and media. <AccordionGroup> <Accordion title="Complementary products" icon="layer-group"> Display complementary product recommendations. <Note>Complementary products are customizable through the Shopify Search & Discovery app. [Learn more](https://help.shopify.com/en/manual/online-store/storefront-search/search-and-discovery-recommendations).</Note> **Available settings:** * **Heading** - Set a custom heading for the block (e.g., You may also like) * **Icon** - Choose an icon (e.g., theme-box). Leave blank to hide the icon * **Max products to show** - Set the maximum number of complementary products displayed (e.g., 4) * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Content grid" icon="grid"> Display a grid of content items with optional heading and icon. **Available settings:** * **Heading** - Set a heading for the content grid (e.g., Free climate compensated shipping) * **Icon** - Choose an icon (e.g., theme-box). Leave blank to hide the icon * **Custom icon** - Upload a custom image to replace the default icon </Accordion> <Accordion title="Content block" icon="square"> Add a block with heading, text, icon, or content from a page or metafield. **Available settings:** * **Heading** - Set a heading for the content block * **Text** - Add custom text content * **Icon** - Choose an icon (e.g., theme-box). Leave blank to hide the icon * **Custom icon** - Upload a custom image to replace the default icon * **Page** - Select a page to display its content inside the block * **Metafield for product variant** - Enter the related metafield namespace and key to display variant-specific content * **Show block content after variant specific content** - Enable to display the block content below the variant-specific content * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Content tabs" icon="folder"> Organize content into tabbed sections on the product page. Supports up to 3 tabs. **Available settings:** * **Default active tab** - Define which tab is active by default (e.g., 1) * **Tab description** - Choose where the product description appears as a tab: None, Start, or End * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL **Tab settings** (for each tab): * **Heading** - Set the heading for the tab * **Icon** - Choose an icon (e.g., theme-box). Leave blank to hide the icon * **Custom icon** - Upload a custom image to replace the default icon * **Text** - Add custom text content * **Page** - Select a page to display its content inside the tab </Accordion> <Accordion title="Rich text" icon="text"> Add a block of formatted text to the product page. **Available settings:** * **Text** - Add custom text content * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Text" icon="font"> Add text content with optional icons, links, and variant-specific content. **Available settings:** * **Text** - Add custom text content * **Text before link** - Add text that appears before the type or vendor links * **Icon** - Choose an icon (e.g., theme-check). Leave blank to hide the icon * **Link to products** - Choose how to link to products (e.g., by type or vendor): * **Text only** - No link to products, display plain text * **Type** - Provide links to filter collection results by product type * **Vendor** - Provide links to filter collection results by product vendor * **Secondary animated text** - Add animated secondary text. Works only when Text only option is selected * **Metafield for product variant** - Enter the related metafield namespace and key to display variant-specific content * **Show block content after variant specific content** - Enable to display the block content below the variant-specific content * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> <Accordion title="Custom liquid" icon="code"> Add app snippets or Liquid code to create advanced customizations. <Warning>Custom code can affect layout and performance. Test changes in a draft theme before publishing.</Warning> **Available settings:** * **Custom liquid** - Add Liquid/HTML code or render app snippets. Supports Shopify objects and filters * **Bottom spacing** - Choose the bottom spacing of the block: No, S, M, L, XL </Accordion> </AccordionGroup> </Tab> </Tabs> ## Common use cases Product pages serve different needs based on your product type. Here are proven configurations for common scenarios: <Tabs> <Tab title="Fashion & Apparel"> **Recommended setup for clothing, shoes, and accessories:** * **Gallery:** Carousel layout with thumbnails on both devices * **Variant picker:** Button style with thumbnail options for colors * **Blocks:** Size guide, variant picker, buy buttons, content tabs for care instructions * **Features:** Sticky content enabled, zoom on click for fabric details This setup showcases product details while keeping purchase options accessible as customers browse multiple angles. </Tab> <Tab title="Electronics"> **Recommended setup for tech products and gadgets:** * **Gallery:** Grid layout with thumbnails for product shots and diagrams * **Variant picker:** Dropdowns for configurations (storage, color, model) * **Blocks:** SKU display, content tabs for specifications, pickup availability * **Features:** Under gallery pagination, collapsible description for technical details Organized layout that presents technical information clearly without overwhelming customers. </Tab> <Tab title="Subscription Products"> **Recommended setup for products with recurring purchases:** * **Gallery:** Slideshow layout (fewer images needed) * **Variant picker:** Buttons for subscription intervals * **Blocks:** Purchase options block with subscription details, custom text for benefits * **Features:** Subscription policy link enabled, detailed recurring payment messaging Clear communication of subscription terms and benefits to reduce customer confusion. </Tab> <Tab title="Gift Cards"> **Recommended setup for digital gift cards:** * **Gallery:** Single image or simple slideshow * **Variant picker:** Show gift card prices in options, dropdown for denominations * **Blocks:** Recipient form enabled, custom messaging about delivery * **Features:** Minimal layout, focus on purchase flow Streamlined experience that guides customers through gift card selection and personalization. </Tab> <Tab title="Pre-order Items"> **Recommended setup for upcoming products:** * **Gallery:** High-quality showcase (grid or carousel) * **Blocks:** Pre-order block prominent, inventory notice, custom availability date text * **Features:** Badge blocks for "Coming Soon", complementary products for alternatives * **Layout:** Large media width to emphasize visuals Builds anticipation while setting clear expectations about availability and delivery. </Tab> <Tab title="High-value Items"> **Recommended setup for premium or luxury products:** * **Gallery:** Large media width, grid layout, zoom enabled * **Blocks:** Rating block, detailed description (collapsible), content tabs for authenticity * **Features:** Sticky content enabled, trust badges via text blocks * **Layout:** Generous spacing, center alignment for premium feel Professional presentation that builds trust and justifies premium pricing. </Tab> <Tab title="Variable Products"> **Recommended setup for products with many options:** * **Gallery:** Variant options with thumbnails for visual variants * **Variant picker:** Mixed approach (buttons for colors, dropdowns for sizes) * **Blocks:** Variant-specific descriptions via metafields, content grid for features * **Features:** Make variants clickable, size guide for measurements Helps customers navigate complex options without confusion or decision fatigue. </Tab> <Tab title="Multi-location Stores"> **Recommended setup for businesses with physical locations:** * **Gallery:** Standard carousel or grid * **Blocks:** Pickup availability block prominent, inventory notice per location * **Features:** Location-based inventory display, breadcrumbs for navigation * **Layout:** Sticky add-to-cart bar for convenience Clear inventory visibility across locations improves customer confidence and reduces inquiries. </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Optimize gallery layout" icon="images"> Use Grid layout on desktop for products with multiple angles. Slideshow works better for products with fewer, high-quality images. </Card> <Card title="Enable sticky content" icon="thumbtack"> Keep purchase options visible while customers scroll through product images on desktop to reduce friction in the buying process. </Card> <Card title="Organize blocks logically" icon="list"> Place essential information (title, price, variants) at the top. Add supplementary content (tabs, rich text) below purchase buttons. </Card> <Card title="Use thumbnail navigation" icon="grid-2"> Display thumbnails on both desktop and mobile for products with multiple images to improve navigation and user experience. </Card> <Card title="Leverage zoom functionality" icon="magnifying-glass"> Enable zoom for products where details matter (jewelry, clothing, electronics). Use "On click" for cleaner interface. </Card> <Card title="Size guides matter" icon="ruler"> Always add size guides for apparel products. Link to a dedicated page with detailed measurements to reduce returns. </Card> <Card title="Show inventory wisely" icon="box"> Set inventory threshold to create urgency (e.g., 10 items) without revealing exact stock levels that might discourage purchases. </Card> <Card title="Test variant display" icon="list-check"> Use buttons for 2-5 variants. Switch to dropdowns for products with many options to avoid overwhelming the page. </Card> </CardGroup> <Warning> Transparent backgrounds work best with professional product photography on solid colors. Test thoroughly to ensure backgrounds don't appear inconsistent across images. </Warning> ## Related guides <CardGroup> <Card title="Product badges" icon="award" href="/themes/release/products/product-badges"> Configure custom labels, discount badges, and sold-out indicators </Card> <Card title="Pre-order setup" icon="clock" href="/themes/release/products/pre-order"> Enable and configure pre-order functionality for upcoming products </Card> <Card title="Product groups" icon="layer-group" href="/themes/release/products/product-groups"> Group related products and manage product collections </Card> <Card title="Theme settings" icon="palette" href="/themes/release/theme-settings"> Customize global theme colors, typography, and layout options </Card> </CardGroup> # Accordions Source: https://docs.digifist.com/themes/release/sections/accordions Organize content into expandable and collapsible topics for FAQs, policies, and product details. The Accordions section organizes content into expandable and collapsible topics. It is ideal for FAQs, product details, policies, or any content that benefits from progressive disclosure. Accordions help reduce visual clutter and improve page scannability by allowing users to selectively reveal only the information they need, creating cleaner and more manageable content layouts. <img alt="Accordions section overview" /> ## What this section controls This section controls accordion-based content displays with the following capabilities: * Expandable and collapsible content topics * Individual topic expand/collapse functionality * Default expanded state configuration * Rich text or dynamic page content support * Progressive disclosure for long-form content * Clean, organized information architecture ## How the Accordions section works The Accordions section uses a block-based topic system: * Displays content in expandable accordion items * Each topic can be opened or collapsed independently * Content can be shown by default on page load * Supports rich text or dynamic page content * Helps reduce visual clutter on long pages ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Accordions section"> Add the Accordions section to your page or template. </Step> <Step title="Add topics"> Click **Add Topic** to create accordion items. </Step> <Step title="Configure content"> Add heading and text content or connect to a page. </Step> </Steps> <img alt="Accordions section in Theme Customizer" /> ## Section settings Section settings control the main heading of the accordion group. <Tabs> <Tab title="Heading"> ### Heading Main title displayed above the accordion list. * Rich text supported (bold, italic, underline, links) ### Heading size Controls the size of the section heading. **Available options:** XS, S, M, L, XL <img alt="Heading configuration" /> </Tab> </Tabs> ## Topic blocks Topic blocks control individual accordion items. Each block represents a single accordion topic. <Tabs> <Tab title="Topic settings"> ### Show content on page load Controls whether the accordion content is visible when the page loads. * **True:** Content is expanded by default * **False:** Content is hidden until the user clicks the heading <img alt="Show content on page load setting" /> ### Heading Title of the accordion topic. * Text input ### Text Main content displayed when the topic is expanded. * Rich text supported ### Page Outputs the content of a selected Shopify page as the accordion body. * Shopify page selector <Warning> Overwrites the Text field when selected. </Warning> <Tip> Use this option to manage large or reusable content from a single page. </Tip> <img alt="Topic content configuration" /> </Tab> </Tabs> ## Best practices * Keep headings concise and descriptive (5-8 words maximum) for quick scanning * Avoid opening too many topics by default to maintain clean initial page state * Use Page content for long or frequently updated information to simplify management * Group related topics together logically for better user experience * Ideal for FAQs, size guides, and policy sections where users seek specific information * Test accordion interactions on mobile to ensure smooth expand/collapse * Consider using first topic as expanded by default to demonstrate functionality * Order topics by importance or frequency of access * Use consistent formatting within accordion content for professional appearance ## Common use cases * **Frequently asked questions (FAQ)** - Answer common customer questions in organized format * **Shipping and return policies** - Display policy details without overwhelming the page * **Product specifications** - Show detailed technical information progressively * **Store information** - Share operational details like hours, locations, contact methods * **Legal or informational content** - Present terms, privacy policies, or guidelines ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Age Verification Popup Source: https://docs.digifist.com/themes/release/sections/age-verification-popup Modal popup requiring age verification before site access. The Age Verification Popup displays a modal requiring visitors to confirm their age before accessing the site. Commonly used for stores selling age-restricted products. <img alt="Age verification popup" /> ## What this section controls * Age verification modal overlay * Confirm and decline buttons * Background image and backdrop effects * Verification messaging ## Section settings <Tabs> <Tab title="Content"> ### Image Background image displayed in the popup. ### Heading Main heading text for the verification prompt. * **Default:** "Verify your age" ### Heading size **Options:** XS (h6), S (h5), M (h4), L (h3), XL (h2) * **Default:** S (h5) ### Text Description text explaining age requirements. * **Default:** "You must be 18 years of age or older to enter this site. Please verify your age." ### Content alignment **Options:** Start, Center, End * **Default:** Center <img alt="Content settings" /> </Tab> <Tab title="Buttons"> ### Confirm button **Label** - Text for confirm button (Default: "Yes") **Style** - Button appearance * **Options:** Filled, Outlined, Text * **Default:** Filled ### Decline button **Label** - Text for decline button (Default: "No") **URL** - Redirect destination when declined * **Default:** `/` **Style** - Button appearance * **Options:** Filled, Outlined, Text * **Default:** Text <Tip> Use contrasting button styles (filled for confirm, text for decline) to guide user choice. </Tip> <img alt="Button configuration" /> </Tab> <Tab title="Display"> ### Show blurred backdrop Blurs the page content behind the popup for visual focus. * **Default:** Disabled <Note> Refresh the page to see backdrop blur changes. </Note> ### Show popup on customizer Display popup in Theme Customizer for preview. * **Default:** Disabled ### Color scheme Select color scheme for the popup. * **Default:** scheme-1 <img alt="Display options" /> </Tab> </Tabs> ## Best practices * **Clear messaging:** Keep text concise - state age requirement clearly * **Button contrast:** Use filled button for confirm, text/outlined for decline * **Backdrop blur:** Enable for better focus on verification prompt * **Decline link:** Link to appropriate external page or homepage * **Legal compliance:** Ensure age requirements match your jurisdiction * **Mobile friendly:** Test popup display and buttons on mobile devices * **Session storage:** Popup uses session storage - users verify once per session ## Common use cases * **Alcohol stores** - Verify 21+ (US) or 18+ (other regions) age requirements * **Tobacco/Vaping** - Age gate for tobacco product sales * **CBD products** - Age verification for regulated cannabisproducts * **Adult content** - 18+ verification for mature content * **Gaming/Gambling** - Age verification for betting or gambling sites ## Related guides <Card title="Password Page" icon="lock" href="/themes/release/sections/main-password"> Configure password-protected store pages </Card> # Apps Source: https://docs.digifist.com/themes/release/sections/apps Container section for third-party Shopify app blocks and embeds. The Apps section provides a flexible container for embedding third-party Shopify app content with customizable layout and spacing options. <img alt="Apps section overview" /> ## What this section controls * Third-party app block container * Layout style (normal or boxed) * Inner spacing and padding * Section width and color scheme ## Section settings <Tabs> <Tab title="Layout"> ### Section layout Choose how the app content is displayed. **Available options:** * **Normal** - Full-width layout without container * **Boxed** - Contained layout with borders **Default:** Normal <Tip> Use normal layout for full-width apps like product reviews. Use boxed for compact widgets like trust badges. </Tip> <img alt="Layout options" /> </Tab> <Tab title="Spacing"> ### Inner spacing Control padding inside the app container. **Available options:** * None (0) - No internal padding * Additional spacing values available <Note> Adjust inner spacing based on the app's design to ensure proper visual balance. </Note> <img alt="Spacing configuration" /> </Tab> <Tab title="Section"> Standard section settings apply: * Section width * Color scheme * Spacing top * Spacing bottom <img alt="Section settings" /> </Tab> </Tabs> ## Best practices * **Normal layout:** Use for full-width app content (reviews, testimonials) * **Boxed layout:** Use for compact widgets (badges, counters) * **Inner spacing:** Match app's internal spacing to avoid double padding * **Width:** Consider app requirements - some apps need full width * **Testing:** Preview with actual app content to ensure proper display * **Mobile:** Test app responsiveness on mobile devices ## Common use cases * **Product reviews** - Judge.me, Yotpo, Loox (normal layout, full width) * **Trust badges** - McAfee, Norton security badges (boxed, centered) * **Live chat** - Tidio, Gorgias chat widgets (normal, bottom placement) * **Social proof** - FOMO notifications, recent sales popups * **Email capture** - Klaviyo, Mailchimp forms (boxed or normal) * **Size guides** - Kiwi Sizing, fit finder apps * **Wishlists** - Wishlist King, Swym (normal layout) ## Related guides <Card title="Custom Liquid" icon="code" href="/themes/release/sections/custom-liquid"> Add custom code and snippets </Card> # Blog Articles Source: https://docs.digifist.com/themes/release/sections/blog-articles Showcase selected blog posts or articles with multiple layouts and flexible metadata options. The Blog Articles section showcases selected blog posts or articles from a Shopify blog. It supports multiple layouts, flexible card settings, and optional metadata such as author, date, and excerpts. Blog articles help drive content engagement by featuring editorial content, company updates, or educational resources directly within your storefront pages. <img alt="Blog Articles section overview" /> ## What this section controls This section controls blog article displays with the following capabilities: * Automatic or manual article selection from Shopify blogs * Multiple layout options for article cards * Customizable metadata display (author, date, excerpt) * Flexible card aspect ratios and spacing * Section-level "View all" button * Desktop and mobile responsive design ## How the Blog Articles section works The Blog Articles section uses a blog-based content system: * Displays articles from a selected Shopify blog * Supports automatic or manual article selection * Articles are shown as cards with optional metadata * Layout and spacing can be customized * Fully responsive across desktop and mobile ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Blog Articles section"> Add the Blog Articles section to your page or template. </Step> <Step title="Select blog source"> Choose which Shopify blog to pull articles from. </Step> <Step title="Configure layout"> Adjust layout, metadata visibility, and card settings. </Step> </Steps> <img alt="Blog Articles section in Theme Customizer" /> ## Section settings Section settings control the overall structure, content source, and visual layout. <Tabs> <Tab title="Content"> ### Heading Main title of the section. * Rich text supported (bold, italic, underline, links) ### Heading size Controls the size of the heading. **Available options:** S, M, L, XL ### Blog Selects which Shopify blog the articles are pulled from. * Shopify blog selector <Note> If manual article blocks are added, they will override the automatic blog selection order. </Note> ### Button label Text displayed for the section-level action button (for example, "View all articles"). * Text input * Leave empty to hide the button <img alt="Content configuration settings" /> </Tab> <Tab title="Layout settings"> ### Layout Defines the overall card layout style. **Available options:** Layout 1, Layout 2 <img alt="Layout style options" /> ### Card media ratio Controls the aspect ratio of article images. **Available options:** 1:1, 2:3, 3:2, 3:4, 4:3 ### Show excerpt Toggles the article excerpt visibility. **Options:** True / False ### Show date Toggles the article publish date visibility. **Options:** True / False ### Show author Toggles the article author visibility. **Options:** True / False ### Show read more Toggles the "Read more" link on article cards. **Options:** True / False <img alt="Metadata visibility settings" /> ### Content alignment Controls horizontal alignment of text content inside article cards. **Available options:** Start, Center, End ### Button style Defines the visual style of buttons within the section. **Available options:** Filled, Outlined, Text ### Inner spacing Controls spacing inside each article card. **Available options:** No, S, M, L, XL <img alt="Card styling options" /> </Tab> </Tabs> ## Block settings Block settings allow manual article selection. Article blocks override automatic blog ordering. <Tabs> <Tab title="Article block"> ### Article Selects a specific Shopify article to display. * Shopify article selector * Overrides automatic blog ordering <img alt="Manual article selection" /> </Tab> </Tabs> ## Best practices * Use manual article blocks to highlight key content or featured posts * Keep excerpts enabled for editorial or storytelling layouts to provide context * Hide author or date for more minimal designs focused on visual impact * Ensure consistent image aspect ratios across articles for visual harmony * Limit visible metadata to improve readability and reduce visual clutter * Use "View all" button to drive traffic to your main blog page * Test different layouts to see which works best for your content style * Consider card spacing based on the amount of metadata shown * Update featured articles regularly to keep content fresh ## Common use cases * **Blog previews on homepage** - Showcase latest articles to drive content discovery * **Editorial storytelling sections** - Highlight long-form content and brand narratives * **Content marketing highlights** - Feature educational or promotional articles * **Brand updates or announcements** - Share company news and product launches * **SEO-focused article promotion** - Drive traffic to high-value blog content ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Callout Banner Source: https://docs.digifist.com/themes/release/sections/callout-banner Highlight important messages, campaigns, or time-sensitive announcements with images and countdown timers. The Callout Banner section highlights important messages, campaigns, or time-sensitive announcements. It supports images, text content, call-to-action elements, and an optional countdown timer. Callout banners help create urgency and draw attention to promotional campaigns, product launches, or limited-time offers through flexible layout options and integrated countdown functionality. <img alt="Callout Banner section overview" /> ## What this section controls This section controls callout banner displays with the following capabilities: * Horizontal or vertical layout arrangements * Flexible media positioning (start, end, or full background) * Button or newsletter signup action types * Optional countdown timer with customizable display * Desktop and mobile-specific image support ## How the Callout Banner works The Callout Banner uses a flexible content system: * The section can be displayed horizontally or vertically * Media placement adapts based on the selected layout * Content can trigger either a button action or a newsletter signup * An optional countdown timer can be used to create urgency ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Callout Banner section"> Add the Callout Banner section to your page or template. </Step> <Step title="Configure layout"> Select section layout and media positioning. </Step> <Step title="Add content"> Add heading, text, and configure button or newsletter action. </Step> </Steps> <img alt="Callout Banner section in Theme Customizer" /> ## Section settings Section settings control the overall layout, media behavior, and content structure. <Tabs> <Tab title="Layout"> ### Section layout Controls how the banner content is arranged. **Available options:** * **Horizontal:** Content and media are arranged side by side * **Vertical:** Content and media are stacked vertically <img alt="Section layout options" /> ### Image Main image displayed in the banner. Uses Shopify's image selector. ### Mobile image Image used on mobile devices. <Note> If a mobile image is set, it will be used on mobile instead of the main image. </Note> ### Media position Controls how the image is positioned within the section. **Available options:** * **Start:** Media appears at the start of the section * Left side in horizontal layout * Top area in vertical layout * **End:** Media appears at the end of the section * Right side in horizontal layout * Bottom area in vertical layout * **Full:** Media fills the entire section and behaves like a background <Note> Media positioning adapts automatically based on the selected section layout. </Note> <img alt="Media position options" /> </Tab> <Tab title="Content"> ### Subheading Secondary text displayed above or below the main heading. * Supports bold, italic, and links ### Heading Main heading text. * Supports bold, italic, and links ### Heading size Controls the size of the heading. **Available options:** S, M, L, XL ### Text Supporting content displayed below the heading. Uses a rich text editor. </Tab> <Tab title="Action"> ### Action preference Defines the primary interaction type for the banner. **Available options:** * **Button:** Displays a call-to-action button * **Newsletter:** Displays a newsletter signup form <img alt="Action preference settings" /> ### Button label Defines the button text. <Note> Leave empty to hide the button. </Note> ### Button link Destination URL for the button. ### Newsletter button Controls the submit button label for the newsletter form. **Example:** `Subscribe`, `Submit`, `Join now` ### Button style Controls the visual style of the action button. **Available options:** Filled, Outlined, Default </Tab> <Tab title="Timer"> The timer is used to display a countdown for campaigns or events. ### Show timer Enables or disables the countdown timer. **Options:** True / False ### Timer layout Controls the visual layout of the timer. **Available options:** Layout 1, Layout 2 ### Timer size Controls the size of the timer display. **Available options:** S, M, L, XL ### Timer end date Defines when the timer ends. * **Year:** Manual number input * **Month:** Select input with all months * **Day:** Range 1 – 31 * **Hour:** Range 0 – 23 * **Minute:** Range 0 – 59 ### Timer end message Message displayed when the countdown reaches zero. * Supports bold, italic, and links <img alt="Countdown timer configuration" /> ## Parts display settings These settings control which time units are shown in the timer. ### Show day part Displays days in the timer. **Options:** True / False ### Show hour part Displays hours in the timer. **Options:** True / False ### Show minute part Displays minutes in the timer. **Options:** True / False ### Show second part Displays seconds in the timer. **Options:** True / False <img alt="Timer parts display settings" /> </Tab> </Tabs> ## Best practices * Use **Full** media position for strong visual impact and immersive experiences * Prefer Horizontal layout for promotional banners to maximize screen real estate * Use Vertical layout for stacked or mobile-focused designs for better readability * Always test contrast when using full-background images to ensure text visibility * Keep timer durations clear and intentional to create genuine urgency * Choose between button and newsletter actions based on campaign goals * Test mobile image separately to ensure optimal display on smaller screens * Consider disabling timer parts (like seconds) for cleaner, less distracting displays ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Carousel Source: https://docs.digifist.com/themes/release/sections/carousel Display multiple content cards in a sliding carousel format with customizable media, text, and navigation options. The Carousel section displays multiple content cards in a sliding carousel format. It supports images, videos, text content, and call-to-action buttons in a customizable slideshow layout. Carousel sections are ideal for showcasing multiple pieces of content in a compact, interactive format that encourages user engagement through browsing and exploration. <img alt="Carousel section overview" /> ## What this section controls This section controls carousel displays with the following capabilities: * Unlimited customizable card blocks * Image, video, or external video support per card * Desktop and mobile-specific media options * Configurable slides per view (1-6) * Automatic or manual slide navigation * Flexible content positioning and alignment * Section-level and card-level buttons ## How the Carousel section works The Carousel section uses a block-based system: * Displays content cards as individual carousel slides * Supports unlimited card blocks * Each card can contain media (images/videos), heading, text, and button * Desktop and mobile-specific media and positioning options * Automatic or manual slide navigation * Fully customizable slides per view and spacing ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Carousel section"> Add the Carousel section to your page or template. </Step> <Step title="Add card blocks"> Click **Add Card** to create carousel slides. </Step> <Step title="Configure content"> Add media, heading, text, and optional button for each card. </Step> </Steps> <img alt="Carousel section in Theme Customizer" /> ## Section settings Section settings control slideshow behavior, section styling, and overall layout. <Tabs> <Tab title="Slideshow"> ### Show navigation arrows Displays previous/next navigation arrows. **Options:** True / False **Default:** True ### Slideshow autoplay interval Controls automatic slide advancement. **Range:** 0 – 10 seconds * Set to `0` to disable autoplay * Default: 0 seconds <img alt="Slideshow configuration" /> ### Slides per view Number of slides visible at once on desktop. **Range:** 1 – 6 slides **Default:** 4 <img alt="Slides per view setting" /> </Tab> <Tab title="Section styling"> ### Layout Controls the visual style of the carousel. **Available options:** * **Layout 1:** Standard carousel layout * **Layout 2:** Alternative carousel layout **Default:** Layout 1 ### Section heading Main title text for the section. * Inline rich text supported (bold, italic, links) * **Default:** "Carousel" ### Heading size Controls the size of section heading. **Available options:** XS, S, M, L, XL **Default:** L ### Subheading Optional descriptive text above the heading. * Inline rich text supported <img alt="Section heading configuration" /> ### Button label Text for optional section-level button. * Leave empty to hide * **Default:** "View all" ### Button link Destination URL for section button. * Shopify URL selector ### Button style Visual style for section button. **Available options:** * **Filled:** Solid background * **Outlined:** Border only * **Text:** Text only **Default:** Filled </Tab> <Tab title="Settings"> ### Section width Controls the maximum width of the carousel. **Available options:** * **Page:** Standard page width * **Fluid:** Wider than page width **Default:** Page ### Color scheme Controls background and text colors for the section container. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Controls spacing above the section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Controls spacing below the section. **Available options:** None, S, M, L, XL **Default:** M <img alt="Section width and spacing settings" /> </Tab> </Tabs> ## Block settings Block settings control individual carousel cards. Each block represents a single slide. <Tabs> <Tab title="Card content"> ### Heading Main title text for the card. * Inline rich text supported (bold, italic, links) ### Heading size Controls the size of card heading. **Available options:** XS, S, M, L, XL **Default:** L ### Text Descriptive text content for the card. * Rich text supported <img alt="Card content configuration" /> ### Button label Text for optional card button. * Leave empty to hide ### Button link Destination URL for card button. * Shopify URL selector ### Button style Visual style for card button. **Available options:** * **Filled:** Solid background * **Outlined:** Border only * **Text:** Text only **Default:** Filled </Tab> <Tab title="Card styling"> ### Aspect ratio Controls the aspect ratio for the card. **Available options:** Auto, 1:1, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2 **Default:** Auto <Tip> Sets the aspect ratio for the card when the media position is 'background', and for the media itself when the media position is 'top' or 'bottom'. </Tip> ### Color scheme Controls background and text colors for the card. * Shopify color scheme selector * **Default:** Scheme 5 ### Media position Controls where media appears relative to content. **Available options:** * **Top:** Media above content * **Bottom:** Media below content * **Background:** Media as background **Default:** Background <img alt="Card styling options" /> ### Spacing inner Controls padding inside the card. **Available options:** None, S, M, L, XL **Default:** M </Tab> <Tab title="Desktop media"> ### Content position Controls vertical alignment of content on desktop. **Available options:** Start, Center, End **Default:** Center ### Content alignment Controls horizontal alignment of content on desktop. **Available options:** Start, Center, End **Default:** Center <img alt="Desktop content positioning" /> ### Image Upload an image for the card on desktop. * Shopify image picker ### Video Upload a video file for the card on desktop. * Shopify video selector <Note> Video replaces image when set. </Note> ### Video external Embed YouTube or Vimeo video on desktop. * YouTube and Vimeo supported <Warning> External video takes priority over uploaded video. </Warning> ### Show controls on video Displays video player controls on desktop. **Options:** True / False **Default:** False </Tab> <Tab title="Mobile media"> <Note> Optional mobile-specific media. If not set, desktop media will be used. </Note> ### Content position Controls vertical alignment of content on mobile. **Available options:** Start, Center, End **Default:** Center ### Content alignment Controls horizontal alignment of content on mobile. **Available options:** Start, Center, End **Default:** Center ### Image Upload an image for the card on mobile. * Shopify image picker ### Video Upload a video file for the card on mobile. * Shopify video selector ### Video external Embed YouTube or Vimeo video on mobile. * YouTube and Vimeo supported ### Show controls on video Displays video player controls on mobile. **Options:** True / False **Default:** False <img alt="Mobile media configuration" /> </Tab> </Tabs> ## Best practices * Keep card headings concise and impactful (3-6 words) for quick scanning * Use consistent aspect ratios across all cards for visual harmony * Limit slides per view to 3-4 for optimal readability on most screens * Enable autoplay sparingly - consider user experience and accessibility * Provide mobile-optimized media for better performance and composition * Use background media position for hero-style cards with overlay content * Test navigation arrows visibility against background colors * Order cards by priority or narrative flow * Use section button for "View all" or collection links * Consider setting autoplay to 0 for content-heavy cards requiring reading time ## Common use cases * **Product collections showcase** - Display featured products or new arrivals in a browsable format * **Promotional banners** - Highlight multiple offers or campaigns in a single section * **Category navigation** - Guide users to different product categories with visual cards * **Brand storytelling** - Share brand values, features, or benefits across multiple slides * **Customer testimonials** - Showcase reviews or customer stories with images * **Content marketing** - Display blog posts, guides, or resources in a carousel format ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Cart Drawer Source: https://docs.digifist.com/themes/release/sections/cart-drawer Configure the slide-out cart drawer that displays cart contents when customers add products. The Cart Drawer section controls the slide-out drawer that appears when customers add items to their cart or click the cart icon. It provides a quick view of cart contents without leaving the current page. <img alt="Cart drawer overview" /> ## What this section controls * Product card display in cart drawer * Product image aspect ratios * Empty cart messaging and CTA * Information bar blocks for promotional messages * Cart totals and checkout button ## Section settings <Tabs> <Tab title="Product Cards"> ### Card media aspect ratio Controls the aspect ratio of product images displayed in the cart drawer. **Available options:** * **1:1** - Square images * **3:4** - Portrait format * **5:6** - Tall portrait **Default:** 3:4 <Tip> Portrait aspect ratios (3:4) work best for apparel and accessories, while square (1:1) suits lifestyle products. </Tip> <img alt="Product card aspect ratio settings" /> </Tab> <Tab title="Empty Cart"> ### Button URL Destination link for the "Continue Shopping" button displayed when cart is empty. * **Default:** `/collections` <Note> Empty cart title and description text can be customized in theme locales under the cart section. </Note> <img alt="Empty cart settings" /> </Tab> </Tabs> ## Block settings ### Information Bar Add promotional messages or important information displayed within the cart drawer. **Icon** - Icon name from theme icon library * **Default:** "theme-box" **Custom icon** - Upload a custom icon image * Overrides the icon setting when provided **Title** - Information message text * **Default:** "Information title goes here" <Tip> Use information bars to display free shipping thresholds, delivery timeframes, or return policy highlights. </Tip> <img alt="Information bar block" /> ## Best practices * Use 3:4 aspect ratio for apparel stores to show product details clearly * Add information bars for free shipping thresholds to encourage larger orders * Keep information bar messages concise - under 50 characters for mobile readability * Set button URL to your primary collection or homepage for empty carts * Test drawer functionality on mobile devices for smooth user experience * Limit information bars to 2-3 items to avoid clutter * Use icons that match your messaging (e.g., truck icon for shipping) ## Common use cases * **Free shipping threshold** - "Spend \$25 more for free shipping!" * **Delivery information** - "Orders ship within 24 hours" * **Return policy** - "Free returns within 30 days" * **Secure checkout** - "Secure SSL encrypted checkout" * **Limited stock** - "Low stock items in your cart" * **Discounts** - "Add \$50 more to unlock 10% off" ## Related guides <Card title="Cart Settings" icon="cart-shopping" href="/themes/release/theme-settings/cart"> Configure cart behavior and features </Card> <Card title="Cart Page" icon="bag-shopping" href="/themes/release/cart"> Customize the full cart page </Card> <Card title="Cart Page" icon="bag-shopping" href="/themes/release/cart"> Learn about the full cart page </Card> # Compare Slider Source: https://docs.digifist.com/themes/release/sections/compare-slider Allow customers to visually compare two images using an interactive slider for before/after showcases. The Compare Slider section allows customers to visually compare two images using an interactive slider. It is commonly used to showcase before/after results, transformations, or product differences. Compare sliders help demonstrate product effectiveness, quality improvements, or visual transformations through direct visual comparison, making them ideal for beauty, home improvement, and transformation-focused content. <img alt="Compare Slider section overview" /> ## What this section controls This section controls interactive image comparison with the following capabilities: * Side-by-side image comparison with draggable slider * Before and after image blocks * Customizable labels and color schemes * Full or constrained width layouts * Multiple aspect ratio options ## How the Compare Slider works The Compare Slider uses a block-based system: * Displays two images stacked horizontally * Users can drag the slider to compare images * Supports up to two image blocks (Before / After) * Works best with images that share the same dimensions and perspective ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Compare Slider section"> Add the Compare Slider section to your page or template. </Step> <Step title="Add image blocks"> Click **Add block** to add both "Image before" and "Image after" blocks. </Step> <Step title="Configure images"> Upload images and configure labels and settings. </Step> </Steps> <img alt="Compare Slider section in Theme Customizer" /> ## Section settings Section settings control layout, text content, button behavior, and image proportions. <Tabs> <Tab title="Layout & content"> ### Section layout Controls the overall width of the section. **Available options:** * **Full:** Section spans the full width of the page * **Shrink:** Section is constrained to the content width <img alt="Section layout options" /> ### Heading Main title of the section. * Supports bold, italic, underline, and links ### Heading size Controls the size of the heading text. **Available options:** S, M, L, XL ### Text Additional descriptive content displayed under the heading. * Rich text support (paragraphs, formatting, links) ### Button label Defines the section action button text. <Note> Leave empty to hide the button. </Note> ### Button link URL for the action button. ### Button style Controls the appearance of the button. **Available options:** Filled, Outlined, Text </Tab> <Tab title="Media settings"> ### Media aspect ratio Controls the aspect ratio of the compared images. **Available options:** 1:1, 2:3, 3:4, 4:5, 9:16 <Tip> For the best comparison experience, both images should share the same aspect ratio and visual framing. </Tip> <img alt="Media aspect ratio options" /> </Tab> </Tabs> ## Block settings Block settings control individual image blocks. The Compare Slider supports a maximum of **two blocks**. <Warning> Both "Image before" and "Image after" blocks are required together for the slider to function correctly. If only one image block is added, the compare slider will not function as intended. </Warning> ### Available block types * Image before * Image after Both block types share the same settings. <img alt="Available block types" /> <Tabs> <Tab title="Image"> ### Image Select an image using Shopify's image selector. <Tip> **Recommended:** * Same resolution * Same subject framing * Same lighting conditions This ensures smooth and accurate comparison. </Tip> <img alt="Image selection for comparison" /> </Tab> <Tab title="Label"> ### Label Text displayed on the image to indicate its state. **Examples:** Before, After, Original, Edited ### Color scheme for label Select a Shopify color scheme for the label background and text. <Tip> Use high-contrast color schemes to keep labels readable over images. </Tip> <img alt="Label configuration and color scheme" /> </Tab> </Tabs> ## Best practices * Always use **exactly two blocks** (Before & After) for proper functionality * Keep images aligned and visually consistent with matching dimensions and framing * Avoid heavy text inside images to maintain focus on the comparison * Use concise labels for clarity (single words like "Before" and "After") * Choose aspect ratios that match your media orientation (portrait vs square) * Ensure both images have similar lighting and perspective for accurate comparison * Test the slider interaction on mobile devices to ensure smooth dragging * Use high-quality images that maintain clarity when scaled ## Common use cases * **Before / after product results** - Show product effectiveness (skincare, cleaning products) * **Image retouching comparisons** - Demonstrate editing or enhancement services * **Design transformations** - Showcase interior design, renovation, or styling changes * **Feature highlights** - Compare product features or different versions ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Complete the Set Source: https://docs.digifist.com/themes/release/sections/complete-the-set Display product information with collapsible content blocks and optional complementary products or featured image. The Complete the Set section combines product information with complementary product recommendations or featured imagery. It includes collapsible content blocks (description, shipping info, etc.) alongside optional product recommendations or a featured image. This section is exclusive to product page templates and helps cross-sell related products while organizing product information efficiently. <img alt="Complete the set section overview" /> ## What this section controls * Collapsible content blocks (description, shipping, etc.) * Complementary product recommendations from Shopify Search & Discovery * Optional featured image display * Drawer or collapsible block types * Link to page blocks * Desktop and mobile layout flip options ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer on a product page. </Step> <Step title="Add Complete the Set section"> Add the section to your product template. </Step> <Step title="Choose content type"> Select complementary products, featured image, or none. </Step> <Step title="Add content blocks"> Add collapsible blocks for description, shipping, care instructions, etc. </Step> </Steps> <img alt="Complete the set in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Content"> ### Heading Main section heading. * Inline rich text * **Default:** "More info" ### Content heading Heading for the complementary products or featured image area. * Inline rich text * **Default:** "Similar items" ### Heading size Controls size of both headings. **Available options:** XS, S, M, L, XL **Default:** L ### Content type Controls what appears alongside collapsible content. **Available options:** * **None:** Only collapsible blocks * **Featured image:** Display a custom image * **Complementary products:** Show product recommendations **Default:** Complementary products <Note> Complementary products are customizable through the Shopify Search & Discovery app. [Learn more](https://help.shopify.com/en/manual/online-store/search-and-discovery/product-recommendations) </Note> ### Featured image Image to display when content type is "Featured image". * Shopify image picker ### Featured image aspect ratio Controls aspect ratio of featured image. **Available options:** Auto, 1:1, 3:4, 4:3, 16:9 **Default:** 4:3 ### Set first collapsible item opened Opens the first collapsible block by default. **Default:** True <Warning> Only works if the first block type is set to 'Collapsible' (not Drawer or Link). </Warning> <img alt="Content settings" /> </Tab> <Tab title="Layout"> ### Flip left and right side Swaps position of collapsible content and complementary content on desktop. **Default:** True ### Flip top and bottom content positions on mobile Reverses content order on mobile devices. **Default:** True <Tip> Use layout flips to prioritize different content on desktop vs mobile. </Tip> <img alt="Layout settings" /> </Tab> <Tab title="Settings"> ### Section width Maximum width of section container. **Available options:** Narrow, Page, Fluid **Default:** Page ### Color scheme Background and text colors. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Space above section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Space below section. **Available options:** None, S, M, L, XL **Default:** M <img alt="Section settings" /> </Tab> </Tabs> ## Block settings ### Collapsible Block <Tabs> <Tab title="Type & Content"> ### Type Controls how the content is displayed. **Available options:** * **Collapsible:** Expands/collapses inline * **Drawer:** Opens in a slide-out drawer * **Link to page:** Links to another page **Default:** Collapsible ### Heading Title for the collapsible item. * Inline rich text * **Default:** "Content" ### Link URL for link type blocks. * Shopify URL selector ### Content Rich text content for the block. * Rich text editor * Use `[description]` to show product description dynamically <Tip> Use `[description]` placeholder to automatically display the product's description. </Tip> ### Page Link to a specific page for content. * Shopify page picker <Note> If page is selected, the content setting will be ignored. </Note> <img alt="Block settings" /> </Tab> </Tabs> ## Best practices * Use "Complementary products" content type to increase average order value * Set first collapsible (product description) to open by default for better UX * Use drawer type for lengthy content like shipping policies or size guides * Use collapsible type for quick-scan information like materials or care instructions * Place most important information (description) as first block * Use `[description]` placeholder to keep product info synchronized * Consider flipping mobile layout to prioritize product recommendations on smaller screens * Link to dedicated pages for detailed policies rather than including lengthy text * Keep collapsible headings concise (2-4 words) for better mobile experience * Use featured image option to showcase product lifestyle or detail shots ## Common use cases * **Product details organization** - Organize description, specs, shipping in collapsibles * **Cross-selling** - Display complementary products to increase cart value * **Size guides** - Use drawer type for detailed sizing information * **Shipping policies** - Link to shipping policy page or include brief details * **Care instructions** - Collapsible block for product care and maintenance * **Warranty information** - Drawer for detailed warranty terms * **Material details** - Collapsible for fabric composition or materials * **Brand story** - Featured image option with brand imagery ## Related guides <Card title="Product Page" icon="box" href="/themes/release/products/product-page"> Learn more about product page customization </Card> <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Custom Liquid Source: https://docs.digifist.com/themes/release/sections/custom-liquid Add custom Liquid code snippets for advanced customizations and app integrations. The Custom Liquid section allows you to add custom Liquid code, app snippets, or advanced customizations directly into your theme. This section provides developers and advanced users the flexibility to extend theme functionality. <img alt="Custom liquid section overview" /> ## What this section controls * Custom Liquid code editor * Section width and container options * Color scheme selection * Vertical spacing control * Direct HTML/Liquid output ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Custom Liquid section"> Add the section where you need custom code. </Step> <Step title="Write Liquid code"> Enter your custom Liquid, HTML, or app snippet code. </Step> <Step title="Configure container"> Set section width, color scheme, and spacing. </Step> </Steps> <img alt="Custom liquid in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Code"> ### Liquid Custom Liquid code editor. * Full Liquid syntax support * HTML allowed * App snippet integration <Note> Add app snippets or other Liquid code to create advanced customizations. </Note> <Warning> Invalid Liquid code can break your theme. Always test in a duplicate theme first. </Warning> <img alt="Liquid code editor" /> </Tab> <Tab title="Settings"> ### Section width Maximum width of content container. **Available options:** * **Page:** Standard page width * **Narrower:** Narrower than page * **Fluid:** Wider than page * **Full:** Full viewport width **Default:** Page ### Color scheme Background and text colors for the section. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Space above section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Space below section. **Available options:** None, S, M, L, XL **Default:** M <img alt="Section settings" /> </Tab> </Tabs> ## Best practices * Always test custom Liquid code in a duplicate theme before applying to live store * Use proper Liquid syntax and validate code before publishing * Comment your code for future reference and maintainability * Keep code organized and indented for readability * Test on multiple devices and browsers after adding custom code * Use section width "Full" when creating full-width custom layouts * Avoid complex logic that could slow down page load times * Follow Shopify's Liquid best practices and coding standards * Use app snippets from trusted Shopify apps only * Document what custom code does for future maintenance ## Common use cases * **App integrations** - Add third-party app widgets and functionality * **Custom HTML widgets** - Insert custom HTML elements not available in theme * **Advanced product displays** - Create custom product layouts with Liquid * **Custom forms** - Build specialized contact or registration forms * **External embeds** - Integrate external services and tools * **Custom data display** - Show metafields or custom product data * **Analytics tracking** - Add custom tracking scripts (use responsibly) * **A/B testing** - Implement custom A/B testing code ## Liquid resources <CardGroup> <Card title="Shopify Liquid Reference" icon="book" href="https://shopify.dev/docs/api/liquid"> Official Liquid documentation </Card> <Card title="Theme Development" icon="code" href="https://shopify.dev/docs/themes"> Shopify theme development docs </Card> </CardGroup> ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Dual Content Tiles Source: https://docs.digifist.com/themes/release/sections/dual-content-tiles Display two side-by-side content tiles with text, buttons, media, and optional product cards. The Dual Content Tiles section displays two side-by-side content tiles. Each tile can contain text, buttons, media, and optionally a product card. This section is ideal for highlighting two related stories, campaigns, or product-focused content areas. Dual content tiles help create balanced, visually engaging layouts that can showcase complementary products, seasonal campaigns, or editorial content in a structured format. <img alt="Dual Content Tiles section overview" /> ## What this section controls This section controls dual-tile layouts with the following capabilities: * Two side-by-side content areas with independent configuration * Flexible tile sizing and spacing options * Desktop and mobile-specific media and positioning * Optional product card integration within tiles * Rich text content with buttons and media support ## How the Dual Content Tiles section works The Dual Content Tiles section uses a block-based system: * The section supports a maximum of **2 tiles** * Each tile is added as a block * Tile sizes and alignment are controlled at the section level * Content, media, and product behavior are controlled at the block level ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Dual Content Tiles section"> Add the Dual Content Tiles section to your page or template. </Step> <Step title="Add tiles"> Click **Add Tile** to create content blocks (maximum 2 tiles). </Step> <Step title="Configure settings"> Adjust section and tile settings according to your needs. </Step> </Steps> <img alt="Dual Content Tiles section in Theme Customizer" /> ## Section settings Section settings control the overall layout and behavior of both tiles. <Tabs> <Tab title="Layout"> ### Section layout Controls the spacing between the two tiles. **Available options:** * **Normal:** Tiles are visually separated * **Compact:** Tiles are displayed without spacing and appear attached ### First block size Controls the width and height of the **first tile**. The second tile is automatically adjusted based on this selection. **Available options:** Full, Half, Large, Small <img alt="Section layout and block size options" /> ### Swap order for mobile Reverses the tile order on mobile devices. **Options:** True / False </Tab> <Tab title="Heading"> ### Heading Section-level heading displayed above the tiles. * Supports rich text * Allows bold, italic, underline, and links ### Heading size Controls the size of the section heading. **Available options:** XS, S, M, L, XL ### Heading alignment Controls horizontal alignment of the section heading. **Available options:** Start, Center, End </Tab> </Tabs> ## Block settings Block settings configure each tile independently. Each tile represents a unique content area with its own media, text, and optional product. <Tabs> <Tab title="Visibility"> ### Show on Controls which devices the tile is visible on. **Available options:** Desktop, Mobile, Both <img alt="Tile visibility settings" /> </Tab> <Tab title="Background"> ### Color scheme Controls background and text colors using Shopify's color scheme system. ### Custom background color Allows selecting a custom background using a gradient color picker. </Tab> <Tab title="Content"> ### Heading Tile heading text. * Supports rich text * Allows bold, italic, underline, and links ### Heading size Controls the size of the tile heading. **Available options:** XS, S, M, L, XL ### Text Main text content of the tile. * Supports multiple text elements (paragraphs, H1–H4) * Allows bold, italic, and links ## Button ### Button label Defines the button label. <Note> Leave empty to hide the button. </Note> ### Button link Destination URL for the button. ### Button style Controls the visual style of the button. **Available options:** Filled, Outlined, Text </Tab> <Tab title="Product"> Tiles can optionally display a product card. ### Product Select a Shopify product. When a product is selected, a product card is displayed inside the tile. <Tip> When using a product, it is recommended to also include an image or video for better visual balance. </Tip> ### Product width Controls the width of the product card inside the tile. **Range:** 16rem – 60rem <Warning> Increasing product width may increase tile height to preserve the product's aspect ratio. </Warning> ### Show other elements with product on mobile Controls whether non-product content is displayed on mobile. * **Enabled:** Heading, text, and buttons are hidden on mobile * **Disabled:** All content remains visible **Options:** True / False <img alt="Product integration settings" /> </Tab> <Tab title="Desktop media"> ### Tile aspect ratio Controls the aspect ratio of images and videos. <Tip> **Auto** is recommended when tiles contain long text. </Tip> **Available options:** Auto, Square, Portrait, Landscape Each group includes multiple ratio presets. ### Vertical position Controls how the tile stretches vertically. **Available options:** Stretch, Start, Center, End ### Content position Controls vertical positioning of content within the tile. **Options:** Top, Center, Bottom ### Content alignment Controls horizontal alignment of content. **Options:** Start, Center, End ### Product position Controls where the product appears relative to other tile content. **Available options:** Before, Between, After <img alt="Desktop layout and positioning settings" /> ### Image Select an image for the tile. ### Video Select a Shopify-hosted video. ### External video Overrides both image and video. <Warning> External videos may negatively impact performance. Shopify-hosted videos are recommended. </Warning> ### Show video controls Shows or hides video playback controls. </Tab> <Tab title="Mobile media"> <Note> If mobile media is set, it will be used on mobile devices instead of the main media. </Note> ### Tile aspect ratio Controls the aspect ratio of mobile images and videos. **Available options:** Auto, Square, Portrait, Landscape ### Content position Controls vertical positioning on mobile. **Options:** Top, Center, Bottom ### Content alignment Controls horizontal alignment on mobile. **Options:** Start, Center, End ### Product position Controls product placement on mobile. **Options:** Before, Between, After ### Mobile image Select an image used only on mobile devices. ### Mobile video Select a video used only on mobile devices. ### Mobile external video Overrides both mobile image and video. <Warning> External videos may negatively impact performance. </Warning> ### Show video controls on mobile Shows or hides video playback controls on mobile. ### Padding Controls internal spacing of the tile on mobile. **Available options:** No, S, M, L, XL <img alt="Mobile-specific media and layout settings" /> </Tab> </Tabs> ## Best practices * Use **Compact layout** for visually continuous designs and seamless transitions * Limit content length when using fixed aspect ratios to prevent layout issues * Be cautious when increasing product width as it may affect tile height * Prefer Shopify-hosted videos over external videos for better performance * Test mobile layouts when using product-only mobile views to ensure content visibility * Ensure tiles have similar content lengths for visual balance * Use high-quality images that maintain clarity at various aspect ratios * Consider color scheme contrast when placing products within tiles ## Related guides <CardGroup> <Card title="Product cards" icon="credit-card" href="/themes/release/theme-settings/cards"> Learn about product card configuration and styling options </Card> <Card title="Theme settings" icon="sliders" href="/themes/release/theme-settings/index"> Understand global theme configuration options </Card> </CardGroup> # Featured Collections Source: https://docs.digifist.com/themes/release/sections/featured-collections Highlight selected collections with multiple layouts, card styles, and slideshow behaviors. The Featured Collections section highlights selected collections in a visually engaging way. It supports multiple layouts, card styles, and slideshow behaviors to fit different merchandising needs. Featured collections help organize products by category or theme, making it easier for customers to discover curated product sets and navigate your catalog effectively. <img alt="Featured Collections section overview" /> ## What this section controls This section controls collection showcase displays with the following capabilities: * Multiple collection card layouts and styles * Carousel behavior with customizable slides per view * Flexible heading and button positioning * Collection, product, or text-based card types * Desktop and mobile-specific slideshow controls ## How the Featured Collections works The Featured Collections uses a block-based system: * Displays selected collections as cards * Supports carousel behavior for better space usage * Card appearance and content vary based on layout and card type * Collections are added as individual slides using blocks ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Featured Collections section"> Add the Featured Collections section to your page or template. </Step> <Step title="Add collection slides"> Click **Add Collection slide** to add collections to showcase. </Step> <Step title="Configure settings"> Adjust layout, card style, and slideshow settings. </Step> </Steps> <img alt="Featured Collections section in Theme Customizer" /> ## Section settings Section settings control layout, heading content, spacing, and slideshow behavior. <Tabs> <Tab title="Layout & content"> ### Layout Determines the positioning of: * Header content * Action button * Navigation arrows **Available options:** Layout 1, Layout 2 <img alt="Layout options comparison" /> ### Heading Main section heading. * Supports bold, italic, underline, and links ### Heading size Controls the size of the heading text. **Available options:** S, M, L, XL ### Subheading Secondary text displayed below the heading. * Supports bold, italic, underline, and links ### Content padding Adds spacing around the content area of the section. **Available options:** No, S, M, L, XL ### Button label Defines the action button text. <Note> Leave empty to hide the button. </Note> ### Button link URL used for the section button. ### Button style Controls the visual appearance of the button. **Available options:** Filled, Outlined, Text </Tab> <Tab title="Collection card settings"> ### Card layout Defines the structure of the collection card. **Available options:** * **Collection:** Displays collection image and title * **Product:** Displays products from the collection * **Text:** Displays text-based cards without product visuals <img alt="Card layout types" /> ### Card style Controls spacing and density of the card. **Available options:** Normal, Compact ### Card aspect ratio Controls image or card proportions. **Available options:** Auto, 1:1, 3:4, 4:5 <Warning> For **Compact** layout, the aspect ratio affects the entire card. For **Normal** layout, it affects only the image. When using **Auto**, ensure all images have similar aspect ratios to maintain visual consistency. </Warning> ### Content alignment Aligns text content inside the card. **Available options:** Start, Center ### Collection title style Controls how the collection title is displayed. **Available options:** Single Text, Text with arrow icon <Note> The **Text with arrow icon** option is only available for **Normal** card style. </Note> ### Collection product count Displays the number of products in the collection. **Available options:** Hide, Show, Show with border <Note> Product count is displayed next to the collection heading. </Note> <img alt="Collection card configuration settings" /> </Tab> <Tab title="Slideshow settings"> Controls carousel behavior when collections are displayed in a slider. ### Slides per view Number of visible slides on desktop. **Range:** 1 – 12 Used only for **Normal** card layout. ### Slides per view for mobile Number of visible slides on mobile devices. **Range:** 1 – 4 Used only for **Normal** card layout. ### Show carousel arrows Displays navigation arrows. **Options:** True / False ### Slideshow center alignment Centers the active slide within the carousel. **Options:** True / False ### Enable slideshow overflow Allows slides to overflow outside the container. **Options:** True / False <Tip> When enabled, partially visible cards appear outside the carousel area. </Tip> ### Slideshow border Adds decorative borders to the slideshow. **Available options:** None, Top, Bottom, Both <img alt="Slideshow configuration options" /> </Tab> </Tabs> ## Block settings Block settings control individual collection slides. Each block represents a single collection card. <Tabs> <Tab title="Collection"> ### Collection Select a collection using Shopify's collection selector. <img alt="Collection selection in block settings" /> </Tab> <Tab title="Image & content"> ### Image Custom image for the collection card. <Note> This image will overwrite the default collection image. </Note> ### Heading Collection title text. * Can be connected to a dynamic source to automatically use the collection title * Supports bold, italic, underline, and links ### Heading size Controls the size of the collection title. **Available options:** XS, S, M, L ### Subheading Additional descriptive text for the collection. * Supports bold, italic, underline, and links </Tab> </Tabs> ## Best practices * Use **Normal card style** for image-heavy collections to showcase visual content * Use **Compact style** for dense layouts with multiple collections to maximize space * Keep aspect ratios consistent when using Auto to maintain visual harmony * Limit slide count to 6-8 for better mobile usability and faster loading * Enable overflow for a modern, editorial look that hints at more content * Use consistent collection images across all cards for professional appearance * Consider card layout based on content type (Collection for images, Product for actual products, Text for category navigation) * Test slideshow navigation on mobile devices to ensure smooth interaction ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Featured Products Source: https://docs.digifist.com/themes/release/sections/featured-products Showcase selected products or collections with multiple layouts, slideshows, and tab-based grouping. The Featured Products section showcases selected products or collections in a visually prominent layout. It supports multiple layouts, slideshows, and tab-based product grouping to display different product sets within a single section. Featured product displays help drive conversions by highlighting curated selections, seasonal collections, or promotional items in an engaging format. <img alt="Featured Products section overview" /> ## What this section controls This section controls product showcase displays with the following capabilities: * Multiple layout options for heading and button positioning * Product carousel with slideshow controls * Tab-based navigation for multiple product groups * Manual or collection-based product selection * Optional promotional card at the end of product list ## How the Featured Products section works The Featured Products section uses a block-based system: * Products are displayed using **Product group** blocks * Each Product group represents one collection or product set * If multiple Product group blocks are added, the section can display **tabs** * Products can be sourced from collections, manual selections, or vendors ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Featured Products section"> Add the Featured Products section to your page or template. </Step> <Step title="Add Product group blocks"> Click **Add Product group** to define product sources. </Step> <Step title="Configure settings"> Adjust section and product group settings according to your needs. </Step> </Steps> <img alt="Featured Products section in Theme Customizer" /> ## Section settings Section settings control the overall structure, layout, and behavior of the Featured Products section. <Tabs> <Tab title="Featured products"> ### Layout Controls the positioning of the heading and action button. Product card layouts remain the same across layouts. **Available options:** * **Layout 1:** Heading aligned to the start, button aligned to the end * **Layout 2:** Heading centered, button displayed centered at the bottom of the section <img alt="Layout options for Featured Products" /> ### Heading Main section heading. * Supports rich text * Allows bold, italic, underline, and links ### Heading size Controls the visual size of the heading. **Available options:** S, M, L, XL ### Subheading Secondary text displayed below the heading. * Supports rich text * Allows bold, italic, underline, and links ### Button label Defines the label of the section-level button. <Note> Leave empty to hide the button. </Note> ### Button link Destination URL for the section button. ### Button style Controls the visual style of the section button. **Available options:** Filled, Outlined, Text </Tab> <Tab title="Slideshow"> ### Number of products for each group Controls how many products are displayed per Product group. **Range:** 4 – 12 products ### Enable slideshow overflow When enabled, the next product partially appears outside the visible area. This creates a visual cue indicating that the carousel can be scrolled. **Options:** True / False ### Show navigation arrows Displays navigation arrows for the product carousel. **Options:** True / False ### Autoplay interval Controls automatic carousel scrolling. **Range:** 0 – 10 seconds * `0` disables autoplay * Any value above `0` enables autoplay <img alt="Slideshow configuration settings" /> </Tab> <Tab title="Tabs"> Tabs allow multiple Product groups to be displayed within a single Featured Products section. <Note> Tabs are only shown when more than one Product group block is active. </Note> ### How tabs work * Each Product group becomes a tab * The first Product group is shown by default * Clicking another tab switches the visible product set * A maximum of **3 Product group blocks** is supported This allows you to showcase different collections or seasons within one section. **Example:** * Summer Season * Winter Season ### Button style Controls the visual style of tab buttons. **Available options:** Filled, Outlined, Text <img alt="Tab configuration settings" /> </Tab> </Tabs> ## Block settings Block settings define the product source and configuration for each Product group. Each Product group represents a unique collection or product set. <Tabs> <Tab title="Product source"> ### Title Defines the tab label when multiple Product groups are used. Plain text only. ### Collection Select a Shopify collection. <Warning> Collection selection overrides manual product selection. </Warning> ### Products Manually select individual products. Used when no collection is selected. ### Vendor Displays products from a specific vendor. * Accepts vendor names as text * Can be connected via metafields ### Collection of products Used together with the **Vendor** option. Enter the handle of a smart collection containing all products. This allows vendor-based filtering to work correctly. ### Show unavailable products Controls whether out-of-stock or unavailable products are displayed. **Options:** True / False <img alt="Product source configuration options" /> </Tab> <Tab title="Featured Products Card Text"> This optional card appears at the **end of the product carousel**. It can be used for promotional messaging or calls to action. ### Heading Card title text. Plain text only. ### Card text button label Label for the card button. ### Button style Controls the visual style of the card button. **Available options:** Filled, Outlined, Text ### Button link Destination URL for the card button. ### Content position Controls vertical alignment of the card content. **Options:** Top, Center, Bottom ### Content alignment Controls horizontal alignment of the card content. **Options:** Start, Center, End <img alt="Featured Products Card Text settings" /> </Tab> </Tabs> ## Best practices * Use collections for easier product management and automatic updates * Limit the number of tabs to 2-3 to maintain clarity and reduce cognitive load * Enable slideshow overflow to hint at more products and encourage interaction * Avoid autoplay for product-heavy sections to allow users to browse at their own pace * Keep card text concise and action-focused for better conversion rates * Test different layouts to find what works best for your store's design * Ensure product images are high-quality and consistent in dimensions ## Related guides <CardGroup> <Card title="Product cards" icon="credit-card" href="/themes/release/theme-settings/cards"> Learn about product card configuration and styling options </Card> <Card title="Theme settings" icon="sliders" href="/themes/release/theme-settings/index"> Understand global theme configuration options </Card> </CardGroup> # Contact Form Source: https://docs.digifist.com/themes/release/sections/form-contact Customizable contact form with flexible field types and customer data binding. The Contact Form template (form-contact) provides a fully customizable contact form with support for various field types, customer data binding, and flexible layout options. <img alt="Contact form overview" /> ## What this section controls * Customizable form fields (text, email, tel, checkbox, radio) * Field layout and column spanning * Customer data binding for logged-in users * Required field validation * Form submission and success messaging ## Section settings <Tabs> <Tab title="Layout"> ### Section width Control the maximum width of the contact form. **Available options:** * **max-w-page** - Standard container * **max-w-narrower** - Narrow focused layout * **max-w-fluid** - Wider container **Default:** max-w-narrower <Tip> Narrower width improves form readability and completion rates by reducing visual noise. </Tip> ### Color scheme Select the color scheme for the form section. * **Default:** scheme-1 ### Spacing top & bottom Adjust padding above and below the form. **Options:** No (0), S (1), M (2), L (4), XL (6) * **Default:** M (2) for both <img alt="Form layout settings" /> </Tab> </Tabs> ## Block settings ### Field Block Add customizable form fields to build your contact form. Each field can span full or half width. <Tabs> <Tab title="Basic Settings"> ### Column factor Control the width of the field. **Available options:** * **Full width** (6) - Spans entire form width * **Half width** (3) - Takes up half the row **Default:** Full width ### Heading (Label) The label text displayed above the field. * **Default:** "Label" * This will be used to generate the field name ### Type Choose the field input type. **Input fields:** * **Text** - Single line text input * **Email** - Email address input * **Tel** - Telephone number input **Selection fields:** * **Checkbox** - Multiple choice checkboxes * **Radio** - Single choice radio buttons **Default:** Text ### Required Mark the field as required for form submission. * **Default:** Disabled <img alt="Basic field settings" /> </Tab> <Tab title="Input Fields"> Available for Text, Email, and Tel field types. ### Placeholder Placeholder text shown when field is empty. * Optional hint text for users ### Binding Bind field to customer data for logged-in users. **Available options:** * **Custom** - No binding * **Email** - Customer email * **Name** - Full name * **First name** - First name only * **Last name** - Last name only * **ID** - Customer ID * **Phone** - Phone number * **Last order** - Last order number **Default:** Custom <Tip> Use email binding for email fields to auto-fill for logged-in customers, improving form completion rates. </Tip> <img alt="Input field settings" /> </Tab> <Tab title="Selection Fields"> Available for Checkbox and Radio field types. ### Checked Set default checked state for checkbox/radio. * **Default:** Unchecked ### Label description Additional descriptive text for the selection field. ### Options 1-4 Define up to 4 options for checkbox or radio selection. * Each option creates a selectable choice * Leave blank to hide option <Note> Checkbox fields allow multiple selections, while radio fields allow only one selection. </Note> <img alt="Selection field options" /> </Tab> </Tabs> ## Best practices * **Form width:** Use max-w-narrower (default) for better readability and completion * **Required fields:** Mark name, email, and message as required minimum * **Half-width fields:** Use for related pairs (first name/last name, city/zip) * **Full-width fields:** Use for message/textarea and single important fields * **Email binding:** Always bind email field to customer email for convenience * **Field order:** Name → Email → Subject/Reason → Message is standard flow * **Placeholder text:** Use to provide format hints ("[john@example.com](mailto:john@example.com)", "+1 (555) 123-4567") * **Checkbox for consent:** Add required checkbox for terms/privacy acceptance * **Radio for categories:** Use for predefined options (inquiry type, department) * **Keep it short:** 4-6 fields maximum for higher completion rates ## Common use cases * **Basic contact** - Name (text, required), Email (email, required, binding: email), Message (text, full-width, required) * **Support inquiry** - Name, Email (binding: email), Order ID (text, binding: last\_order), Issue type (radio: Technical/Billing/General), Description * **Newsletter signup** - Email (email, required, binding: email), Consent checkbox (required, "I agree to receive newsletters") * **Quote request** - First name + Last name (half-width), Email, Phone (tel, binding: phone), Service type (checkbox), Budget range (radio), Details * **Partnership inquiry** - Company name, Contact name, Email, Phone, Partnership type (radio), Message * **Product inquiry** - Name, Email, Product interest (radio), Quantity needed, Additional information ## Related guides <Card title="Newsletter Popup" icon="envelope" href="/themes/release/sections/newsletter-popup"> Configure newsletter signup popup </Card> <Card title="Page Settings" icon="file" href="/themes/release/page"> Create custom pages for forms </Card> # Full Width Banner Source: https://docs.digifist.com/themes/release/sections/full-width-banner Create immersive, edge-to-edge banners with flexible block-based content system. The Full Width Banner section creates immersive, edge-to-edge banners using a flexible, block-based content system. Content inside the banner is built using individual blocks, allowing precise control over structure, hierarchy, and visibility. Full width banners help create impactful visual experiences by spanning the entire viewport width and offering flexible media positioning options with granular content control. <img alt="Full Width Banner section overview" /> ## What this section controls This section controls full-width banner displays with the following capabilities: * Edge-to-edge banners spanning the full viewport width * Flexible media positioning (top, bottom, or background) * Block-based content structure for precise control * Desktop and mobile-specific layouts and media * Transparent header integration when placed first on page ## How the Full Width Banner works The Full Width Banner uses a block-based content system: * The section spans the full width of the viewport * Media can be positioned above, below, or behind the content * Content is built using **blocks** instead of fixed text fields * Desktop and mobile layouts can be configured independently * When placed at the top of the page, the banner can enable a transparent header ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Full Width Banner section"> Add the Full Width Banner section to your page or template. </Step> <Step title="Add content blocks"> Click **Add block** to create heading, subheading, text, or button blocks. </Step> <Step title="Configure settings"> Adjust section settings and media positioning according to your needs. </Step> </Steps> <img alt="Full Width Banner section in Theme Customizer" /> ## Section settings Section settings control the overall layout and media behavior of the banner. <Tabs> <Tab title="Header integration"> ### Enable transparent header When enabled, the header becomes transparent **only if this section is the first section on the page**. This allows the banner media to appear behind the header. <Warning> This setting only works when the section is placed first. Ensure sufficient contrast between the banner media and header navigation. </Warning> <img alt="Enable transparent header setting" /> </Tab> <Tab title="Media position"> ### Media position Controls where the media appears relative to the content. **Available options:** * **Top:** Media appears above the content * **Bottom:** Media appears below the content * **Background:** Media appears behind the content <img alt="Media position options" /> </Tab> <Tab title="Desktop settings"> ### Section height Controls the height of the banner. **Available options:** * **Auto:** Height is determined by content * **Third:** One-third of the viewport height * **Half:** Half of the viewport height * **Full:** Full viewport height ### Vertical position Controls how the banner content stretches vertically. **Available options:** Stretch, Start, Center, End ### Content position Controls vertical positioning of content. **Options:** Top, Center, Bottom ### Content alignment Controls horizontal alignment of content. **Options:** Start, Center, End <img alt="Desktop layout and positioning settings" /> ### Image Select an image for desktop devices. ### Video Select a Shopify-hosted video. ### External video Overrides both image and video. <Warning> External videos may negatively impact performance. Shopify-hosted videos are recommended. </Warning> ### Show video controls Shows or hides video playback controls. **Options:** True / False ### Tile aspect ratio Controls the aspect ratio of images and videos. <Tip> **Auto** is recommended when the banner contains long text. </Tip> **Available options:** Auto, Square, Portrait, Landscape Each group includes multiple ratio presets. </Tab> <Tab title="Mobile settings"> <Note> Mobile settings override desktop layout and media when defined. </Note> ### Section height for mobile Controls the banner height on mobile devices. **Available options:** * **Auto:** Height is determined by content * **Third:** One-third of the viewport height * **Half:** Half of the viewport height * **Full:** Full viewport height ### Vertical position Controls vertical behavior on mobile. **Options:** Stretch, Start, Center, End ### Content position Controls vertical positioning on mobile. **Options:** Top, Center, Bottom ### Content alignment Controls horizontal alignment on mobile. **Options:** Start, Center, End ### Image Select an image used on mobile devices. ### Video Select a video used on mobile devices. ### External video Overrides both image and video on mobile. <Warning> External videos may negatively impact performance. </Warning> ### Show video controls on mobile Shows or hides video playback controls on mobile. **Options:** True / False ### Tile aspect ratio Controls the aspect ratio of mobile images and videos. **Available options:** Auto, Square, Portrait, Landscape <img alt="Mobile-specific layout and media settings" /> </Tab> </Tabs> ## Content blocks Content inside the Full Width Banner is built using blocks. Blocks can be reordered and selectively enabled per device. <AccordionGroup> <Accordion title="Heading block" icon="heading"> Used to display a main heading inside the banner. ### Heading Main heading text. * Supports bold, italic, underline, and links ### Heading size Controls the size of the heading. **Available options:** XS, S, M, L, XL </Accordion> <Accordion title="Subheading block" icon="text"> Used for secondary text below the main heading. ### Subheading Subheading text. * Supports bold, italic, underline, and links ### Link Optional URL applied to the subheading. </Accordion> <Accordion title="Content block" icon="align-left"> Used for longer descriptive text. ### Text Rich text content. * Supports paragraphs and headings (H1–H4) * Allows bold, italic, and links </Accordion> <Accordion title="Buttons block" icon="rectangle-wide"> Used to add one or two call-to-action buttons. ### First button * **Link:** Destination URL * **Link type:** Button / Card * **Label:** Text label * **Style:** Filled, Outlined, Text * **Color scheme:** Shopify color scheme selector ### Second button * **Link:** Destination URL * **Link type:** Button / Card * **Label:** Text label * **Style:** Filled, Outlined, Text * **Color scheme:** Shopify color scheme selector </Accordion> <Accordion title="Breadcrumbs block" icon="location-arrow"> Displays breadcrumb navigation inside the banner. ### Show on Controls which devices breadcrumbs are visible on. **Available options:** Desktop, Mobile, Both </Accordion> </AccordionGroup> <img alt="Content blocks configuration" /> ## Best practices * Use block order to control content hierarchy and reading flow * Prefer **Background** media position for hero-style banners to create immersive experiences * Avoid external videos unless necessary due to performance impact * Use Auto height for content-heavy banners to ensure all content is visible * Test contrast carefully when using transparent headers for navigation visibility * Keep mobile content concise as vertical space is limited * Use high-quality images that maintain clarity at full viewport width * Consider load time when using full-width, high-resolution media ## Related guides <CardGroup> <Card title="Header section" icon="arrow-up-from-bracket" href="/themes/release/header"> Learn about header configuration and transparent header behavior </Card> <Card title="Theme settings" icon="sliders" href="/themes/release/theme-settings/index"> Understand global theme configuration options </Card> </CardGroup> # Gift Card Source: https://docs.digifist.com/themes/release/sections/gift-card Customize the appearance of digital gift card pages with logo and branding options. The Gift Card template displays the gift card redemption page with customizable branding elements. Customers use this page to view and redeem digital gift cards. <img alt="Gift card page overview" /> ## What this section controls * Gift card page branding * Logo images (main and card overlay) * Color scheme for gift card visual * Gift card display styling ## Section settings <Tabs> <Tab title="Branding"> ### Logo image Upload your brand logo to display on the gift card page. * Supports PNG, JPG formats * Recommended: High resolution for retina displays ### Logo SVG code Alternative to logo image using scalable vector graphics. * Paste SVG code directly * Benefits: Crisp at any size, smaller file size * Use when you need perfect logo clarity <Tip> Use SVG code for logos with text or intricate details that need to stay sharp at all sizes. </Tip> <img alt="Logo settings" /> </Tab> <Tab title="Cover Design"> ### Color scheme for cover Select the color scheme applied to the gift card visual. * **Default:** scheme-6 * Affects the gift card background and cover design ### Logo card image Logo displayed directly on the gift card visual itself. * Separate from main page logo * Appears overlaid on gift card design * Should be optimized for smaller display <Note> Logo card image appears on the gift card graphic, while logo image appears on the page itself. </Note> <img alt="Gift card cover design" /> </Tab> </Tabs> ## Best practices * **Logo format:** Use PNG with transparency for logo\_image, SVG for perfect clarity * **Logo sizing:** Keep logo\_image dimensions reasonable (max 400px wide) * **Card logo:** logo\_card\_image should be square or horizontal, optimized for overlay * **Color scheme:** Choose scheme that complements brand colors and stands out * **Brand consistency:** Ensure gift card design matches overall brand aesthetic * **Mobile testing:** Preview gift card page on mobile devices for logo sizing * **File optimization:** Compress images to ensure fast page load * **Seasonal updates:** Update logo\_card\_image for holidays or special occasions ## Common use cases * **Standard branding** - Upload logo\_image (PNG), use brand color scheme * **Premium look** - SVG logo for crisp display, dark luxury color scheme * **Seasonal cards** - Change logo\_card\_image for Christmas, Valentine's, etc. * **Minimal design** - No logo images, focus on color scheme and typography * **Corporate gifts** - Professional logo placement with neutral scheme-6 or custom * **Special editions** - Custom logo\_card\_image for limited edition gift cards ## Related guides <Card title="Product Page" icon="gift" href="/themes/release/sections/main-product"> Configure gift card product pages </Card> <Card title="Theme Settings" icon="palette" href="/themes/release/theme-settings/colors"> Create custom color schemes </Card> # Hero Banner Source: https://docs.digifist.com/themes/release/sections/hero-banner Create large, visually impactful banners with support for slideshows, images, and videos. The Hero Banner section creates prominent visual displays at the top of a page. It supports static banners, slideshows, images, and videos, and can interact with the header when positioned as the first section on a page. Hero banners help establish visual hierarchy and communicate key messages or campaigns immediately upon page load. <img alt="Hero Banner section overview" /> ## What this section controls This section controls large banner areas with the following capabilities: * Visual slideshows with multiple media types * Transparent header integration when placed first on a page * Desktop and mobile-specific media and positioning * Interactive elements including buttons and video controls ## How the Hero Banner works The Hero Banner uses a block-based system: * Each **slide** is created as a block inside the Hero Banner section * Multiple slides automatically form a **slideshow** * When placed as the **first section on the page**, the Hero Banner can enable a transparent header ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Hero Banner section"> Add the Hero Banner section to your page or template. </Step> <Step title="Add slides"> Click **Add Slide** to create banner content. </Step> <Step title="Configure settings"> Adjust section and slide settings according to your needs. </Step> </Steps> <img alt="Hero Banner section in Theme Customizer" /> ## Section settings Section settings control the global behavior of the Hero Banner and apply to all slides. <Tabs> <Tab title="Header integration"> ### Enable transparent header When enabled, the header becomes transparent **only if this section is the first section on the page**. This allows the Hero Banner media to appear behind the header. <Warning> This setting is only used when this section is the first one in the page order. Ensure the banner has sufficient contrast for navigation visibility. </Warning> <img alt="Enable transparent header setting" /> </Tab> <Tab title="Slideshow"> ### Hero height Controls the height of the hero section. **Range:** 0% – 100% ### Slideshow autoplay interval Controls how often slides change automatically. **Range:** 0 – 60 seconds * `0` disables autoplay * Any value above `0` enables autoplay ### Show slideshow navigation Displays slideshow navigation arrows on desktop devices. <Note> Navigation arrows are not shown on mobile. </Note> ### Slideshow navigation position Controls the position of navigation arrows. **Available options:** Sides, Start, Center ### Color scheme for arrows Controls the color scheme used for slideshow navigation arrows. ### Show slideshow pagination Displays slideshow pagination indicators. Pagination is visible on both desktop and mobile. ### Slideshow pagination style Controls the visual style of pagination indicators. **Available options:** Style 1, Style 2 <img alt="Slideshow navigation and pagination settings" /> </Tab> <Tab title="Advanced"> ### Floating bar Enables the floating bar behavior when a **Marquee section** is added directly after the Hero Banner section. <Note> This setting has no effect unless a marquee section exists below the hero. </Note> </Tab> </Tabs> ## Block settings Block settings control the layout, content, and media of each individual slide. Each slide represents one banner within the hero area. <Tabs> <Tab title="Layout & Style"> ### Banner layout Controls how content and media are distributed within the slide. **Available options:** Full, 70 / 30, 30 / 70, Split <img alt="Banner layout options" /> ### Color scheme Controls the background and text colors for the slide using Shopify's color scheme system. ### Header menu color When the header is transparent, this setting controls the color of header navigation links for better contrast. </Tab> <Tab title="Content"> ### Heading Main heading text for the slide. ### Subheading Secondary heading text displayed below the main heading. ### Subheading link Optional link applied to the subheading text. ### Text Supporting body text displayed within the slide. ## Buttons Slides support up to two buttons. <AccordionGroup> <Accordion title="First button" icon="1"> * **Link:** Destination URL * **Link type:** Button / Card * **Label:** Leave empty to hide the button * **Style:** Filled, Outlined, Text </Accordion> <Accordion title="Second button" icon="2"> * **Link:** Destination URL * **Link type:** Button / Card * **Label:** Leave empty to hide the button * **Style:** Filled, Outlined, Text </Accordion> </AccordionGroup> </Tab> <Tab title="Desktop media"> ### Content position Controls vertical alignment. **Options:** Top, Center, Bottom ### Content alignment Controls horizontal alignment. **Options:** Start, Center, End <img alt="Content position and alignment settings" /> ### Image Main image used for the slide on desktop. ### Video Video file used instead of the image. ### External video Overrides both image and video. <Warning> External videos may negatively impact performance. For best results, use the built-in video option. </Warning> ### Show video controls Shows or hides video playback controls. ### Enable overlay Adds a visual overlay on top of the media to improve text contrast. <img alt="Enable overlay setting for desktop" /> </Tab> <Tab title="Mobile media"> <Note> If mobile media is set, it will be used on mobile devices instead of the main media. </Note> ### Content position Controls vertical alignment on mobile. **Options:** Top, Center, Bottom ### Content alignment Controls horizontal alignment on mobile. **Options:** Start, Center, End ### Image Image used for the slide on mobile devices. ### Video Video used for the slide on mobile devices. ### External video Overrides both image and video on mobile. <Warning> External videos may negatively impact performance. </Warning> ### Show video controls Shows or hides video playback controls on mobile. ### Enable overlay Adds a visual overlay on mobile media. <img alt="Mobile-specific media settings" /> </Tab> </Tabs> ## Best practices * Use the Hero Banner as the first section to enable transparent headers * Avoid external videos unless necessary due to performance impact * Ensure sufficient contrast when using transparent headers for navigation visibility * Keep slide content concise for better readability and faster comprehension * Limit the number of slides to maintain performance and prevent user fatigue * Test mobile and desktop layouts separately to ensure optimal presentation * Use high-quality images that maintain clarity at large sizes ## Related guides <CardGroup> <Card title="Header section" icon="arrow-up-from-bracket" href="/themes/release/header"> Learn about header configuration and transparent header behavior </Card> <Card title="Theme settings" icon="sliders" href="/themes/release/theme-settings/index"> Understand global theme configuration options </Card> </CardGroup> # Highlighted Collections Source: https://docs.digifist.com/themes/release/sections/highlighted-collections Display collections with interactive image previews that change on hover for an engaging browsing experience. The Highlighted Collections section displays a curated list of collections with an interactive image preview. When hovering over a collection name, the corresponding collection image is displayed, creating an engaging browsing experience. This section combines visual appeal with navigation functionality, making it ideal for showcasing your store's main collections in a premium, interactive format. <img alt="Highlighted Collections section overview" /> ## What this section controls This section controls collection displays with the following capabilities: * Up to 12 collection items with hover-triggered images * Interactive image preview on collection hover * Customizable section height and title font size * Custom collection images and titles * Product counter display * Mobile-specific image option * Responsive layout with configurable width ratios ## How the Highlighted Collections section works The Highlighted Collections section uses an interactive hover system: * Displays up to 12 collection items in a vertical list * Shows collection images on hover * Collection title, custom image, and product counter support * Separate mobile image option * Configurable section height and title font size * Responsive layout with mobile-specific image handling ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Highlighted Collections section"> Add the section to your homepage or landing page. </Step> <Step title="Add collection blocks"> Click **Add Highlighted collection** to create collection items. </Step> <Step title="Configure collections"> Select collection, add custom image if needed, and enable product counter. </Step> </Steps> <img alt="Highlighted Collections section in Theme Customizer" /> ## Section settings Section settings control layout, sizing, and visual styling. <Tabs> <Tab title="Layout & Sizing"> ### Section height Controls the height of the section on desktop. **Range:** 40 – 90 vh **Default:** 60 vh <img alt="Section height configuration" /> ### Items title font size Controls the font size of collection titles. **Range:** 5x – 8x **Default:** 8x <Note> The changes will only apply to desktop. </Note> <img alt="Title font size configuration" /> </Tab> <Tab title="Images"> ### Image width Controls the width ratio between images and collection list. **Available options:** * **Normal:** 30% images / 70% list * **Wider:** 40% images / 60% list **Default:** Normal ### Image height Controls how images adapt to the section. **Available options:** * **Original:** Use image's original aspect ratio * **Adapt to section:** Stretch to fill section height **Default:** Adapt to section <img alt="Image width and height settings" /> ### Mobile Image Upload a specific image for mobile view. * Shopify image picker <Tip> The selected image will only appear in mobile view. </Tip> <img alt="Mobile image configuration" /> </Tab> <Tab title="Settings"> ### Section width Controls the maximum width of the section. **Available options:** * **Page:** Standard page width * **Fluid:** Wider than page width **Default:** Page ### Color scheme Controls background and text colors for the section container. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Controls spacing above the section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Controls spacing below the section. **Available options:** None, S, M, L, XL **Default:** M <img alt="Section width and spacing settings" /> </Tab> </Tabs> ## Block settings Block settings control individual collection items. Each block represents a single collection. <Warning> Maximum of 12 collection blocks can be added per section. </Warning> <Tabs> <Tab title="Collection"> ### Collection Select a collection to display. * Shopify collection picker <img alt="Collection selection" /> ### Image Upload a custom image for the collection. * Shopify image picker <Note> Will overwrite collection image. </Note> ### Heading Custom heading text for the collection. * Text input <Tip> Will overwrite collection heading. </Tip> </Tab> <Tab title="Styling"> ### Set heading to italic Displays collection title in italic style. **Options:** True / False **Default:** False <img alt="Italic title option" /> ### Enable products counter Shows the number of products in the collection. **Options:** True / False **Default:** True <Note> Helps to show how many items are in the collection in a small superscript. If there are no products in the collection, this counter will not appear. </Note> <img alt="Products counter display" /> </Tab> </Tabs> ## Best practices * Use high-quality, visually distinct images for each collection to maximize hover impact * Keep collection titles concise (2-4 words) for quick scanning and elegant display * Order collections by priority, popularity, or logical browsing flow * Use consistent image styling and color palette across all collections * Limit to 6-8 collections for optimal user experience without overwhelming * Test hover interaction on desktop and touch behavior on mobile devices * Provide a mobile image that represents all collections well or highlights featured collection * Use product counter to indicate collection size and help set expectations * Consider image width ratio based on image quality and visual importance * Ensure sufficient color contrast for collection titles against background ## Common use cases * **Category navigation** - Guide customers to main product categories with visual appeal * **Seasonal collections showcase** - Highlight seasonal or themed collections * **Brand collections** - Display collections organized by brand or designer * **Style guides** - Showcase collections based on aesthetic, occasion, or use case * **Featured collection highlight** - Draw attention to new or popular collections * **Store directory** - Create a visual map of your product offerings for easy navigation ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Highlighted Product Source: https://docs.digifist.com/themes/release/sections/highlighted-product Display a single featured product with full details, media gallery, and purchase options anywhere in your theme. The Highlighted Product section displays a single featured product with full product details, media gallery, and purchase options. It uses the same blocks and functionality as the main product page but can be placed anywhere in your theme. This section is perfect for showcasing featured products, bestsellers, or special promotions on any page, providing a complete shopping experience without requiring customers to navigate to the product page. <img alt="Highlighted Product section overview" /> ## What this section controls This section controls featured product displays with the following capabilities: * Select any product to feature * Full media gallery with zoom and navigation * All product page blocks available * Customizable media display options * Additional featured image support * Complete purchase functionality * Responsive mobile-optimized layout ## How the Highlighted Product section works The Highlighted Product section displays a complete product experience: * Select any product to feature * Full media gallery with zoom and navigation * All product blocks available (title, price, variants, buy buttons, etc.) * Customizable media display and layout * Additional featured image option * Responsive design with mobile optimization ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Highlighted Product section"> Add the section to your desired page or template. </Step> <Step title="Select product"> Choose the product you want to feature. </Step> <Step title="Configure blocks"> Add and arrange blocks like title, price, variant picker, and buy buttons. </Step> </Steps> <img alt="Highlighted Product section in Theme Customizer" /> ## Section settings Section settings control product selection, media display, and layout options. <Tabs> <Tab title="Product Selection"> ### Product Select a product to display in this section. * Shopify product picker <img alt="Product selection" /> ### Heading Optional section heading above the product. * Rich text supported <Tip> Use descriptive headings like "Product of the Week" or "Featured Item" to create context. </Tip> </Tab> <Tab title="Product Media"> ### Product media object fit Controls how media fills the container. **Available options:** * **Cover:** Fill container, may crop image * **Contain:** Fit within container, may show margins **Default:** Cover ### Adaptive ratio and auto height Controls how media aspect ratio is handled. **Available options:** * **Default:** Fixed aspect ratio * **Adaptive ratio:** Adapts to each image's aspect ratio * **Slider auto height:** Auto-adjust slider height per image **Default:** Default <img alt="Media display settings" /> ### Media transparent background Removes background color from media container. **Options:** True / False **Default:** False ### Disable media zoom Disables click-to-zoom lightbox functionality. **Options:** True / False **Default:** True ### Show media index Displays current media position (e.g., "1/5"). **Options:** True / False **Default:** True ### Media gallery info Custom text displayed in media gallery. * Text input ### Additional featured image Upload an additional image to include in the media gallery. * Shopify image picker <Note> Image will be inserted after the first product image. </Note> <img alt="Additional featured image" /> ### Color scheme for arrows Controls the color scheme for navigation arrows. * Shopify color scheme selector * **Default:** Scheme 1 </Tab> <Tab title="Settings"> ### Section width Controls the maximum width of the section. **Available options:** * **Page:** Standard page width * **Fluid:** Wider than page width * **Full:** Full viewport width **Default:** Fluid ### Color scheme Controls background and text colors for the section container. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Controls spacing above the section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Controls spacing below the section. **Available options:** None, S, M, L, XL **Default:** XL <img alt="Section width and spacing settings" /> </Tab> </Tabs> ## Block settings The Highlighted Product section supports all the same blocks as the main product page for complete flexibility. <AccordionGroup> <Accordion title="Essential Blocks"> * **Title** - Product title display * **Badge** - Sale/sold out badges * **Price** - Product price with compare-at price * **Variant Picker** - Size/color/option selector * **Quantity Selector** - Quantity input field * **Buy Buttons** - Add to cart and Buy now buttons * **Product Link** - Link to full product page </Accordion> <Accordion title="Content Blocks"> * **Text** - Custom text with vendor/type/collection links * **Description** - Full product description * **Icon with Text** - Feature highlights with icons * **Collapsible Tab** - Expandable content sections * **Divider** - Visual separator lines </Accordion> <Accordion title="Social & Reviews"> * **Share** - Social sharing buttons * **Rating** - Product reviews and rating display * **Feature Rating** - Visual rating indicators </Accordion> <Accordion title="Advanced Blocks"> * **Popup** - Information popups and modals * **Complementary Products** - Related product suggestions * **Custom Liquid** - Custom code and functionality </Accordion> </AccordionGroup> <Note> For detailed block settings and configurations, refer to the [Product Page documentation](/themes/release/products/product-page). </Note> ## Best practices * Select high-performing or strategically important products to maximize conversion impact * Use descriptive, compelling section headings ("Product of the Week", "Staff Pick", "Limited Edition") * Enable media zoom for products with important details or textures customers need to examine * Add additional featured image for lifestyle shots, context, or usage demonstrations * Include all essential blocks: title, price, variant picker, quantity selector, and buy buttons * Test media gallery navigation on mobile devices to ensure smooth interaction * Use collapsible tabs for lengthy product information to keep the layout clean * Consider homepage or landing page placement for maximum visibility and engagement * Update featured product regularly to maintain freshness and customer interest * Use high-quality, professional product media for best presentation and credibility ## Common use cases * **Homepage product feature** - Showcase bestseller, new arrival, or seasonal product on homepage * **Product of the week** - Highlight rotating featured products with regular updates * **Limited edition highlight** - Draw attention to exclusive, limited-run, or special items * **Campaign landing pages** - Feature specific products for marketing campaigns or promotions * **Editorial content** - Embed shoppable products within blog posts or content pages * **Pre-launch teasing** - Display upcoming products with pre-order or notify-me options ## Related guides <Card title="Product Page" icon="box" href="/themes/release/products/product-page"> Learn about product page blocks and detailed settings </Card> <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Interactive Banner Source: https://docs.digifist.com/themes/release/sections/interactive-banner Highlight multiple key messages within a single banner area with hover-triggered slides. The Interactive Banner is a full-width visual section designed to highlight multiple key messages within a single banner area. It works similarly to a full width banner but allows multiple interactive slides that change on hover or click. Each slide displays a heading that acts as both a visual trigger and a navigation point. The first slide is active by default, and up to 5 slides can be added. Interactive banners help create engaging, dynamic experiences by allowing users to explore multiple messages or campaigns within a compact, visually striking format. <img alt="Interactive Banner section overview" /> ## What this section controls This section controls interactive banner displays with the following capabilities: * Multiple slides with hover-triggered media changes * Layered headings that act as navigation triggers * Separate desktop and mobile media configuration * Click-through functionality with custom links * Up to 5 slides per section * Customizable banner height and content width ## How the Interactive Banner works The Interactive Banner uses a block-based slide system: * Displays multiple headings layered on top of a single banner area * The first slide is active by default * Hovering over a heading changes the background media with an animation * Clicking a heading navigates to its assigned link * Supports both images and videos * Desktop and mobile media can be configured separately * Maximum of **5 slides** per section ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Interactive Banner section"> Add the Interactive Banner section to your page or template. </Step> <Step title="Add slides"> Click **Add Slide** to create interactive banner states. </Step> <Step title="Configure media and links"> Upload media for each slide and assign click-through links. </Step> </Steps> <img alt="Interactive Banner section in Theme Customizer" /> ## Section settings Section settings control the overall size and layout of the banner. <Tabs> <Tab title="Banner dimensions"> ### Banner height for desktop Controls the height of the banner on desktop devices. **Range:** 20vh – 100vh ### Banner height for mobile Controls the height of the banner on mobile devices. **Range:** 20vh – 100vh <img alt="Banner height settings" /> </Tab> <Tab title="Content width"> ### Content width Controls the maximum width of the interactive heading content inside the banner. **Available options:** Small, Narrow, Normal <img alt="Content width options" /> </Tab> </Tabs> ## Slide settings Slide settings control individual interactive slides. Each slide represents a single interactive state of the banner. <Note> The first slide in the list is automatically active on page load. </Note> <Tabs> <Tab title="Heading & link"> ### Heading The visible title displayed on top of the banner. * Rich text supported (bold, italic, underline, links) * Acts as an interactive trigger on hover * Acts as a navigation element on click ### Link Defines where the user is redirected when the heading is clicked. * Shopify URL selector <img alt="Heading and link configuration" /> </Tab> <Tab title="Desktop media"> Desktop media is used by default unless overridden by mobile media. ### Image Primary visual for the slide. * Shopify image selector ### Video Optional video for the slide. * Shopify video selector <Warning> Overwrites image if selected. </Warning> ### External video External video URL input. * Overwrites both image and Shopify-hosted video * Not recommended for performance-sensitive pages <Tip> Use Shopify-hosted videos whenever possible for better performance and stability. </Tip> <img alt="Desktop media configuration" /> </Tab> <Tab title="Mobile media"> <Note> If mobile media is set, it will be used on mobile devices instead of the desktop media. </Note> ### Mobile image * Shopify image selector ### Mobile video * Shopify video selector <Warning> Overwrites mobile image. </Warning> ### Mobile external video External video URL input for mobile. * Overwrites mobile image and video * Not recommended for performance-sensitive pages <img alt="Mobile media configuration" /> </Tab> </Tabs> ## Best practices * Keep headings short and scannable (2-5 words maximum) for quick comprehension * Use consistent image or video styles across slides to maintain visual coherence * Limit slides to 3–4 for better usability and to avoid overwhelming users * Avoid external videos unless absolutely necessary due to performance impact * Ensure sufficient contrast between headings and media for readability * Test hover interactions on desktop to ensure smooth transitions * Use high-quality media that maintains clarity at full width * Consider load time when using videos for multiple slides * Make sure headings clearly communicate the destination or value proposition ## Common use cases * **Campaign landing headers** - Showcase multiple campaigns with interactive exploration * **Collection highlights** - Feature different product collections with visual appeal * **Editorial storytelling banners** - Tell brand stories through interactive narratives * **Brand positioning sections** - Highlight key brand values or pillars * **Seasonal or promotional hero areas** - Display time-sensitive offers with engaging visuals ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Search Banner Source: https://docs.digifist.com/themes/release/sections/main-search-banner Banner section displayed at the top of search results pages. The Search Banner template provides a visual header for the search results page, displaying the search query and providing context for the results below. <img alt="Search banner overview" /> ## What this section controls * Search page header area * Search query display * Banner layout and spacing * Visual separation from results ## Section settings <Tabs> <Tab title="Layout"> ### Section width Maximum width of the search banner. **Available options:** * **max-w-page** - Standard container * **max-w-fluid** - Wider container **Default:** max-w-page <Tip> Match the section width with your main-search section for visual consistency. </Tip> ### Color scheme Select the color scheme for the banner. * **Default:** scheme-1 <img alt="Banner layout" /> </Tab> <Tab title="Spacing"> ### Spacing top Padding above the search banner. **Available options:** * **No** (0), **S** (1), **M** (2), **L** (4), **XL** (6) **Default:** M (2) ### Spacing bottom Padding below the search banner. **Available options:** * **No** (0), **S** (1), **M** (2), **L** (4), **XL** (6) **Default:** M (2) <Note> Reduce spacing to S (1) or No (0) for a more compact search page with results-first focus. </Note> <img alt="Banner spacing" /> </Tab> </Tabs> ## Best practices * **Width:** Use max-w-page to match search results section * **Spacing:** Keep minimal (S or M) to not push results down the page * **Color scheme:** Match with main search section for cohesive design * **Mobile:** Banner automatically optimizes for mobile screens * **Content:** Banner typically shows "Search results for: \[query]" * **Visibility:** Consider reducing spacing for results-focused experience ## Common use cases * **Standard search header** - Display search query with M spacing * **Minimal approach** - Reduce spacing to S or 0 for results-first layout * **Promotional banner** - Use to feature sales or new arrivals above results * **Help text** - Show search tips or popular search suggestions * **Results context** - Display number of results and filter count * **Compact mobile** - Reduce bottom spacing on mobile for more visible results ## Related guides <Card title="Search Results" icon="search" href="/themes/release/sections/main-search"> Configure the main search results section </Card> <Card title="Predictive Search" icon="magnifying-glass" href="/themes/release/sections/predictive-search"> Set up predictive search dropdown </Card> # Map Source: https://docs.digifist.com/themes/release/sections/map Embed a Google Map displaying a specific location with customizable zoom level and styling. The Map section embeds a Google Map displaying a specific location or address. It uses the Google Maps Embed API to show an interactive map with customizable zoom level and styling. Map sections are essential for showcasing physical store locations, office addresses, or event venues, helping customers find your business easily. <img alt="Map section overview" /> ## What this section controls This section controls map displays with the following capabilities: * Google Maps Embed API integration * Shop address default or custom address input * Zoom level control (0-21) * Responsive iframe embed * Multiple section width options * Border radius customization ## How the Map section works The Map section displays an embedded Google Map: * Requires a Google Maps API key to function * Uses shop address by default or accepts custom address * Configurable zoom level (0-21) * Responsive iframe embed with border radius * Full width or contained layout options ## Getting started <Steps> <Step title="Set up Google Maps API key"> Create a Google Maps API key in Google Cloud Console. [Learn how](https://support.google.com/googleapi/answer/6158862?hl=en) </Step> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Map section"> Add the Map section to your page or template. </Step> <Step title="Configure settings"> Enter your API key, set address (optional), and adjust zoom level. </Step> </Steps> <img alt="Map section in Theme Customizer" /> ## Section settings Section settings control map configuration and display options. <Tabs> <Tab title="Map configuration"> ### API key Google Maps API key for embedding maps. **Type:** Text area <Warning> The map will not display without a valid API key. </Warning> <img alt="API key configuration" /> <Tip> You can learn how to set up Google API keys [here](https://support.google.com/googleapi/answer/6158862?hl=en). </Tip> ### Address Custom address to display on the map. **Type:** Text input <Note> Uses the shop address by default. Override it using this format: street address, city country / state </Note> ### Zoom level Controls the zoom level of the map. **Range:** 0 – 21 **Default:** 16 * Lower values show larger area * Higher values show more detail <img alt="Zoom level configuration" /> </Tab> <Tab title="Settings"> ### Section width Controls the maximum width of the map. **Available options:** * **Page:** Standard page width * **Narrower:** Narrower than page width * **Fluid:** Wider than page width * **Full:** Full viewport width **Default:** Full ### Color scheme Controls background and text colors for the section container. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Controls spacing above the section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Controls spacing below the section. **Available options:** None, S, M, L, XL **Default:** M <img alt="Section width and spacing settings" /> </Tab> </Tabs> ## Best practices * Set up Google Maps API key with proper restrictions for security * Use full address format for accurate location display (street address, city, country/state) * Test zoom level to ensure relevant landmarks are visible * Consider using full width for prominent store location displays * Use narrower or page width for inline contact page maps * Add address information in surrounding content for accessibility * Test map loading on different connection speeds * Consider adding a fallback address link for users with JavaScript disabled * Keep API key secure and monitor usage in Google Cloud Console * Restrict API key to your domain to prevent unauthorized usage ## Common use cases * **Store locator page** - Display primary store location on a dedicated page * **Contact page** - Show office or retail location alongside contact information * **About page** - Highlight headquarters or flagship store location * **Event page** - Display event venue location for in-person gatherings * **Multiple locations** - Use multiple map sections for businesses with several physical locations ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Marquees Source: https://docs.digifist.com/themes/release/sections/marquees Display continuously scrolling text or product items in an animated horizontal ticker format. The Marquees section displays continuously scrolling text or product items with icons in a horizontal ticker format. It's perfect for highlighting key messages, promotions, or featured products in an eye-catching, animated display. Marquees create dynamic, attention-grabbing displays that draw the eye and communicate important information or offers while maintaining a modern, engaging user experience. <img alt="Marquees section overview" /> ## What this section controls This section controls marquee displays with the following capabilities: * Unlimited text items, product items, or countdown timers * Continuous horizontal scroll animation * Pause on hover functionality * Configurable animation speed * Icon and custom image support * Product card integration * Responsive element sizing ## How the Marquees section works The Marquees section creates an infinite scrolling animation: * Displays unlimited text items, product items, or countdown timers * Continuous horizontal scroll animation * Pause on hover functionality * Configurable animation speed and element sizing * Supports icons, custom images, and product cards * Responsive design with mobile-specific sizing ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Marquees section"> Add the section to your desired page or template. </Step> <Step title="Add marquee items"> Click **Add Text item** or **Add Product item** to create scrolling content. </Step> <Step title="Configure animation"> Adjust animation speed, element size, and spacing. </Step> </Steps> <img alt="Marquees section in Theme Customizer" /> ## Section settings Section settings control animation behavior, sizing, and layout. <Tabs> <Tab title="Animation"> ### Enable animation Enables the scrolling animation. **Options:** True / False **Default:** True <Tip> Enable to animate the marquees. Disable for static display. </Tip> ### Animation speed Controls the speed of the scrolling animation. **Range:** 1 – 10 **Default:** 5 <Note> The higher the number, the slower the animation. </Note> <img alt="Animation configuration" /> </Tab> <Tab title="Layout"> ### Element size Controls the size of marquee items. **Range:** 1 – 6 **Default:** 1 <Note> Desktop and tablet only. Mobile size adjusts automatically. </Note> ### Element spacing Controls spacing between marquee items on desktop. **Range:** 0 – 6 rem (0.4 increments) **Default:** 4.8 rem <Note> Desktop and tablet only. Mobile spacing adjusts automatically. </Note> <img alt="Layout configuration" /> </Tab> <Tab title="Settings"> ### Color scheme Controls background and text colors for the section container. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Controls spacing above the section. **Available options:** None, S, M, L, XL **Default:** None ### Spacing bottom Controls spacing below the section. **Available options:** None, S, M, L, XL **Default:** None <img alt="Section spacing settings" /> </Tab> </Tabs> ## Block settings The Marquees section supports three types of blocks for flexible content display. <Tabs> <Tab title="Text item"> ### Icon Theme icon identifier. * Text input * **Default:** theme-box <Tip> See available icons in theme documentation. </Tip> ### Custom icon Upload a custom icon image. * Shopify image picker <Warning> Overwrites theme icon when selected. </Warning> <img alt="Icon configuration" /> ### Title Heading text for the item. * Text input ### Link Optional link destination. * Shopify URL selector <img alt="Text item content" /> </Tab> <Tab title="Product item"> ### Product Select a product to display. * Shopify product picker ### Product image Custom product image. * Shopify image picker <Note> Overwrites product featured image. </Note> ### Product heading Custom product title. * Text input <Tip> Overwrites product title. </Tip> <img alt="Product item configuration" /> ### Show product title Displays product title below image. **Options:** True / False **Default:** True ### Button label Text for optional button. * Text input * Leave empty to hide * **Default:** "Learn more" </Tab> <Tab title="Timer"> <Warning> Maximum of 1 timer block can be added per section. </Warning> ### Show on Controls where the timer is visible. **Available options:** * **Desktop:** Desktop only * **Mobile:** Mobile only * **Both:** All devices **Default:** Desktop ### Timer date Set the countdown target date and time. * **Year:** Number input (Default: 2024) * **Month:** Select January – December (Default: January) * **Day:** Range 1 – 31 (Default: 1) * **Hour:** Range 0 – 23 (Default: 0) * **Minute:** Range 0 – 59 (Default: 0) <img alt="Timer configuration" /> ### Parts display settings Control which timer components are visible: * **Show timer days** (Default: True) * **Show timer hours** (Default: True) * **Show timer minutes** (Default: True) * **Show timer seconds** (Default: True) </Tab> </Tabs> ## Best practices * Keep text items concise (2-5 words) for quick comprehension during scrolling * Use consistent icon styling across all items for visual harmony * Set animation speed based on content length - slower for text-heavy items * Test animation speed on actual devices to ensure readability during scroll * Limit to 6-8 unique items to avoid overwhelming the animation cycle * Use high contrast colors for text against background for readability * Consider disabling animation for accessibility or content-heavy messages * Product items work best with square product images for consistent display * Use marquees for promotional messages, shipping info, or store highlights * Place near top of page for maximum visibility and impact ## Common use cases * **Promotional messaging** - Highlight sales, discounts, or special offers * **Shipping and returns** - Display free shipping, easy returns, or delivery information * **Trust indicators** - Show certifications, guarantees, warranties, or brand values * **Featured products** - Showcase product collections or new arrivals in motion * **Event countdown** - Display countdown to sales, launches, or special events * **Store highlights** - Emphasize key differentiators or unique selling points * **Announcement ticker** - Share news, updates, or important store information ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Mixed Text Source: https://docs.digifist.com/themes/release/sections/mixed-text Create dynamic typography layouts by mixing text elements and images in a flowing, inline arrangement. The Mixed Text section creates visually interesting text compositions by combining text elements and images that flow together naturally. Each text or image block is displayed inline, allowing you to create unique, magazine-style typography layouts. This section is perfect for creating impact headlines, brand statements, or editorial-style content where words and visuals blend seamlessly. <img alt="Mixed text section overview" /> ## What this section controls This section controls mixed text and image layouts with the following capabilities: * Unlimited text and image blocks flowing inline * Custom content width and alignment * Rich text support with links * Inline images between text elements * Optional CTA button below content * Flexible color schemes ## How the Mixed Text section works The Mixed Text section displays content in a flowing layout: * Add unlimited text or image blocks * Each text block represents a word or phrase * Images render inline with text flow * Content wraps naturally based on width * Optional button appears below all content ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Mixed Text section"> Add the section to your desired page or template. </Step> <Step title="Add content blocks"> Click **Add Text** or **Add Image** to build your mixed layout. </Step> <Step title="Configure styling"> Set content width, alignment, and color scheme. </Step> </Steps> <img alt="Mixed text section in Theme Customizer" /> ## Section settings Section settings control layout, styling, and optional CTA button. <Tabs> <Tab title="Layout"> ### Content width Controls the width of content area. **Range:** 40 – 100 **Unit:** % **Default:** 100 <Note> This setting applies to desktop devices only. </Note> ### Content alignment Controls horizontal and vertical alignment of all content. **Available options:** * **Start:** Left/top aligned * **Center:** Center aligned * **End:** Right/bottom aligned **Default:** Start <img alt="Content width and alignment" /> </Tab> <Tab title="Button"> ### Button label Text for optional button below content. * Leave empty to hide button <Tip> The button appears below all text and image blocks. </Tip> ### Button link Destination URL for button. * Shopify URL selector ### Button style Controls button visual style. **Available options:** * **Filled:** Solid background button * **Outlined:** Bordered button * **Default:** Text link style **Default:** Outlined <img alt="Button configuration" /> </Tab> <Tab title="Settings"> ### Section width Controls the maximum width of section container. **Available options:** * **Page:** Standard page width * **Narrower:** Narrower than page width * **Fluid:** Wider than page width **Default:** Fluid ### Color scheme Controls background and text colors for the section. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Controls spacing above the section. **Available options:** No, S, M, L, XL **Default:** No ### Spacing bottom Controls spacing below the section. **Available options:** No, S, M, L, XL **Default:** No <img alt="Section width and spacing" /> </Tab> </Tabs> ## Block settings The Mixed Text section supports two types of blocks: Text and Image. <Tabs> <Tab title="Text Block"> ### Type **tile** ### Name Text ### Text Content for this text element. * Inline rich text supported * Can contain links (rendered as single block) * Each block typically contains one word or phrase <Note> Text blocks are displayed inline with other blocks. If text contains links, it's rendered differently to preserve link functionality. </Note> <img alt="Text block configuration" /> </Tab> <Tab title="Image Block"> ### Type **image** ### Name Image ### Image Image to display inline with text. * Shopify image picker * Flows with text elements * Displays placeholder if not set <Tip> Use images to break up text and add visual interest. They flow naturally with text blocks. </Tip> <img alt="Image block configuration" /> </Tab> </Tabs> ## Best practices * Use text blocks for individual words or short phrases to create flowing layouts * Mix images between text elements to create visual rhythm and break up typography * Keep content width at 80-100% for optimal readability on larger screens * Use links sparingly in text blocks to maintain visual flow and avoid breaking layout * Strategic image placement creates natural visual breaks without disrupting the reading flow * Consider alignment based on surrounding sections for visual consistency * Test with different color schemes to ensure proper contrast and readability * Limit total blocks to 10-15 for optimal performance and manageable layout * Use center alignment for impact headlines and brand statements * Start/end alignment works better for paragraph-style mixed content ## Common use cases * **Hero headlines** - Create bold, mixed typography for homepage hero sections * **Brand statements** - Display company values or mission with integrated imagery * **Campaign taglines** - Build visually striking marketing messages * **Feature highlights** - Mix descriptive text with feature icons or images * **Editorial layouts** - Magazine-style text compositions with inline media * **Call-to-action sections** - Engaging CTAs with mixed text and visual elements * **Product benefits** - List benefits with inline product images or icons ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Multitile Source: https://docs.digifist.com/themes/release/sections/multitile Create flexible grid-based layouts with customizable tiles containing media, text, products, or slideshows. The Multitile section creates flexible grid-based layouts with customizable tiles. Each tile can contain media, text, buttons, products, or slideshows with full control over positioning, sizing, and responsive behavior. This section provides maximum layout flexibility, allowing you to create unique, asymmetric grid designs that adapt to different screen sizes and content priorities. <img alt="Multitile section overview" /> ## What this section controls This section controls grid-based layouts with the following capabilities: * Unlimited tile or slideshow blocks * Custom column and row spanning per tile * Desktop and mobile-specific visibility * Flexible aspect ratios and spacing * Media (images, videos), text, and button support * Metaobject-powered slideshows * Responsive layout reordering ## How the Multitile section works The Multitile section uses a flexible grid system: * Add unlimited tile or slideshow blocks * Control column and row span for each tile * Set custom aspect ratios and spacing * Desktop and mobile-specific visibility * Supports images, videos, products, and slideshows * Reverse block order on mobile option ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Multitile section"> Add the section to your desired page or template. </Step> <Step title="Add tile blocks"> Click **Add Tile** or **Add Slideshow** to create grid items. </Step> <Step title="Configure grid layout"> Set column and row factors to create your desired layout. </Step> </Steps> <img alt="Multitile section in Theme Customizer" /> ## Section settings Section settings control overall layout, heading, and spacing. <Tabs> <Tab title="Layout"> ### Block order mobile Reverses the order of blocks on mobile devices. **Options:** True / False **Default:** False <Tip> Use this to prioritize different content on mobile vs desktop. </Tip> ### Heading Optional section heading. * Inline rich text supported (bold, italic, links) ### Heading size Controls the size of section heading. **Available options:** XS, S, M, L, XL **Default:** L ### Heading alignment Controls horizontal alignment of heading. **Available options:** Start, Center, End **Default:** Start <img alt="Section heading configuration" /> ### Spacing tile Controls spacing between tiles. **Available options:** * **Default:** Standard spacing * **Compact:** No spacing between tiles **Default:** Default <img alt="Tile spacing options" /> </Tab> <Tab title="Settings"> ### Color scheme Controls background and text colors for the section container. * Shopify color scheme selector * **Default:** Scheme 1 ### Section width Controls the maximum width of the section. **Available options:** * **Page:** Standard page width * **Narrower:** Narrower than page width * **Fluid:** Wider than page width * **Full:** Full viewport width **Default:** Page ### Spacing top Controls spacing above the section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Controls spacing below the section. **Available options:** None, S, M, L, XL **Default:** M <img alt="Section width and spacing settings" /> </Tab> </Tabs> ## Block settings The Multitile section supports two types of blocks: Tiles and Slideshows. <Tabs> <Tab title="Tile Block - Grid"> ### Show on Controls where the tile is visible. **Available options:** * **Desktop:** Desktop only * **Mobile:** Mobile only * **Both:** All devices **Default:** Both ### Grid layout **Column factor** - Number of columns the tile spans **Range:** 1 – 6 **Default:** 1 **Row factor** - Number of rows the tile spans **Range:** 1 – 6 **Default:** 1 <Note> Controls the tile's position and size in the grid layout. </Note> <img alt="Grid layout configuration" /> </Tab> <Tab title="Tile Block - Styling"> ### Color scheme Controls background and text colors for the tile. * Shopify color scheme selector * **Default:** Scheme 5 ### Custom background color Set a custom gradient background color for the tile. * Color gradient picker ### Aspect ratio Controls the aspect ratio of the tile. **Available options:** Auto, Media, 1:1, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2 **Default:** Auto <Tip> This value sets the aspect ratio based on media position: for 'top' and 'bottom', it applies to the media, and for 'background', it applies to the tile. </Tip> ### Padding Controls padding inside the tile. **Range:** 0 – 6 **Default:** 2 <img alt="Tile styling options" /> </Tab> <Tab title="Tile Block - Content"> ### Heading Tile heading text. * Inline rich text supported ### Heading size **Available options:** XS, S, M, L, XL ### Text Tile body text. * Rich text supported ### Button label Text for optional button. * Leave empty to hide ### Button link Destination URL for button. * Shopify URL selector ### Button style **Available options:** Filled, Outlined, Text **Default:** Filled <img alt="Tile content configuration" /> </Tab> <Tab title="Tile Block - Media"> ### Media position Controls where media appears relative to content. **Available options:** * **Top:** Media above content * **Bottom:** Media below content * **Background:** Media as background **Default:** Background ### Desktop media * **Image:** Shopify image picker * **Video:** Video file upload * **External video:** YouTube/Vimeo URL * **Show video controls:** Enable/disable player controls ### Mobile media * **Image:** Mobile-specific image * **Video:** Mobile-specific video * **External video:** Mobile-specific external video * **Show video controls:** Mobile player controls <Note> Mobile media overrides desktop media when set. </Note> ### Content positioning **Desktop:** * Content position: Start, Center, End * Content alignment: Start, Center, End **Mobile:** * Content position: Start, Center, End * Content alignment: Start, Center, End <img alt="Tile media configuration" /> </Tab> <Tab title="Slideshow Block"> ### Grid layout Same as tile block (column factor, row factor) ### Media aspect ratio Controls aspect ratio for slideshow media. **Available options:** 1:1, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2 **Default:** 16:9 ### Source of slideshow Controls how slideshow content is populated. **Available options:** * **Manual:** Add slides manually * **Metaobject:** Pull from metaobject **Default:** Manual <Warning> If you define a metaobject as a source, the slideshow will be populated with the media from the metaobject. </Warning> ### Slideshow settings * **Show navigation arrows:** Enable/disable navigation * **Slideshow autoplay interval:** 0-10 seconds (0 = disabled) ### Color schemes * **Color scheme for section** * **Color scheme for arrows** <img alt="Slideshow configuration" /> </Tab> </Tabs> ## Best practices * Use grid layout strategically - larger tiles (2x2, 3x2) for hero content, smaller (1x1) for supporting elements * Test grid layout on different screen sizes to ensure proper responsive behavior and avoid awkward gaps * Use compact spacing for magazine-style layouts without gaps between tiles * Limit column/row span to 3-4 for optimal mobile experience and readability * Use consistent aspect ratios across similar tiles for visual harmony and professional appearance * Desktop and mobile visibility options help create device-optimized layouts with different content priorities * Background media position works best with overlay content and sufficient text contrast * Use metaobject slideshows for dynamic content that updates frequently without manual changes * Keep tile count manageable (6-12 tiles) for performance and user experience * Use reverse mobile order to prioritize important content on smaller screens ## Common use cases * **Homepage hero grids** - Create dynamic, magazine-style hero sections with varied content sizes * **Product showcases** - Display products in varied sizes to emphasize featured or bestselling items * **Content blocks** - Mix text, images, and videos in custom editorial layouts * **Category navigation** - Visual grid of categories with varying emphasis on key categories * **Instagram-style galleries** - Create social media-inspired grid layouts for visual storytelling * **Feature highlights** - Showcase multiple features with mixed content types and sizes * **Promotional campaigns** - Design custom promotional layouts with maximum flexibility ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Newsletter Popup Source: https://docs.digifist.com/themes/release/sections/newsletter-popup Display a timed popup modal to capture email subscriptions with customizable content and delay. The Newsletter Popup section creates a modal popup that appears after a configurable delay to capture email subscriptions. The popup includes optional imagery, customizable text, and an integrated newsletter signup form. This section is essential for building your email list and engaging first-time visitors with special offers or exclusive content. <img alt="Newsletter popup overview" /> ## What this section controls This section controls newsletter popup display with the following capabilities: * Timed appearance after page load (4-30 seconds) * Optional image for visual appeal * Customizable heading and text * Integrated newsletter signup form * Friendly close/dismiss option * Theme Customizer preview mode ## How the Newsletter Popup section works The Newsletter Popup displays a modal overlay: * Appears automatically after configured delay * Shows optional image alongside content * Displays heading, text, and email form * User can submit email or close popup * Remembers if user dismissed (session-based) * Mobile responsive design ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Newsletter Popup section"> This section is typically added to your theme's global sections. </Step> <Step title="Configure content"> Set heading, text, and optional image. </Step> <Step title="Set timing"> Adjust delay to control when popup appears (recommend 10-15 seconds). </Step> </Steps> <img alt="Newsletter popup in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Timing"> ### Show newsletter after Controls when the popup appears after page load. **Range:** 4 – 30 seconds **Default:** 10 seconds <Warning> Setting the delay too short (\< 8 seconds) may interrupt users before they engage with your content. </Warning> <Tip> A delay of 10-15 seconds balances user experience with conversion opportunity. </Tip> <img alt="Popup timing configuration" /> </Tab> <Tab title="Content"> ### Image Optional image displayed in the popup. * Shopify image picker * Displays on left side (desktop) * Renders at 550px width <Note> Use brand imagery or product visuals that support your newsletter value proposition. </Note> ### Heading Main heading text for the popup. * Inline rich text supported * **Default:** "Newsletter heading here" ### Heading size Controls the size of heading text. **Available options:** XS, S, M, L, XL **Default:** L ### Text Descriptive text below heading. * Rich text supported (paragraphs, formatting) * **Default:** "An example subheading for new subscribers." <Tip> Keep text brief (1-2 sentences) to maintain focus on the signup form. </Tip> <img alt="Popup content configuration" /> </Tab> <Tab title="Settings"> ### Button close label Text for the close/dismiss link. * **Default:** "No thanks" <Note> Use friendly language that doesn't pressure users. "No thanks" or "Maybe later" work well. </Note> ### Show newsletter popup in customizer Controls whether popup displays in Theme Customizer. **Options:** True / False **Default:** False <Tip> Enable this temporarily to preview and style your popup without waiting for the delay. </Tip> ### Color scheme Controls background and text colors for the popup. * Shopify color scheme selector * **Default:** Scheme 1 <Warning> Ensure your color scheme provides sufficient contrast for readability and accessibility. </Warning> <img alt="Popup settings" /> </Tab> </Tabs> ## Newsletter form The popup includes an integrated newsletter signup form: * **Email input field** - Standard email validation * **Submit button** - Label from theme translations * **Form handling** - Integrates with Shopify customer accounts * **Error messaging** - Displays validation errors * **Success state** - Shows confirmation message <img alt="Newsletter form in popup" /> ## Best practices * Set delay to 10-15 seconds to allow users to engage with page content first * Keep heading concise and value-focused - emphasize benefits like "Get 10% off" or "Exclusive access" * Use high-quality brand imagery that supports your value proposition * Make close button text friendly and non-pushy - "No thanks" or "Maybe later" work well * Enable "Show in customizer" temporarily for testing appearance without waiting * Avoid very short delays (\< 8 seconds) that interrupt users immediately * Test with different color schemes to ensure popup stands out but doesn't clash * Keep descriptive text brief - one or two sentences maximum for quick scanning * Ensure color scheme provides strong contrast for text readability and accessibility * Consider A/B testing different delays, headlines, and images to optimize conversion ## Common use cases * **Email list building** - Capture subscriber emails on homepage and key landing pages * **First-time visitor capture** - Engage new visitors with welcome offers * **Special offer announcements** - Promote limited-time discounts or free shipping * **Exclusive content access** - Gate premium content like guides or lookbooks * **Product launch notifications** - Build pre-launch email list for new products * **Seasonal campaign signups** - Capture emails for holiday sales or seasonal collections * **VIP club invitations** - Invite customers to join loyalty programs * **Early access signups** - Offer early access to sales or new releases ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Page Banner Source: https://docs.digifist.com/themes/release/sections/page-banner Create customizable hero banners for pages, collections, products, and blogs with media, text, and navigation. The Page Banner section creates versatile hero banners that automatically adapt to different template types (pages, collections, products, blogs). It displays titles, descriptions, media backgrounds, breadcrumbs, and optional collection navigation menus. This section is essential for creating impactful page headers that provide context and visual appeal across your entire site. <img alt="Page banner section overview" /> ## What this section controls This section controls page hero banners with the following capabilities: * Automatic page title display with custom overrides * Optional default or custom descriptions * Desktop and mobile-specific media (images, videos) * Transparent header support * Breadcrumb navigation * Collection menu navigation * Flexible content positioning and sizing * Multiple section height options ## How the Page Banner section works The Page Banner adapts to your template type: * Automatically displays page/collection/product/blog title * Shows default description or custom text * Supports background, top, or bottom media positioning * Can enable transparent header over background media * Displays breadcrumbs when enabled in theme settings * Shows collection navigation menu if configured ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Navigate to target template"> Go to the page, collection, product, or blog template you want to customize. </Step> <Step title="Add Page Banner section"> Add the section or customize the existing one (usually first section). </Step> <Step title="Configure content and media"> Set heading, description, media, and positioning options. </Step> </Steps> <img alt="Page banner in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Content"> ### Enable transparent header Makes header transparent over banner when using background media. **Default:** True <Warning> Only works when media position is set to "Background". Header becomes transparent and overlays the banner. </Warning> ### Heading Custom heading text that overwrites the default page title. * Inline rich text supported * Leave empty to use default page title ### Heading size Controls the size of heading text. **Available options:** XS, S, M, L, XL **Default:** L ### Description Custom description text. * Rich text supported * Overwrites default description when set ### Show default description Displays the default description from the current template (page/collection/product/blog). **Default:** True ### Show on description Controls where description is visible. **Available options:** * **Desktop:** Desktop only * **Mobile:** Mobile only * **Both:** All devices **Default:** Desktop <img alt="Content settings" /> </Tab> <Tab title="Layout"> ### Content position Controls vertical position of content within the banner. **Available options:** Start, Center, End **Default:** Center <Note> Not applicable when section height is set to 'Auto'. </Note> ### Content alignment Controls horizontal alignment of content. **Available options:** Start, Center, End **Default:** Center ### Media position Controls where media appears relative to content. **Available options:** * **Top:** Media above content * **Bottom:** Media below content * **Background:** Media as background **Default:** Background <Tip> Use 'Background' position with fixed section heights (not 'Auto') for best display. Otherwise, section height expands to cover media. </Tip> <img alt="Layout settings" /> </Tab> <Tab title="Navigation"> ### Menu Link list for collection navigation menu. * Shopify link list selector * First level link names must match collection handles <Note> Add a collection menu by creating navigation whose first level link names match any of your shop's collections. </Note> ### Enable breadcrumbs Shows breadcrumb navigation on the page. **Default:** True <Tip> Breadcrumbs must also be enabled in theme settings to appear. </Tip> <img alt="Navigation settings" /> </Tab> <Tab title="Desktop"> ### Section height Height of the section on desktop devices. **Available options:** * **Auto:** Based on content * **Third:** 33% viewport height (33svh) * **Half:** 50% viewport height (50svh) * **Full:** 100% viewport height (100svh) **Default:** Half (50svh) ### Content width Maximum width of content area. **Available options:** * **Narrow:** 44.5rem * **Half:** 50% * **Full:** 100% **Default:** Full (100%) ### Desktop media **Image** - Shopify image picker **Video** - Video file upload (overwrites image) **External video** - YouTube/Vimeo URL * Recommended aspect ratio: 16:9 * Overwrites image and video * May cause performance issues **Show controls on video** - Enable/disable video controls (default: false) <img alt="Desktop settings" /> </Tab> <Tab title="Mobile"> ### Section height mobile Height of the section on mobile devices. **Available options:** * **Auto:** Based on content * **Third:** 33% viewport height (33svh) * **Half:** 50% viewport height (50svh) * **Full:** 100% viewport height (100svh) **Default:** Half (50svh) ### Mobile media **Image mobile** - Mobile-specific image **Video mobile** - Mobile-specific video **External video mobile** - Mobile-specific external video **Show controls on video mobile** - Mobile video controls (default: false) <Note> Mobile media overrides desktop media when set, allowing device-optimized visuals. </Note> <img alt="Mobile settings" /> </Tab> <Tab title="Settings"> ### Section container width Maximum width of the section. **Available options:** Page, Narrow, Narrower, Fluid **Default:** Narrow ### Color scheme Background and text colors when no media is present. * Shopify color scheme selector * **Default:** Scheme 3 ### Color scheme for media Colors used when media is present. * **Default:** Scheme 1 ### Spacing top Controls spacing above the section. **Available options:** No, S, M, L, XL **Default:** M ### Spacing bottom Controls spacing below the section. **Available options:** No, S, M, L, XL **Default:** XL <img alt="Section settings" /> </Tab> </Tabs> ## Best practices * Use background media position with fixed heights (50svh, 100svh) for consistent, impactful banners * Enable transparent header on first section only for seamless design * Keep content width at 50-100% for optimal readability across devices * Use auto height with top/bottom media positions to avoid awkward spacing * Provide mobile-specific media for better performance and appropriate framing * Test transparent header with different color schemes to ensure text visibility * Avoid external videos when possible due to performance concerns; use uploaded videos instead * Enable breadcrumbs for improved navigation and SEO * Match collection menu link names exactly with collection handles * Use center alignment for hero-style banners, start alignment for content-heavy pages ## Common use cases * **Homepage hero** - Full-height banner with transparent header * **Collection pages** - Medium-height banner with collection title and description * **Product category pages** - Branded banners with category information * **Blog index pages** - Editorial-style headers with featured images * **About/contact pages** - Custom branded headers with company imagery * **Landing pages** - Campaign-specific banners with conversion-focused messaging * **Store information** - Location or brand story headers ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Pickup Availability Source: https://docs.digifist.com/themes/release/sections/pickup-availability Display local store pickup availability for products with physical store locations through Shopify POS integration. The **Pickup Availability** component shows customers which physical store locations have a product available for local pickup. This component integrates with Shopify POS to display real-time inventory availability across your retail locations. <Note> This is an integrated component block (not a standalone section) that appears within product sections when Shopify POS is configured with pickup-enabled locations. </Note> ## How It Works <Tabs> <Tab title="Display Logic"> The component only renders when: 1. Product variant has store availability data 2. At least one location has `pick_up_enabled: true` 3. Shopify POS is properly configured **Primary Display:** * Shows the closest/first available location * Displays availability status (available or unavailable) * Shows estimated pickup time * Provides button to view all locations **Button Text:** * Single store: "View store information" * Multiple stores: "Check availability at other stores" </Tab> <Tab title="Drawer Interface"> Clicking the button opens a drawer containing: **Store List:** * All locations with store availability data * Store name as heading * Availability status with icon (available, × unavailable) * Pickup time estimate * Complete formatted address * Phone number (if configured) **Visual Indicators:** * Green check icon for available items * Red close icon for unavailable items * Consistent formatting for all addresses </Tab> </Tabs> ## Best Practices <AccordionGroup> <Accordion title="Store Configuration" icon="store"> * Use complete, accurate addresses for all locations * Include phone numbers for customer inquiries * Set realistic pickup time estimates * Keep store hours up to date * Add pickup instructions and policies </Accordion> <Accordion title="Inventory Management" icon="boxes"> * Sync POS inventory with online inventory regularly * Set accurate stock levels at each location * Update inventory in real-time when possible * Consider safety stock for popular items * Monitor inventory discrepancies </Accordion> <Accordion title="Customer Experience" icon="user"> * Set clear expectations for pickup timeframes * Provide pickup instructions in store settings * Test the complete pickup flow regularly * Ensure mobile drawer works smoothly * Communicate any pickup policy changes </Accordion> <Accordion title="Performance & Testing" icon="gauge"> * Test with actual store locations before launch * Verify availability updates work correctly * Check mobile responsiveness of drawer * Test with location services disabled * Validate address formatting for all regions </Accordion> </AccordionGroup> <Warning> Pickup Availability requires Shopify POS and is not available on all Shopify plans. Verify your plan includes POS functionality before enabling this feature. </Warning> # Predictive Search Source: https://docs.digifist.com/themes/release/sections/predictive-search Real-time search autocomplete and suggestions that display as customers type in the header search bar. The **Predictive Search** section powers the search autocomplete dropdown that appears when customers type in the header search bar, showing instant product, collection, page, and article suggestions without requiring a page reload. <Note> This is a dynamic AJAX-powered section with no customizer settings. All functionality is controlled by Shopify's Predictive Search API and the theme's JavaScript. </Note> ## Section Overview Predictive Search provides instant, real-time search results as customers type, improving discovery and reducing friction in the shopping experience. It displays multiple content types in an organized, scannable layout. ## How It Works <Tabs> <Tab title="Search Activation"> **Trigger:** * Activated when customer types in header search input * Typically requires minimum 2 characters * Updates automatically as typing continues * Debounced to prevent excessive API calls **Display:** * Appears as dropdown below search input * Two-column layout on desktop * Stacked layout on mobile * Smooth show/hide animations **Interaction:** * Click any result to navigate * "View all results" button shows full search page * Escape key or clicking outside closes dropdown </Tab> <Tab title="Result Types"> **Query Suggestions (Limit: 3)** * Popular search terms * Highlighted matching text * Links to full search results **Pages (Limit: 3)** * Informational pages * Policy pages * Custom content pages **Articles (Limit: 3)** * Blog posts * News articles * Content articles **Collections (Limit: 2)** * Featured image or placeholder * Collection title * Product count * Card-style layout **Products (Limit: 3)** * Full product cards * Product images * Title, price, variants * Same styling as product grids </Tab> <Tab title="Layout Structure"> **Left Column:** * Popular searches section * Query suggestions * Pages and articles * Collections with images **Right Column:** * Products section * Full product cards * Responsive grid layout **Bottom Row:** * "View results for \[terms]" button * Only shows when results exist * Links to full search page </Tab> <Tab title="Empty States"> When no results found: * Display: "Oh no! No results found for '\[search terms]'" * Suggestion: "Please try again with a different query" * No "View all results" button shown The section checks all resource types: * Products * Collections * Pages * Articles * Query suggestions </Tab> </Tabs> ## Locale Strings Translatable strings from `locales/en.default.json`: | Locale Key | Default Text | Usage | | -------------------------------- | ---------------------------------------- | ---------------------- | | `search.popular_searches` | Popular searches | Left column heading | | `search.collections` | Collections | Collections heading | | `search.products` | Products | Products heading | | `search.no_results` | Oh no! No results found. | Empty state | | `search.no_results_with_terms` | Oh no! No results found for "". | Empty state with term | | `search.change_terms` | Please try again with a different query. | Empty state suggestion | | `search.view_results_with_terms` | View results for "" | View all button | ## Related Documentation <CardGroup> <Card title="Main Search" icon="magnifying-glass" href="/themes/release/sections/main-search"> Full search results page template </Card> <Card title="Header" icon="bars" href="/themes/release/sections/header"> Header search bar configuration </Card> <Card title="Search Snippet" icon="code" href="/themes/release/snippets/search"> Search input component </Card> <Card title="Shopify Search" icon="book" href="https://help.shopify.com/en/manual/online-store/storefront-search"> Shopify search documentation </Card> </CardGroup> ## Technical Notes * Requires JavaScript enabled in browser * Uses AJAX for live result updates * No page reload required for results * Supports keyboard navigation (arrow keys, enter, escape) * Accessible with screen readers * Automatically includes product metafields in search * Respects product visibility settings * Honors draft/published status <Warning> Predictive Search functionality cannot be disabled via theme settings alone. If you need to remove it, you must edit the theme's JavaScript and liquid files. Consider carefully as this is a key user experience feature. </Warning> *** ## Image Placeholders For documentation purposes, the following images would enhance this section: 1. **Predictive search dropdown** - Full view of search results dropdown 2. **Product results** - Product cards in right column 3. **Collection cards** - Collections with images and product counts 4. **Popular searches** - Query suggestions and page links 5. **Mobile search view** - Responsive mobile layout 6. **Empty state** - No results found message # Recommended Products Source: https://docs.digifist.com/themes/release/sections/product-recommendations Display Shopify's AI-powered product recommendations to encourage cross-selling and upselling. The Recommended Products section displays Shopify's AI-powered product recommendations based on the current product or cart contents. It shows personalized product suggestions to encourage cross-selling and upselling. Shopify's recommendation engine analyzes purchase patterns, product relationships, and customer behavior to suggest the most relevant products, helping increase average order value and improve shopping experience. <img alt="Recommended Products section overview" /> ## What this section controls This section controls product recommendation displays with the following capabilities: * Shopify AI-powered product recommendations * Up to 12 recommended products * Carousel-style display with navigation * Tab-style filtering options * Stock status visibility control * Optional section-level button ## How the Recommended Products section works The Recommended Products section uses Shopify's recommendation engine: * Automatically displays related products based on current product or cart * Supports up to 12 recommended products * Carousel-style display with optional navigation * Tab-style navigation for product filtering * Configurable product visibility settings ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Recommended Products section"> Add the section to a product page template or cart page. </Step> <Step title="Configure display options"> Set maximum products, autoplay interval, and layout preferences. </Step> <Step title="Test recommendations"> Preview on live products to verify recommendation quality. </Step> </Steps> <img alt="Recommended Products section in Theme Customizer" /> ## Section settings Section settings control styling, slideshow behavior, and product display options. <Tabs> <Tab title="Section styling"> ### Layout Controls the visual style of the section. **Available options:** * **Layout 1:** Standard layout * **Layout 2:** Alternative layout **Default:** Layout 1 ### Enable slideshow overflow Allows slideshow to overflow section boundaries. **Options:** True / False **Default:** False ### Section heading Main title text for the section. * Inline rich text supported (bold, italic, links) * **Default:** "You may also like" ### Heading size Controls the size of section heading. **Available options:** XS, S, M, L, XL **Default:** L ### Subheading Optional descriptive text above the heading. * Inline rich text supported <img alt="Section heading configuration" /> ### Button label Text for optional section-level button. * Leave empty to hide * **Default:** "View all" ### Button link Destination URL for section button. * Shopify URL selector ### Button style Visual style for section button. **Available options:** * **Filled:** Solid background * **Outlined:** Border only * **Text:** Text only **Default:** Filled </Tab> <Tab title="Slideshow & Tabs"> ### Show navigation arrows Displays previous/next navigation arrows. **Options:** True / False **Default:** True ### Slideshow autoplay interval Controls automatic slide advancement. **Range:** 0 – 10 seconds * Set to `0` to disable autoplay * Default: 3 seconds <img alt="Slideshow configuration" /> ### Tabs button style Visual style for tab navigation buttons. **Available options:** * **Filled:** Solid background * **Outlined:** Border only * **Text:** Text only **Default:** Filled <img alt="Tab button styling" /> </Tab> <Tab title="Products & Settings"> ### Max products Maximum number of recommended products to display. **Range:** 4 – 12 products **Default:** 8 <Note> Shopify's recommendation engine may return fewer products than the maximum. </Note> ### Show unavailable products Display products that are out of stock. **Options:** True / False **Default:** False <Tip> Enable to show all recommendations regardless of stock status. </Tip> <img alt="Product display settings" /> ### Section width Controls the maximum width of the section. **Available options:** * **Page:** Standard page width * **Fluid:** Wider than page width **Default:** Page ### Color scheme Controls background and text colors for the section container. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Controls spacing above the section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Controls spacing below the section. **Available options:** None, S, M, L, XL **Default:** M <img alt="Section width and spacing settings" /> </Tab> </Tabs> ## Best practices * Place on product pages to encourage cross-selling and complementary purchases * Use on cart page to suggest additional items before checkout * Keep heading descriptive and action-oriented ("Complete the look", "You may also like", "Customers also bought") * Set max products to 6-8 for optimal browsing without overwhelming customers * Test recommendation quality - Shopify's AI improves with more order data and time * Hide unavailable products unless showing full catalog diversity is important * Use autoplay sparingly - consider disabling for better user control and accessibility * Ensure sufficient historical order data for effective recommendations (at least 50-100 orders) * Monitor recommendation performance through analytics and adjust max products accordingly * Consider using custom collection sections if AI recommendations don't align with your merchandising strategy ## Common use cases * **Product page upselling** - Show related or complementary products to increase average order value * **Cart page cross-selling** - Suggest additional items before checkout to maximize basket size * **Post-purchase recommendations** - Display related products on thank you or account pages * **Bundle suggestions** - Encourage customers to complete product sets or collections * **Alternative products** - Show similar products when current item is out of stock * **Personalized shopping** - Leverage Shopify's AI to provide tailored product suggestions ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Quick Add to Cart Drawer Source: https://docs.digifist.com/themes/release/sections/quick-cart-drawer Configure the quick add drawer that appears when customers click quick add buttons on product cards. The Quick Add to Cart Drawer section controls the drawer that displays product options when customers click "Quick Add" buttons on product cards throughout the site. <img alt="Quick add to cart drawer overview" /> ## What this section controls * Quick add drawer appearance * Product option selection interface * Color scheme for drawer * Empty state messaging ## How it works When quick add buttons are enabled in theme settings: 1. Customer clicks "Quick Add" on a product card 2. Drawer opens showing product options (variants, quantity) 3. Customer selects options and adds to cart 4. Drawer closes automatically after adding ## Section settings ### Color scheme Background and text colors for the drawer. * Shopify color scheme selector * **Default:** Scheme 1 <Note> This section only appears when "Enable quick add to cart button" is enabled in Theme Settings > Products. </Note> <img alt="Quick add drawer settings" /> ## Empty state When drawer is opened without product data: **Title:** "Choose your options" **Empty message:** Displayed when no product is loaded <Tip> Empty state messages can be customized in theme locales under product translations. </Tip> ## Best practices * Match color scheme with your cart drawer for consistency * Ensure product media aspect ratio is set in theme settings * Test quick add functionality on product grids * Verify variant selection works correctly * Check mobile experience for smooth interactions ## Common use cases * **Collection pages** - Quick add from product grids * **Search results** - Fast add to cart from search * **Related products** - Quick add from recommendations * **Featured products sections** - Homepage quick purchases ## Related guides <Card title="Product Settings" icon="box" href="/themes/release/theme-settings/products"> Enable and configure quick add buttons </Card> <Card title="Cart Drawer" icon="cart-shopping" href="/themes/release/sections/cart-drawer"> Learn about the main cart drawer </Card> # Recently Viewed Products Source: https://docs.digifist.com/themes/release/sections/recently-viewed-products Display products that customers have previously viewed to help them quickly return to items of interest. The Recently Viewed Products section displays products that the customer has previously viewed during their browsing session. It uses browser storage to track and show personalized product history, helping customers quickly return to items they're interested in. This section leverages browser local storage to remember customer browsing patterns, creating a personalized shopping experience that persists across multiple visits. <img alt="Recently Viewed Products section overview" /> ## What this section controls This section controls recently viewed product displays with the following capabilities: * Browser-based product viewing history tracking * Up to 12 recently viewed products * Carousel-style display with navigation * Tab-style filtering options * Stock status visibility control * Automatic section hiding when empty ## How the Recently Viewed Products section works The Recently Viewed Products section uses local storage to track browsing history: * Automatically tracks product page visits * Stores product history in browser * Displays up to 12 recently viewed products * Carousel-style display with optional navigation * Excludes currently viewed product * Hidden when no products have been viewed ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Recently Viewed Products section"> Add the section to a product page template or homepage. </Step> <Step title="Configure display options"> Set maximum products, autoplay interval, and layout preferences. </Step> <Step title="Test the section"> Browse multiple product pages to populate the recently viewed list. </Step> </Steps> <img alt="Recently Viewed Products section in Theme Customizer" /> <Note> The section automatically hides when no products have been viewed yet. </Note> ## Section settings Section settings control styling, slideshow behavior, and product display options. <Tabs> <Tab title="Section styling"> ### Layout Controls the visual style of the section. **Available options:** * **Layout 1:** Standard layout * **Layout 2:** Alternative layout **Default:** Layout 1 ### Enable slideshow overflow Allows slideshow to overflow section boundaries. **Options:** True / False **Default:** False ### Section heading Main title text for the section. * Inline rich text supported (bold, italic, links) * **Default:** "Recently viewed" ### Heading size Controls the size of section heading. **Available options:** XS, S, M, L, XL **Default:** L ### Subheading Optional descriptive text above the heading. * Inline rich text supported <img alt="Section heading configuration" /> ### Button label Text for optional section-level button. * Leave empty to hide * **Default:** "View all" ### Button link Destination URL for section button. * Shopify URL selector ### Button style Visual style for section button. **Available options:** * **Filled:** Solid background * **Outlined:** Border only * **Text:** Text only **Default:** Filled </Tab> <Tab title="Slideshow & Tabs"> ### Show navigation arrows Displays previous/next navigation arrows. **Options:** True / False **Default:** True ### Slideshow autoplay interval Controls automatic slide advancement. **Range:** 0 – 10 seconds * Set to `0` to disable autoplay * Default: 3 seconds <img alt="Slideshow configuration" /> ### Tabs button style Visual style for tab navigation buttons. **Available options:** * **Filled:** Solid background * **Outlined:** Border only * **Text:** Text only **Default:** Filled <img alt="Tab button styling" /> </Tab> <Tab title="Products & Settings"> ### Max products Maximum number of recently viewed products to display. **Range:** 4 – 12 products **Default:** 8 <Tip> Shows the most recent products viewed by the customer. </Tip> ### Show unavailable products Display products that are out of stock. **Options:** True / False **Default:** False <Note> Enable to show all recently viewed products regardless of stock status. </Note> <img alt="Product display settings" /> ### Section width Controls the maximum width of the section. **Available options:** * **Page:** Standard page width * **Fluid:** Wider than page width **Default:** Page ### Color scheme Controls background and text colors for the section container. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Controls spacing above the section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Controls spacing below the section. **Available options:** None, S, M, L, XL **Default:** M <img alt="Section width and spacing settings" /> </Tab> </Tabs> ## Best practices * Place on product pages to remind customers of previously viewed items * Use on homepage or collection pages to personalize the returning visitor experience * Set max products to 6-8 for clean presentation without overwhelming customers * Consider hiding unavailable products to avoid customer frustration with out-of-stock items * Use descriptive headings like "Continue Shopping", "You Recently Viewed", or "Your Browsing History" * Test in private/incognito mode - section won't display without browsing history * Section automatically hides when no products have been viewed (no empty state issues) * Use autoplay sparingly to maintain user control and accessibility * Consider placing below the fold to prioritize current product content * Combine with product recommendations for comprehensive browsing and discovery suggestions ## Common use cases * **Product page browsing history** - Help customers return to products they've considered purchasing * **Homepage personalization** - Show returning customers their recent browsing activity for continuity * **Collection page continuity** - Display recently viewed items while browsing new products * **Abandoned browse recovery** - Remind customers of items they viewed but didn't add to cart * **Cross-session memory** - Track browsing across multiple visits (stored in browser local storage) * **Comparison shopping** - Make it easy for customers to revisit products for side-by-side comparison ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Rich Text (SEO Content) Source: https://docs.digifist.com/themes/release/sections/seo-content Display rich text content with customizable heading and formatting for SEO-optimized descriptions. The Rich Text section (also known as SEO Content) displays formatted text content with an optional heading. It's ideal for adding detailed descriptions, brand stories, or SEO-optimized content to any page. <img alt="Rich text section overview" /> ## What this section controls * Optional heading with size control * Rich text editor with full formatting * Content alignment options * Normal or boxed layout styles * Inner padding control * Section width and color schemes ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Rich Text section"> Add the section to your desired page or template. </Step> <Step title="Add content"> Set heading and enter your rich text content. </Step> <Step title="Configure styling"> Choose layout, alignment, and spacing options. </Step> </Steps> ## Section settings <Tabs> <Tab title="Content"> ### Section layout Controls the visual style of the section. **Available options:** * **Normal:** Standard layout * **Boxed:** Content within a bordered box **Default:** Normal ### Heading Optional heading above text content. * Inline rich text supported * **Default:** "Heading for rich text section" ### Heading size Controls the size of heading. **Available options:** XS, S, M, L, XL **Default:** L ### Text Main rich text content. * Full rich text editor * Supports paragraphs, lists, links, formatting * **Default:** "Enter your long text content here..." ### Content alignment Controls text alignment. **Available options:** Start, Center, End **Default:** Center <img alt="Content settings" /> </Tab> <Tab title="Settings"> ### Section width Maximum width of content. **Available options:** Page, Narrower, Fluid **Default:** Narrower ### Color scheme Background and text colors. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing inner Padding inside the section (for boxed layout). **Available options:** None, S, M, L, XL **Default:** M ### Spacing top Space above section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Space below section. **Available options:** None, S, M, L, XL **Default:** M <img alt="Section settings" /> </Tab> </Tabs> ## Best practices * Use "Narrower" width for optimal readability of long text * Center alignment works well for short, impactful content * Start (left) alignment is better for lengthy descriptions * Boxed layout adds visual emphasis to important content * Include relevant keywords naturally for SEO benefits * Break up long text with paragraphs and formatting * Use headings to structure content hierarchically * Keep inner spacing at M or L for boxed layouts ## Common use cases * **Product descriptions** - Detailed product information below the fold * **Brand story** - About us content on homepage or about page * **SEO content** - Keyword-rich descriptions for collections or products * **Shipping information** - Detailed shipping and returns policies * **Care instructions** - Product care and maintenance guidelines * **Size guides** - Detailed sizing information * **FAQ content** - Formatted Q\&A sections ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Shop the Look Source: https://docs.digifist.com/themes/release/sections/shop-the-look Showcase products within styled images using interactive product cards and pulse dots. The Shop the Look section showcases products within a styled image or visual composition. It supports interactive product cards, pulse dots, and multiple layout options. Shop the Look helps create immersive shopping experiences by connecting products to lifestyle imagery, allowing customers to discover and purchase items directly from styled visuals. <img alt="Shop the Look section overview" /> ## What this section controls This section controls product showcases within images with the following capabilities: * Interactive product cards linked to visual imagery * Pulse dot indicators for product discovery * Dual content or full width layout options * Desktop and mobile-specific image support * Customizable product carousel positioning ## How the Shop the Look works The Shop the Look uses a block-based product system: * Products are linked to a visual using product cards or pulse dots * Layout changes how products are displayed and interacted with * Pulse dots allow users to discover products directly on the image * Product slides control which products appear and where dots are placed ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Shop the Look section"> Add the Shop the Look section to your page or template. </Step> <Step title="Add product slides"> Click **Add Product slide** to link products to the image. </Step> <Step title="Configure layout"> Select layout type and enable pulse dots if desired. </Step> </Steps> <img alt="Shop the Look section in Theme Customizer" /> ## Section settings Section settings define the content, layout behavior, and visual presentation. <Tabs> <Tab title="Content"> ### Heading Main heading text displayed above the section. * Supports bold, italic, and links ### Heading size Controls the size of the heading. **Available options:** S, M, L, XL ### Text Supporting text displayed below the heading. * Supports bold, italic, and links </Tab> <Tab title="Layout"> ### Layout Controls how the image and product cards are displayed. **Available options:** * **Dual content:** Image and product carousel are displayed side by side * **Full width:** Image fills the section width <img alt="Layout options comparison" /> ## Dual content behavior When **Dual content** is selected: * Products are displayed as a carousel next to the image * The position of the product carousel depends on the **Reverse positions** setting ## Full width behavior When **Full width** is selected: * Image spans the full width of the section * If **Show pulse dots** is enabled, products appear when: * A pulse dot is hovered * A pulse dot is clicked <Note> In full width layout, products are revealed through pulse dot interaction only. </Note> ### Image Main image used for the section. Uses Shopify's image selector. ### Mobile image Image used on mobile devices. <Note> If a mobile image is set, it will be used on mobile instead of the main image. </Note> ### Reverse positions Reverses the position of the image and product carousel. * Only works when **Dual content** layout is selected * Does not apply to **Full width** layout </Tab> <Tab title="Pulse dots & buttons"> ### Show pulse dots Enables or disables pulse dots on the image. **Options:** Enabled / Disabled <Tip> Pulse dots are interactive indicators that reveal associated products. </Tip> <img alt="Pulse dots interactive feature" /> ## Button settings Product card button settings used in **Full width** layout. ### Button label Defines the button text displayed on product cards. <Note> Leave empty to hide the button. </Note> ### Button style Controls the visual style of the button. **Available options:** Filled, Outlined, Text </Tab> <Tab title="Aspect ratio"> ### Aspect ratio (desktop) Controls the aspect ratio of the image or media. <Tip> Auto option is recommended for long text. </Tip> **Available options:** Auto, Square, Portrait, Landscape ### Aspect ratio for mobile Aspect ratio used on mobile devices. **Available options:** Auto, Square, Portrait, Landscape <img alt="Aspect ratio configuration" /> </Tab> </Tabs> ## Block settings Block settings control individual product slides. Each product slide represents a single product linked to the image. <Tabs> <Tab title="Product"> ### Product Select a product using Shopify's product selector. <Note> Once selected, the Shop the Look product card becomes visible. </Note> <img alt="Product selection in block settings" /> </Tab> <Tab title="Dot position"> Controls where the pulse dot appears on the image. <Warning> Pulse dots are visible on desktop only and appear on the image selected in section settings. </Warning> ### Horizontal position Sets the horizontal position of the dot. **Range:** 1% – 100% ### Vertical position Sets the vertical position of the dot. **Range:** 1% – 100% <img alt="Dot position controls" /> </Tab> </Tabs> ## Best practices * Use **Dual content** for editorial-style layouts that showcase products alongside imagery * Use **Full width + pulse dots** for immersive shopping experiences where customers discover products * Keep pulse dots away from edges (at least 5-10% margin) for better usability and visibility * Always test dot positions on large screens to ensure proper placement * Limit the number of product slides to 3-5 for clarity and to avoid overwhelming users * Use high-quality lifestyle images that naturally showcase multiple products * Ensure pulse dots are positioned precisely on product locations in the image * Test mobile experience as pulse dots are desktop-only ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Social Media Highlights Source: https://docs.digifist.com/themes/release/sections/social-media-highlights Display Instagram or social media posts in a grid layout with customizable content card and call-to-action. The Social Media Highlights section showcases social media posts in a grid layout alongside a content card with heading, subheading, and call-to-action button. Perfect for integrating Instagram feeds or highlighting social proof. <img alt="Social media highlights overview" /> ## What this section controls * Grid or stacked layout options * Customizable content card with heading, subheading, and button * Media blocks with images, videos, or external videos * Adjustable media aspect ratios * Multiple color schemes * Desktop and mobile column control ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Social Media Highlights section"> Add the section to your desired page. </Step> <Step title="Configure content card"> Set heading, subheading, and follow button with link. </Step> <Step title="Add media blocks"> Add image or video blocks for your social posts. </Step> </Steps> ## Section settings <Tabs> <Tab title="Layout"> ### Layout Controls section layout style. **Options:** * **Simple:** Standard grid layout * **Stacked:** Stacked layout **Default:** Simple ### Remove desktop spacing Removes spacing between items on desktop. **Default:** False *Visible only when layout is "Simple"* ### Media aspect ratio Controls aspect ratio of media blocks. **Options:** Auto, 1:1, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16 **Default:** 1:1 </Tab> <Tab title="Content"> ### Heading Main heading for content card. * Inline rich text * **Default:** "Join the *family*" ### Heading size **Options:** XS, S, M, L, XL **Default:** L ### Subheading Optional subheading below heading. ### Button label Text for call-to-action button. * **Default:** "Follow us" ### Button link Destination URL for button. ### Button style **Options:** Filled, Outlined, Text **Default:** Filled ### Button icon Icon to display on button. * **Default:** "brand-instagram" </Tab> <Tab title="Settings"> ### Content card color scheme Background and text colors for content card. * **Default:** Scheme 3 ### Color scheme for media Colors for media blocks. * **Default:** Scheme 1 ### Desktop columns Number of columns on desktop (2-6). **Default:** 3 ### Mobile columns Number of columns on mobile (1-2). **Default:** 2 ### Section width **Options:** Page, Fluid **Default:** Page ### Color scheme Overall section colors. **Default:** Scheme 1 ### Spacing top/bottom **Options:** No, S, M, L, XL **Default:** M </Tab> </Tabs> ## Block settings ### Media Block * **Image:** Image picker * **Video:** Video file * **External video:** YouTube/Vimeo URL * **Show video controls:** Enable/disable controls <Note> Video and external video override image when set. </Note> ## Best practices * Use 1:1 (square) aspect ratio for Instagram-style feeds * Keep desktop columns at 3-4 for optimal display * Enable mobile columns of 2 for better mobile experience * Remove desktop spacing for seamless grid appearance * Use brand-instagram icon for Instagram follow buttons * Match content card color scheme with brand colors ## Common use cases * Instagram feed display * Social proof showcase * User-generated content galleries * Community highlights * Influencer collaborations * Brand storytelling through social posts ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Spacing Source: https://docs.digifist.com/themes/release/sections/spacing Add customizable vertical spacing between sections for better layout control. The Spacing section creates an empty block with customizable vertical spacing and optional background color. Use it to add visual breathing room between sections or create subtle visual separators. <img alt="Spacing section overview" /> ## What this section controls * Vertical spacing above and below * Optional background color * Full-width spacing divider ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Spacing section"> Add the section between other sections where you need spacing. </Step> <Step title="Configure spacing"> Set spacing top and bottom values and optionally choose a color scheme. </Step> </Steps> ## Section settings ### Color scheme Background color for the spacing section. * Shopify color scheme selector * **Default:** Scheme 3 <Note> Use a matching or contrasting color scheme to create subtle visual separation. </Note> ### Spacing top Controls space above the section. **Available options:** No, S, M, L, XL **Default:** M ### Spacing bottom Controls space below the section. **Available options:** No, S, M, L, XL **Default:** M <Tip> Combine spacing top and bottom to create larger gaps between sections. </Tip> <img alt="Spacing settings" /> ## Best practices * Use spacing sections to create visual breathing room between dense content * Match color scheme with adjacent sections for seamless spacing * Use contrasting color schemes to create subtle visual dividers * Combine M or L spacing values for standard section separation * Use XL spacing for major content breaks (e.g., between homepage sections) * Use No spacing with different color scheme to create a colored divider line ## Common use cases * **Section separation** - Add space between homepage sections * **Visual dividers** - Create colored separators with contrasting schemes * **Content breathing room** - Improve readability by spacing dense content * **Layout balance** - Adjust vertical rhythm of page layouts * **Mobile optimization** - Add extra space for better mobile experience ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Store Locator Source: https://docs.digifist.com/themes/release/sections/store-locator Display physical store locations using interactive maps or image-based layouts with custom actions. The Store Locator section allows merchants to display physical store locations using an interactive map or image-based layout. It supports multiple store pins, custom actions, and flexible layouts for desktop and mobile. Store locators help customers find nearby physical locations, providing essential information like addresses, opening hours, and contact options in an intuitive, searchable format. <img alt="Store Locator section overview" /> ## What this section controls This section controls store location displays with the following capabilities: * Google Maps integration or image-based grid layout * Individual store pins with detailed information * Click-to-call and directions functionality * Customizable card backgrounds and styles * Optional "See more" navigation card * Desktop and mobile-specific height controls ## How the Store Locator works The Store Locator uses a block-based system: * Displays store locations using Google Maps or image layout * Each store is represented by a **Pin block** * Supports store details such as address, opening hours, contact actions * Optionally includes a **See more card** for additional navigation * Layout adapts for desktop and mobile devices ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Store Locator section"> Add the Store Locator section to your page or template. </Step> <Step title="Add pin blocks"> Click **Add block** and select **Pin** to add store locations. </Step> <Step title="Configure map settings"> If using Map layout, add your Google Maps API key and adjust zoom level. </Step> </Steps> <img alt="Store Locator section in Theme Customizer" /> ## Section settings Section settings control layout type, sizing, map behavior, and global card styles. <Tabs> <Tab title="Content"> ### Heading Main title of the store locator section. * Supports bold, italic, underline, and links ### Heading size Controls the size of the heading. **Available options:** S, M, L, XL </Tab> <Tab title="Layout"> ### Section layout Defines how store locations are displayed. **Available options:** * **Image:** Uses store images in a grid layout * **Map:** Displays stores on an interactive Google Map <img alt="Section layout options" /> ### Image layout columns (Desktop only) Controls the number of columns when **Image** layout is selected. **Available options:** Auto, 2, 3 ### Height desktop Sets the section height on desktop devices. **Range:** 40vh – 80vh ### Set auto height When enabled, the section height adjusts automatically based on content. <Note> Desktop height options are disabled when this setting is active. </Note> ### Height mobile Sets the section height on mobile devices. **Range:** 40vh – 80vh </Tab> <Tab title="Map settings"> These settings apply when **Map** layout is selected. ### Google Maps API key Required to display the Google Map. <Warning> You must create a Google Maps API key and paste it here. </Warning> ### Zoom Controls how close the map is to the store pins. **Range:** 0 – 21 Higher values zoom in closer to the location. <img alt="Google Maps configuration" /> </Tab> <Tab title="Cards settings"> These settings affect all store cards. ### Card background styles Controls the visual appearance of store cards. **Available options:** Solid color, Blurred, Transparent <img alt="Card background style options" /> </Tab> </Tabs> ## Block settings Block settings control individual store locations and navigation cards. There are **two block types**: * Pin (multiple allowed) * See more card (maximum 1) <Tabs> <Tab title="Pin block"> Represents an individual store location. ### Store name Store title displayed on the card and map. * Rich text support (bold, italic, links) ### Address Store address information. * Textarea input ### Opening hours Store working hours. * Rich text support ### Store image Optional image representing the store. * Shopify image selector <img alt="Pin block basic information" /> ## Store location Used to position the pin on the map. ### Latitude Latitude coordinate of the store. * Text input ### Longitude Longitude coordinate of the store. * Text input ### Custom tooltip text Text shown when hovering over the map pin. * Textarea input <Note> If left blank, the store name will be used. </Note> <img alt="Store location coordinates" /> ## Actions Interactive buttons displayed on the store card. ### Button style Controls the style of action buttons. **Available options:** Filled, Outlined, Default ### Phone button name Label for the phone call button. ### Phone Phone number used for click-to-call action. ### Directions button name Label for the directions button. ### Custom directions link Custom URL for directions. * Shopify URL input <Note> If left blank, a Google Maps directions link will be generated automatically. </Note> <img alt="Store action buttons configuration" /> </Tab> <Tab title="See more card block"> Optional block used to direct users to a full store list or another page. <Warning> Only **one See more card** can be added per section. </Warning> ### Title Main title of the card. * Rich text support ### Button style Controls the button appearance. **Available options:** Filled, Outlined, Default ### Button label Text displayed on the button. ### Button link Destination URL for the button. ### Display search box on maps layout Shows a search box when **Map** layout is active. **Available options:** True / False ### Color scheme Controls background and text colors of the card. * Shopify color scheme selector <img alt="See more card configuration" /> </Tab> </Tabs> ## Best practices * Always verify latitude and longitude values using a reliable mapping service * Use consistent card background styles across all store locations for visual harmony * Keep store names and addresses concise and easy to scan * Use the See more card to link to a dedicated store page with additional locations * Ensure Google Maps API key is active and properly configured with necessary restrictions * Include accurate opening hours and update them for holidays or special occasions * Test map pins on mobile devices to ensure proper touch interaction * Use high-quality store images that represent the location accurately * Provide both phone and directions options for better user experience ## Common use cases * **Physical store listings** - Display retail locations for customers to visit * **Dealer or reseller maps** - Show authorized dealers or distributors * **Multi-location businesses** - Showcase franchise or chain locations * **Showroom finders** - Help customers find product showrooms or experience centers ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Testimonials Source: https://docs.digifist.com/themes/release/sections/testimonials Showcase customer feedback, reviews, or quotes with ratings, images, and multiple layout options. The Testimonials section showcases customer feedback, reviews, or quotes in a visually engaging format. It supports ratings, images, autoplay behavior, and multiple layout options for desktop and mobile. Testimonials help build trust and credibility by displaying authentic customer experiences, making them essential for conversion optimization and social proof strategies. <img alt="Testimonials section overview" /> ## What this section controls This section controls testimonial displays with the following capabilities: * Multiple testimonial slides with customer feedback * Star or circle rating styles * Single, multi-slide, or carousel layout options * Optional image display with flexible positioning * Device-specific visibility controls * Autoplay functionality for dynamic presentations ## How the Testimonials section works The Testimonials section uses a block-based system: * Displays customer testimonials as slides * Supports star or circle rating styles * Allows single, multi, or carousel layouts * Each testimonial is added as a separate block * Fully responsive with device-specific visibility controls ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Testimonials section"> Add the Testimonials section to your page or template. </Step> <Step title="Add testimonial slides"> Click **Add Testimonial slide** to add customer reviews. </Step> <Step title="Configure settings"> Adjust layout, rating style, and autoplay settings. </Step> </Steps> <img alt="Testimonials section in Theme Customizer" /> ## Section settings Section settings control the overall appearance, layout, and behavior of the testimonials. <Tabs> <Tab title="Content"> ### Heading Main title of the testimonials section. * Rich text supported (bold, italic, underline, links) ### Heading size Controls the size of the heading. **Available options:** S, M, L, XL ### Subheading Optional subtitle displayed below the heading. * Rich text supported (bold, italic, underline, links) ### Rating style Controls how ratings are visually represented. **Available options:** * **None:** No rating indicator is shown * **Star:** Displays star-based ratings * **Circle:** Displays circular rating indicators <img alt="Rating style options" /> </Tab> <Tab title="General settings"> ### Layout Defines how testimonial slides are displayed. **Available options:** * **Single slide:** One testimonial is shown at a time * **Multi slide:** Multiple testimonials are visible at once * **Carousel:** Testimonials slide automatically <Warning> When Carousel is selected, the image will not appear. </Warning> <img alt="Layout options comparison" /> ### Autoplay interval Controls how often slides change automatically. **Range:** 0 – 5 seconds * Set to `0` to disable autoplay </Tab> <Tab title="Media settings"> ### Image Optional image displayed alongside testimonials. * Shopify image selector ### Image position Controls where the image appears relative to the content. **Available options:** Start, End ### Image aspect ratio Controls the aspect ratio of the image. **Available options:** Auto, 1:1, 4:3, 3:4, 9:16 ### Show on Controls which devices display the image. **Available options:** Desktop, Mobile, Both <img alt="Media configuration options" /> </Tab> <Tab title="Block settings (global)"> These settings apply to all testimonial blocks. ### Inner spacing Controls the spacing inside each testimonial card. **Available options:** No, S, M, L, XL <img alt="Inner spacing options" /> </Tab> </Tabs> ## Block settings Block settings control individual testimonial slides. Each block represents a single testimonial. <Tabs> <Tab title="Testimonial content"> ### Author Name of the person providing the testimonial. * Text input ### Quote Main testimonial content. * Rich text supported (bold, italic, links) ### Rating score Defines the rating value for the testimonial. **Range:** 0 – 5 Displayed based on the selected rating style. <img alt="Testimonial block configuration" /> </Tab> </Tabs> ## Best practices * Keep testimonials concise and authentic - aim for 2-3 sentences maximum * Use consistent rating values for clarity and credibility * Avoid carousel layout if images are important for visual storytelling * Use autoplay sparingly (3-5 seconds minimum) for readability * Ensure author names are real or brand-consistent to maintain trust * Include a mix of specific product benefits and emotional responses * Use high-quality images that complement but don't distract from testimonial text * Test on mobile devices to ensure text remains readable * Consider using 3-5 testimonials to provide sufficient social proof without overwhelming ## Common use cases * **Customer reviews** - Display product or service feedback with ratings * **Brand testimonials** - Showcase client success stories and experiences * **Influencer quotes** - Feature endorsements from industry experts or personalities * **Social proof sections** - Build trust with authentic customer voices * **Post-purchase feedback highlights** - Share positive experiences to encourage conversions ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Trust Indicators Source: https://docs.digifist.com/themes/release/sections/trust-indicators Display key brand promises and trust-building messages with icons and customizable layouts. The Trust Indicators section displays key brand promises, service highlights, or trust-building messages in a visually engaging format. It supports icons, text content, and optional links to provide customers with confidence-building information. Trust indicators help build credibility and reduce purchase anxiety by highlighting key value propositions like free shipping, secure payments, or quality guarantees in a scannable, visual format. <img alt="Trust Indicators section overview" /> ## What this section controls This section controls trust indicator displays with the following capabilities: * Up to 4 customizable indicator tiles * Theme icons or custom image support * Horizontal or vertical content layouts * Carousel behavior on mobile and tablet * Flexible alignment and sizing options * Section-level and block-level color schemes ## How the Trust Indicators section works The Trust Indicators section uses a block-based system: * Displays trust indicators as individual tiles * Supports up to 4 indicator blocks * Icons can be theme icons or custom images * Content direction can be horizontal or vertical * Supports carousel behavior on mobile and tablet * Fully customizable alignment and sizing ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Trust Indicators section"> Add the Trust Indicators section to your page or template. </Step> <Step title="Add indicator blocks"> Click **Add Indicator** to create trust indicator tiles. </Step> <Step title="Configure content"> Add heading, icon, and optional link for each indicator. </Step> </Steps> <img alt="Trust Indicators section in Theme Customizer" /> ## Section settings Section settings control slideshow behavior, content styling, and overall layout. <Tabs> <Tab title="Slideshow"> ### Swipe on mobile Enables carousel behavior on mobile devices. **Options:** True / False **Default:** True ### Slideshow autoplay interval Controls automatic slide advancement. **Range:** 0 – 10 seconds * Set to `0` to disable autoplay * Default: 3 seconds <img alt="Slideshow configuration" /> </Tab> <Tab title="Content of blocks"> ### Content direction Controls the layout direction of icon and text. **Available options:** * **Horizontal:** Icon and text appear side by side * **Vertical:** Icon appears above text **Default:** Horizontal <img alt="Content direction options" /> ### Content alignment Controls horizontal alignment of content. **Available options:** Start, Center, End **Default:** Center ### Content size Controls the size of title text. **Available options:** S, M, L **Default:** L ### Icon size Controls the size of icons. **Range:** 2.4rem – 12.8rem **Default:** 4.8rem <img alt="Content styling options" /> ### Color scheme for blocks Controls background and text colors for indicator tiles. * Shopify color scheme selector * **Default:** Scheme 1 </Tab> <Tab title="Settings"> ### Section width Controls the maximum width of the section. **Available options:** * **Page:** Standard page width * **Fluid:** Wider than page width * **Full:** Full viewport width **Default:** Page ### Color scheme Controls background and text colors for the section container. * Shopify color scheme selector * **Default:** Scheme 1 ### Spacing top Controls spacing above the section. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Controls spacing below the section. **Available options:** None, S, M, L, XL **Default:** M <img alt="Section width and spacing settings" /> </Tab> </Tabs> ## Block settings Block settings control individual indicator tiles. Each block represents a single trust indicator. <Warning> Maximum of 4 indicator blocks can be added per section. </Warning> <Tabs> <Tab title="Indicator content"> ### Heading Main title text for the indicator. * Inline rich text supported (bold, italic, links) * **Default:** "Title of the trust indicator" ### Subheading Optional descriptive text below the heading. * Inline rich text supported ### Link label Text for the optional link. <Note> Leave empty to hide the link. </Note> ### Link Destination URL for the link. * Shopify URL selector * **Default:** / <img alt="Indicator content configuration" /> </Tab> <Tab title="Icon"> ### Icon Theme icon identifier. * Text input * **Default:** theme-box <Tip> See available icons in theme documentation. </Tip> ### Custom icon Upload a custom icon image. * Shopify image picker <Warning> Overwrites theme icon when selected. </Warning> <img alt="Icon configuration options" /> </Tab> </Tabs> ## Best practices * Keep headings concise and impactful (2-5 words) for quick comprehension * Use consistent icon sizes across all indicators for visual harmony * Limit to 3-4 indicators for optimal clarity and to avoid overwhelming users * Choose icons that clearly represent the message being communicated * Use custom icons for brand consistency and unique visual identity * Test carousel behavior on mobile devices to ensure smooth interaction * Ensure sufficient color contrast for readability across all color schemes * Order indicators by importance or customer priorities * Use actionable language that builds confidence ("Free Shipping", "Secure Checkout") * Consider placement above the fold or near add-to-cart for maximum impact ## Common use cases * **Free shipping and return policies** - Highlight shipping benefits to reduce cart abandonment * **Secure payment guarantees** - Build trust with payment security messaging * **Customer service highlights** - Showcase 24/7 support or easy contact options * **Sustainability commitments** - Display eco-friendly practices or certifications * **Quality assurance messages** - Emphasize product quality or guarantees * **Delivery time promises** - Set clear expectations for shipping timelines ## Related guides <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Vendors Source: https://docs.digifist.com/themes/release/sections/vendor-list Display a list of product vendors/brands with optional logos and navigation. The Vendors section creates a directory of product brands/vendors with optional logos, vendor-specific navigation, and metaobject integration. Perfect for multi-brand stores showcasing their brand partners. <img alt="Vendors section overview" /> ## What this section controls * Automatic vendor list from product collections * Optional vendor logo display * Metaobject integration for enhanced vendor data * Vendor navigation filtering * Logo height customization * Card-based layout with color schemes * Content alignment options ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Vendors section"> Add the section to your desired page or template. </Step> <Step title="Configure vendor display"> Enable vendor logos and set logo height preferences. </Step> <Step title="Optional: Add metaobject"> Connect a metaobject for enhanced vendor information. </Step> </Steps> <img alt="Vendors section in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Vendors"> ### Show vendor logo Displays vendor logos when available. **Default:** False <Note> Vendor logo will be displayed if available in your product data or metaobject. </Note> ### Show navigation Controls where vendor navigation filtering appears. **Available options:** * **Desktop:** Desktop only * **Mobile:** Mobile only * **Both:** All devices **Default:** Both <Tip> Navigation allows customers to filter vendors alphabetically or by category. </Tip> ### Metaobject for vendors Connect a metaobject definition for additional vendor data. * Text field for metaobject handle <Note> Use metaobjects to add custom vendor information like descriptions, logos, or links. </Note> ### Logo height Controls the height of vendor logos. **Range:** 10 – 100 px **Default:** 50 px <Tip> Default value is 50px. Adjust based on your logo dimensions for optimal display. </Tip> <img alt="Vendor settings" /> </Tab> <Tab title="Layout"> ### Color scheme for cards Background and text colors for vendor cards. * Shopify color scheme selector * **Default:** Scheme 1 ### Content alignment Controls alignment of vendor names and logos within cards. **Available options:** Start, Center, End **Default:** Center <img alt="Layout settings" /> </Tab> <Tab title="Settings"> ### Color scheme Overall section background and text colors. * Shopify color scheme selector * **Default:** Scheme 1 ### Section container width Maximum width of section. **Available options:** * **Page:** Standard page width * **Fluid:** Wider than page width **Default:** Page ### Spacing top Space above section. **Available options:** No, S, M, L, XL **Default:** M ### Spacing bottom Space below section. **Available options:** No, S, M, L, XL **Default:** M <img alt="Section settings" /> </Tab> </Tabs> ## How vendors are populated The Vendors section automatically collects all unique vendors from your product catalog: * Extracts vendor names from product metadata * Displays each vendor as a clickable card * Links to vendor-specific collection pages * Shows vendor logo when available ## Metaobject integration Enhance vendor listings with metaobjects: 1. Create a metaobject definition for vendors in Shopify admin 2. Add fields like logo, description, website URL, social links 3. Enter the metaobject handle in section settings 4. Section automatically displays enhanced vendor information <img alt="Metaobject setup for vendors" /> ## Best practices * Enable vendor logos for visual brand recognition and credibility * Set logo height between 40-60px for optimal card display * Use metaobjects to add rich vendor information beyond basic product data * Enable navigation on both devices for better filtering experience * Use center alignment for logo-centric displays * Use start alignment when including vendor descriptions * Match card color scheme with your brand colors * Keep vendor names consistent across products for accurate grouping * Test with different logo sizes to find optimal balance * Ensure vendor logos are high-resolution for crisp display ## Common use cases * **Multi-brand stores** - Showcase all brands carried in your store * **Designer directory** - Display fashion designers or artists * **Manufacturer listings** - Show product manufacturers * **Brand partnerships** - Highlight brand collaborations * **Wholesale portals** - Vendor directories for B2B stores * **Marketplace platforms** - Display all sellers or creators * **Beauty brands** - Cosmetics and skincare brand showcases ## Related guides <Card title="Page: Vendors" icon="building" href="/themes/release/page-vendors"> Learn more about the vendors page template </Card> <Card title="Common Settings" icon="sliders" href="/themes/release/common-settings"> Learn about common settings shared across sections </Card> # Buttons and inputs Source: https://docs.digifist.com/themes/release/theme-settings/buttons-and-inputs Customize button typography, corner radius, and styling across your store. Button and input settings control the appearance of all buttons, form inputs, and interactive elements throughout your store. Once you configure these settings, they apply consistently to add-to-cart buttons, form submissions, newsletter signups, and other interactive elements without needing section-by-section adjustments. ## What these settings control * Button typography (font family, weight, size, letter spacing) * Button corner radius (roundness) * Button icon styles and positioning * Visual consistency across all buttons and inputs * Form input field appearance ## How to access <Steps> <Step title="Open the Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Navigate to button settings"> In the theme editor sidebar, select **Theme settings** → **Buttons and inputs**. </Step> <Step title="Adjust settings"> Modify typography, corner radius, and icon options as needed. </Step> <Step title="Save changes"> Click **Save** to apply changes to all buttons and inputs across your store. </Step> </Steps> ## Settings <Tabs> <Tab title="Typography"> ### Button typography Controls text appearance within all buttons throughout your store. **Font family**: Select the font used for button text. Available options depend on fonts configured in [Typography settings](/themes/release/theme-settings/typography). **Font weight**: Choose text weight for button labels (300-700). We recommend at least **500 (Medium)** for readability. **Font size**: Adjust button text size in **rem** units. Typical range is 0.875rem to 1.25rem. Minimum recommended size is 1rem (16px) for accessibility. **Letter spacing**: Control spacing between letters, measured in **em** units. Uppercase text often benefits from increased letter spacing (0.05-0.1em). <Tip>We recommend using your heading font for buttons to create visual emphasis and distinguish interactive elements.</Tip> </Tab> <Tab title="Shape & Style"> ### Corner radius Controls roundness of buttons and input fields, measured in **rem** units. Higher values create more rounded corners. **0rem**: Sharp edges, modern geometric look\ **0.25-0.5rem**: Subtle rounding, professional with warmth\ **1-1.5rem**: Moderate rounding, friendly appearance\ **2-5rem**: Pill-shaped, distinctive and playful <Tip>Match button corner radius with card corner radius for design consistency.</Tip> ### Button icon style Choose whether button icons use **Outline** (stroke-based) or **Solid** (filled) styles. **Outline**: Lighter, minimalist appearance\ **Solid**: Bolder, more prominent with filled icons <Note>This setting affects icons in add-to-cart buttons, quick-add buttons, and other button elements throughout your store.</Note> </Tab> </Tabs> ## Best practices * Use at least 500 font weight and 1rem (16px) minimum font size for readability * Match button corner radius with cards and inputs for design consistency * Ensure minimum 4.5:1 contrast ratio between button text and background * Test buttons on mobile devices to verify touch target sizes (minimum 44x44px) * Add 0.05-0.1em letter spacing when using uppercase button text * Use heading font for buttons to create visual emphasis <Warning>These typography settings only affect text appearance and shape. Button colors are controlled separately in the Colors settings.</Warning> ## Related guides * [Colors](/themes/release/theme-settings/colors) - Configure button background and text colors * [Typography](/themes/release/theme-settings/typography) - Manage font families used in buttons * [Cards](/themes/release/theme-settings/cards) - Coordinate corner radius with card elements * [Products](/themes/release/theme-settings/products) - Configure add-to-cart and quick-add button behaviors # Cards Source: https://docs.digifist.com/themes/release/theme-settings/cards Customize the appearance and layout of cards used for collections and blog posts. Card settings control corner radius, text alignment, and aspect ratios for cards throughout your store. Once you understand them, you can maintain visual consistency across collection pages, blog listings, and featured content without manually adjusting each section. ## What these settings control * Corner radius for all cards (rounded or sharp corners) * Text alignment within cards * Card container aspect ratios * Media aspect ratios within cards * How images fit within card boundaries * Overlay effects for text readability ## How to access <Steps> <Step title="Open the Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Navigate to card settings"> In the theme editor sidebar, select **Theme settings** → **Cards**. </Step> <Step title="Adjust settings"> Modify corner radius, text alignment, and ratio options as needed. </Step> <Step title="Save changes"> Click **Save** to apply your changes across all card elements. </Step> </Steps> ## Settings <Tabs> <Tab title="Appearance"> ### Corner radius Controls the roundness of card corners, measured in **rem** units. Higher values create more rounded corners. **Available values**: 0rem (sharp), 0.5rem, 1rem, 1.5rem, 2rem (very rounded) <Tip>Match corner radius with your button corner radius for design consistency.</Tip> ### Text alignment Choose how text is positioned within cards: **Left**, **Center**, or **Right**. **Left alignment**: Natural reading flow, works with varying text lengths\ **Center alignment**: Symmetrical appearance, use only when all card text is consistently brief\ **Right alignment**: For RTL languages or specific design requirements </Tab> <Tab title="Ratios"> ### Card ratio Defines the overall shape of the card container. **Adapt to image**: Card height adjusts to match image dimensions\ **Portrait (2:3)**: Taller cards with vertical emphasis\ **Square (1:1)**: Uniform, balanced grid appearance\ **Landscape (4:3)**: Wider cards for horizontal imagery ### Media ratio Controls aspect ratio of images and videos within cards. **Adapt to image**: Media displays at its original aspect ratio\ **Portrait (2:3)**: Forces vertical emphasis on all media\ **Square (1:1)**: Forces consistent square dimensions\ **Landscape (4:3)**: Forces horizontal emphasis on all media <Note>Media ratio can be set independently from card ratio. For example, you can have square cards with landscape images inside.</Note> </Tab> <Tab title="Media Display"> ### Media fit Determines how images fill the card space. **Cover**: Image fills entire area, may crop edges (recommended for consistent grids)\ **Contain**: Full image visible, may show empty space around edges\ **Fill**: Image stretches to fill space, may distort proportions <Tip>We recommend using **Cover** for consistent card heights and clean grids.</Tip> ### Media overlay Adds a semi-transparent dark overlay on images to improve text readability when text appears directly over card images. **Enable for desktop**: Overlay appears only on desktop screens\ **Enable for mobile**: Overlay appears only on mobile devices\ **Enable for both**: Overlay appears on all devices\ **Disabled**: No overlay applied </Tab> </Tabs> ## Best practices * Match corner radius with button settings for design consistency * Use left alignment for varying text lengths, center alignment only for consistently brief content * Test card settings with various image sizes before finalizing * Enable overlays only when text appears over images * Preview on mobile devices as card appearance can differ on small screens * Plan for image cropping when using "Cover" fit <Warning>Changing card ratios affects how images are cropped. After adjusting these settings, review your collection and blog pages to ensure images display as intended.</Warning> ## Related guides * [Colors](/themes/release/theme-settings/colors) - Coordinate card colors with your overall color scheme * [Typography](/themes/release/theme-settings/typography) - Adjust text styles within cards * [Products](/themes/release/theme-settings/products) - Configure product-specific card settings * [Layout](/themes/release/theme-settings/layout) - Control overall page width affecting card grids # Colors Source: https://docs.digifist.com/themes/release/theme-settings/colors Customize color schemes and individual color settings across your store. Color settings control background colors, text colors, button colors, and accent colors throughout your store. Once you define your color scheme, sections automatically apply these colors consistently, while still allowing section-specific overrides when needed. ## What these settings control * Color schemes (light, dark, custom variations) * Background colors for sections * Text colors (body, headings, links) * Button colors (primary, secondary, outline) * Accent and border colors * Color scheme inheritance across sections ## How to access <Steps> <Step title="Open the Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Navigate to color settings"> In the theme editor sidebar, select **Theme settings** → **Colors**. </Step> <Step title="Select or customize schemes"> Choose from preset color schemes or customize individual colors within each scheme. </Step> <Step title="Save changes"> Click **Save** to apply color changes across your store. </Step> </Steps> ## Settings <Tabs> <Tab title="Color Schemes"> Color schemes are collections of related colors that work together harmoniously. The theme includes several pre-configured schemes. **Scheme 1**: Primary color scheme for most sections\ **Scheme 2**: Alternative scheme for visual variety\ **Scheme 3**: Additional variation for special emphasis\ **Inverse**: High-contrast scheme, typically dark background <Note>Sections inherit color schemes from these global settings, but you can override them on a per-section basis.</Note> </Tab> <Tab title="Backgrounds"> ### Background colors Each color scheme includes background color settings that define the foundation of your design. **Background**: Primary background color for sections. Ensure sufficient contrast with text (minimum 4.5:1 for body text). **Background gradient**: Optional gradient overlay applied on top of the background color. <Tip>Leave gradient empty for solid colors. Use subtle gradients (5-10% opacity) for best results.</Tip> </Tab> <Tab title="Text Colors"> ### Typography colors Define text colors for different content types within each color scheme. **Body text**: Primary text color for content and descriptions. Requires minimum **4.5:1** contrast ratio against background. **Headings**: Color for headings (h1-h6). Can match body text or use brand color for emphasis. Requires minimum **3:1** contrast for large text. **Links**: Color for hyperlinks. Must be visually distinct from body text with sufficient contrast against background. </Tab> <Tab title="Buttons"> ### Button colors Each color scheme includes settings for three button styles. **Solid buttons**: Primary action buttons with filled backgrounds. Requires minimum 4.5:1 contrast between label and background. **Outline buttons**: Secondary action buttons with borders instead of fills. **Secondary buttons**: Tertiary or alternative button style. </Tab> <Tab title="Accents"> ### Accent colors Supporting colors for UI elements and emphasis. **Accent color**: Highlight color used for icons, badges, decorative elements, and focus states. **Border color**: Color for lines, dividers, and element borders. Use subtle colors with low contrast (10-20% opacity). </Tab> </Tabs> ## Best practices * Test contrast ratios: Body text requires minimum 4.5:1, large text requires minimum 3:1 contrast * Limit to 2-3 color schemes throughout your store for consistency * Build schemes around your brand colors while ensuring web readability * Test colors on multiple devices and screen types * Ensure images and icons work on all background colors * Use subtle gradients (5-10% opacity) when needed <Warning>Changing color schemes affects multiple sections simultaneously. Preview changes across different page types before saving.</Warning> ## Related guides * [Buttons and inputs](/themes/release/theme-settings/buttons-and-inputs) - Configure button shapes and typography * [Typography](/themes/release/theme-settings/typography) - Coordinate text styles with your color choices * [Common settings](/themes/release/common-settings) - Apply color schemes to specific sections * [Cards](/themes/release/theme-settings/cards) - Card appearance inherits from color schemes # Drawers Source: https://docs.digifist.com/themes/release/theme-settings/drawers Customize drawer appearance and content display for cart, menu, and filter drawers. Drawer settings control the visual style and content display for slide-out panels used throughout your store. Once configured, these settings apply to cart drawers, navigation menus, filter panels, and country/language selectors, ensuring a consistent drawer experience across all interactions. ## What these settings control * Drawer color schemes * Heading visibility in drawers * Content display options * Country/language selector display format * Visual consistency across all drawer types ## How to access <Steps> <Step title="Open the Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Navigate to drawer settings"> In the theme editor sidebar, select **Theme settings** → **Drawers**. </Step> <Step title="Adjust settings"> Configure color scheme, heading display, and content options. </Step> <Step title="Save changes"> Click **Save** to apply changes to all drawers across your store. </Step> </Steps> ## Settings <Tabs> <Tab title="Appearance"> **Color scheme**: Choose which color scheme applies to all drawers. We recommend using your inverse or contrasting scheme to differentiate drawers from main page content. </Tab> <Tab title="Content Display"> **Show heading**: Enable or disable heading display in drawers. We recommend keeping headings enabled for clarity. **Show content**: Control whether additional descriptive content (helper text, instructions) appears in drawers. </Tab> <Tab title="Localization"> **Country/language selector display**: Choose how the country and language selector appears in drawers. **Country/region name**: Shows full names\ **Country/region and currency**: Shows names with currency codes (recommended for international stores)\ **Currency**: Shows only currency codes <Note>This setting only affects display in drawers. Other currency selectors may have separate settings.</Note> </Tab> </Tabs> ## Best practices * Use a contrasting color scheme for drawers to create clear visual separation from main content * Keep headings enabled for better user orientation, especially on mobile devices * For international stores, show both country names and currencies * Test drawer functionality on mobile devices where they replace full-page navigation <Warning>Drawer settings apply globally to all drawer types. You cannot configure cart, menu, and filter drawers separately.</Warning> ## Related guides * [Colors](/themes/release/theme-settings/colors) - Manage color schemes applied to drawers * [Header](/themes/release/header/header) - Configure menu drawer trigger in the header * [Cart](/themes/release/cart) - Customize cart drawer content and functionality # Features Source: https://docs.digifist.com/themes/release/theme-settings/features Enable or disable global theme features including search, navigation, animations, and social media. Feature settings act as master toggles for major theme functionality. Enabling or disabling features here affects their availability throughout your entire theme, providing centralized control over what capabilities are active in your store. ## What these settings control * Search functionality and predictive search * Quick add to cart capabilities * Navigation breadcrumbs display * Product variant picker styles * Animation and motion preferences * Product image zoom functionality * Social media sharing buttons ## How to access <Steps> <Step title="Open the Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Navigate to features"> In the theme editor sidebar, select **Theme settings** → **Features**. </Step> <Step title="Toggle features"> Enable or disable features using the checkboxes. </Step> <Step title="Save changes"> Click **Save** to apply feature changes across your store. </Step> </Steps> ## Settings <Tabs> <Tab title="Search & Discovery"> **Enable search**: Controls whether the search feature is available in your store. We recommend keeping this enabled for stores with more than 20 products. **Enable predictive search**: Adds instant search results as customers type. Requires "Enable search" to be enabled. <Warning>Disabling search may significantly impact user experience and conversion rates for stores with extensive inventories.</Warning> </Tab> <Tab title="Product Features"> **Enable quick add**: Allows customers to add products to cart directly from collection pages without visiting product pages. **Product variant picker**: Choose how product variants are displayed.\ **Dropdown**: Traditional select menu, compact and familiar\ **Pills**: Visual button-style selector, more engaging (recommended for color/size variants) **Enable image zoom**: Allows customers to hover over product images to see zoomed details (desktop only). </Tab> <Tab title="Navigation"> **Enable breadcrumbs**: Shows navigation trail (Home > Collection > Product) helping customers understand their location. We recommend keeping this enabled for better navigation and SEO. </Tab> <Tab title="Engagement"> **Enable animations**: Controls whether elements animate when scrolling into view. The theme respects `prefers-reduced-motion` accessibility settings automatically. **Enable social sharing**: Adds social media share buttons to product pages. </Tab> </Tabs> ## Best practices * Enable search and predictive search for stores with 20+ products * Use Pills for visual variants (color, size), Dropdown for technical options or 10+ variants * Test quick add functionality with your specific products before keeping it enabled * Keep animations enabled as theme respects accessibility preferences automatically * Monitor feature usage in analytics and disable underused features * Test features on actual mobile devices, not just browser emulation <Note>Feature changes apply immediately but may require clearing browser cache to see updates on previously visited pages.</Note> ## Related guides * [Products](/themes/release/theme-settings/products) - Configure product card and page display * [Performance](/themes/release/theme-settings/performance) - Optimize animations and loading * [Social Media](/themes/release/theme-settings/social-media) - Configure social profiles and sharing # Overview Source: https://docs.digifist.com/themes/release/theme-settings/index Welcome to the new home for your documentation You can use customize theme settings in the sidebar menu of the Theme Customizer to make changes to your online store's typography, colors, social media links, cart page and more.\ **Theme settings changes apply to your entire online store.** <Info> **PATH:** Online Store > Themes > Customize > Theme Settings </Info> # Layout Source: https://docs.digifist.com/themes/release/theme-settings/layout Configure page width, section spacing, and overall layout structure for your store. Layout settings control the fundamental structure and spacing of your store pages. These settings determine how content spreads across the screen, how much whitespace appears between sections, and the overall visual rhythm of your site. ## What these settings control * Maximum page width * Section vertical spacing * Content distribution across screen sizes * Overall site proportions * Whitespace and breathing room ## How to access <Steps> <Step title="Open the Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Navigate to layout settings"> In the theme editor sidebar, select **Theme settings** → **Layout**. </Step> <Step title="Adjust width and spacing"> Configure page width and section spacing using the controls. </Step> <Step title="Save changes"> Click **Save** to apply layout changes to your entire store. </Step> </Steps> ## Settings <Tabs> <Tab title="Page Width"> **Page width**: Sets the maximum width for your site's content container. **1200px - 1400px**: Standard width (recommended for most stores)\ **1400px - 1600px**: Wide layout (requires high-quality images)\ **1000px - 1200px**: Narrow layout (better for text-heavy content) <Tip>Match your page width to your image quality. Wider layouts require higher resolution images.</Tip> </Tab> <Tab title="Spacing"> **Section vertical spacing**: Controls the gap between page sections. **Small (40-60px)**: Compact spacing, more content visible\ **Medium (60-80px)**: Balanced spacing (recommended default)\ **Large (80-120px)**: Generous spacing, luxury feel\ **Extra Large (120-160px)**: Maximum breathing room, ultra-premium positioning <Note>Mobile devices automatically use reduced spacing to maximize screen real estate.</Note> </Tab> </Tabs> ## Best practices * Match page width to your image quality and content type * Use Medium spacing as default, adjust based on brand positioning * Test layout on actual devices at different screen sizes * Match section spacing to your section count (more sections need tighter spacing) * Consider mobile experience when choosing wide layouts <Warning>Changing page width after launch requires reviewing all sections, banners, and images to ensure they still look good at the new width.</Warning> ## Related guides * [Colors](/themes/release/theme-settings/colors) - Configure color schemes for sections * [Typography](/themes/release/theme-settings/typography) - Set font sizes that work with your layout * [Performance](/themes/release/theme-settings/performance) - Optimize large layouts for loading speed # Performance Source: https://docs.digifist.com/themes/release/theme-settings/performance Optimize site speed through image loading strategies, animation controls, and performance settings. Performance settings directly impact your store's loading speed, responsiveness, and overall user experience. Proper configuration balances visual quality with fast load times, ensuring customers don't abandon your site due to slow performance. ## What these settings control * Image loading strategies * Animation and motion effects * Resource loading priorities * Mobile performance optimization * Core Web Vitals optimization ## How to access <Steps> <Step title="Open the Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Navigate to performance settings"> In the theme editor sidebar, select **Theme settings** → **Performance**. </Step> <Step title="Configure optimization"> Adjust image loading and animation settings based on your priorities. </Step> <Step title="Save and test"> Click **Save** and test performance using PageSpeed Insights or similar tools. </Step> </Steps> ## Settings <Tabs> <Tab title="Image Optimization"> **Image loading**: Controls how and when images load on your pages. * **Eager**: All images load immediately. Use for critical above-fold hero images. * **Lazy** (recommended): Images load when scrolling into view. Improves initial load speed and Core Web Vitals. Best for pages with many images. * **Auto**: Browser decides loading strategy automatically. <Tip>Use **Lazy** for collection pages with 20+ images. Use **Eager** only for critical hero images.</Tip> **Image formats**: Theme automatically serves WebP images to modern browsers (20-30% smaller) while falling back to JPG/PNG for older browsers. Upload high-quality JPG/PNG images—the theme handles conversion automatically. <Note>WebP support is built-in. No action needed on your part.</Note> </Tab> <Tab title="Animations"> **Enable animations**: Controls scroll-triggered animations for sections and elements. When enabled, elements fade in or slide when scrolling into view. Automatically disabled for users with `prefers-reduced-motion` accessibility setting. Animations use CSS transforms (GPU-accelerated) with minimal performance impact. **Animation style** (when animations are enabled): * **Subtle**: Gentle fades and small movements. Professional and understated. * **Standard**: Noticeable but balanced animations (recommended default). * **Bold**: Dramatic entrances. Best for creative/fashion brands. </Tab> <Tab title="Fine-tuning"> **Preload key resources**: Tells the browser to load critical resources (fonts, hero images) early in the page load process. Improves First Contentful Paint (FCP) and prevents flash of unstyled text. Keep enabled for better perceived speed. <Warning>Only the most critical resources are preloaded. Don't manually add preload tags for every asset.</Warning> **Reduce motion on mobile**: Automatically reduces or disables animations on mobile devices. When enabled, mobile devices see fewer animations, improving performance on older/budget phones and battery life. Enable if you have international audience with varied devices. **Defer non-critical JavaScript**: Delays loading of non-essential JavaScript (quick view, filters, third-party widgets) until after page content loads. Improves Time to Interactive (TTI) and Core Web Vitals. Keep enabled to prioritize content over interactivity. </Tab> </Tabs> ## Best practices * **Prioritize above-fold content**: Use Eager loading for hero images, Lazy loading for everything below fold * **Test on real devices**: Test on budget Android phones, older iPhones, and tablets with slow 3G connections * **Monitor Core Web Vitals**: Track LCP (\< 2.5s), FID (\< 100ms), and CLS (\< 0.1) using Google PageSpeed Insights * **Balance quality and speed**: Use high quality + eager loading for hero images, good quality + lazy loading for product images * **Optimize images before upload**: Resize to display size, compress to 100-200KB per image using ImageOptim or TinyPNG * **Consider your audience**: International customers need aggressive optimization, premium audiences can support more features * **Test after changes**: Measure performance impact using PageSpeed Insights, GTmetrix, or WebPageTest <Warning>Aggressive performance optimization can harm user experience. Don't sacrifice essential animations or image quality just to hit perfect scores.</Warning> <Tip>Start with recommended defaults (lazy loading, animations enabled, defer JavaScript). Only adjust if you have specific performance issues.</Tip> ## Related guides * [Images](/themes/release/essentials/images) - Best practices for preparing and uploading images * [Features](/themes/release/theme-settings/features) - Disable unused features to improve performance * [Layout](/themes/release/theme-settings/layout) - Page width affects image loading requirements # Products Source: https://docs.digifist.com/themes/release/theme-settings/products Configure product card appearance, badges, quick view, and display options for collections and search results. Product settings control how your products appear throughout your store—on collection pages, search results, and related product sections. These settings ensure consistent, attractive product presentation that encourages browsing and purchasing. ## What these settings control * Product card layout and style * Product badges and labels * Quick view functionality * Variant display options * Product image settings * Price display format ## How to access <Steps> <Step title="Open the Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Navigate to product settings"> In the theme editor sidebar, select **Theme settings** → **Products**. </Step> <Step title="Configure display options"> Adjust product card appearance, badges, and interactive features. </Step> <Step title="Save changes"> Click **Save** to apply settings across all product displays. </Step> </Steps> ## Settings <Tabs> <Tab title="Card Appearance"> **Product card style**: Choose the visual style for product cards on collection pages. * **Standard**: Traditional card with border. Clean, defined boundaries for any product type. * **Minimal**: Borderless cards with subtle separation. Modern aesthetic, best for fashion/lifestyle. * **Elevated**: Cards with shadow effect. Premium feel for luxury or high-end products. **Show second image on hover**: Displays alternate product image when hovering over product cards (requires 2+ images per product). Great for showing back view, alternate angle, or lifestyle shot. <Tip>Upload alternating angles as your second image: if the first is front-facing, make second image a back or detail shot.</Tip> **Show vendor**: Displays brand/vendor name on product cards. Best for multi-brand stores or when brand awareness matters. Consider disabling for single-brand stores. </Tab> <Tab title="Badges & Labels"> **Sale badge**: Shows "Sale" or percentage discount badge on discounted products. * **Show "Sale" text**: Simple "Sale" badge for any discount amount. * **Show percentage**: Displays actual discount (e.g., "-25%"). More informative and encourages purchases. * **Disable**: No sale indicators for cleaner look (consider for luxury brands). **Sold out badge**: Indicates when products are out of stock. Keep enabled so customers know product availability before clicking. **New badge**: Highlights recently added products with "New" badge for X days (typically 7-30 days). Best for stores with frequent new arrivals or trend-driven products. **Custom badges**: Add custom badges based on product tags or metafields (e.g., "Best Seller", "Limited Edition", "Eco-Friendly"). Use sparingly (max 1-2 badge types) to avoid visual clutter. <Note>Custom badges are configured through product tags. Add specific tags (e.g., "badge:bestseller") to products you want to highlight.</Note> </Tab> <Tab title="Quick View"> **Enable quick view**: Allows customers to view product details in a popup without leaving the collection page. When enabled, "Quick view" button appears on product card hover. Best for simple products, fashion, and accessories. Consider disabling for complex products requiring detailed viewing. **Quick view content**: Choose what information appears in quick view popup. * **Minimal**: Price, variants, add to cart. Fastest loading, clean and focused. * **Standard**: Above + short description, images. Recommended default with balanced information. * **Detailed**: Above + full description, reviews, tabs. Comprehensive but may be overwhelming. </Tab> <Tab title="Variants"> **Show color swatches**: Displays color variants as visual swatches instead of dropdown. When enabled, color options appear as clickable color circles/squares. Best for fashion, home decor, or any products where color is primary decision factor. Use consistent color names (e.g., "Black", "Navy Blue") for automatic swatch generation. **Show available variants only**: Hides or disables out-of-stock variants on product cards and pages. Enable to reduce frustration—customers see only available options rather than discovering unavailable variants after selection. </Tab> <Tab title="Pricing"> **Price format**: Controls how product prices are displayed. * **Standard**: \$29.99. Clean and familiar for most stores. * **With currency code**: \$29.99 USD. Important for international stores to prevent currency confusion. * **Range for variants**: $29.99 - $49.99. Shows price range when variants have different prices. **Show 'from' price**: For products with variant pricing, show "From \$X.XX" instead of exact price. Enable for transparency so customers know the displayed price is a starting point. **Show unit pricing**: Displays price per unit (e.g., \$5.99/100g) for products sold by weight or volume. Required in many regions for consumables. Best for food, beauty products, and bulk items. </Tab> </Tabs> ## Best practices * **Match card style to brand**: Minimal cards for modern/fashion brands, Standard for traditional retail, Elevated for premium/luxury positioning * **Use badges strategically**: Max 1 badge per product. Prioritize Sale badges (drive conversion) and Sold out badges (prevent frustration) over custom badges * **Optimize hover images**: Use meaningful second images (back view, alternate angle, product in use). Maintain consistency across all products * **Enable quick view selectively**: Best for simple products with few variants. Disable for complex products needing detailed explanation * **Make variants visual**: Use color swatches for color variants (always), text/dropdowns for non-visual options (size, material) * **Be transparent with pricing**: Show "From \$X" for multi-variant pricing, include currency code for international stores, ensure collection page prices match product page * **Test on mobile**: Check that badges are readable, swatches have adequate touch target size, and quick view is mobile-optimized <Warning>Showing too much information on product cards (badges, vendor, ratings, long titles) creates visual clutter. Prioritize what truly influences purchase decisions.</Warning> <Tip>A/B test product card variations. Small changes (showing/hiding vendor, badge style, card design) can significantly impact conversion rates.</Tip> ## Related guides * [Cards](/themes/release/theme-settings/cards) - Configure card corner radius, alignment, and media display * [Colors](/themes/release/theme-settings/colors) - Customize badge and card colors * [Product Page](/themes/release/products/product-page) - Configure full product page layout * [Pre-order](/themes/release/products/pre-order) - Set up pre-order badges and functionality # Social Media Source: https://docs.digifist.com/themes/release/theme-settings/social-media Configure social media profiles, sharing options, and social integration throughout your store. Social media settings centralize your store's social presence, enabling social sharing, displaying social links, and integrating social proof. Proper configuration helps customers share your products, follow your brand, and see social validation. ## What these settings control * Social media profile links * Social sharing buttons and options * Social media icons display * Share image and text defaults * Social platform integrations ## How to access <Steps> <Step title="Open the Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Navigate to social media settings"> In the theme editor sidebar, select **Theme settings** → **Social media**. </Step> <Step title="Enter social profiles"> Add URLs for your social media accounts. </Step> <Step title="Configure sharing"> Enable or customize social sharing options. </Step> <Step title="Save changes"> Click **Save** to apply social media settings across your store. </Step> </Steps> ## Settings <Tabs> <Tab title="Social Profiles"> **Social media accounts**: Enter complete URLs for your brand's social media profiles (e.g., `https://instagram.com/yourbrand`). Supported platforms include Facebook, Instagram, Twitter/X, Pinterest, TikTok, YouTube, Snapchat, LinkedIn, Tumblr, and Vimeo. Icons appear automatically for platforms where you've added URLs in footer, header, and social link sections. <Tip>Only add platforms you actively maintain. Empty or inactive accounts damage credibility more than no link at all.</Tip> **Icon style**: Choose visual style for social media icons. * **Filled**: Solid icons with platform brand colors. Bold and eye-catching. * **Outline**: Simple line icons (recommended default). Subtle and modern. * **Brand colors**: Uses each platform's official color. Immediately recognizable but may clash with your brand. * **Monochrome**: Single color matching your theme. Most subtle, cohesive with brand design. </Tab> <Tab title="Sharing Options"> **Enable product sharing**: Adds social share buttons to product pages (typically near product title or below image). Best for visual products, gift items, unique products, and younger demographics. Consider disabling for B2B stores or if analytics show minimal usage. **Sharing platforms**: Choose which social platforms appear in share buttons. Limit to 3-4 platforms maximum based on your audience: * Visual products (fashion, home, beauty): Pinterest, Instagram, Facebook * Tech/electronics: Twitter/X, Facebook, LinkedIn * General retail: Facebook, Twitter/X, Pinterest <Note>Instagram sharing opens Instagram app if on mobile, or prompts to save image if on desktop (Instagram doesn't have native web sharing).</Note> **Default share image**: Sets the image used when your store is shared on social media. Requirements: Minimum 1200px × 630px, JPG or PNG, under 5MB. Product pages automatically use product's primary image. <Tip>Design one horizontal (1200×630) and one vertical (1000×1500) share image. Use horizontal as default, vertical specifically for Pinterest-friendly products.</Tip> **Default share text**: Text that appears when someone shares your store (keep under 100 characters). Include store name and key value proposition. Product shares automatically use product title + short description. </Tab> <Tab title="Integration"> **Facebook pixel**: Facebook/Meta pixel ID for tracking visitor behavior, enabling retargeting ads, and measuring ad campaign effectiveness. Create pixel in Facebook Business Manager, copy pixel ID, and paste into this field. Ensure your privacy policy mentions Facebook tracking. <Warning>Facebook pixel must comply with privacy regulations (GDPR, CCPA). Implement proper cookie consent before enabling.</Warning> **Instagram shopping**: Connect your Instagram shopping catalog to tag products in posts. Requires Instagram business account, Facebook shop, and Instagram shopping approval. Setup happens in Facebook Commerce Manager (not in theme settings). **Show Instagram feed**: Displays your recent Instagram posts on your storefront. When enabled, Instagram feed section becomes available to add to pages. Best for fashion/lifestyle brands with strong Instagram presence and consistent content. Feed updates automatically every few hours. </Tab> </Tabs> ## Best practices * **Only link active accounts**: Empty or inactive social accounts damage trust. Only add platforms you've posted to in last 30 days and plan to maintain * **Match platforms to audience**: Gen Z uses TikTok/Instagram, Millennials use Instagram/Facebook/Pinterest, Gen X+ uses Facebook/Pinterest/LinkedIn * **Optimize share images**: Use high-quality product photos (at least 1200px wide), lifestyle shots when possible, and custom share images for key pages * **Enable sharing selectively**: Sharing works best for visually striking products, gift items, unique products, and aspirational items * **Track social ROI**: Measure traffic from social media, conversion rate, share button usage, and Instagram feed engagement. If underperforming, reduce prominence * **Respect privacy laws**: Implement cookie consent banner and update privacy policy before enabling Facebook Pixel or advanced tracking * **Keep branding consistent**: Match icon style to your brand (minimal brands use outline/monochrome, vibrant brands use brand colors, modern brands use filled) <Warning>Adding Facebook Pixel or other tracking scripts may require cookie consent banners to comply with GDPR and CCPA regulations.</Warning> <Tip>Use Instagram's "Link in bio" feature to drive traffic back to your store. Update it regularly with new products or promotions.</Tip> ## Related guides * [Footer](/themes/release/footer/footer) - Add social media links to footer * [Header](/themes/release/header/header) - Display social icons in header (if theme supports) * [Features](/themes/release/theme-settings/features) - Enable/disable social sharing feature globally # Typography Source: https://docs.digifist.com/themes/release/theme-settings/typography Configure fonts, text sizes, and typographic styling for headings, body text, and UI elements. Typography settings define how text appears throughout your store, from headlines to product descriptions to button labels. These settings establish your site's typographic hierarchy, readability, and overall textual personality. ## What these settings control * Font families for headings and body text * Font weights and styles * Text sizes and scaling * Letter spacing and line height * Text transform options (uppercase, capitalize) * Typography pairing and hierarchy ## How to access <Steps> <Step title="Open the Theme Customizer"> From your Shopify admin, go to **Online Store** → **Themes** → **Customize**. </Step> <Step title="Navigate to typography settings"> In the theme editor sidebar, select **Theme settings** → **Typography**. </Step> <Step title="Choose fonts"> Select font families for headings and body text from Shopify's font library. </Step> <Step title="Adjust sizing and styling"> Configure font weights, sizes, and letter spacing. </Step> <Step title="Save changes"> Click **Save** to apply typography across your entire store. </Step> </Steps> ## Settings <Tabs> <Tab title="Font Selection"> **Heading font**: Primary font used for all headings, page titles, and prominent text. * **Serif fonts** (Playfair Display, Merriweather): Traditional, elegant, sophisticated. Best for luxury brands. * **Sans-serif fonts** (Montserrat, Raleway): Modern, clean, versatile (recommended default). Best for contemporary brands, tech, fashion. * **Display fonts** (Bebas Neue, Abril Fatface): Bold, attention-grabbing. Use for headlines only, can be hard to read at smaller sizes. <Tip>**Safe combinations**: Sans-serif headings + Sans-serif body (always works) or Serif headings + Sans-serif body (classic pairing).</Tip> **Body font**: Font used for paragraphs, product descriptions, and general text content. Must prioritize high readability. * **Sans-serif** (recommended): Inter, Open Sans, Lato, Roboto. Modern, screen-optimized, excellent readability at all sizes. * **Serif**: Lora, Crimson Text. Traditional, editorial feel. Best for content-heavy sites, requires 16px+ for readability. <Warning>Avoid decorative or display fonts for body text. Readability trumps uniqueness for paragraphs.</Warning> </Tab> <Tab title="Font Styling"> **Heading font weight**: Controls the thickness/boldness of heading text. * **Regular (400)**: Subtle, understated. Best for elegant, minimal designs. * **Medium (500)**: Good middle ground, modern and balanced. * **Semi-bold (600)**: Recommended for most stores. Clear hierarchy, readable, professional. * **Bold (700)**: Maximum impact. Best for attention-grabbing headlines. * **Extra Bold (800-900)**: Ultra-heavy. Use for hero sections only, too intense for all headings. <Tip>Match weight to brand personality: Elegant/minimal → Regular-Medium, Bold/confident → Semi-bold-Bold, Loud/energetic → Bold-Extra Bold</Tip> **Body font weight**: Controls the thickness of body text. Stick with Regular (400) for body text. Use Medium (500) only if you have readability issues with low-contrast color schemes. <Note>Body text should never be Bold (700+). Use bold weights sparingly for emphasis within paragraphs, not as the default.</Note> **Letter spacing**: Adjusts the space between letters. For headings: Tight (-0.05em to 0) is modern and compact, Normal (0) is always safe, Loose (0.05em to 0.1em) gives elegant luxury feel. For body text: Always use Normal (0). For all-caps headings, increase letter spacing (+0.05 to +0.1em) for readability. <Tip>If using uppercase headings, add letter spacing. If using title case or lowercase, keep normal spacing.</Tip> </Tab> <Tab title="Text Sizing"> **Base font size**: Sets the foundation for all text sizing across your store. * **14px**: Compact. More content visible, can strain readability. * **16px**: Standard (recommended default). Proven readability, accessibility standard, works for all audiences. * **18px**: Large. Enhanced readability, good for older demographics, luxury/editorial feel. <Warning>Never go below 14px for body text. Smaller sizes fail accessibility standards and harm readability.</Warning> **Heading scale**: Controls how much larger headings are compared to body text. Each heading level is scaled by this multiplier (H4 → H3 is 1.25× larger, etc.). * **Minor (1.2)**: Subtle hierarchy. Minimal design, risk of weak visual hierarchy. * **Major (1.25)**: Moderate hierarchy (recommended default). Clear but not dramatic, professional. * **Perfect Fourth (1.33)**: Strong hierarchy. Noticeable size differences, works well for content-heavy sites. * **Major Third (1.5)**: Dramatic hierarchy. Very prominent headings, bold statement design. **Line height**: Controls the vertical space between lines of text. For headings: Use 1.1-1.3 for impact and tightness. For body text: Use 1.5-1.6 line height for optimal readability (1.4 is compact but harder to read, 1.7-1.8 is very comfortable but takes more space). <Tip>**Body text**: Use 1.5-1.6 line height for optimal readability. **Headings**: Use 1.1-1.3 for impact and tightness.</Tip> </Tab> <Tab title="Text Transform"> **Heading text transform**: Changes the capitalization of heading text. * **None** (recommended default): Natural case as typed. Flexible, works with any content, most readable. * **Uppercase**: ALL CAPS HEADINGS. Bold, modern, architectural. Best for short headings (1-3 words), requires increased letter spacing (+0.05em minimum). * **Capitalize**: Title Case Headings. Traditional, formal, professional appearance. * **Lowercase**: all lowercase headings. Very modern, casual, youthful. Not recommended for most stores (hurts readability). **Button text transform**: Controls capitalization of text on buttons throughout your store. * **Uppercase**: ALL CAPS BUTTONS (most common and recommended). Clear call-to-action, professional. Add letter spacing (+0.05em) for readability. * **Capitalize**: Title Case Buttons. Softer, friendly approach for conversational brands. * **None**: Natural case. Casual, modern, works well with sans-serif fonts. </Tab> </Tabs> ## Best practices * **Limit to 2 font families**: Use one for headings, one for body text. Each font adds 20-50KB loading time * **Prioritize readability**: Body text minimum 14px (16px recommended), line height 1.5-1.6, regular or medium weight, high contrast (4.5:1 minimum) * **Match typography to brand**: Serif headings + Sans body for traditional/sophisticated, Sans + Sans for modern/versatile (safest choice), Display + Sans for bold/creative * **Test at multiple sizes**: Verify font remains readable from hero headings (48-60px) down to form labels (12-14px) * **Consider mobile readability**: Use 16px minimum base font (prevents iOS zoom), avoid ultra-thin weights, increase line height slightly * **Use system fonts for performance**: System fonts load instantly but are less distinctive (consider if performance is critical) * **Maintain hierarchy**: Use heading levels consistently (H1 for page titles, H2 for sections, etc.) across all pages * **Test for accessibility**: Minimum 16px body text, 4.5:1 contrast ratio for body text, 3:1 for large text, avoid all-caps for long text <Warning>Changing fonts after launch can dramatically alter your site's appearance. Test thoroughly before deploying typography changes to production.</Warning> <Tip>**Start here**: Sans-serif headings (Montserrat, Raleway) + Sans-serif body (Inter, Open Sans) at 16px with Semi-bold headings. This combination works for 90% of stores and you can adjust from there.</Tip> ## Related guides * [Colors](/themes/release/theme-settings/colors) - Ensure text colors have sufficient contrast * [Buttons and Inputs](/themes/release/theme-settings/buttons-and-inputs) - Button typography settings * [Layout](/themes/release/theme-settings/layout) - Page width affects optimal line length for text # Changelog Source: https://docs.digifist.com/themes/sahara/changelog Stay updated with the latest changes, improvements and fixes in the theme. <Update label="Documentation Quality Control" description="March 3, 2026"> Comprehensive documentation audit and quality improvements completed. ### Documentation Improvements * Updated all terminology to consistently use "Theme Customizer" instead of "theme editor". * Converted best practices sections to CardGroup format with cols= for better readability. * Fixed "Best practices" capitalization across all documentation files. * Enhanced content structure consistency with 11-section mandatory format. * Improved cross-references and internal navigation. * Updated terminology for templates: "Product Page (PDP)", "Collection Page (PLP)", "Collection List Page (CLP)". ### Files Updated * 20+ section documentation files with terminology improvements. * 5 priority files converted to CardGroup best practices format. * All customer template references standardized. </Update> <Update label="Version 3.0.0" description="February 27, 2026"> In this release, we've introduced new features, made improvements, and fixed bugs to enhance the user experience of the Sahara Theme. ### Features * Added comprehensive documentation for all theme sections and settings. * Enhanced product page with advanced badge and group management. * Improved theme settings organization for better navigation. * Added pre-order functionality with inventory tracking. * Implemented advanced product variant swatches with image and color support. * Enhanced cart drawer and cart page with improved UX. ### Improvements * Optimized theme performance with lazy loading for images and sections. * Improved mobile responsiveness across all sections. * Enhanced accessibility features throughout the theme. * Updated typography settings with more font options. * Improved color picker integration for theme customization. ### Bug Fixes * Fixed various layout issues on mobile devices. * Resolved product image gallery navigation bugs. * Fixed cart counter display issues. * Corrected section spacing inconsistencies. </Update> <Update label="Version 2.0.0" description="January 15, 2026"> Major update with new sections and enhanced functionality. ### Features * Added hero banner alternatives section. * Implemented shop the look functionality. * Added carousel section with multiple layout options. * Enhanced testimonials section with new styles. * Added FAQ tile section for better content organization. ### Improvements * Improved header navigation with enhanced mega menu support. * Optimized footer layout options. * Enhanced predictive search functionality. * Updated icon library with new options. </Update> <Update label="Version 1.0.0" description="November 1, 2025"> Initial release of Sahara theme. ### Features * Core theme foundation with essential sections. * Product and collection page templates. * Basic theme settings configuration. * Header and footer customization. * Initial set of content sections. </Update> # Collection list page (CLP) Source: https://docs.digifist.com/themes/sahara/collections/collection-list-page Collections listing page displaying all or selected collections with pagination The Main List Collections template displays a grid of collection cards on the `/collections` page, allowing you to show all collections automatically or manually curate specific collections with custom imagery and content. This template is perfect for stores with multiple product categories, allowing customers to browse and navigate to specific collection pages easily. Use this template to create an organized catalog overview that helps customers discover and access your various product categories. *** ## Template Settings <Tabs> <Tab title="Collections"> <AccordionGroup> <Accordion title="Collections to Show" icon="filter"> Control which collections appear on the page: * **All** (default) - Automatically display all published collections * **Selected** - Manually choose specific collections via collection blocks <CardGroup> <Card title="All Mode" icon="list"> Automatic, chronological display of all collections </Card> <Card title="Selected Mode" icon="hand-pointer"> Manual curation with custom order and optional override images/titles </Card> </CardGroup> <Note> Use "Selected" for curated collection showcases or to highlight specific categories. Use "All" for automatic collection listing. </Note> </Accordion> <Accordion title="Pagination Style" icon="ellipsis"> Choose how additional collections load: * **Default** (default) - Traditional page numbers (1, 2, 3...) * **Load More** - "Load More" button for progressive loading <Tip> "Load More" provides smoother UX, while traditional pagination is better for SEO and allows users to jump to specific pages. </Tip> </Accordion> <Accordion title="Collections Per Page" icon="grid-2"> Control how many collections display before pagination. * **Range:** 3-50 collections * **Step:** 1 * **Default:** 12 **Recommendations:** * **9-12:** Standard for most stores (3-4 rows in 3-column grid) * **20-24:** High collection count stores * **6:** Simple stores with few collections </Accordion> </AccordionGroup> </Tab> <Tab title="Cards"> <AccordionGroup> <Accordion title="Collection Card Color Scheme" icon="palette"> Independent color scheme for collection cards: * Select from available theme color schemes * **Default:** scheme-1 * Separate from main section background <Note> This controls the background and text colors of individual collection cards. Use contrasting schemes for visual separation. </Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> <AccordionGroup> <Accordion title="Section Width" icon="left-right"> * **Page** (default) - Contained within page margins * **Fluid** - Extends to container edges </Accordion> <Accordion title="Section Color Scheme" icon="swatchbook"> Main section background color: * Select from available theme color schemes * **Default:** scheme-1 <Tip> Use different schemes for section background vs. collection cards to create visual depth. </Tip> </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> </Tab> </Tabs> *** ## Blocks ### Collection Block Add specific collections when "Selected" mode is active. <Accordion title="Collection Block Settings" icon="grid-2-plus"> **Limit:** Up to 50 blocks **Settings:** * **Collection:** Collection picker to select specific collection * **Image:** Optional custom image override (replaces collection's featured image) * **Title:** Optional custom title override (replaces collection name) * **Heading Size:** H6 (XS) to H2 (XL), default: H2 * **Color Scheme:** Per-card color scheme override (default: scheme-1) <Note> Image and title overrides are optional. If left blank, the block uses the collection's default featured image and name. </Note> <Tip> Use custom images to create consistent visual style across all collection cards, even if actual collection images vary. </Tip> </Accordion> *** ## Display Modes <CardGroup> <Card title="All Collections Mode" icon="list-check"> **When to Use:** * Standard collection directory * Automatic updates as collections are added * Minimal manual maintenance * Alphabetical or chronological order **Behavior:** * Shows all published collections * Automatic ordering * Updates automatically when collections added/removed * Uses collection's featured image and name </Card> <Card title="Selected Collections Mode" icon="hand-sparkles"> **When to Use:** * Curated collection showcase * Custom collection ordering * Featured categories only * Landing pages with specific collections **Behavior:** * Shows only collections added via blocks * Custom order (block order in Theme Customizer) * Manual updates required * Supports image/title overrides * Great for highlighting key collections </Card> </CardGroup> *** ## Collection Card Display Each collection card automatically shows: <AccordionGroup> <Accordion title="Collection Image" icon="image"> * Featured image from collection settings or custom override * Responsive scaling * Clickable to collection page * Hover effects (theme-dependent) </Accordion> <Accordion title="Collection Title" icon="heading"> * Collection name or custom override * Configurable heading size (H6-H2) * Clickable to collection page </Accordion> <Accordion title="Product Count" icon="hashtag"> Some themes display: * Number of products in collection * Updates dynamically * Format: "120 products" or similar </Accordion> <Accordion title="Collection Description" icon="align-left"> Optional (theme-dependent): * Excerpt from collection description * Truncated for card display * Provides context </Accordion> </AccordionGroup> *** ## Best practices <CardGroup> <Card title="Collection count" icon="calculator"> For 3-6 collections use 6 per page with simple navigation. For 7-20 collections use 12 per page (medium stores). For 20+ collections use 12-24 per page with pagination, consider collection categories and subcategories. </Card> <Card title="Image guidelines" icon="image"> Use minimum 800x800px resolution, 1:1 (square) or 4:3 aspect ratio, JPG/PNG under 200KB each. Use lifestyle images showing products in context, maintain consistent style/aesthetic, ensure images clearly represent collection content. </Card> <Card title="Collection organization" icon="folder-tree"> Use clear descriptive names keeping titles concise (1-4 words). Example: "Summer Dresses" not "Summer", "Men's Sneakers" not "Shoes". Organize by product type, use case, demographic, or season - stay consistent with one principle. </Card> <Card title="Custom overrides" icon="pen-to-square"> Use custom images to create visual consistency, replace poor-quality images, implement seasonal/campaign imagery, match brand aesthetic. Use custom titles for seasonal promotions, campaign names, improved clarity, or A/B testing. </Card> <Card title="Pagination strategy" icon="forward"> Default pagination is better for SEO (crawlable pages) with clear progress and page jumping. Load More offers better mobile UX with seamless browsing and infinite scroll feel. For 12 or fewer collections, pagination won't appear. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Product Categories" icon="tags"> All mode showing automatic list of product type collections (Shirts, Pants, Shoes, Accessories) </Card> <Card title="Curated Showcase" icon="star"> Selected mode featuring 6-8 hero collections with custom imagery for landing page </Card> <Card title="Seasonal Navigation" icon="calendar"> Selected mode with seasonal collections (Spring, Summer, Fall, Winter) using custom override images </Card> <Card title="Department Store" icon="building"> All mode with 20+ collections organized by department, 12 per page </Card> <Card title="Boutique Shop" icon="shop"> Selected mode with 6 carefully curated collections, no pagination needed </Card> <Card title="Multi-Brand Store" icon="landmark"> All mode showing collections for each brand, alphabetically organized </Card> </CardGroup> *** ## Related Templates <CardGroup> <Card title="Collection Page" icon="grid-2"> Individual collection page showing products within a collection </Card> <Card title="Collection Banner" icon="image"> Hero banner for individual collection pages </Card> <Card title="Featured Collections" icon="star"> Section for displaying collection grid on homepage or other pages </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="No Collections Showing" icon="eye-slash"> **Possible Causes:** * No published collections in store * Template set to "Selected" with no collection blocks * Collections not published **Solutions:** 1. Create and publish collections in Shopify Admin 2. Switch to "All" mode or add collection blocks 3. Verify collections are published (not draft) </Accordion> <Accordion title="Custom Images Not Appearing" icon="image-slash"> **Verify:** * Image uploaded successfully in block settings * Image file format is supported (JPG, PNG) * Browser cache cleared * Image override field has valid image </Accordion> <Accordion title="Wrong Collection Order" icon="shuffle"> **In All Mode:** * Collections display chronologically or alphabetically (theme-dependent) * Cannot manually reorder in "All" mode **In Selected Mode:** * Order matches block order in Theme Customizer * Drag blocks to reorder collections </Accordion> <Accordion title="Pagination Not Working" icon="page-break"> **Check:** * More collections exist than per-page setting * JavaScript enabled in browser * No theme conflicts * "Load More" button functional (if using that style) </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Collections directory/listing page * **URL:** `/collections` (default Shopify collections page) * **Display Modes:** All collections (automatic) or Selected (manual) * **Blocks:** Up to 50 collection blocks with custom images/titles * **Pagination:** 3-50 collections per page, traditional or load more * **Card Features:** Image, title, optional product count/description * **Customization:** Per-card color schemes, heading sizes, image overrides <Note> Collections are created in **Shopify Admin → Products → Collections**. This template controls how the collection listing page displays, not individual collection content. </Note> # Collection Page (PLP) Source: https://docs.digifist.com/themes/sahara/collections/collection-page Individual collection page template with product grid, filtering, and sorting The Collection Page (PLP) displays products within a specific collection on collection detail pages with product grid layout, filtering, sorting, pagination, and optional promotional content injection. This is the core template for displaying product collections and directly impacts browse-to-purchase conversion rates. Configure grid layouts, enable filtering and sorting, and customize the shopping experience to help customers find the perfect product within each collection. *** ## Template Settings <Tabs> <Tab title="Utilities Bar"> The utilities bar appears above the product grid with filtering, sorting, and product count controls. <AccordionGroup> <Accordion title="Enable Products Count" icon="hashtag"> Display total product count for the collection. * **Type:** Checkbox * **Default:** Enabled **Displays:** * "120 products" or similar text * Updates dynamically with active filters * Helps set customer expectations <Tip> Product count provides transparency and helps customers understand collection size before browsing. </Tip> </Accordion> <Accordion title="Products Per Row UI" icon="grip"> Allow customers to switch between grid layouts (3 or 4 columns). * **Type:** Checkbox * **Default:** Enabled * **Provides:** Grid view toggle buttons in collection toolbar <Note> When enabled, customers see icon buttons to switch between 3-column and 4-column grid views based on preference. </Note> </Accordion> <Accordion title="Enable Sorting" icon="arrow-down-wide-short"> Display product sorting dropdown. * **Type:** Checkbox * **Default:** Enabled **Sorting Options (typical):** * Featured (manual collection order) * Best Selling * Alphabetically: A-Z * Alphabetically: Z-A * Price: Low to High * Price: High to Low * Date: Old to New * Date: New to Old <Tip> Sorting helps customers find products based on their shopping preferences. "Best Selling" is great for social proof. </Tip> </Accordion> <Accordion title="Filters Style" icon="filter"> Choose how product filters display: * **Hidden** - No filtering available * **Drawer** (default) - Opens in slide-out panel * **Sidebar** - Permanent sidebar on desktop <CardGroup> <Card title="Hidden" icon="eye-slash"> No filters, simplest browsing experience </Card> <Card title="Drawer" icon="bars-staggered"> Space-efficient, opens on demand, mobile-friendly </Card> <Card title="Sidebar" icon="sidebar"> Always visible on desktop, quick filter access </Card> </CardGroup> <Note> Filters are based on product tags, metafields, and variants. Configure in **Shopify Admin → Online Store → Navigation → Search & Discovery → Filters**. </Note> </Accordion> <Accordion title="Sidebar Navigation" icon="list"> Add custom navigation menu to collection sidebar. * **Type:** Link list (menu) picker * **Location:** Appears in sidebar when filters\_style is "sidebar" **Common Uses:** * Related collection links * Category navigation * Featured collections * Shopping guides <Tip> Create menus in **Shopify Admin → Online Store → Navigation**. Use for cross-collection navigation or category browsing. </Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Product Grid"> Configure how products are displayed in the grid layout. <AccordionGroup> <Accordion title="Products Per Page" icon="table-cells"> Control how many products load before pagination. * **Range:** 12-36 products * **Step:** 1 * **Default:** 16 **Recommendations:** * **12:** Smaller collections, faster load times * **16:** Balanced (4x4 grid) * **24:** Larger catalogs (6x4 grid or 8x3 grid) * **36:** Maximum for large collections <Warning> Higher values improve browsing but increase page load time. Balance between UX and performance. </Warning> </Accordion> <Accordion title="Products Per Row (Default)" icon="columns"> Default desktop grid columns. * **Options:** 3 or 4 columns * **Default:** 4 columns **Grid Comparison:** **4 Columns:** * More products visible at once * Efficient space usage * Smaller product cards * Best for: Large catalogs, simple products, fast browsing **3 Columns:** * Larger product cards with more detail * Better for complex products * More focus on individual items * Best for: Premium products, detailed imagery, lifestyle photos </Accordion> <Accordion title="Products Per Row (Mobile)" icon="mobile"> Mobile grid layout. * **Options:** 1 or 2 columns * **Default:** 2 columns **Mobile Layout:** * **1 Column:** Large cards, detailed view, portrait-optimized * **2 Columns:** More products visible, efficient scrolling </Accordion> <Accordion title="Pagination Style" icon="ellipsis"> Choose pagination behavior: * **Default** (default) - Traditional page numbers (1, 2, 3...) * **Load More** - Progressive loading with button <Tip> "Load More" provides seamless browsing, while traditional pagination is better for SEO and allows jumping to specific pages. </Tip> </Accordion> <Accordion title="Button Style" icon="square"> Style for "Add to Cart" and action buttons: * **Filled** - Solid background * **Outlined** (default) - Border only, transparent background <Note> Applies to quick-add buttons and "Load More" pagination button. </Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> Control the overall section layout, width, spacing, and visual styling. <AccordionGroup> <Accordion title="Section Width" icon="left-right"> * **Page** (default) - Contained within page margins * **Fluid** - Extends to container edges (more products visible) </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0 (default), 1, 2, 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 <Note> Top spacing is 0 by default assuming collection banner section appears above. </Note> </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> </Tab> <Tab title="Text Cards"> Inject promotional content within the product grid using text card blocks. **Limit:** 1 block maximum **Purpose:** Add promotional card, banner, or call-to-action within product grid <AccordionGroup> <Accordion title="Position" icon="location-dot"> Grid position for the promotional card. * **Range:** 1-28 * **Default:** 8 (after 8th product) **Position Strategy:** * **1-4:** Above the fold, high visibility * **8-12:** Mid-page, natural break point * **16-24:** Lower on page for engaged browsers <Tip> Position 8 (default) appears after the second row in 4-column grid, providing natural visual break. </Tip> </Accordion> <Accordion title="Title" icon="heading"> * Promotional heading text (rich text supported) * **Default:** "Heading goes here" * Supports bold, italic, links </Accordion> <Accordion title="Text Size" icon="text-size"> * **S** (0.6) - Subtle messaging * **M** (0.8) - Standard text * **L** (1) - Prominent heading (default) </Accordion> <Accordion title="Button" icon="rectangle-wide"> Optional CTA button: * **Button Text:** Label for button * **Button URL:** Destination link * **Button Style:** Filled, Outlined, or Link (default: Outlined) <Note> Button only displays if both text and URL are provided. </Note> </Accordion> <Accordion title="Color Scheme" icon="swatchbook"> Independent color scheme for text card. * Select from available schemes * **Default:** scheme-1 * Can contrast with main collection background </Accordion> </AccordionGroup> </Tab> </Tabs> *** ## Filter System <AccordionGroup> <Accordion title="Filter Types" icon="sliders"> Shopify supports multiple filter types: **Available Filters:** * **Price Range** - Min/max price slider * **Product Type** - Category filters * **Vendor** - Brand filters * **Tags** - Custom tag filters * **Variants** - Size, color, material options * **Metafields** - Custom attributes (fabric, dimensions, etc.) * **Availability** - In stock / Out of stock <Note> Configure filters in **Shopify Admin → Online Store → Navigation → Search & Discovery → Filters tab**. </Note> </Accordion> <Accordion title="Filter Configuration" icon="gears"> **Setup Process:** 1. Go to Shopify Admin → Online Store → Navigation 2. Click "Search & Discovery" 3. Navigate to "Filters" tab 4. Add filters for each collection or globally 5. Choose filter types (list, swatch, range) 6. Set filter labels and options **Filter Display:** * Drawer: "Filter & Sort" button opens slide-out panel * Sidebar: Filters always visible on left side * Hidden: No filters available </Accordion> <Accordion title="Active Filters" icon="circle-check"> When filters are applied: * Active filter tags display above product grid * Product count updates dynamically * "Clear All" option appears * URL updates for shareability * Filtering works with sorting </Accordion> </AccordionGroup> *** ## Best practices <CardGroup> <Card title="Grid layout strategy" icon="grid-2"> Choose 4 columns for large catalogs (50+ products), simple imagery, fashion/accessories. Choose 3 columns for premium/luxury products, complex items needing detail, lifestyle photography, home decor/furniture/electronics. </Card> <Card title="Products per page calculation" icon="calculator"> Match products\_per\_page to create complete rows. For 4-column grid: 12 (3 rows), 16 (4 rows recommended), 20 (5 rows), 24 (6 rows). For 3-column: 12 (4 rows recommended), 18 (6 rows), 24 (8 rows). Incomplete rows can look unfinished. </Card> <Card title="Filter implementation" icon="filter-circle-xmark"> Use filters for collections with 20+ products, multiple variants, price range variety, multiple brands. Skip for small collections (\< 20 products), homogeneous products. Limit to 5-7 filter types, use clear labels, order by importance, show product counts per option. </Card> <Card title="Sorting strategy" icon="arrow-down-short-wide"> Featured (manual) is best for curated collections allowing manual product ordering. Best Selling provides social proof and builds trust. Price sorting is essential for budget shoppers (Low to High for bargain hunters, High to Low for premium browsers). Date (New to Old) is perfect for "New Arrivals" collections. </Card> <Card title="Text card usage" icon="rectangle-ad"> Use for promotional messaging (free shipping, sales), cross-selling (related collections, bundles), content marketing (size guides, tips). Position 1-4 for high-priority promotions, 8-12 for natural break, 16+ for engaged scrolling customers. Limit to 1 text card per collection for maximum impact. </Card> <Card title="Mobile optimization" icon="mobile-screen-button"> Use 2-column mobile grid (shows more products) or 1-column for products needing large images. Filters in drawer work better than sidebar on mobile. Keep products\_per\_page lower on mobile (12-16). Verify touch targets are large enough (44x44px minimum). </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Fashion Store" icon="shirt"> 4-column grid, drawer filters (Size, Color, Price), Best Selling sort, 24 products per page </Card> <Card title="Premium Furniture" icon="couch"> 3-column grid, sidebar filters, Featured sort, 12 products per page, large product cards </Card> <Card title="Sale Collection" icon="tag"> 4-column grid, text card at position 1 with "Extra 20% with code SALE20", Price Low-to-High default </Card> <Card title="New Arrivals" icon="sparkles"> 4-column grid, Date (New-to-Old) sort, text card announcing "Just Landed" collection </Card> <Card title="Electronics Store" icon="laptop"> 3-column grid, sidebar with detailed filters (Brand, Price, Specs), comparison features </Card> <Card title="Small Boutique" icon="shop"> 3-column grid, no filters (\< 20 products), Featured sort for manual curation </Card> </CardGroup> *** ## Performance Considerations <AccordionGroup> <Accordion title="Page Load Optimization" icon="gauge-high"> **Performance Tips:** * Lower products\_per\_page for faster initial load (12-16) * Use Load More pagination to reduce initial load * Optimize product images (compress, use WebP) * Enable lazy loading for product images * Limit filter complexity (fewer filter types) * Use 4-column grid for smaller card images </Accordion> <Accordion title="SEO Best Practices" icon="magnifying-glass"> **Collection Page SEO:** * Use descriptive collection titles and URLs * Write unique collection descriptions * Optimize collection featured image alt text * Use traditional pagination for crawlability * Enable product count for transparency * Keep URL structure clean when filtering * Add schema markup (breadcrumbs, products) </Accordion> </AccordionGroup> *** ## Related Templates <CardGroup> <Card title="Collection Banner" icon="image"> Hero banner appearing above this collection template </Card> <Card title="Collection Product Card" icon="square"> Individual product card component within grid </Card> <Card title="Product Page" icon="tag"> Individual product page template customers visit after clicking </Card> <Card title="Featured Collections" icon="star"> Homepage section for displaying multiple collections </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="No Products Showing" icon="box-open"> **Possible Causes:** * Collection has no published products * All products are out of stock (if stock filter active) * Products don't match active filters * Products not assigned to collection **Solutions:** 1. Add products to collection in Shopify Admin 2. Publish products (check product status) 3. Clear active filters 4. Verify collection conditions (manual vs. automated) </Accordion> <Accordion title="Filters Not Appearing" icon="filter-circle-xmark"> **Check:** * Filters\_style is not set to "hidden" * Filters configured in Shopify Admin → Search & Discovery * Collection has filterable attributes (tags, variants, metafields) * Theme filter settings enabled globally </Accordion> <Accordion title="Sorting Not Working" icon="xmark"> **Verify:** * Enable\_sorting checkbox is enabled * JavaScript not blocked * No theme conflicts * Browser cache cleared </Accordion> <Accordion title="Grid Layout Issues" icon="table-cells-large"> **Common Issues:** * Uneven product card heights (mixed image ratios) * Incomplete rows (adjust products\_per\_page) * Mobile layout broken (test responsive breakpoints) **Solutions:** * Use consistent product image aspect ratios (1:1 or 3:4) * Match products\_per\_page to grid columns (multiples of 3 or 4) * Test on actual mobile devices </Accordion> <Accordion title="Text Card Not Displaying" icon="rectangle-xmark"> **Reasons:** * Position value exceeds total products on page * Block not added to template * Position set to value beyond current page products **Fix:** * Ensure position ≤ products\_per\_page * Add text-card block if missing * Adjust position to visible range </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Collection product grid template for individual collection pages * **Features:** Product grid, filtering, sorting, pagination, promotional injection * **Grid Options:** 3 or 4 columns (desktop), 1 or 2 columns (mobile) * **Products Per Page:** 12-36 (default: 16) * **Filters:** Hidden, Drawer, or Sidebar * **Pagination:** Traditional or Load More * **Blocks:** 1 text card for promotional content (position 1-28) * **Customization:** Grid toggles, sorting, sidebar navigation, button styles <Note> Collections are managed in **Shopify Admin → Products → Collections**. This template controls the visual layout and functionality of collection pages, not which products appear in collections. </Note> # Search Source: https://docs.digifist.com/themes/sahara/collections/search Search results page with product grid, filtering, sorting, and multi-type results The Main Search template displays search results at `/search`, showing products, articles, and pages matching the search query with filtering, sorting, and pagination options. Optimized search experience with filters and sorting helps customers quickly find what they're looking for, reducing friction in the product discovery process. Use this template to create a powerful search experience that handles diverse result types and helps convert search intent into purchases. *** ## Template Settings <Tabs> <Tab title="Search"> <AccordionGroup> <Accordion title="Enable Filters" icon="filter"> Display filter options for search results. * **Type:** Checkbox * **Default:** Enabled **When Enabled:** * Product filters appear (price, type, vendor, etc.) * Customers can narrow results * Filter UI matches collection filtering * Works only for product results **When Disabled:** * No filtering available * Simpler, streamlined search * Faster implementation <Note> Filters only apply to product results. Articles and pages don't have filterable attributes and won't show filters. </Note> </Accordion> <Accordion title="Enable Sorting" icon="arrow-down-short-wide"> Display sorting dropdown for search results. * **Type:** Checkbox * **Default:** Enabled **Sorting Options:** * Relevance (default) - Best match first * Best Selling * Alphabetically: A-Z * Alphabetically: Z-A * Price: Low to High * Price: High to Low * Date: New to Old * Date: Old to New <Tip> "Relevance" sorting uses Shopify's search algorithm to show best matches first. This is typically the most useful default for search. </Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Product Grid"> <AccordionGroup> <Accordion title="Products Per Page" icon="grid-2"> Control how many products display before pagination. * **Range:** 8-28 products * **Step:** 4 (8, 12, 16, 20, 24, 28) * **Default:** 16 **Recommendations:** * **8-12:** Small result sets, faster loading * **16:** Balanced (default, good for most stores) * **20-28:** Large catalogs, reduce pagination <Note> This only affects product results. Articles and pages display separately and don't count toward this limit. </Note> </Accordion> <Accordion title="Pagination Style" icon="ellipsis"> Choose pagination behavior: * **Default** (default) - Traditional page numbers (1, 2, 3...) * **Load More** - Progressive loading with button <Tip> "Load More" provides seamless browsing. Traditional pagination is better for SEO and allows jumping to specific result pages. </Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Cards"> <AccordionGroup> <Accordion title="Color Scheme for Article Cards" icon="newspaper"> Independent color scheme for article/blog result cards. * Select from available theme color schemes * **Default:** scheme-1 * Affects article card backgrounds and text <Tip> Use different scheme for articles vs products to visually separate content types in mixed results. </Tip> </Accordion> <Accordion title="Color Scheme for Page Cards" icon="file"> Independent color scheme for page result cards. * Select from available theme color schemes * **Default:** scheme-1 * Affects page card backgrounds and text </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> <AccordionGroup> <Accordion title="Section Width" icon="left-right"> * **Page** (default) - Contained within page margins * **Fluid** - Extends to container edges </Accordion> <Accordion title="Color Scheme" icon="palette"> Main section background color. * Select from available theme color schemes * **Default:** scheme-1 * Separate from card-specific schemes </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0 (default), 1, 2, 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 <Note> Top spacing is 0 by default assuming search banner section appears above. </Note> </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> </Tab> </Tabs> *** ## Search Result Types Shopify search returns multiple content types: <AccordionGroup> <Accordion title="Products" icon="tag"> **Searchable Fields:** * Product title * Product description * Product type * Vendor * Tags * SKU * Barcode * Variant titles **Display:** * Product grid (standard product cards) * Filtering and sorting available * Add to cart functionality * Quick view (theme-dependent) </Accordion> <Accordion title="Articles (Blog Posts)" icon="newspaper"> **Searchable Fields:** * Article title * Author name * Article content/body * Article excerpt * Tags **Display:** * Article cards with image, title, excerpt * Date published * Author (theme-dependent) * Read more link to full article * Uses article card color scheme <Tip> If you publish helpful blog content (guides, FAQs), they'll appear in search, providing value beyond just product listings. </Tip> </Accordion> <Accordion title="Pages" icon="file"> **Searchable Fields:** * Page title * Page content/body **Display:** * Page cards with title and excerpt * Link to full page * Uses page card color scheme **Common Pages in Results:** * About Us * FAQ * Shipping & Returns * Size Guide * Contact </Accordion> </AccordionGroup> *** ## Search Behavior <AccordionGroup> <Accordion title="Search Algorithm" icon="brain"> **Shopify Search Ranking:** Shopify ranks results by relevance based on: 1. Exact title matches (highest priority) 2. Title partial matches 3. Product type matches 4. Tag matches 5. Description matches 6. Variant title matches 7. SKU/barcode matches **Weighting:** * Published products rank higher than drafts * Available products rank higher than sold out * Featured products may rank higher </Accordion> <Accordion title="Search Syntax" icon="code"> **Special Search Operators:** **Exact Phrase:** * Use quotes: `"blue sneakers"` * Matches exact phrase only **Multiple Words (AND):** * Default: `blue shoes` * Finds results with both words **Partial Words:** * Auto-suggests: `sne` finds "sneakers" * Minimum 3 characters for suggestions **Product Type:** * Search by type: `product_type:shoes` * Filters to specific product type </Accordion> <Accordion title="Empty Search" icon="magnifying-glass-minus"> **When Search Query is Empty:** * Some themes show all products * Others show "Enter search term" message * May display popular products * Or redirect to homepage <Note> Empty search behavior depends on theme implementation. Most Sahara variations show helpful message. </Note> </Accordion> <Accordion title="No Results Found" icon="zero"> **When No Matches:** * "No results for \[query]" message displays * Suggestions for alternative searches * Featured products or collections (theme-dependent) * Link to all products * Search tips or popular categories **Best Practices:** * Suggest related products * Offer to browse all products * Link to popular collections * Provide search tips * Check for typos ("Did you mean...?") </Accordion> </AccordionGroup> *** ## Best practices <CardGroup> <Card title="Improve search accuracy" icon="bullseye"> Optimize product data with descriptive titles, common search terms in descriptions, relevant tags (color, material, style), accurate product type, variant titles, synonyms, and proper SKU naming. Example: Use "Men's Blue Canvas Low-Top Sneakers" instead of "Classic Sneaker". </Card> <Card title="Filtering strategy" icon="sliders"> Enable filters for large catalogs (50+ products), multiple product categories, price range variety, and different product types. Disable filters for small catalogs (\< 30 products), homogeneous products, simple search needs, or mobile-first audience. Filters configured in Shopify Admin Search & Discovery apply to search results. </Card> <Card title="Mixed result types" icon="layer-group"> Handle products + articles + pages with visual differentiation using different color schemes (scheme-1 for products, scheme-2 for articles, scheme-3 for pages). Group by type or interleave based on relevance, show type labels, use different card styles. Color-coding helps users quickly scan. </Card> <Card title="Search performance" icon="gauge-high"> Lower products\_per\_page (12-16) for faster initial load, enable "Load More" pagination, optimize product images, limit active filters (3-5 max), use Shopify's built-in search. For large catalogs (1000+ products), consider search apps with autocomplete, typo correction, and search history. </Card> <Card title="Mobile search UX" icon="mobile"> Use filters in drawer (not sidebar) on mobile, large tappable filter/sort buttons, reduced products per page (12), prominent quick filters (price, availability), easy search refinement access, and back to top button for long results. Mobile searchers have specific intent. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Product-Focused Store" icon="shopping-bag"> Filters enabled, sorting by relevance, products prominently displayed </Card> <Card title="Content-Rich Store" icon="book"> Mixed results (products + helpful articles), different card colors, articles featured </Card> <Card title="Simple Catalog" icon="list"> No filters, default sorting, minimal options, 12 products per page </Card> <Card title="Large Inventory" icon="warehouse"> Full filtering, 24 products per page, load more pagination, sidebar filters </Card> </CardGroup> *** ## Related Templates <CardGroup> <Card title="Main Search Banner" icon="rectangle"> Search results page header banner </Card> <Card title="Predictive Search" icon="wand-magic-sparkles"> Live search suggestions in header search bar </Card> <Card title="Collection Page" icon="grid-2"> Similar product grid for collection pages </Card> <Card title="Search Settings" icon="gear"> Shopify search configuration in admin </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="No Results for Expected Terms" icon="magnifying-glass-minus"> **Check:** * Products are published (not draft) * Search terms appear in title/description/tags * Products not excluded from search * No typos in product data * Adequate product information filled in **Test:** * Search by exact product title (should appear) * Search by product type (should filter properly) * Check in Shopify Admin if product is searchable </Accordion> <Accordion title="Filters Not Showing" icon="filter-circle-xmark"> **Verify:** * "Enable Filters" checkbox is on * Filters configured in **Admin → Search & Discovery** * Search results include products (filters don't apply to articles/pages) * Theme filter settings enabled </Accordion> <Accordion title="Wrong Result Order" icon="shuffle"> **Reasons:** * Sorting set to something other than "Relevance" * Customer changed sort order (dropdown) * Product availability affecting order (sold out lower) **Fix:** * Reset to "Relevance" sorting * Verify published/available status * Check featured product settings </Accordion> <Accordion title="Mixed Result Types Confusing" icon="layer-group"> **Solutions:** * Use different color schemes for products vs articles vs pages * Add "Type" label to cards ("Product", "Article") * Organize results by type (group all products together) * Consider hiding articles/pages from search (theme-dependent) </Accordion> <Accordion title="Search Too Slow" icon="hourglass"> **Optimize:** * Reduce products per page (16 or less) * Use "Load More" pagination * Compress product images * Limit filter complexity * Consider search app for very large catalogs (1000+ products) * Enable lazy loading for images </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Display search results with products, articles, and pages * **URL:** `/search?q=[query]` * **Features:** Filtering, sorting, pagination, multi-type results * **Products Per Page:** 8-28 (step of 4, default: 16) * **Pagination:** Traditional or Load More * **Card Schemes:** Separate color schemes for products, articles, pages * **Filters:** Product filters only (not for articles/pages) * **Sorting:** Relevance, best selling, price, alphabetical, date <Note> Search results are automatically generated by Shopify's search engine. Improve search accuracy by optimizing product titles, descriptions, tags, and types in **Shopify Admin → Products**. </Note> # Common settings Source: https://docs.digifist.com/themes/sahara/common-settings Shared settings that appear across most sections: width, color scheme, and spacing. Common settings appear in most sections and control fundamental aspects of layout and appearance. Once you understand these settings, you can customize any section consistently without needing to learn section-specific configuration. ## What these settings control * Section width (how wide content appears on the page) * Color scheme selection for individual sections * Vertical spacing (margin above and below sections) * Section borders for visual separation These settings are "common" because they appear in nearly every section throughout your theme, from homepage sections to product pages and blog articles. ## Where to find common settings Common settings typically appear at the bottom of section settings panels in the Theme Customizer, under a header labeled "Common settings". <Steps> <Step title="Select any section"> Click on a section in the Theme Customizer to open its settings panel. </Step> <Step title="Scroll to common settings"> Scroll to the bottom of the section settings panel to find the "Common settings" group. </Step> <Step title="Adjust settings"> Modify width, color scheme, or spacing to change the section's appearance. </Step> <Step title="Save changes"> Click **Save** to apply your changes across the store. </Step> </Steps> <img alt="Common settings location in section panel" /> ## Settings ### Section width Controls how wide the section content appears on the page. Width options help you create visual hierarchy and match content type to layout. <AccordionGroup> <Accordion title="Page width" icon="window"> Content width matches the global **Page width** setting defined in [Layout settings](/themes/sahara/theme-settings/layout). **Typical width:** 1200-1600px (varies based on theme settings) **When to use:** * Standard sections with text and images * Product grids and collection displays * Most homepage sections * Default choice for balanced, aligned layouts * When you want sections to align vertically with other page content <Tip> Use Page width as your default for most sections to maintain consistent alignment across your store. </Tip> </Accordion> <Accordion title="Full width" icon="arrows-left-right"> Content extends to fill the browser viewport with minimal or no side padding. **When to use:** * Large hero images or videos that should bleed to edges * Full-width galleries and carousels * Immersive visual sections * Background images or color blocks spanning entire screen * When you want maximum visual impact <Warning> Full width sections on ultra-wide monitors (>2000px) can create very stretched layouts. Test on large screens or consider using Page width for text-heavy sections. </Warning> </Accordion> <Accordion title="Seminarrow width" icon="arrows-minimize"> Content width is moderately reduced to approximately 80-85% of page width. **When to use:** * Content that needs more focus than page width but isn't purely text * Newsletter signup sections * Featured announcements or callouts * Sections with mixed content (text + images) that benefit from some narrowing * Creating subtle visual variation from standard page width <img alt="Seminarrow width example" /> </Accordion> <Accordion title="Narrow width" icon="arrows-minimize"> Content width is significantly reduced to approximately 60-70% of page width. **When to use:** * Text-heavy sections for improved readability (optimal line length) * Blog posts and article content * Forms and contact sections * Single-column layouts * Testimonials or quotes * When you want to draw attention to specific centered content <Tip> Narrow width improves text readability by keeping line length between 60-80 characters, which is ideal for comfortable reading. </Tip> </Accordion> </AccordionGroup> <Note> Not all sections include section width controls. Some sections have fixed widths or alternative width customization options based on their specific design requirements. </Note> ### Color scheme Choose which color scheme applies to the section. Color schemes control the background color, text color, button colors, and accent colors throughout the section. **Available options:** Scheme 1, Scheme 2, Scheme 3, Scheme 4, Inverse **Default:** Scheme 1 Color schemes are defined in [Colors settings](/themes/sahara/theme-settings/colors) and provide coordinated color palettes for different sections. **When to use each scheme:** * **Scheme 1:** Primary brand colors, use for most sections and main content areas * **Scheme 2:** Secondary colors, use to alternate with Scheme 1 for visual variety * **Scheme 3:** Accent or tertiary colors, use sparingly for highlighted sections * **Scheme 4:** Additional variation (if defined in your theme) * **Inverse:** High-contrast scheme (often dark background with light text), use for dramatic emphasis or footer areas <Tip> Alternating color schemes between adjacent sections creates natural visual breaks and improves page scannability. For example, use Scheme 1 for your hero, Scheme 2 for features, Scheme 1 for products, and Scheme 2 for testimonials. </Tip> <img alt="Color scheme selection and preview" /> #### Custom background color Some sections allow you to override the selected color scheme's background with a custom color or gradient. **Label:** "Custom background color"\ **Effect:** Overwrites the color scheme's background while keeping text and button colors from the selected scheme **When to use:** * Creating unique visual moments with specific brand colors * Seasonal promotions with special background colors * Matching specific brand guidelines not covered by standard schemes * Creating gradient backgrounds for visual impact <Warning> When using custom background colors, ensure sufficient contrast with the text color from your selected scheme. Test readability across devices before publishing. </Warning> ### Spacing Spacing controls the vertical margin (space) above and below the section. Consistent spacing creates visual rhythm and helps establish hierarchy on your pages. <Tabs> <Tab title="Spacing top"> ### Top spacing Controls the padding/margin above the section. **Options:** * **No (0):** Removes all top spacing. Section sits directly against content above. * **S (1):** Small spacing, approximately 20-30px * **M (2):** Medium spacing, approximately 40-60px (recommended default) * **L (4):** Large spacing, approximately 60-80px * **XL (6):** Extra large spacing, approximately 80-100px or more **Default:** M (Medium) **When to use:** * **No spacing:** Sections that should visually connect with content above, full-width sections that blend together * **S:** Related sections that should feel connected, dense mobile layouts * **M:** Default for most sections, balanced spacing * **L:** Premium layouts, creating clear separation, emphasizing important content * **XL:** Maximum separation, editorial layouts, dramatic visual breaks <img alt="Top spacing size comparison" /> </Tab> <Tab title="Spacing bottom"> ### Bottom spacing Controls the padding/margin below the section. **Options:** * **No (0):** Removes all bottom spacing. Section sits directly against content below. * **S (1):** Small spacing, approximately 20-30px * **M (2):** Medium spacing, approximately 40-60px (recommended default) * **L (4):** Large spacing, approximately 60-80px * **XL (6):** Extra large spacing, approximately 80-100px or more **Default:** M (Medium) **When to use:** * **No spacing:** Sections that should flow into next section, creating seamless transitions * **S:** Tight layouts, mobile-optimized spacing * **M:** Standard choice for most sections * **L:** Emphasizing section breaks, luxury brand aesthetics * **XL:** Creating strong visual separation, end of major content blocks <Tip> Use matching top and bottom spacing for most sections to maintain symmetry. Vary spacing intentionally to create hierarchy or special emphasis. </Tip> </Tab> <Tab title="Desktop & Mobile"> ### Separate desktop and mobile spacing Some sections provide separate spacing controls for desktop and mobile devices, giving you precise control over spacing at different screen sizes. **Desktop spacing:** * **Desktop top spacing:** Controls top margin on desktop and tablet devices * **Desktop bottom spacing:** Controls bottom margin on desktop and tablet devices **Mobile spacing:** * **Mobile top spacing:** Controls top margin on mobile devices only * **Mobile bottom spacing:** Controls bottom margin on mobile devices only **When to use separate controls:** * Reduce spacing on mobile for more content visibility * Increase desktop spacing for more breathing room on large screens * Fine-tune spacing for optimal experience on each device type * Create different visual rhythms for desktop vs mobile <Note> When separate desktop/mobile spacing controls are not available, the theme automatically adjusts spacing for mobile devices, typically reducing it by 25-50%. </Note> </Tab> </Tabs> ### Section border Add visual separation by displaying border lines on the top, bottom, or both edges of a section. **Options:** * **None:** No borders (default for seamless integration) * **Top:** Border line above the section * **Bottom:** Border line below the section * **Both:** Border lines on both top and bottom **Default:** None <AccordionGroup> <Accordion title="When to use top border" icon="minus"> **Use cases:** * Section is first element on page * Creating separation from header or announcement bar * Defining the start of main content area * When background colors alone don't provide enough separation </Accordion> <Accordion title="When to use bottom border" icon="minus"> **Use cases:** * Separating from footer or content below * Defining the end of a content block * Creating visual bookends for grouped content * Adding structure to minimal designs </Accordion> <Accordion title="When to use both borders" icon="equals"> **Use cases:** * Maximum visual distinction for special sections * Containing promotional or announcement content * Creating "boxed" appearance for featured sections * Emphasizing important content areas </Accordion> <Accordion title="When to use no borders" icon="ban"> **Use cases:** * Clean, minimal appearance (recommended default) * Sections with contrasting color schemes (borders not needed) * Full-width visual sections * Modern, flowing layouts </Accordion> </AccordionGroup> <img alt="Section border options comparison" /> <Tip> Section borders use your theme's border color defined in Colors settings. Use borders sparingly—alternating color schemes often provides better visual separation than borders. </Tip> ## Best practices * **Establish a width pattern** - Use Page width for most sections, Narrow width for text-heavy content, and Full width for hero images and visual impact sections * **Alternate color schemes** - Change schemes between adjacent sections to create natural visual breaks and improve page scannability * **Maintain spacing consistency** - Use M (Medium) spacing as your baseline and deviate only with clear purpose to create hierarchy * **Consider mobile experience** - Preview your spacing and width choices on actual mobile devices, as automatic adjustments may need fine-tuning * **Create visual hierarchy** - Combine larger spacing (L or XL) with contrasting color schemes to emphasize important sections * **Use borders strategically** - Reserve borders for sections that need extra separation when color scheme changes alone aren't sufficient * **Test width combinations** - Preview how different widths flow together—alternating between Page and Narrow can create engaging rhythm * **Match content to width** - Text-heavy sections benefit from Narrow width (60-80 character lines), while images shine at Full width * **Maintain symmetrical spacing** - Use matching top and bottom spacing for most sections unless creating intentional asymmetry * **Start simple** - Use Page width and M spacing for all sections initially, then adjust specific sections for variety and emphasis <Warning> Sections set to "No spacing" with the same color scheme will appear as one continuous section. This can be effective for creating seamless experiences but may confuse visitors if unintentional. </Warning> ## Common patterns ### Standard homepage layout Create balanced, professional homepage sections: * **Hero section:** Full width, Scheme 1, No top spacing, M bottom spacing * **Features:** Page width, Scheme 2, L spacing top and bottom * **Featured products:** Page width, Scheme 1, M spacing top and bottom * **Testimonials:** Narrow width, Scheme 2, L spacing top and bottom * **Newsletter:** Seminarrow width, Scheme 1, L spacing top and bottom ### Text-focused pages (blog, articles) Optimize readability for content-heavy pages: * **Article banner:** Page width, Scheme 1, M spacing top and bottom * **Article content:** Narrow width, Scheme 1, M spacing top and bottom * **Pull quotes:** Narrow width, Scheme 2, L spacing top and bottom * **Related articles:** Page width, Scheme 2, L spacing top, M bottom ### Visual-heavy layouts (lookbooks, portfolios) Create immersive visual experiences: * **All sections:** Full width, alternating schemes (1, 2, 1, 2), No or S spacing * **Effect:** Continuous visual flow with color changes providing structure ### E-commerce product pages Balance product displays with supporting content: * **Product images:** Full width, Scheme 1, No top spacing * **Product details:** Page width, Scheme 1, M spacing * **Recommendations:** Page width, Scheme 2, L spacing top and bottom * **Reviews:** Narrow width, Scheme 1, M spacing <img alt="Common spacing and width patterns examples" /> ## Related guides * [Layout](/themes/sahara/theme-settings/layout) - Configure global page width and spacing multipliers * [Colors](/themes/sahara/theme-settings/colors) - Define color schemes applied to sections * [Typography](/themes/sahara/theme-settings/typography) - Set fonts and text sizes that work with your layouts # Footer Source: https://docs.digifist.com/themes/sahara/footer/footer Configure your store's footer with menu columns, social links, newsletter signup, and brand information using a flexible grid system. The footer section displays site-wide information and navigation at the bottom of all pages. It uses a flexible grid-based layout system that lets you position menu columns, social links, newsletter signup, brand information, and payment icons exactly where you need them. <img alt="Footer section overview" /> ## What this section controls * Menu columns with navigation links * Social media icon links * Newsletter signup form * Brand logo and description * Payment method icons * Country/language selector * Custom content blocks * Follow on Shop button ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Locate Footer section"> The Footer section appears at the bottom of your store. Find it in the left sidebar under Static sections. </Step> <Step title="Add footer blocks"> Click "Add block" to add menu columns, social links, newsletter, or other footer content. </Step> <Step title="Configure grid layout"> Use column factor and row factor settings to position each block in the footer grid. </Step> </Steps> <img alt="Footer location in Theme Customizer" /> ## Grid layout system The footer uses a grid system where each block can span multiple columns (width) and rows (height). ### Column factor Controls how many columns (1-6) a block spans horizontally. **Example:** A block with column factor of 2 takes twice the width of a block with column factor of 1. ### Row factor Controls how many rows (1-6) a block spans vertically. **Example:** A block with row factor of 2 takes twice the height of a block with row factor of 1. <Tip> Keep the total column factors in each row to 6 or less for balanced layouts. For example: three blocks with column factor 2 = 6 total. </Tip> <img alt="Footer grid layout system" /> ## Section settings <Tabs> <Tab title="Layout"> ### Spacing between blocks Controls gap between footer blocks (desktop only). **Options:** No, S, M, L, XL\ **Default:** M Mobile automatically stacks blocks with consistent spacing. <img alt="Spacing between blocks setting" /> </Tab> <Tab title="Mobile"> ### Show first accordion open on mobile Automatically expands the first menu column on mobile screens. **Default:** Enabled Helps visitors quickly access top navigation links. Disable for cleaner collapsed appearance. <img alt="Mobile accordion setting" /> </Tab> <Tab title="Design"> ### Section width Controls footer container width. **Options:** * **Page** - Content width (1400px max) * **Fluid** - 90% viewport width **Default:** Page ### Color scheme Background and text colors for footer. **Default:** Scheme 1 ### Section border Add borders to footer edges. **Options:** None, Top, Bottom, Both\ **Default:** None Use top border to separate footer from page content. <img alt="Footer design settings" /> </Tab> <Tab title="Spacing"> ### Spacing top Padding above footer content. **Options:** None, S, M, L, XL\ **Default:** M ### Spacing bottom Padding below footer content. **Options:** None, S, M, L, XL\ **Default:** M <img alt="Section spacing settings" /> </Tab> </Tabs> ## Block settings <Tabs> <Tab title="Menu column"> Display navigation menu as a footer column. ### Available settings <AccordionGroup> <Accordion title="Grid positioning" icon="table-cells"> **Column factor** - Block width (1-6 columns, default: 1) **Row factor** - Block height (1-6 rows, default: 1) <Note> Most menu columns use column factor 1 and row factor 1 for equal sizing. </Note> </Accordion> <Accordion title="Title" icon="heading"> Column heading text. **Type:** Inline rich text\ **Default:** Uses menu name Overwrites the menu's default heading. Leave empty to use menu name automatically. <img alt="Menu column title setting" /> </Accordion> <Accordion title="Heading size" icon="text-height"> HTML tag and visual size for column heading. **Options:** XS (h6), S (h5), M (h4), L (h3), XL (h2)\ **Default:** S (h5) </Accordion> <Accordion title="Menu" icon="bars"> Select which Shopify menu to display. **Default:** footer Create menus in Shopify admin under **Online Store > Navigation**. <img alt="Menu selection setting" /> </Accordion> </AccordionGroup> </Tab> <Tab title="Socials"> Display social media links with icons or text. ### Available settings <AccordionGroup> <Accordion title="Show on" icon="eye"> Control visibility per device. **Options:** Desktop, Mobile, Both\ **Default:** Both Hide social links on mobile to simplify footer. </Accordion> <Accordion title="Grid positioning" icon="table-cells"> **Column factor** - Block width (1-6, default: 1) **Row factor** - Block height (1-6, default: 1) </Accordion> <Accordion title="Title" icon="heading"> Column heading text (desktop only). **Type:** Inline rich text Common headings: "Follow Us", "Connect", "Social" </Accordion> <Accordion title="Heading size" icon="text-height"> **Options:** XS to XL\ **Default:** S (h5) </Accordion> <Accordion title="Icons" icon="icons"> Display icons instead of text labels. **Type:** Checkbox Enable for cleaner visual appearance. Disable to show platform names as text. <img alt="Social icons setting" /> </Accordion> <Accordion title="Open in new tab" icon="arrow-up-right-from-square"> Open social media links in new browser tab. **Default:** Enabled Keeps your store open while visitors view social profiles. </Accordion> </AccordionGroup> <Note> Configure social media URLs in Theme Settings > Social Media to display accounts. </Note> </Tab> <Tab title="Newsletter"> Newsletter signup form block. ### Available settings <AccordionGroup> <Accordion title="Show on" icon="eye"> **Options:** Desktop, Mobile, Both\ **Default:** Both </Accordion> <Accordion title="Grid positioning" icon="table-cells"> **Column factor** - Block width (1-6, default: 1) **Row factor** - Block height (1-6, default: 1) <Tip> Use column factor 2 for newsletter blocks to make signup form more prominent. </Tip> </Accordion> <Accordion title="Heading" icon="heading"> Newsletter section heading. **Type:** Inline rich text\ **Default:** "Newsletter heading goes here" Example: "Stay Updated", "Join Our Newsletter" <img alt="Newsletter heading setting" /> </Accordion> <Accordion title="Heading size" icon="text-height"> **Options:** XS to XL\ **Default:** S (h5) </Accordion> <Accordion title="Subtitle" icon="message"> Descriptive text below heading. **Type:** Inline rich text\ **Default:** "Newsletter content goes here" Example: "Get the latest updates on new products and upcoming sales" </Accordion> </AccordionGroup> </Tab> <Tab title="Brand"> Display brand logo and description. ### Available settings <AccordionGroup> <Accordion title="Show on" icon="eye"> **Options:** Desktop, Mobile, Both\ **Default:** Both </Accordion> <Accordion title="Grid positioning" icon="table-cells"> **Column factor** - Block width (1-6, default: 1) **Row factor** - Block height (1-6, default: 1) </Accordion> <Accordion title="Logo" icon="image"> **Logo** - Upload PNG/JPG logo image **Logo SVG code** - Paste SVG code (overwrites image if present) **Max desktop width** - Logo width in pixels (default: 160) **Max mobile width** - Logo width in pixels (default: 130) <Tip> Use SVG code for scalable logos that look crisp at any size. </Tip> <img alt="Brand logo settings" /> </Accordion> <Accordion title="Text" icon="paragraph"> Brand description or about text. **Type:** Rich text\ **Default:** "Share contact information, store details, and brand content with your customers." Include company info, tagline, or brief description. </Accordion> <Accordion title="Alignment" icon="align-left"> **Content position vertical** - Aligns content vertically (Top, Center, Bottom) **Content alignment** - Desktop text alignment (Start, Center, End) **Content alignment for mobile** - Mobile text alignment <img alt="Brand alignment settings" /> </Accordion> </AccordionGroup> </Tab> <Tab title="Payment icons"> Display accepted payment method icons. ### Available settings <AccordionGroup> <Accordion title="Grid positioning" icon="table-cells"> **Column factor** - Block width (1-6, default: 1) **Row factor** - Block height (1-6, default: 1) </Accordion> <Accordion title="Payment settings" icon="credit-card"> **Custom payment icons** - Add custom payment types not in default list **Override default payment icons** - Replace Shopify's auto-detected icons **Colorful payment icons** - Show colored logos instead of monochrome <Note> Icons automatically display based on enabled payment methods in your Shopify payments settings. </Note> <img alt="Payment icons settings" /> </Accordion> <Accordion title="Alignment" icon="align-left"> **Content position vertical** - Vertical alignment **Content alignment** - Desktop horizontal alignment **Content alignment for mobile** - Mobile alignment </Accordion> </AccordionGroup> </Tab> <Tab title="Content"> Custom content block for copyright, policies, or general text. ### Available settings <AccordionGroup> <Accordion title="Show on" icon="eye"> **Options:** Desktop, Mobile, Both\ **Default:** Both </Accordion> <Accordion title="Grid positioning" icon="table-cells"> **Column factor** - Block width (1-6, default: 1) **Row factor** - Block height (1-6, default: 1) </Accordion> <Accordion title="Title" icon="heading"> Optional heading for content block. **Type:** Inline rich text </Accordion> <Accordion title="Heading size" icon="text-height"> **Options:** XS to XL\ **Default:** S (h5) </Accordion> <Accordion title="Text" icon="paragraph"> Main content text with special \[year] placeholder. **Type:** Rich text\ **Default:** "©\[year] Sahara, All rights reserved." Use `[year]` to automatically display current year. <Tip> Use content blocks for copyright notices, policy links, or additional company information. </Tip> <img alt="Content text setting" /> </Accordion> <Accordion title="Alignment" icon="align-left"> **Content position vertical** - Vertical alignment **Content alignment** - Desktop alignment **Content alignment for mobile** - Mobile alignment </Accordion> </AccordionGroup> </Tab> <Tab title="Follow on Shop"> Allow customers to follow your store on the Shop app. ### Available settings <AccordionGroup> <Accordion title="Grid positioning" icon="table-cells"> **Column factor** - Block width (1-6, default: 1) **Row factor** - Block height (1-6, default: 1) </Accordion> <Accordion title="Alignment" icon="align-left"> **Content position vertical** - Vertical alignment **Content alignment** - Desktop alignment **Content alignment for mobile** - Mobile alignment </Accordion> </AccordionGroup> <Warning> Shop Pay must be enabled in your payment settings for this block to display. [Learn more](https://help.shopify.com/manual/online-store/themes/customizing-themes/follow-on-shop) </Warning> </Tab> <Tab title="Country selector"> Language and currency selector for international stores. ### Available settings <AccordionGroup> <Accordion title="Grid positioning" icon="table-cells"> **Column factor** - Block width (1-6, default: 1) **Row factor** - Block height (1-6, default: 1) </Accordion> <Accordion title="Alignment" icon="align-left"> **Content position vertical** - Vertical alignment **Content alignment** - Desktop alignment **Content alignment for mobile** - Mobile alignment </Accordion> </AccordionGroup> <Note> Country selector only appears when multiple languages or currencies are enabled in store settings. </Note> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Use 3-4 menu columns" icon="columns-3"> Three to four menu columns provide organized navigation without overwhelming visitors. Keep each menu focused on related links. </Card> <Card title="Balance column widths" icon="scale-balanced"> Keep total column factors per row at 6 or less for balanced layouts. Example: three blocks with column factor 2 each. </Card> <Card title="Make newsletter prominent" icon="envelope"> Use column factor 2 for newsletter blocks to draw attention to signup forms and increase subscriptions. </Card> <Card title="Enable social icons" icon="icons"> Display social links as icons rather than text for cleaner appearance and better space efficiency. </Card> <Card title="Use brand block strategically" icon="building"> Place brand block with logo and description in left or center position for better visibility. </Card> <Card title="Keep row factor at 1" icon="grip-lines"> Most blocks work best with row factor 1. Only increase row factor for tall content like brand descriptions. </Card> <Card title="Test mobile accordion" icon="mobile-screen"> Preview mobile footer to ensure first accordion (typically most important menu) opens by default. </Card> <Card title="Hide complex blocks on mobile" icon="eye-slash"> Use "Show on" setting to hide less essential blocks on mobile for cleaner small-screen layouts. </Card> <Card title="Use [year] placeholder" icon="calendar"> Always use \[year] in copyright text to automatically update each year without manual changes. </Card> <Card title="Group related content" icon="layer-group"> Place payment icons and copyright in the same row at footer bottom. Place menus together in top rows. </Card> </CardGroup> ## Common footer layouts **Standard footer** - 3 menu columns (column factor 1 each) + social links + newsletter (column factor 2) **Minimal footer** - Brand block (column factor 3) + 1 menu column + content block with copyright **Multi-language store** - 2 menu columns + newsletter + country selector + payment icons **Brand-focused** - Large brand block (column factor 3) + 2 small menus + social links **Newsletter-focused** - Newsletter block (column factor 3, prominent position) + 2 menus + payment icons ## Related guides <Card title="Header section" icon="window-maximize" href="/themes/sahara/header/header"> Configure header navigation and logo display </Card> # Announcement bar Source: https://docs.digifist.com/themes/sahara/header/announcement-bar Display important messages and promotions at the top of your store with carousel, dropdown cards, and countdown timers. The announcement bar displays site-wide messages for promotions, shipping updates, or time-sensitive information. It supports carousel rotation between multiple slides, expandable dropdown cards for detailed content, and countdown timers. <img alt="Announcement bar section overview" /> ## What this section controls * Announcement message content and carousel rotation * Dropdown cards with up to 3 expandable detail cards * Countdown timers for time-sensitive promotions * Section borders and spacing * Color schemes for bar and dropdown areas ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Locate Announcement bar"> The Announcement bar section is typically positioned at the top of your store. Look for it in the sections list or add it using the "Add section" button. </Step> <Step title="Add text slides"> Click **Add block** and select **Text slide** to create announcement messages. </Step> <Step title="Configure content"> Add your announcement text and optionally enable dropdown cards or countdown timers for enhanced functionality. </Step> </Steps> <img alt="Announcement bar location in Theme Customizer" /> ## Section settings Section settings control the overall behavior and appearance of the announcement bar. <Tabs> <Tab title="Carousel"> ### Slider autoplay interval Controls how quickly slides rotate when multiple text slides are present. **Range:** 2 – 6 seconds (0.5s increments) **Default:** 3 seconds <Note> Carousel is automatically enabled when 2 or more text slide blocks are added. With a single block, the announcement displays as static content. </Note> Slower intervals (5-6s) give visitors more time to read detailed messages. Faster intervals (2-3s) work for short alerts or urgent announcements. <img alt="Slider autoplay interval setting" /> </Tab> <Tab title="Design"> ### Color scheme Choose which color scheme applies to the announcement bar background and text. **Available options:** Scheme 1, Scheme 2, Scheme 3, Scheme 4, Inverse **Default:** Scheme 1 <Tip> Use a contrasting color scheme to make announcements stand out from the rest of your header. </Tip> ### Section border Add visual separation by displaying borders on the announcement bar. **Available options:** * **None:** No borders (seamless integration) * **Top:** Border line above the announcement bar * **Bottom:** Border line below the announcement bar * **Both:** Border lines on both top and bottom **Default:** None Use bottom border to separate announcements from header navigation. Use both borders for maximum visual distinction. <img alt="Section border options" /> </Tab> <Tab title="Spacing"> ### Spacing top Controls the padding above the announcement bar content. **Available options:** None, S, M, L, XL **Default:** M ### Spacing bottom Controls the padding below the announcement bar content. **Available options:** None, S, M, L, XL **Default:** M <Tip> Use larger spacing (L or XL) when displaying countdown timers to ensure adequate breathing room. </Tip> </Tab> </Tabs> ## Block settings Block settings configure individual text slides within the announcement bar. Each text slide represents one message in the carousel. <Tabs> <Tab title="Content"> ### Body text The main announcement message displayed to visitors. **Type:** Rich text **Default:** "Welcome to our store" Supports text formatting including bold, italic, and links. Keep messages concise for better mobile display. <Tip> For promotional messages, use action-oriented language and include a link to the relevant page or collection. </Tip> <img alt="Body text content setting" /> </Tab> <Tab title="Dropdown Cards"> The dropdown cards feature allows you to add expandable detailed content beneath a single announcement message. <Warning> Dropdown cards only work when exactly **one** text slide block is present. Adding a second slide will disable this feature. </Warning> <AccordionGroup> <Accordion title="Show dropdown cards" icon="chevron-down"> Enable expandable dropdown menu containing up to 3 detailed cards beneath the announcement text. **Type:** Checkbox **Default:** Disabled Dropdown cards work well for multi-region shipping announcements, detailed sale terms, or store policies that need more space than the main bar allows. <img alt="Show dropdown cards setting" /> </Accordion> <Accordion title="Color scheme" icon="palette"> Choose the color scheme for the dropdown menu. This can differ from the main announcement bar color scheme for visual hierarchy. **Available options:** Scheme 1, Scheme 2, Scheme 3, Scheme 4, Inverse **Default:** Scheme 1 </Accordion> <Accordion title="Card 1" icon="square-1"> First dropdown card with title, content, button text, and destination URL. **Card title** (text): Heading displayed on the card **Card content** (rich text): Detailed information or description **Link** (text): Button text (e.g., "Shop now", "Learn more") **URL** (url): Destination when clicking the button <Tip> Keep card titles under 5 words for better scannability. </Tip> </Accordion> <Accordion title="Card 2" icon="square-2"> Second dropdown card with the same configuration options as Card 1. **Card title** (text): Heading for second card **Card content** (rich text): Additional details **Link** (text): Button label **URL** (url): Button destination </Accordion> <Accordion title="Card 3" icon="square-3"> Third dropdown card with the same configuration options as Card 1 and Card 2. **Card title** (text): Heading for third card **Card content** (rich text): Supporting information **Link** (text): Call-to-action text **URL** (url): Link destination <Note> You don't need to fill all 3 cards. Leave cards empty to display fewer options. </Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Countdown Timer"> Add urgency to announcements with time-based displays that count down to a specific deadline. <AccordionGroup> <Accordion title="Enable countdown timer" icon="clock"> Toggle the countdown timer display for this text slide. **Type:** Checkbox **Default:** Disabled <Warning> Countdown timers add visual weight. Use sparingly and only for genuinely time-sensitive offers to maintain credibility. </Warning> </Accordion> <Accordion title="Timer date and time" icon="calendar"> Set the exact date and time when the countdown reaches zero. **Timer year** (number): Year (e.g., 2024, 2025) **Timer month** (select): January through December **Timer day** (range): 1-31 **Timer hour** (range): 0-23 (24-hour format) **Timer minute** (range): 0-59 **Default:** January 1, 2024 at 00:00 <img alt="Timer date and time settings" /> </Accordion> <Accordion title="Timer extend" icon="repeat"> Automatically extend the countdown by a specified number of days after it expires. This creates a "rolling" promotion effect. **Range:** 0 – 30 days **Default:** 0 (no extension) <Note> When timer extends, it resets to the specified number of days from the expiration time. Useful for ongoing promotions that reset daily or weekly. </Note> </Accordion> <Accordion title="Timer end message" icon="message"> Message displayed when the countdown reaches zero (if not extending). **Type:** Inline rich text **Default:** "Sale has ended" **Examples:** * "Offer expired - Stay tuned for more!" * "Flash sale completed - Check back soon" * "Pre-order now closed" </Accordion> <Accordion title="Timer unit visibility" icon="eye"> Control which time units are displayed in the countdown. **Show timer days** (checkbox): Display days remaining (default: enabled) **Show timer hours** (checkbox): Display hours remaining (default: enabled) **Show timer minutes** (checkbox): Display minutes remaining (default: enabled) **Show timer seconds** (checkbox): Display seconds remaining (default: enabled) <Tip> Showing seconds increases urgency but requires more visual attention. Use for flash sales under 1 hour. For multi-day promotions, showing only days and hours creates a cleaner display. </Tip> <img alt="Timer unit visibility settings" /> </Accordion> </AccordionGroup> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Keep text brief" icon="text-size"> Limit announcement text to under 60 characters for optimal mobile display and quick readability. </Card> <Card title="Use dropdown cards strategically" icon="cards-blank"> Dropdown cards work well for regional information, detailed terms, or multiple CTAs without cluttering the main bar. </Card> <Card title="Limit carousel slides" icon="arrows-rotate"> Keep carousel to 2-3 slides maximum. More slides reduce effectiveness and split user attention. </Card> <Card title="Genuine urgency only" icon="hourglass"> Enable countdown timers only for genuinely time-sensitive offers to maintain credibility and urgency impact. </Card> <Card title="Test autoplay speed" icon="gauge"> Faster intervals (2-3s) work for very short messages, slower intervals (5-6s) for detailed content or countdown timers. </Card> <Card title="Add borders for separation" icon="border-all"> Use section borders to separate announcement bar from header when using similar color schemes. </Card> <Card title="One message per slide" icon="message"> Avoid running multiple promotions simultaneously in carousel. Focus on one clear message per slide. </Card> <Card title="Preview on mobile" icon="mobile-screen"> Test dropdown cards on mobile before publishing to ensure content is easily accessible and buttons are adequately sized. </Card> <Card title="Use timer extend feature" icon="repeat"> For ongoing promotions, use timer extend rather than manually updating dates each time expiration occurs. </Card> <Card title="Match color schemes" icon="palette"> Coordinate dropdown card color scheme with your brand while maintaining sufficient contrast for readability. </Card> </CardGroup> <Warning> Countdown timers display in the visitor's local timezone. Ensure your promotion terms account for global timing differences. </Warning> ## Common use cases * **Flash sale announcement** - Single slide with countdown timer showing hours/minutes/seconds for 24-hour sale * **Free shipping promotion** - Multiple slides rotating between free shipping threshold and current promotion details * **Regional announcements** - Single slide with dropdown cards showing shipping information for different countries or regions * **New collection launch** - Countdown timer with days/hours leading up to product release date * **Holiday hours** - Single static slide with dropdown cards detailing hours for different store locations * **Sale rotation** - 2-3 slides showcasing different product categories currently on sale * **Pre-order campaign** - Countdown to pre-order closing with clear end message when timer expires * **Seasonal promotion** - Extended timer (7-30 days) for ongoing seasonal discounts that reset automatically # Header Source: https://docs.digifist.com/themes/sahara/header/header Configure your store's primary navigation, logo, menu structure, and utility tools. The header section controls your store's primary navigation area, appearing consistently across all pages. It manages logo display, menu structure, search and cart access, and provides flexible layout options to match your brand identity. <img alt="Header section overview" /> ## What this section controls * Logo display and sizing for desktop and mobile * Navigation menu structure and layout * Megamenu promotional cards and badges * Search, cart, and account utilities * Sticky header behavior and transparency effects * Country/language selector placement ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Locate Header section"> The Header section is automatically present at the top of your store. Find it in the left sidebar under Static sections. </Step> <Step title="Choose layout"> Select your preferred layout from 6 available options to match your brand style. </Step> <Step title="Upload logo"> Add your logo image or SVG code to replace the default store name text. </Step> </Steps> <img alt="Header location in Theme Customizer" /> ## Layout options Choose from 6 header layouts to control navigation and logo placement: <Tabs> <Tab title="Logo Centered"> **Default layout** - Logo centered with navigation split on left and right sides. Utilities (search, cart, account) appear on the right. Best for brand-focused stores where logo prominence matters most. <img alt="Logo centered layout" /> </Tab> <Tab title="Navigation Centered"> Navigation menu centered with logo on the left and utilities on the right. Works well for stores with concise navigation (3-5 menu items). <img alt="Navigation centered layout" /> </Tab> <Tab title="Logo Centered, Nav Below"> Logo centered on first row, navigation centered below on second row. Creates distinct visual separation. Ideal for stores with many menu items that need more horizontal space. <img alt="Logo centered with navigation below" /> </Tab> <Tab title="Nav Centered Below"> All content (logo, utilities) on first row, navigation centered below on second row. Maximizes logo and utility visibility while giving navigation dedicated space. <img alt="Navigation centered below layout" /> </Tab> <Tab title="Nav and Logo Left"> Logo and navigation aligned to the left, utilities on the right. Clean left-aligned layout. Works for minimal designs or when utilities need prominence. <img alt="Navigation and logo left aligned" /> </Tab> <Tab title="Navigation Drawer"> Mobile-style drawer menu for desktop and mobile. Hamburger icon opens full-screen navigation menu. Best for complex navigation with many categories or deep menu hierarchies. <img alt="Navigation drawer layout" /> </Tab> </Tabs> ## General settings <Tabs> <Tab title="Sticky Header"> ### Enable sticky header Header remains visible when scrolling down the page. **Default:** Enabled Keeps navigation and cart accessible throughout browsing. We recommend leaving this enabled for better user experience. <img alt="Sticky header setting" /> </Tab> <Tab title="Transparency"> ### Transparent header on scroll Maintains transparent header background even when scrolling. **Default:** Disabled When enabled, the header background remains transparent during page navigation. Use this for immersive homepage experiences where content flows behind the header. <Note> Requires sufficient contrast between header text and page content. Test thoroughly to ensure navigation remains readable. </Note> ### Bottom border for transparent header Adds subtle border line at bottom of transparent header. **Default:** Enabled Provides visual separation between header and page content when transparency is active. Only works when transparent header is enabled. <img alt="Transparent header settings" /> </Tab> <Tab title="Navigation Drawer"> ### Enable navigation drawer layer Adds show/hide toggles to third-level menu items in navigation drawer. **Default:** Enabled Creates accordion-style expansion for deep menu hierarchies. Disable if you have shallow navigation (1-2 levels) to simplify the drawer interface. <img alt="Navigation drawer layer setting" /> </Tab> </Tabs> ## Logo settings <Tabs> <Tab title="Logo Images"> ### Logo Primary logo image displayed in the header. Upload PNG or JPG with transparent background. Recommended size: 400×100px. ### Logo for transparent header Alternative logo used when transparent header is enabled. Use a version with different color (typically white or dark) to ensure visibility against varied backgrounds. ### SVG code Paste SVG code directly for vector logo display. Overwrites uploaded image if SVG code is present. SVG logos scale perfectly at any size. <Tip> SVG logos load faster and scale perfectly. Use SVG code when possible for best quality. </Tip> <img alt="Logo upload settings" /> </Tab> <Tab title="Logo Sizing"> ### Max desktop width Controls logo width on desktop screens. **Range:** 50-200px\ **Default:** 120px Only applies when logo image or SVG is present. Text logos use font size setting instead. ### Max mobile width Controls logo width on mobile screens. **Range:** 40-160px\ **Default:** 80px Smaller default ensures header elements fit on mobile screens. ### Logo font size Controls text logo size when no image/SVG is uploaded. **Range:** 0.5× - 4.0×\ **Default:** 1.0× Only affects text-based logos (when logo image/SVG fields are empty). <img alt="Logo sizing controls" /> </Tab> </Tabs> ## Navigation settings <Tabs> <Tab title="Menus"> ### Menu Primary navigation menu for desktop. **Default:** main-menu Create menus in Shopify admin under **Online Store > Navigation**. ### Mobile menu Alternative menu for mobile devices. Leave empty to use the same menu as desktop. Create simplified mobile menu for better small-screen experience. ### Submenu Additional menu visible only in navigation drawer layout. **Default:** main-menu Appears below primary navigation in drawer. Use for secondary links like policies, help center, or social links. <img alt="Menu selection settings" /> </Tab> <Tab title="Layout"> ### Menu column count Number of columns in megamenu dropdown. **Range:** 1-6 columns\ **Default:** 5 Controls how menu items distribute horizontally in megamenu. More columns = wider megamenu. Fewer columns = more compact display. <Note> Adjust based on number of items in your menu. 3-5 columns works well for most stores. </Note> <img alt="Menu column count setting" /> </Tab> </Tabs> ## Additional links Add up to 2 standalone links in header navigation or utilities area (placement depends on layout). <Tabs> <Tab title="First Link"> ### Label Link text displayed to visitors. **Default:** "Collections" ### Link Destination URL for the link. **Default:** /collections <img alt="First additional link settings" /> </Tab> <Tab title="Second Link"> ### Label Link text displayed to visitors. **Default:** "Products" ### Link Destination URL for the link. **Default:** /collections/all <img alt="Second additional link settings" /> </Tab> </Tabs> <Note> Additional link placement varies by layout. In centered layouts, links appear in utilities area. In left-aligned layouts, links appear in main navigation. </Note> ## Country drawer Control where language and currency selectors appear. ### Enable in header Display country/language selector in main header navigation or utilities. **Default:** Enabled Position depends on selected layout. ### Enable in navigation drawer Display country/language selector in navigation drawer menu. **Default:** Enabled Appears at bottom of drawer menu on both desktop and mobile. <Tip> Enable in both locations for maximum accessibility, or choose one location to simplify header design. </Tip> <img alt="Country drawer settings" /> ## Megamenu settings ### Card aspect ratio Image proportions for megamenu promotional cards on desktop. **Options:** auto, 1:1, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 16:9, 9:16, 2:1, 4:1, 8:1, 1:2\ **Default:** 3:4 (portrait) ### Card aspect ratio for mobile Image proportions for megamenu cards on mobile screens. **Options:** (same as above)\ **Default:** 3:4 <Note> Aspect ratio only affects promotional cards added via blocks (Image with link and text), not regular menu items. </Note> <img alt="Megamenu card aspect ratio settings" /> ## Design settings <Tabs> <Tab title="Width"> ### Section width Controls header container width. **Options:** * **Page** - Content width (1400px max) * **Fluid** - 90% viewport width * **Full** - Edge-to-edge (100vw) **Default:** Fluid <img alt="Section width setting" /> </Tab> <Tab title="Color"> ### Color scheme Background and text colors for header. **Default:** Scheme 1 Choose scheme with sufficient contrast for navigation readability. <img alt="Color scheme setting" /> </Tab> </Tabs> ## Block settings Add promotional elements to your navigation using blocks. <Tabs> <Tab title="Image with Link and Text"> Add promotional card with image and text to megamenu dropdown. ### Available settings <AccordionGroup> <Accordion title="Menu item position" icon="arrow-down-1-9"> Links the block to a specific top-level menu item. Enter the position number (1, 2, 3, etc.) of the tier 1 menu link. The block appears in that menu item's dropdown. **Example:** Enter "2" to attach block to second menu item. <img alt="Menu item position setting" /> </Accordion> <Accordion title="Color scheme" icon="palette"> Background and text colors for promotional card. **Default:** Scheme 1 Can differ from header color scheme for visual emphasis. </Accordion> <Accordion title="Image" icon="image"> Card background image. Recommended size based on aspect ratio setting (e.g., 400×533px for 3:4 portrait). </Accordion> <Accordion title="Position" icon="align-justify"> Vertical alignment of card content. **Options:** * **Top** - Content aligned to top * **Center** - Content centered vertically * **Bottom** - Content aligned to bottom **Default:** Center <img alt="Content vertical alignment setting" /> </Accordion> <Accordion title="Heading" icon="heading"> Card title text. **Default:** "Heading goes here" Supports inline formatting (bold, italic). </Accordion> <Accordion title="Link type" icon="link"> How visitors interact with the card. **Options:** * **Button** - Shows clickable button with custom text * **Card** - Entire card is clickable (no visible button) **Default:** Card <img alt="Link type setting" /> </Accordion> <Accordion title="Button label" icon="tag"> Text displayed on button. Only visible when Link type is set to "Button". **Example:** "Shop Now", "Learn More" </Accordion> <Accordion title="Link" icon="external-link"> Destination URL when clicking card or button. </Accordion> </AccordionGroup> <Tip> Use promotional cards to highlight featured collections, new arrivals, or seasonal campaigns directly in navigation. </Tip> </Tab> <Tab title="Menu Link Badge"> Add badge labels to menu items (e.g., "New", "Sale", "Hot"). ### Available settings <AccordionGroup> <Accordion title="Menu item position" icon="arrow-down-1-9"> Links the badge to a specific top-level menu item. Enter position number (1, 2, 3, etc.) of the tier 1 menu link. Badge appears next to that menu item's text. <img alt="Badge menu position setting" /> </Accordion> <Accordion title="Badge label" icon="tag"> Text displayed in the badge. Keep short (1-4 characters) for best display. Examples: "New", "Sale", "%" <img alt="Badge label setting" /> </Accordion> <Accordion title="Badge style" icon="shapes"> Visual shape of the badge. **Options:** * **Square** - Sharp corners * **Rounded** - Rounded corners (pill shape) **Default:** Rounded <img alt="Badge style setting" /> </Accordion> </AccordionGroup> <Warning> Use badges sparingly. Too many badges reduce their effectiveness and create visual clutter. </Warning> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Choose layout strategically" icon="table-layout"> Logo centered works for brand-focused stores. Navigation drawer suits stores with deep navigation hierarchies (10+ categories). </Card> <Card title="Enable sticky header" icon="thumbtack"> Keep sticky header enabled (default) to ensure cart and search remain accessible while customers browse. </Card> <Card title="Optimize logo sizing" icon="expand"> Desktop logos at 100-140px and mobile at 60-100px create balanced proportions. Test on actual devices. </Card> <Card title="Use transparent header carefully" icon="eye-slash"> Transparent header works best on homepage hero images. Ensure sufficient text contrast throughout scrolling. </Card> <Card title="Simplify mobile navigation" icon="mobile-screen"> Create separate mobile menu with fewer items (5-7 max) for better small-screen usability. </Card> <Card title="Match megamenu columns to items" icon="columns-3"> 3-5 columns works for most stores. Adjust based on menu item count to avoid awkward spacing. </Card> <Card title="Position blocks strategically" icon="list-ol"> Attach promotional cards to your most popular or seasonal menu items for maximum visibility. </Card> <Card title="Limit menu badges" icon="award"> Use 1-2 badges maximum. Focus on promoting new collections or active sales only. </Card> <Card title="Test country drawer placement" icon="globe"> Enable in header for quick access. Enable in drawer for cleaner header appearance. Test both. </Card> <Card title="Use SVG logos when possible" icon="vector-square"> SVG logos scale perfectly at any size and load faster than PNG/JPG images. </Card> </CardGroup> ## Related guides <Card title="Announcement bar" icon="rectangle-ad" href="/themes/sahara/header/announcement-bar"> Configure messages and promotions above the header </Card> # Introduction Source: https://docs.digifist.com/themes/sahara/index A fresh, vibrant Shopify theme built for stores that lead with bold imagery and color. Sahara is a Shopify theme for fashion, lifestyle, and product-driven brands. It includes a flexible section system, advanced product features, and a full set of customizable templates. ## Presets Sahara comes with 3 ready-made designs for your store. <Columns> <Card title="Sahara" href="https://sahara-theme.myshopify.com"> A lush, vibrant design with bold imagery and warm tones, built for fashion and lifestyle brands. </Card> <Card title="Mirage" href="https://mirage-theme.myshopify.com"> A clean, editorial design with high contrast and refined typography, ideal for jewelry and accessories. </Card> <Card title="Savage" href="https://sahara-cosmetics-digifist.myshopify.com"> A bold, minimal design with a natural aesthetic, crafted for beauty and cosmetics brands. </Card> </Columns> ## Products <Columns> <Card title="Product Page (PDP)" icon="box" href="/themes/sahara/products/product-page"> Flexible block-based product page with media gallery, variants, and dynamic checkout. </Card> <Card title="Product Groups" icon="layer-group" href="/themes/sahara/products/product-groups"> Link separate products to behave like variants using swatches, images, or text. </Card> <Card title="Product Badges" icon="tag" href="/themes/sahara/products/product-badges"> Highlight products with Sale, New, Bestseller, and custom tag-based badges. </Card> <Card title="Pre-order" icon="clock" href="/themes/sahara/products/pre-order"> Accept advance orders with metafield-driven messaging and estimated shipping dates. </Card> <Card title="Gift Card" icon="gift" href="/themes/sahara/products/gift-card"> Branding configuration for digital gift card pages. </Card> </Columns> ## Collections <Columns> <Card title="Collection Page (PLP)" icon="grid-2" href="/themes/sahara/collections/collection-page"> Product grid with filtering, sorting, and promotional card injection. </Card> <Card title="Collection List Page (CLP)" icon="list" href="/themes/sahara/collections/collection-list-page"> Display all or selected collections with custom imagery and pagination. </Card> <Card title="Search" icon="magnifying-glass" href="/themes/sahara/collections/search"> Full search results with filtering, sorting, and multi-type results. </Card> </Columns> ## Pages & Templates <Columns> <Card title="404 Error Page" icon="triangle-exclamation" href="/themes/sahara/pages-templates/404"> Customizable error page that guides lost visitors back to your store. </Card> <Card title="Blog & Article" icon="newspaper" href="/themes/sahara/pages-templates/blog"> Article feed with tag filtering and block-based individual article layout. </Card> <Card title="Cart" icon="cart-shopping" href="/themes/sahara/pages-templates/cart"> Full-page cart with item management, discounts, and express checkout. </Card> <Card title="Page Template" icon="file" href="/themes/sahara/pages-templates/page"> Generic content template for About, Contact, FAQs, and more. </Card> <Card title="Account & Login" icon="user-circle" href="/themes/sahara/pages-templates/customers/account"> Customer account dashboard, login, register, addresses, and order details. </Card> <Card title="Password Page" icon="lock" href="/themes/sahara/pages-templates/password"> Coming soon page with email signup for pre-launch stores. </Card> </Columns> ## Sections & Theme Settings <Columns> <Card title="Sections" icon="rectangles-mixed" href="/themes/sahara/sections"> Browse the full library of sections available for any page in your store. </Card> <Card title="Theme Settings" icon="sliders" href="/themes/sahara/theme-settings"> Control colors, typography, buttons, layout, and global behavior. </Card> <Card title="Header & Footer" icon="window-maximize" href="/themes/sahara/header"> Set up navigation, announcement bar, logo, and footer content. </Card> <Card title="Apps" icon="puzzle-piece" href="/themes/sahara/sections/apps"> Embed third-party Shopify apps for reviews, wishlists, live chat, and more. </Card> </Columns> ## Resources <Columns> <Card title="Common settings" icon="gear" href="/themes/sahara/common-settings"> Spacing, borders, color schemes, and section width options explained. </Card> <Card title="Changelog" icon="clock-rotate-left" href="/themes/sahara/changelog"> See what's new and what's changed in each Sahara release. </Card> </Columns> # 404 Error Page Source: https://docs.digifist.com/themes/sahara/pages-templates/404 Customizable 404 error page template for handling broken links and missing pages The Main 404 template displays when customers visit a non-existent page on your store, providing a friendly error message with a customizable call-to-action button to guide users back to active areas of your site. A well-designed 404 page reduces bounce rates by helping lost visitors find their way back to your store content instead of leaving entirely. Use this template to turn the frustration of a broken link into a redirection opportunity with helpful navigation and relevant suggestions. *** ## Template Settings ### Content Configuration <AccordionGroup> <Accordion title="Title" icon="heading"> Main heading displayed on the 404 error page. * **Type:** Text field * **Default:** "Page not found" <Note> Use friendly, helpful language instead of technical error messages. Examples: "Oops! We can't find that page" or "This page took a wrong turn" </Note> </Accordion> <Accordion title="Subtext" icon="align-left"> Additional message or description below the title. * **Type:** Textarea (multi-line text) * **Default:** Empty **Suggested content:** * Explanation of what might have happened * Alternative navigation suggestions * Search encouragement * Apology or reassurance message <Tip> Example subtext: "The page you're looking for might have been moved, deleted, or never existed. Try searching or browse our collections to find what you need." </Tip> </Accordion> <Accordion title="Call-to-Action Link" icon="link"> Button that redirects users to an active page. **Link Text:** * **Type:** Text field * **Default:** "Continue shopping" * Examples: "Browse Collections", "Return Home", "Explore Products" **Link URL:** * **Type:** URL field * **Default:** `/collections/all` * Common alternatives: * `/` (homepage) * `/collections` (collections page) * `/pages/help` (help center) * `/search` (search page) <Warning> Ensure the link URL points to a valid, active page. A broken link on a 404 page creates a frustrating user experience. </Warning> </Accordion> </AccordionGroup> *** ## Standard Section Settings <AccordionGroup> <Accordion title="Section Width" icon="left-right"> * **Page Width** (default) - Contained within page margins * **Fluid Width** - Extends to container edges * **Full Width** - Edge-to-edge browser width <Note> Page width is recommended for 404 pages to maintain comfortable reading width for the error message. </Note> </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 <Tip> Use a consistent color scheme with your site, or choose a friendly, non-alarming scheme (avoid harsh reds that suggest critical errors). </Tip> </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 Larger spacing creates more visual breathing room for the error message. </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Content Strategies ### Tone & Messaging <CardGroup> <Card title="Friendly & Helpful" icon="face-smile"> **Good:** * "Oops! This page doesn't exist" * "We can't find that page" * "Looks like you've hit a dead end" **Avoid:** * "Error 404" * "Page Not Found" * Technical jargon </Card> <Card title="Actionable" icon="diamond-turn-right"> **Good CTA:** * "Browse Collections" * "Continue Shopping" * "Return to Homepage" **Avoid:** * "Go Back" * "Click Here" * Generic "OK" buttons </Card> </CardGroup> ### Subtext Examples <AccordionGroup> <Accordion title="Retail Store" icon="shop"> **Title:** "This page took a wrong turn" **Subtext:** "The page you're looking for might have been moved or doesn't exist. Browse our latest collections or use the search bar to find what you need." **CTA:** "Shop New Arrivals" → `/collections/new` </Accordion> <Accordion title="Fashion Brand" icon="shirt"> **Title:** "Oops! This outfit doesn't exist" **Subtext:** "We couldn't find the page you're looking for. Explore our seasonal collection or discover trending styles to refresh your wardrobe." **CTA:** "Discover Trending Styles" → `/collections/trending` </Accordion> <Accordion title="Home Goods" icon="couch"> **Title:** "This room is empty" **Subtext:** "The page you're searching for has been moved or removed. Check out our featured products or browse by room to find inspiration." **CTA:** "Browse by Room" → `/collections` </Accordion> <Accordion title="Tech/Electronics" icon="laptop"> **Title:** "404: Page Not Found" **Subtext:** "The URL you entered doesn't match any page in our store. Try searching for products or visit our support center for assistance." **CTA:** "Search Products" → `/search` </Accordion> </AccordionGroup> *** ## Best practices <CardGroup> <Card title="Content guidelines" icon="pen-ruler"> Use friendly brand-aligned language, acknowledge the issue without blaming user, provide clear next steps, keep messaging concise (1-2 sentences). Don't use technical error codes as main message, create anxiety, leave users without clear action, or apologize excessively. </Card> <Card title="Navigation strategy" icon="signs-post"> Best CTA destinations in order: Homepage (/) as safe default, Collections Page (/collections/all) for product discovery, New Arrivals (/collections/new) to highlight fresh inventory, Sale/Featured to convert visitors, or Search Page to help users find what they sought. </Card> <Card title="SEO & technical" icon="magnifying-glass-chart"> 404 pages should return proper HTTP 404 status code (Shopify handles automatically), keep pages indexed-friendly, don't redirect all 404s to homepage (hurts SEO), monitor errors in Google Search Console, fix broken links when discovered. </Card> <Card title="Design consistency" icon="palette"> Maintain header and footer on 404 page, use consistent color schemes with rest of site, keep same navigation available, match typography and button styles, ensure mobile responsiveness. A 404 page should feel like part of your store. </Card> <Card title="Analytics tracking" icon="chart-line"> Track which URLs generate 404 errors, identify patterns (old product links, typos, deleted pages), set up Google Analytics event tracking for 404s, review monthly to fix broken internal links, check for external links pointing to non-existent pages. </Card> </CardGroup> *** ## Advanced Enhancements While the template section covers basic 404 functionality, consider these optional enhancements: <CardGroup> <Card title="Search Bar" icon="magnifying-glass"> Add the predictive search section above the 404 message to help users find what they were looking for </Card> <Card title="Popular Products" icon="fire"> Include a featured products section below to showcase bestsellers and reduce bounce rate </Card> <Card title="Category Links" icon="grid-2"> Add a content-tiles section with quick links to main product categories </Card> <Card title="Recent Articles" icon="newspaper"> Display blog posts to keep users engaged even when the page doesn't exist </Card> </CardGroup> <Tip> Add sections to the 404 template in the Theme Customizer just like any other template. Combine Main 404 with Featured Products, Trust Indicators, or Newsletter sections for a more engaging experience. </Tip> *** ## Common Scenarios <AccordionGroup> <Accordion title="Deleted Product" icon="box-archive"> **Situation:** Customer clicks old bookmark to deleted product **Solution:** * Subtext mentions product might be discontinued * CTA directs to similar products collection * Optional: Add related products section </Accordion> <Accordion title="Typo in URL" icon="keyboard"> **Situation:** Customer mistyped URL or followed broken link **Solution:** * Friendly message that doesn't blame the user * Provide search bar to find intended page * CTA to browse all products </Accordion> <Accordion title="Old Marketing Campaign" icon="bullhorn"> **Situation:** Customer follows link from old email or ad to expired campaign page **Solution:** * Subtext explains campaign has ended * CTA to current promotions or new arrivals * Consider Featured Collections section showing active sales </Accordion> <Accordion title="Moved Page" icon="arrows-turn-right"> **Situation:** You reorganized site structure and old URLs no longer work **Prevention:** * Set up URL redirects in Shopify admin (Navigation → URL Redirects) * Use 301 redirects from old URLs to new destinations * Monitor 404 reports to catch issues early </Accordion> </AccordionGroup> *** ## Mobile Optimization The Main 404 template is fully responsive: * **Centered layout** works well on all screen sizes * **Button CTA** has adequate touch target size * **Readable text** scales appropriately for mobile * **Vertical spacing** adjusts for smaller screens <Note> Test your 404 page on mobile devices to ensure the message is concise and the CTA button is easily tappable. </Note> *** ## Related Templates <CardGroup> <Card title="Main Search" icon="magnifying-glass"> Search results page where users land when searching (alternative to 404 for finding content) </Card> <Card title="Main Password" icon="lock"> Password-protected store page shown when store is locked </Card> <Card title="Collection Page" icon="grid"> Collection template users reach when browsing products successfully </Card> </CardGroup> *** ## Customization Template Use this template when setting up your 404 page: ``` Title: [Brand-specific friendly error message] Subtext: [1-2 sentences explaining the situation and offering help] Link Text: [Action-oriented CTA matching your goal] Link URL: [Most relevant destination for your store] ``` **Example:** ``` Title: "We can't find that page" Subtext: "The page you're looking for might have been moved or doesn't exist. Browse our collections or use search to find what you need." Link Text: "Shop All Products" Link URL: /collections/all ``` *** ## Quick Tips * **Keep it simple** - Don't overcomplicate the 404 page; clear message + clear action = good UX * **Stay on-brand** - Match your brand's tone (playful, professional, luxury, etc.) * **Test regularly** - Visit a non-existent URL quarterly to ensure 404 page looks correct * **Monitor & fix** - Review 404 reports monthly and create redirects for common broken links * **Don't apologize excessively** - One "oops" or "sorry" is enough * **Make it helpful** - Every element should guide users back to your store content <Warning> The 404 page is a template-level setting. Changes apply to ALL 404 errors across your store, not individual pages. </Warning> # Article Template (main-article) Source: https://docs.digifist.com/themes/sahara/pages-templates/article Blog article template for displaying individual blog posts with comments and social sharing The Main Article template displays individual blog posts with a flexible block-based layout, controlling featured images, article metadata, content, tags, social sharing, and commenting features to create engaging blog experiences. This modular template allows you to customize the order and display of article elements like title, image, content, and tags for optimal reading experience. Use this template to publish compelling blog content that engages readers, encourages sharing, and strengthens your brand's content marketing strategy. *** ## Template Settings ### Content Features <AccordionGroup> <Accordion title="Back to Blog Button" icon="arrow-left"> Display a navigation link back to the blog listing page. * **Type:** Checkbox * **Default:** Enabled <Note> The button typically appears at the top of the article, helping readers navigate back to browse more posts. </Note> </Accordion> <Accordion title="Social Sharing" icon="share-nodes"> Enable social media sharing buttons for the article. * **Type:** Checkbox * **Default:** Enabled **Typically includes:** * Facebook * Twitter/X * Pinterest * Email * Copy link <Tip> Social sharing increases article reach and engagement. Keep enabled unless you have specific reasons to disable. </Tip> </Accordion> <Accordion title="Comments Per Page" icon="comments"> Control how many comments display before pagination. * **Range:** 2-20 comments * **Step:** 1 * **Default:** 5 <Note> Lower values (5-10) keep page length manageable. Higher values (15-20) reduce pagination clicks but increase page length. </Note> </Accordion> </AccordionGroup> ### Layout Settings <AccordionGroup> <Accordion title="Section Width" icon="left-right"> Control the reading width of the article content. * **Narrower** (default) - Optimal for long-form reading (\~650px) * **Narrow** - Slightly wider reading column (\~800px) * **Page** - Standard page width (\~1200px) * **Fluid** - Extends to container edges <Tip> **Narrower** is recommended for blog articles as it provides the most comfortable reading experience with optimal line length. </Tip> </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Blocks The article template uses a flexible block system to control content layout and order. ### Featured Image Block <Accordion title="Featured Image" icon="image"> Displays the article's featured image at full width. * **Limit:** 1 per article * **No settings** - automatically pulls from article featured image * **Responsive:** Scales to fit screen width <Note> The featured image is set in the blog post editor (Shopify Admin → Content → Blog posts → Select post → Featured image). </Note> </Accordion> ### Title Block <Accordion title="Title" icon="heading"> Displays the article title with optional metadata. **Limit:** 1 per article **Settings:** * **Show Date**: Display publish date (enabled by default) * **Show Author**: Display article author (enabled by default) <CardGroup> <Card title="Date Format" icon="calendar"> Typically: "January 15, 2024" or "15 Jan 2024" depending on locale </Card> <Card title="Author Display" icon="user-pen"> Shows author name set in blog post editor </Card> </CardGroup> <Tip> Displaying date and author builds credibility and helps readers assess content freshness. </Tip> </Accordion> ### Content Block <Accordion title="Content" icon="align-left"> Displays the main article body content. * **Limit:** 1 per article * **No settings** - automatically renders article content from blog post editor * **Rich text support:** Headings, lists, images, videos, embeds, code blocks <Note> Content is authored in Shopify Admin → Content → Blog posts using the rich text editor. </Note> </Accordion> ### Tags Block <Accordion title="Tags" icon="tags"> Displays article tags for categorization and filtering. **Limit:** 1 per article **Settings:** * **Tag Display Type:** * **Links** (default) - Clickable tags that filter blog by tag * **Text** - Static text labels (non-clickable) <CardGroup> <Card title="Links Mode" icon="link"> Tags are clickable, filtering blog to show all posts with that tag </Card> <Card title="Text Mode" icon="font"> Tags are visual labels only, providing categorization without navigation </Card> </CardGroup> <Warning> Tags must be added to the blog post in Shopify Admin (Blog posts → Tags field). Empty tag field = no tags displayed. </Warning> </Accordion> ### App Block <Accordion title="App Blocks" icon="puzzle-piece"> Supports third-party app integrations for articles. * **Limit:** Unlimited * **Common uses:** * Comment systems (Disqus, Commentbox) * Related posts widgets * Email subscription forms * Author bio boxes * Table of contents generators <Note> Apps must support article page integration. Check app documentation for compatibility. </Note> </Accordion> *** ## Block Ordering Customize the article layout by reordering blocks in the Theme Customizer: ### Recommended Order <Steps> <Step title="Featured Image"> Visual impact at the top </Step> <Step title="Title"> Article headline with date/author </Step> <Step title="Content"> Main article body </Step> <Step title="Tags"> Categorization at the end </Step> <Step title="App Blocks"> Comments, related posts, author bio (after content) </Step> </Steps> ### Alternative Layouts <CardGroup> <Card title="Minimal" icon="minus"> Title → Content (No image, tags, or metadata) </Card> <Card title="Content-First" icon="file-lines"> Title → Content → Featured Image → Tags (Image below content) </Card> <Card title="Full-Featured" icon="star"> Featured Image → Title (date + author) → Content → Tags → Social Sharing → Comments </Card> <Card title="News Style" icon="newspaper"> Title (date + author) → Featured Image → Content → Tags </Card> </CardGroup> *** ## Best practices <CardGroup> <Card title="Content writing" icon="pen"> Use headings (H2, H3) to structure long articles, break into short paragraphs (3-5 sentences), include images throughout (not just featured image), use bullet points and numbered lists for scannability, add alt text to all images. Optimal length: 300-600 words (short), 800-1,500 (standard), or 2,000+ (long-form). </Card> <Card title="Featured image guidelines" icon="image"> Use minimum width of 1200px for retina displays, 16:9 or 3:2 aspect ratio, JPG (photos) or PNG (graphics), under 200KB file size. Use high-quality relevant images, avoid generic stock photos, include branding if needed, ensure subject is centered for mobile safety. </Card> <Card title="SEO optimization" icon="magnifying-glass-chart"> Write descriptive keyword-rich titles (50-60 characters), add meta description (150-160 characters), use heading hierarchy (H2 → H3 → H4), include internal links to related articles/products, add image alt text, use 3-5 tags per post, enable social sharing. Edit URL handles for cleaner links. </Card> <Card title="Commenting strategy" icon="comments"> Moderate comments to prevent spam (Shopify Admin → Settings → Comments), respond to legitimate comments to encourage engagement. Set 5-10 comments per page for low traffic, 10-15 for high traffic. Consider third-party systems like Disqus for better spam filtering. </Card> <Card title="Social sharing" icon="share-from-square"> Keep social sharing enabled on all articles, use compelling featured images for social previews, write engaging titles that encourage clicks, add Open Graph meta tags for better previews. Social previews use featured image, title, and meta description. </Card> <Card title="Tags strategy" icon="tag"> Use 3-5 relevant tags per post consistently, create consistent tag naming (lowercase, no spaces), use tags for topics not keyword stuffing. Examples: "skincare-tips", "summer-fashion", "diy-tutorials". Choose Links (default) for tag-based navigation or Text for purely informational labels. Avoid too many tags. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Company Blog" icon="building"> News, updates, company culture posts with author attribution </Card> <Card title="Product Guides" icon="book-open"> How-to articles, tutorials, and product education content </Card> <Card title="Lifestyle Content" icon="heart"> Fashion lookbooks, recipes, travel guides with rich imagery </Card> <Card title="Thought Leadership" icon="lightbulb"> Industry insights, opinion pieces, expert commentary </Card> <Card title="Customer Stories" icon="users"> Testimonials, case studies, user-generated content features </Card> <Card title="SEO Content" icon="chart-line"> Keyword-targeted articles to drive organic search traffic </Card> </CardGroup> *** ## Related Templates & Sections <CardGroup> <Card title="Main Blog" icon="newspaper"> Blog listing page showing all articles in reverse chronological order </Card> <Card title="Main Blog Banner" icon="image"> Optional banner section for blog listing pages </Card> <Card title="Blog Articles Section" icon="grid-2"> Can be added to article template to show related posts </Card> </CardGroup> *** ## Advanced Enhancements While the template provides core article functionality, enhance with additional sections: <CardGroup> <Card title="Related Products" icon="cart-shopping"> Add Product Recommendations section to drive sales from content </Card> <Card title="Newsletter Signup" icon="envelope"> Add Newsletter section at end of articles to capture readers </Card> <Card title="Author Bio" icon="user-circle"> Use Rich Text section or app block for author information </Card> <Card title="Table of Contents" icon="list-ol"> Use app blocks for long-form article navigation </Card> </CardGroup> <Tip> Add sections to the article template in Theme Customizer: **Online Store → Themes → Customize → Blog posts → Article** (select any article to edit template). </Tip> *** ## Troubleshooting <AccordionGroup> <Accordion title="Featured Image Not Showing" icon="image-slash"> **Possible Causes:** * Featured image not set in blog post editor * Featured Image block not added to template * Block is disabled or hidden **Solutions:** 1. Add featured image in Shopify Admin → Content → Blog posts → Select post → Featured image 2. Add Featured Image block to template 3. Ensure block is visible (not hidden in Theme Customizer) </Accordion> <Accordion title="Tags Not Displaying" icon="tags"> **Possible Causes:** * No tags added to blog post * Tags block not added to template **Solutions:** 1. Add tags in blog post editor (Tags field) 2. Add Tags block to article template 3. Verify block settings (links vs text mode) </Accordion> <Accordion title="Comments Not Appearing" icon="comment-slash"> **Check:** * Comments enabled in Shopify settings (Settings → Comments → Posts) * Article has comments (or submit test comment) * Comment moderation settings (auto-approve vs manual) <Note> New blogs start with zero comments. First comment must be approved before appearing (unless auto-approve is enabled). </Note> </Accordion> <Accordion title="Social Sharing Not Working" icon="share-nodes"> **Verify:** * Social sharing is enabled in template settings * Browser isn't blocking social widgets * Social meta tags are configured correctly * Test share links in incognito mode </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Individual blog article display template * **Content Source:** Articles from Shopify blog posts * **Layout:** Flexible block-based system * **Available Blocks:** Featured Image, Title, Content, Tags, App blocks * **Key Features:** Social sharing, comments, back to blog navigation * **Recommended Width:** Narrower (optimal reading experience) * **Comments:** 2-20 per page (default: 5) <Note> Articles are created in **Shopify Admin → Content → Blog posts**, not in the Theme Customizer. The template controls how articles are displayed, not the article content itself. </Note> # Blog Template (main-blog) Source: https://docs.digifist.com/themes/sahara/pages-templates/blog Blog listing page template displaying article feeds with tag filtering and pagination The Main Blog template displays a paginated feed of blog articles with optional tag-based filtering and the ability to inject promotional cards within the article grid. This template combines content discovery through article browsing with marketing opportunities through strategically placed text cards. Use this template to create an engaging content hub that showcases your editorial content while providing curated reading experiences through tag filtering and promotional highlights. *** ## Template Settings ### Content Display <AccordionGroup> <Accordion title="List Of" icon="filter"> Control which articles to display: * **All** (default) - Show all articles from the blog * **Selected** - Display only specific articles chosen via article blocks <Note> Use "Selected" mode when you want manual control over which articles appear and in what order. </Note> </Accordion> <Accordion title="Tag Filtering" icon="tags"> Enable tag-based filtering for readers. * **Type:** Checkbox * **Default:** Enabled When enabled, displays clickable tag filters above the article grid, allowing readers to view articles by category/topic. <Tip> Tag filtering is essential for blogs with 20+ articles across multiple categories. Disable for simple single-topic blogs. </Tip> </Accordion> <Accordion title="Articles Per Page" icon="list-ol"> Control how many articles display before pagination. * **Range:** 3-50 articles * **Step:** 1 * **Default:** 20 <CardGroup> <Card title="Low Count (3-12)" icon="minimize"> Faster load, more pages, good for image-heavy posts </Card> <Card title="High Count (20-50)" icon="maximize"> Fewer pages, more scrolling, ideal for text-focused content </Card> </CardGroup> </Accordion> <Accordion title="Pagination Style" icon="ellipsis"> Choose how additional articles load: * **Default** (default) - Traditional page numbers (1, 2, 3...) * **Load More** - "Load More" button for progressive loading <Note> "Load More" provides smoother UX and keeps users on the same page, while traditional pagination is better for SEO crawling. </Note> </Accordion> </AccordionGroup> ### Article Card Appearance <AccordionGroup> <Accordion title="Show Excerpt" icon="align-left"> Display article excerpt/summary on listing cards. * **Type:** Checkbox * **Default:** Enabled <Tip> Excerpts give readers context before clicking. For best results, write custom excerpts in blog post settings rather than relying on auto-generated ones. </Tip> </Accordion> <Accordion title="Show Date" icon="calendar"> Display publish date on article cards. * **Type:** Checkbox * **Default:** Enabled <Note> Showing dates builds trust for timely content (news, trends) but may make evergreen content seem outdated. </Note> </Accordion> <Accordion title="Show Author" icon="user-pen"> Display article author on cards. * **Type:** Checkbox * **Default:** Enabled Useful for multi-author blogs or building personal brand. Disable for anonymous/corporate blogs. </Accordion> <Accordion title="Content Alignment" icon="align-center"> Control text alignment on article cards: * **Left** - Left-aligned text * **Center** (default) - Centered text * **Right** - Right-aligned text <Tip> Center alignment works best for grid layouts with images. Left alignment suits list-style layouts with larger text blocks. </Tip> </Accordion> </AccordionGroup> ### Layout Settings <AccordionGroup> <Accordion title="Section Width" icon="left-right"> * **Page Width** (default) - Contained within page margins * **Fluid Width** - Extends to container edges * **Full Width** - Edge-to-edge browser width </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Blocks ### Text Card Block Inject promotional content cards within the article grid. <Accordion title="Text Card Settings" icon="rectangle-ad"> **Limit:** 1 per blog template **Settings:** * **Title:** Rich text heading (default: "Behind the brand: Find out more about our brand") * **Button Label:** CTA text (default: "Read more") * **Button URL:** Destination link (default: `/`) * **Button Style:** Filled, Outlined (default), or Default * **Position:** Grid position 1-28 (default: 8) * **Color Scheme:** Independent color scheme (default: scheme-1) <Tip> **Strategic Positioning:** * Position 1-3: High visibility (above the fold) * Position 7-9: Natural break after first row * Position 15-20: Mid-feed engagement </Tip> <Note> The text card appears at the specified position in the article grid. For example, position 8 means it appears as the 8th item in the grid (after 7 articles). </Note> </Accordion> ### Article Block Manually select specific articles to display (when "Selected" mode is active). <Accordion title="Article Settings" icon="newspaper"> **Settings:** * **Article:** Article picker to select specific blog post **Use Cases:** * Feature specific articles regardless of publish date * Create curated article collections * Highlight evergreen content * Manual article ordering <Warning> Article blocks only work when **List Of** is set to "Selected". In "All" mode, articles display chronologically by publish date. </Warning> </Accordion> *** ## Display Modes Comparison <CardGroup> <Card title="All Articles Mode" icon="list"> **When to Use:** * Standard blog with regular publishing * Chronological order is desired * Minimal manual curation needed **Behavior:** * Shows all published articles * Reverse chronological order (newest first) * Automatic updates as new articles publish * Tag filtering works </Card> <Card title="Selected Articles Mode" icon="hand-pointer"> **When to Use:** * Featured article showcase * Curated reading lists * Landing pages with specific content * Manual article prioritization **Behavior:** * Shows only articles added via blocks * Custom order (block order) * Manual updates required for new articles * Great for themed collections </Card> </CardGroup> *** ## Tag Filtering Features When tag filtering is enabled: <AccordionGroup> <Accordion title="How It Works" icon="filter-circle-dollar"> * All unique tags from blog articles display as clickable filters * Clicking a tag filters grid to show only articles with that tag * "All" or "View All" button returns to unfiltered view * URL updates with tag parameter for shareable filtered views </Accordion> <Accordion title="Tag Display" icon="tags"> Tags appear as: * Horizontal list above article grid (desktop) * Scrollable list or dropdown (mobile) * Alphabetically sorted or by frequency (theme-dependent) * Active tag highlighted/selected </Accordion> <Accordion title="SEO Benefits" icon="magnifying-glass-chart"> * Tag filtering creates unique URLs (e.g., `/blogs/news/tagged/skincare`) * Indexed as separate pages by search engines * Helps with topic authority and keyword targeting * Provides internal linking structure </Accordion> </AccordionGroup> *** ## Best practices <CardGroup> <Card title="Article grid layout" icon="grid"> Use 2-3 columns on desktop and single column on mobile with consistent card heights for clean alignment. Use 12-15 articles per page for most blogs, 20-30 for high-volume content sites, or 6-9 for image-heavy lifestyle blogs. Use high-quality featured images with same aspect ratio. </Card> <Card title="Text card strategy" icon="bullseye"> Promote email newsletter signup, about/brand story pages, popular products related to blog topics, lead magnets (ebooks, guides), or social media follows. Position at 7-9 for high visibility after first row, 15-20 for engaged readers. Avoid position 1-3 to let articles lead. </Card> <Card title="Tag organization" icon="folder-tree"> Use 3-5 tags per article consistently, create tag taxonomy (e.g., "skincare-tips", "product-reviews"), use lowercase hyphenated format, avoid one-off tags (minimum 3+ articles per tag), and review tags quarterly to consolidate similar ones. Too many unique tags (50+) creates fragmentation. </Card> <Card title="Pagination considerations" icon="forward"> Default pagination is better for SEO (crawlable pages) with clear progress indicator and ability to jump to specific pages. Load More offers better mobile UX with no page reloads, higher engagement, and infinite scroll feel, but may hurt SEO if not implemented correctly. </Card> <Card title="Content strategy" icon="pen-fancy"> Publish consistently (weekly, bi-weekly, monthly schedule), write compelling titles and excerpts, use high-quality featured images, apply tags consistently for filtering, promote via email and social, and interlink articles with product pages to drive sales from content marketing. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Lifestyle Blog" icon="heart"> Image-heavy cards with excerpts, tag filtering by category (fashion, beauty, home) </Card> <Card title="News/Updates" icon="newspaper"> Date-prominent cards, high articles per page (30-50), default pagination </Card> <Card title="Educational Content" icon="graduation-cap"> Author-focused cards, tag filtering by topic, text card for course promotion </Card> <Card title="Product Guides" icon="book"> Centered alignment, excerpts enabled, text card linking to product collections </Card> <Card title="Company Blog" icon="building"> Author attribution, tag filtering by department, professional styling </Card> <Card title="Curated Collection" icon="star"> Selected mode with hand-picked articles, no tag filtering, custom order </Card> </CardGroup> *** ## Related Templates & Sections <CardGroup> <Card title="Main Article" icon="file-lines"> Individual article template where readers land after clicking blog cards </Card> <Card title="Main Blog Banner" icon="image"> Optional banner section that can be added above blog listing </Card> <Card title="Blog Articles Section" icon="newspaper"> Reusable section for displaying article grids on other pages </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="No Articles Showing" icon="eye-slash"> **Possible Causes:** * Blog has no published articles * Template set to "Selected" mode with no article blocks * Articles exist but aren't published **Solutions:** 1. Publish articles in Shopify Admin → Content → Blog posts 2. Switch to "All" mode or add article blocks 3. Verify articles are in the correct blog (if multiple blogs exist) </Accordion> <Accordion title="Tag Filter Not Appearing" icon="filter-slash"> **Check:** * Tag filtering is enabled in template settings * Articles have tags assigned * At least 2+ different tags exist across articles <Note> If all articles have the same single tag, or no tags, the filter may not display. </Note> </Accordion> <Accordion title="Text Card Not Showing" icon="rectangle-xmark"> **Verify:** * Text card block is added to template * Position is within articles per page range (e.g., position 8 but only 5 articles = won't show) * Enough articles exist to reach the position </Accordion> <Accordion title="Pagination Issues" icon="circle-exclamation"> **Common Problems:** * Load More button not working (JavaScript error) * Wrong number of articles per page (cache issue) * Pagination showing when it shouldn't (fewer articles than per-page setting) **Solutions:** 1. Clear browser cache and test 2. Check browser console for JavaScript errors 3. Verify articles\_per\_page setting matches expected behavior </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Blog listing page (article index/archive) * **Display Modes:** All articles (automatic) or Selected articles (manual) * **Filtering:** Optional tag-based filtering * **Pagination:** 3-50 articles per page, traditional or load more style * **Card Features:** Excerpt, date, author, custom alignment * **Blocks:** Text card (promotional), Article (for selected mode) * **Text Card Position:** Inject promotional cards at positions 1-28 in grid <Note> Blog articles are created in **Shopify Admin → Content → Blog posts**. This template controls how the blog listing displays, not individual article content. </Note> # Cart page Source: https://docs.digifist.com/themes/sahara/pages-templates/cart Shopping cart page template displaying cart items, totals, and checkout controls The Main Cart template displays the dedicated cart page where customers review items, adjust quantities, apply discounts, and proceed to checkout at `/cart` URL. This full-page cart experience provides comprehensive item management, totals, shipping notifications, payment terms, and checkout options for thorough review before purchase. Use this template to create a focused checkout experience with optimal line item readability that reduces cart abandonment and builds purchase confidence. *** ## Template Settings The Main Cart template provides layout and styling controls: <AccordionGroup> <Accordion title="Section Width" icon="left-right"> Control the width of the cart container: * **Narrow** (default) - Optimized for cart readability (\~900px) * **Page** - Standard page width (\~1200px) * **Fluid** - Extends to container edges <Note> Narrow width is recommended for cart pages as it creates focused checkout experience with optimal line item readability. </Note> </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Cart Features While template settings are minimal, the cart automatically includes: ### Cart Header <AccordionGroup> <Accordion title="Cart Title" icon="heading"> * Displays "Shopping Cart" or localized equivalent * Rendered as H1 heading * Centered alignment </Accordion> <Accordion title="Shipping Progress Bar" icon="truck"> Optional shipping threshold notification: * **Controlled by:** Theme settings → Cart → Shipping notification * **Features:** * Shows progress toward free shipping threshold * Displays remaining amount needed * Encourages increased cart value <Tip> Enable shipping notifications in theme settings to boost average order value by showing customers how close they are to free shipping. </Tip> </Accordion> <Accordion title="Continue Shopping Link" icon="arrow-left"> * Link back to products/collections * Directs to `/collections/all` by default * Helps customers add more items * Always visible (empty or full cart) </Accordion> </AccordionGroup> ### Empty Cart State <Accordion title="Empty Cart Display" icon="cart-shopping"> When cart is empty: * **Heading:** "Your cart" or localized title * **Subheading:** "Your cart is empty" message * **Continue Shopping Link:** Prominent link to browse products <Note> The empty cart state encourages shopping rather than leaving customers at a dead end. </Note> </Accordion> ### Cart Items Section <Accordion title="Line Items" icon="list"> For each product in cart: **Display:** * Product image (clickable to product page) * Product title and variant details * Price (original and discounted if on sale) * Quantity selector (+/- buttons or input field) * Line total (price × quantity) * Remove button/link **Functionality:** * Update quantity without page reload (AJAX) * Remove items instantly * Automatic price recalculation * Real-time subtotal updates <Warning> Quantity changes update inventory in real-time. If item becomes unavailable during checkout, customer will be notified. </Warning> </Accordion> ### Cart Summary <AccordionGroup> <Accordion title="Subtotal" icon="calculator"> * Displays cart subtotal before shipping/taxes * Updates dynamically as quantities change * Formatted in shop currency * Prominent display (large, bold) </Accordion> <Accordion title="Payment Terms" icon="calendar-days"> If using Shopify's installment payment options: * Displays payment plan eligibility * Shows installment amounts (e.g., "4 payments of \$25") * Pay later options (Shop Pay Installments, Afterpay, Klarna, etc.) <Note> Payment terms display is automatic when installment payment methods are enabled in Shopify Payments settings. </Note> </Accordion> <Accordion title="Discount Code Field" icon="tag"> * Input field for discount/promo codes * Apply button * Shows applied discounts with amounts * Remove discount option * Error messages for invalid codes <Tip> Cart-level discount codes are different from automatic discounts. Both can apply simultaneously. </Tip> </Accordion> <Accordion title="Cart Notes" icon="note-sticky"> Optional special instructions field: * Text area for customer notes * Appears in order details * Useful for gift messages, delivery instructions * Optional feature (can be disabled in theme) </Accordion> <Accordion title="Checkout Button" icon="credit-card"> Primary call-to-action to proceed: * Large, prominent button * "Checkout" or "Proceed to Checkout" label * Directs to `/checkout` URL * Disabled if cart is empty * May show payment icons below (Visa, Mastercard, etc.) </Accordion> </AccordionGroup> ### Additional Features <AccordionGroup> <Accordion title="Loading Indicator" icon="spinner"> * Spinner shown during cart updates * Prevents duplicate actions while processing * Improves UX during AJAX operations </Accordion> <Accordion title="Cart Recommendations" icon="lightbulb"> Optional product recommendations below cart: * "You may also like" or similar heading * Product suggestions based on cart contents * Encourages additional purchases * Powered by Shopify's recommendation engine <Note> Cart recommendations are controlled by separate section settings and can be reordered or removed from the cart template. </Note> </Accordion> <Accordion title="Dynamic Checkout Buttons" icon="bolt"> Express checkout options: * "Buy now" style buttons (Shop Pay, PayPal, Apple Pay, Google Pay) * One-click checkout for supported payment methods * Appear above or below main checkout button * Configurable in theme settings </Accordion> </AccordionGroup> *** ## Best practices <CardGroup> <Card title="Cart page design" icon="pen-ruler"> Keep narrow width for focused experience, use high-contrast checkout button, show clear pricing breakdown, display trust badges near checkout button, minimize distractions. Cart pages should prioritize conversion and avoid busy designs. </Card> <Card title="Shipping thresholds" icon="truck-fast"> Set threshold 20-30% above average order value, display progress clearly ("Add \$15 more for free shipping!"), use encouraging copy not demanding tone, test different threshold amounts for optimal AOV. Configure in theme settings. </Card> <Card title="Mobile optimization" icon="mobile-screen"> Use large touch targets for quantity buttons, easy-to-tap remove buttons, sticky checkout button (always visible), simplified single-column layout, finger-friendly input fields. Over 60% of traffic is mobile - test thoroughly on actual devices. </Card> <Card title="Trust signals" icon="shield-check"> Display accepted payment methods, show security badges (SSL, verified merchant), include money-back guarantee, highlight free returns policy, show customer reviews/ratings count. Add Trust Indicators section below cart summary to reduce abandonment. </Card> <Card title="Cart abandonment prevention" icon="user-xmark"> Show shipping costs early, display total processing time, offer multiple payment options, enable express checkout (Shop Pay, PayPal), provide easy exit ("Continue Shopping"), consider exit-intent popups. Average abandonment rate is 70% - small UX improvements significantly impact revenue. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Standard E-commerce" icon="store"> Full cart review with quantity edits, discount codes, and clear checkout path </Card> <Card title="High-Value Items" icon="gem"> Detailed item review with payment installment options and trust signals </Card> <Card title="Quick Purchase" icon="gauge-high"> Streamlined cart with express checkout buttons for fast conversion </Card> <Card title="Gift Shopping" icon="gift"> Cart notes for gift messages and special delivery instructions </Card> </CardGroup> *** ## Related Pages & Sections <CardGroup> <Card title="Cart Drawer" icon="sidebar"> Slide-out mini cart for quick review without leaving current page </Card> <Card title="Cart Recommendations" icon="heart"> Product suggestion section that can be added to cart template </Card> <Card title="Checkout" icon="credit-card"> Shopify's checkout page (not customizable via templates in most plans) </Card> </CardGroup> *** ## Extending the Cart Page Enhance the cart template by adding sections: <CardGroup> <Card title="Trust Indicators" icon="badge-check"> Add security badges, guarantees, and trust signals above checkout button </Card> <Card title="Cart Recommendations" icon="sparkles"> Display "Frequently bought together" or "Complete the look" products </Card> <Card title="FAQ Accordion" icon="circle-question"> Answer common pre-purchase questions (shipping, returns, sizing) </Card> <Card title="Newsletter Signup" icon="envelope"> Capture emails from cart visitors who don't complete purchase </Card> </CardGroup> <Tip> Add sections to cart template: **Online Store → Themes → Customize → Cart** (Sections can be added above or below main cart) </Tip> *** ## Troubleshooting <AccordionGroup> <Accordion title="Items Not Adding to Cart" icon="circle-exclamation"> **Possible Causes:** * JavaScript errors (check browser console) * Inventory issues (out of stock) * Variant selection problems * Add to cart button not working **Solutions:** 1. Test in incognito mode (rule out cache/extensions) 2. Check product inventory levels 3. Verify product has variants selected 4. Check browser console for errors </Accordion> <Accordion title="Quantity Not Updating" icon="hashtag"> **Check:** * JavaScript is enabled * Cart AJAX functions are working * No theme conflicts * Inventory availability (can't exceed stock) **Solutions:** 1. Hard refresh page (Cmd/Ctrl + Shift + R) 2. Clear browser cache 3. Test with theme updates </Accordion> <Accordion title="Discount Code Not Working" icon="tag"> **Verify:** * Code is active (check start/end dates in Shopify Admin) * Code applies to cart contents (product/collection restrictions) * Minimum purchase requirements met * Code hasn't reached usage limit * Customer is eligible (customer group restrictions) <Note> Discount code errors usually display helpful messages explaining why code didn't apply. </Note> </Accordion> <Accordion title="Checkout Button Disabled" icon="ban"> **Reasons:** * Cart is empty * Items out of stock * Quantity exceeds available inventory * Cart processing (spinner showing) **Normal behavior:** Button should be disabled when cart is empty or updating. </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Full-page shopping cart review and checkout interface * **Width:** Narrow (default) for optimal checkout focus * **Key Features:** Item management, quantity editing, discount codes, payment terms, shipping notifications * **Empty State:** Encourages shopping with "Continue Shopping" link * **Checkout:** Direct path to `/checkout` with prominent CTA button * **Extensions:** Can add Trust Indicators, Recommendations, FAQ sections * **Mobile:** Fully responsive with touch-optimized controls <Note> The cart page is a critical conversion point. Small improvements to cart UX can significantly impact checkout completion rates and revenue. </Note> # Account Dashboard Source: https://docs.digifist.com/themes/sahara/pages-templates/customers/account Customer account dashboard template displaying order history and account information The Main Account template creates the customer account dashboard page where logged-in customers can view their order history, manage account details, and access account-specific features. This primary landing page after login serves as the central hub for customer self-service, rendering order history, customer information, and account navigation automatically. Use this template to provide customers with easy access to their purchase history and account management tools, reducing support inquiries and improving customer satisfaction. *** ## Template Purpose The account dashboard serves as the central hub for customer self-service: <CardGroup> <Card title="Order History" icon="clock-rotate-left"> Displays past orders with clickable links to view order details </Card> <Card title="Account Details" icon="user-circle"> Shows customer name, email, and default address information </Card> <Card title="Address Management" icon="location-dot"> Provides quick access to address book management page </Card> <Card title="Account Actions" icon="gear"> Links to view/edit addresses and logout functionality </Card> </CardGroup> *** ## Template Settings The Main Account template provides minimal customization, focusing on section-level styling: <AccordionGroup> <Accordion title="Section Width" icon="left-right"> * **Page Width** (default) - Contained within page margins * **Fluid Width** - Extends to container edges <Note> Full width is not available for account pages to maintain comfortable reading width for text-heavy content. </Note> </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 <Tip> Use a consistent color scheme across all account templates (account, addresses, order, login, register) for cohesive user experience. </Tip> </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Account Dashboard Content While the template itself has limited settings, the `account-dashboard` snippet automatically displays: ### Order History Section <AccordionGroup> <Accordion title="Order List" icon="list"> * Displays all customer orders from newest to oldest * Each order shows: order number, date, payment status, fulfillment status, total * Click any order to view full order details * Automatically handles pagination for customers with many orders </Accordion> <Accordion title="Order Status Indicators" icon="circle-info"> Visual indicators for order states: * **Paid/Unpaid** - Payment status * **Fulfilled/Unfulfilled/Partially Fulfilled** - Shipping status * **Canceled** - Canceled orders * **Refunded** - Fully or partially refunded orders </Accordion> <Accordion title="Empty State" icon="box-open"> When customer has no orders: * Displays friendly message * Suggests browsing collections or continuing shopping * Provides CTA button to product pages </Accordion> </AccordionGroup> ### Account Information Section <AccordionGroup> <Accordion title="Customer Details" icon="id-card"> * Customer name * Email address * Account creation date (if theme displays it) </Accordion> <Accordion title="Default Address" icon="house"> * Default billing/shipping address * Link to "View addresses" page * Quick access to manage address book </Accordion> <Accordion title="Account Actions" icon="sliders"> * **View Addresses** - Navigate to address management * **Logout** - Sign out of customer account </Accordion> </AccordionGroup> *** ## Customer Access Requirements <Warning> The Main Account template is only accessible to **logged-in customers**. Visitors who are not logged in will be redirected to the login page. </Warning> **Customer Login States:** | Customer State | Access | Result | | -------------- | ------- | --------------------------------------- | | Logged In | Granted | Views account dashboard | | Not Logged In | Denied | Redirected to `/account/login` | | Guest Checkout | Denied | Redirected to login (no account exists) | *** ## Best practices <CardGroup> <Card title="Design consistency" icon="palette"> Use the same color scheme across all account templates and match spacing values on account, addresses, order, login, and register templates. Maintain consistent header and footer across account pages and ensure navigation breadcrumbs or back links are available. </Card> <Card title="User experience" icon="user"> Keep account pages simple and scannable with clearly labeled order history. Make "View Order" links obvious and clickable, provide clear logout button placement, and display empty state messages encouragingly rather than critically. </Card> <Card title="Mobile optimization" icon="mobile-screen"> Test account dashboard on mobile devices to ensure order tables are readable on small screens. Verify CTA buttons have adequate touch targets and check that long order numbers don't break layout. </Card> <Card title="Performance" icon="gauge-high"> Account dashboard loads customer-specific data dynamically, and Shopify handles pagination automatically for customers with 100+ orders. Keep additional sections minimal and avoid heavy media to maintain fast load times. </Card> </CardGroup> *** ## Extending the Account Dashboard While the core template is simple, you can enhance the account experience: <CardGroup> <Card title="Welcome Message" icon="hand-wave"> Add a Rich Text section above with personalized greeting using liquid: "Welcome back, \{\{ customer.first\_name }}!" </Card> <Card title="Account Benefits" icon="star"> Include Trust Indicators section highlighting loyalty program benefits or member perks </Card> <Card title="Recommended Products" icon="lightbulb"> Add Product Recommendations section below showing personalized suggestions based on order history </Card> <Card title="Help Resources" icon="circle-question"> Include FAQ Tile or Accordions section with common account questions </Card> </CardGroup> <Tip> Add sections to the account template in the Theme Customizer (Online Store → Themes → Customize → Customers → Account). Sections appear above or below the main account dashboard. </Tip> *** ## Related Templates <CardGroup> <Card title="Main Addresses" icon="location-dot"> Address book management page where customers add, edit, and delete shipping addresses </Card> <Card title="Main Order" icon="receipt"> Individual order details page showing line items, shipping, and tracking information </Card> <Card title="Main Login" icon="right-to-bracket"> Customer login form where users authenticate to access account dashboard </Card> <Card title="Main Register" icon="user-plus"> New account creation form for first-time customers </Card> </CardGroup> *** ## Common Customizations ### Adding a Welcome Section Edit the account template to add a personalized welcome message: 1. Navigate to **Online Store → Themes → Customize** 2. Select **Customers → Account** from template dropdown 3. Click **Add section** above Main Account 4. Add **Rich Text** section 5. Use liquid to personalize: `Welcome back, {{ customer.first_name }}!` ### Displaying Loyalty Points If using a loyalty app, many apps provide account page blocks: 1. Check if your loyalty app offers a section or block 2. Add it to the account template 3. Position above or below the main account dashboard ### Custom CSS for Order Table For advanced styling, theme developers can target the account dashboard CSS classes in theme files. <Warning> Direct theme file editing requires development knowledge. Test changes on a duplicate theme before publishing. </Warning> *** ## Troubleshooting <AccordionGroup> <Accordion title="Customer Can't Access Account" icon="lock"> **Possible Causes:** * Customer not logged in * Customer account disabled * Customer trying to access with wrong email **Solutions:** 1. Verify customer is logged in (check for customer object in theme) 2. Admin: Check Customers page to verify account is active 3. Reset password if authentication issues </Accordion> <Accordion title="Orders Not Showing" icon="eye-slash"> **Possible Causes:** * Orders placed as guest (no account at time of purchase) * Customer logged into wrong account * Recent order not yet synced **Note:** Only orders placed while logged in OR orders later associated with the account will appear. Guest checkout orders don't automatically link to accounts created afterward. </Accordion> <Accordion title="Layout Looks Broken" icon="triangle-exclamation"> **Check:** * Section width setting (ensure not conflicting with theme container) * Color scheme contrast (text readable on background?) * Browser cache (hard refresh: Cmd/Ctrl + Shift + R) * Theme updates (verify theme is updated to latest version) </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Customer account dashboard landing page * **Access:** Logged-in customers only * **Core Content:** Order history, account details, address management links * **Configuration:** Minimal (section width, color scheme, spacing, borders) * **Content Source:** Automatic from Shopify customer object via `account-dashboard` snippet * **Customization:** Add sections above/below for enhanced experience * **Related Pages:** Addresses, Order, Login, Register templates <Note> The account dashboard is automatically generated from customer data. No manual content entry needed - Shopify handles all order and account information display. </Note> # Addresses Source: https://docs.digifist.com/themes/sahara/pages-templates/customers/addresses Customer address book management template for adding, editing, and deleting shipping addresses The Main Addresses template creates the address book management page where logged-in customers can view, add, edit, and delete their saved shipping and billing addresses. This interface accessible from the account dashboard automatically handles address CRUD operations through Shopify's customer address API. Use this template to provide customers with convenient address management that streamlines future checkouts and improves order accuracy through saved, validated addresses. *** ## Template Purpose The address book allows customers to manage multiple shipping destinations: <CardGroup> <Card title="View All Addresses" icon="list"> Displays all saved addresses in an organized list with default address highlighted </Card> <Card title="Add New Address" icon="plus"> Provides form to create new shipping/billing addresses with full validation </Card> <Card title="Edit Addresses" icon="pen-to-square"> Allows modification of existing address details including marking as default </Card> <Card title="Delete Addresses" icon="trash"> Enables removal of unused addresses (except default address) </Card> </CardGroup> *** ## Template Settings The Main Addresses template provides minimal customization, focusing on section-level styling: <AccordionGroup> <Accordion title="Section Width" icon="left-right"> * **Page Width** (default) - Contained within page margins * **Fluid Width** - Extends to container edges <Note> Full width is not available for address pages to maintain comfortable form width and readability. </Note> </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 <Tip> Use the same color scheme across all account templates (account, addresses, order) for consistent customer experience. </Tip> </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Address Management Features While template settings are minimal, the address book provides robust functionality: ### Address Display <AccordionGroup> <Accordion title="Address Cards" icon="address-card"> Each saved address displays: * Full name * Street address (line 1 and line 2) * City, State/Province, ZIP/Postal code * Country * Phone number (if provided) * **Default** badge for default address </Accordion> <Accordion title="Default Address" icon="star"> The default address is: * Highlighted with visual indicator (badge or styling) * Pre-selected during checkout * Cannot be deleted (must set another as default first) * Used for subscription deliveries and auto-orders </Accordion> <Accordion title="Address Limits" icon="hashtag"> Shopify allows customers to save: * Up to **100 addresses** per customer account * 1 default address (must always exist) * Unlimited billing addresses (stored same way) </Accordion> </AccordionGroup> ### Address Actions <AccordionGroup> <Accordion title="Add New Address" icon="square-plus"> **Form Fields:** * First name and Last name (required) * Company (optional) * Address line 1 (required) * Address line 2 (optional) * City (required) * Country/region (dropdown, required) * State/Province (dropdown, conditional based on country) * ZIP/Postal code (required, format validated by country) * Phone (optional, recommended for shipping) * "Set as default address" checkbox <Note> Form fields and validation rules automatically adjust based on country selection (e.g., US shows "State" and "ZIP", UK shows "County" and "Postcode"). </Note> </Accordion> <Accordion title="Edit Address" icon="pencil"> * Click "Edit" on any saved address * Form pre-fills with current address data * Update any field and save * Option to change default status * Validation ensures required fields are complete </Accordion> <Accordion title="Delete Address" icon="x"> * Click "Delete" on any non-default address * Confirmation prompt before deletion ("Are you sure?") * Default address cannot be deleted directly * To delete current default: set another as default first, then delete </Accordion> </AccordionGroup> *** ## Customer Access Requirements <Warning> The Main Addresses template is only accessible to **logged-in customers**. Visitors not logged in are redirected to the login page. </Warning> **Access Control:** | Customer State | Access | Result | | -------------- | ------- | ------------------------------ | | Logged In | Granted | Manage address book | | Not Logged In | Denied | Redirected to `/account/login` | | Guest Checkout | Denied | No account = no address book | *** ## Address Book Workflow ### First-Time User Flow 1. Customer creates account (Main Register template) 2. During checkout, enters shipping address 3. Option to save address to account (checkbox) 4. First saved address automatically becomes default 5. Navigate to Addresses page from account dashboard 6. View, edit, or add more addresses ### Returning Customer Flow 1. Customer logs in (Main Login template) 2. Navigates to account dashboard (Main Account template) 3. Clicks "View addresses" or "Manage addresses" 4. Lands on Addresses page 5. Performs address management tasks 6. Returns to account or continues shopping *** ## Best practices <CardGroup> <Card title="Form design" icon="input-text"> Keep address forms clean and well-organized with clear field labels that avoid abbreviations. Group related fields together, show validation errors inline, and provide helpful error messages beyond just "Invalid format". </Card> <Card title="User guidance" icon="circle-info"> Explain what "default address" means and indicate required vs optional fields clearly. Show country-specific format hints and provide example formats for phone numbers, then confirm successful actions like address saved or deleted. </Card> <Card title="Design consistency" icon="palette"> Match form styling across account templates and use consistent button styles for Save, Cancel, and Delete actions. Maintain the same spacing and color scheme as Main Account with consistent navigation elements. </Card> <Card title="Mobile optimization" icon="mobile-screen"> Test address forms thoroughly on mobile devices to ensure dropdown selectors are touch-friendly and keyboards open correctly. Verify validation errors are visible without scrolling and make Edit/Delete buttons adequately sized for touch. </Card> <Card title="International support" icon="globe"> Address forms auto-adapt to country selection with State/Province dropdowns appearing only for applicable countries. Postal code format validation matches country rules, phone fields accept international formats, and forms should be tested with various countries. </Card> </CardGroup> *** ## Common Use Cases <CardGroup> <Card title="Multi-Location Shipping" icon="truck-fast"> Customers with multiple delivery addresses (home, office, vacation property) </Card> <Card title="Gift Shipping" icon="gift"> Save recipient addresses for easy future gift sending </Card> <Card title="Business Accounts" icon="building"> B2B customers with multiple warehouse or store locations </Card> <Card title="Seasonal Addresses" icon="calendar"> Customers with seasonal residences (snowbirds, students) </Card> </CardGroup> *** ## Extending the Address Page While the core template is functional, you can enhance it: <CardGroup> <Card title="Help Text" icon="circle-question"> Add Rich Text section above with address management tips or FAQs </Card> <Card title="Shipping Info" icon="truck"> Include Trust Indicators section mentioning shipping policies and delivery times </Card> <Card title="International Notice" icon="earth-americas"> Add Callout Banner for international shipping information or restrictions </Card> </CardGroup> <Tip> Add sections to the addresses template in Theme Customizer: **Online Store → Themes → Customize → Customers → Addresses** </Tip> *** ## Related Templates <CardGroup> <Card title="Main Account" icon="user-circle"> Account dashboard showing order history and quick link to address management </Card> <Card title="Main Order" icon="receipt"> Order details page displaying shipping address used for specific order </Card> <Card title="Main Login" icon="right-to-bracket"> Login page required before accessing address management </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="Can't Delete Default Address" icon="shield-exclamation"> **Expected Behavior:** Default address cannot be deleted to ensure customer always has at least one address. **Solution:** 1. Add or select another address 2. Mark that address as default 3. Then delete the former default address </Accordion> <Accordion title="Address Not Saving" icon="floppy-disk-circle-xmark"> **Possible Causes:** * Required fields missing * Invalid postal code format * Phone number format issue * JavaScript errors preventing form submission **Solutions:** 1. Check all required fields are filled 2. Verify postal code matches country format 3. Check browser console for errors 4. Try in incognito mode (rule out cache/extension issues) </Accordion> <Accordion title="State/Province Not Showing" icon="map-location-dot"> **Reason:** State/Province dropdown only appears for countries that use provinces/states (US, Canada, Australia, etc.). **Not a bug:** Countries like UK, France, Germany don't have this field in Shopify's address system. </Accordion> <Accordion title="Validation Errors" icon="triangle-exclamation"> **Common Issues:** * ZIP code format (US: 5 digits or 5+4; UK: alphanumeric postcode) * Phone number requirements vary by merchant settings * Address line too long (Shopify has character limits) **Fix:** Follow format hints shown in form, or abbreviate long street names/building names. </Accordion> </AccordionGroup> *** ## Developer Notes ### Address Object Structure Shopify customer addresses contain: * `id` - Unique address identifier * `first_name`, `last_name` * `company` (optional) * `address1`, `address2` * `city`, `province`, `zip` * `country`, `country_code` * `phone` (optional) * `default` - Boolean flag ### Form Handling The address form automatically: * Submits to `/account/addresses` endpoint * Validates fields client-side and server-side * Returns to address list on success * Shows inline errors on failure * Handles CSRF token security <Warning> Address management forms are Shopify-native. Custom validation or fields require theme development and may break Shopify's address API integration. </Warning> *** ## Quick Summary * **Purpose:** Customer address book management interface * **Access:** Logged-in customers only * **Core Features:** Add, edit, delete, set default address * **Configuration:** Minimal (section width, color scheme, spacing, borders) * **Address Limit:** 100 addresses per customer * **Default Address:** Required (cannot delete the only/default address) * **Related Pages:** Account dashboard, Order details, Checkout <Note> Address management is handled automatically by Shopify. The template provides the UI, while Shopify manages data storage, validation, and checkout integration. </Note> # Login Source: https://docs.digifist.com/themes/sahara/pages-templates/customers/login Customer login page template with optional sidebar image and Shop Login button The Main Login template displays the customer login page at `/account/login` with email/password login form, optional sidebar image, and Shop Pay login button for faster checkout. Customize the login experience with branded imagery and streamline authentication with Shop Login for returning customers. Use this template to create a welcoming entry point that balances security with convenience while reinforcing your brand identity through visual elements. *** ## Template Settings <AccordionGroup> <Accordion title="Image Aside" icon="image"> Add decorative image to login page sidebar. * **Type:** Image picker * **Location:** Displays on left or right side of login form * **Optional:** Leave blank for form-only layout **Recommended Image:** * Minimum size: 800x1200px * Aspect ratio: Portrait (2:3 or 3:4) * Brand imagery, lifestyle photos, or promotional graphics * File size: Under 500KB (compress for performance) <Tip> Use brand imagery or lifestyle photos that reinforce trust and welcome returning customers. </Tip> </Accordion> <Accordion title="Enable Shop Login Button" icon="bag-shopping"> Display Shop Pay login button for one-click authentication. * **Type:** Checkbox * **Default:** Disabled **About Shop Login:** * Allows customers to log in with Shop Pay account * One-click authentication (no password needed) * Faster login for Shop users * Syncs with Shop app * Streamlines checkout process <Note> Shop Login is part of Shopify's Shop Pay ecosystem. Customers with Shop accounts can log in instantly without remembering store-specific passwords. </Note> <Warning> Enable this only if your store uses Shop Pay for checkout. Verify Shop Pay is activated in **Shopify Admin → Settings → Payments**. </Warning> </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Login Page Elements The login page automatically includes: <AccordionGroup> <Accordion title="Page Title" icon="h1"> * "Login" or "Sign In" heading * H1 for SEO * Centered at top of page </Accordion> <Accordion title="Email Field" icon="envelope"> * Email address input * Required field * Validation for email format * Autocomplete enabled </Accordion> <Accordion title="Password Field" icon="lock"> * Password input (obscured) * Required field * Show/hide password toggle (theme-dependent) * Remember me checkbox (optional) </Accordion> <Accordion title="Forgot Password Link" icon="key"> * "Forgot your password?" link * Redirects to `/account/reset` * Triggers password reset email </Accordion> <Accordion title="Login Button" icon="right-to-bracket"> * Primary action button * Submits login form * Loading state on click </Accordion> <Accordion title="Create Account Link" icon="user-plus"> * "Create account" or "Sign up" link * Redirects to `/account/register` * For new customers </Accordion> <Accordion title="Return Policy Link" icon="arrow-left"> * "Return to Store" or "Continue Shopping" * Redirects to homepage or previous page * Allows browsing without login </Accordion> </AccordionGroup> *** ## Layout Variations <CardGroup> <Card title="With Sidebar Image" icon="images"> **Structure:** * Two-column layout * Image on left (50% width) * Login form on right (50% width) **Best For:** * Brand storytelling * Visual engagement * Premium/lifestyle stores * First-time visitors </Card> <Card title="Form Only" icon="rectangle-list"> **Structure:** * Centered login form * No sidebar image * Minimalist design **Best For:** * Fast, no-distraction login * B2B or wholesale stores * Functional priority * Return customers </Card> </CardGroup> *** ## Shop Login Integration <AccordionGroup> <Accordion title="What is Shop Login?" icon="question-circle"> **Shop Login** allows customers to authenticate using their Shop account instead of store-specific credentials. **Benefits:** * One-click login (no password typing) * Faster checkout with saved Shop data * Reduced password fatigue * Syncs with Shop mobile app * Increased conversion (fewer login barriers) </Accordion> <Accordion title="Requirements" icon="list-check"> **To Enable Shop Login:** 1. Shop Pay must be activated in Shopify Payments 2. Store must use Shopify Payments 3. Enable Shop Login in theme settings **Verify Setup:** * Go to **Shopify Admin → Settings → Payments** * Confirm "Shop Pay" is enabled * Check "Shop Login" option is available </Accordion> <Accordion title="User Experience" icon="user-check"> **Customer Flow:** 1. Customer clicks "Shop Login" button 2. Shop login modal appears 3. Customer enters email or phone 4. Receives one-time code 5. Enters code to authenticate 6. Logged in instantly **Advantages:** * No password to remember * Mobile-optimized (SMS verification) * Secure authentication * Seamless with Shop app </Accordion> </AccordionGroup> *** ## Best practices <CardGroup> <Card title="Image selection" icon="image"> Use high-quality sidebar images featuring brand imagery, lifestyle photos, seasonal graphics, or promotional content like "Welcome Back!" messages. Ensure good lighting and clarity, match your brand aesthetic, and test mobile appearance where images may hide on small screens. </Card> <Card title="Shop login strategy" icon="strategy"> Enable Shop Login for stores with high checkout abandonment rates, mobile-heavy traffic, or where Shop Pay is the primary payment method. Skip it if you're not using Shop Pay, have B2B customers who prefer traditional login, or maintain a custom authentication system. </Card> <Card title="Security considerations" icon="shield"> Use HTTPS with SSL certificate, implement rate limiting to prevent brute force attacks, and encourage strong passwords. Monitor suspicious login attempts and set appropriate session timeouts, though Shopify handles core security automatically. </Card> <Card title="Mobile optimization" icon="mobile-screen"> Ensure form fields meet minimum 44x44px touch targets and use autocomplete attributes for faster input. Sidebar images typically hide on mobile in stacked layouts, so test on actual iOS and Android devices to verify Shop Login functionality. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Fashion Boutique" icon="shirt"> Sidebar image showing latest collection, Shop Login enabled for fast checkout </Card> <Card title="B2B Wholesale" icon="briefcase"> Form-only layout, no sidebar image, traditional login only </Card> <Card title="Lifestyle Brand" icon="heart"> Branded lifestyle image, "Welcome Back" messaging, Shop Login for mobile shoppers </Card> <Card title="Electronics Store" icon="laptop"> Product showcase image, both traditional and Shop Login options </Card> </CardGroup> *** ## Related Templates <CardGroup> <Card title="Main Register" icon="user-plus"> Customer registration/signup page template </Card> <Card title="Main Account" icon="user-circle"> Customer account dashboard after login </Card> <Card title="Password Reset" icon="key"> Forgot password / reset password page </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="Shop Login Button Not Appearing" icon="eye-slash"> **Possible Causes:** * Setting not enabled in template * Shop Pay not activated * Not using Shopify Payments * Geographic restrictions **Solutions:** 1. Enable "Shop Login" checkbox in template settings 2. Verify Shop Pay in **Settings → Payments** 3. Confirm Shopify Payments is active 4. Check if Shop Pay is available in your region </Accordion> <Accordion title="Image Not Displaying" icon="image-slash"> **Check:** * Image uploaded in "Image Aside" setting * File format is supported (JPG, PNG, WebP) * File size is reasonable (\< 5MB) * Browser cache cleared * Mobile vs. desktop view (may hide on mobile) </Accordion> <Accordion title="Login Errors" icon="triangle-exclamation"> **Common Issues:** * "Incorrect email or password" - Verify credentials * "Account not found" - Customer may not be registered * "Too many attempts" - Rate limiting (wait 15 minutes) * Form not submitting - JavaScript errors (check console) </Accordion> <Accordion title="Redirect Issues After Login" icon="arrow-turn-down-right"> **Expected Behavior:** * Successful login redirects to `/account` (account dashboard) * Or returns to previous page (if accessing protected content) **If Redirects Fail:** * Clear browser cookies * Check theme code (may require developer) * Verify no conflicting apps </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Customer login page template * **URL:** `/account/login` * **Key Features:** Email/password form, optional sidebar image, Shop Login button * **Settings:** Sidebar image, Shop Login toggle, color scheme, spacing, borders * **Automatically Includes:** Login form, forgot password link, create account link * **Mobile:** Responsive, sidebar image typically hidden on small screens <Note> Customer accounts must be enabled in **Shopify Admin → Settings → Customer accounts** for login functionality to work. </Note> # Order Details Source: https://docs.digifist.com/themes/sahara/pages-templates/customers/order Customer order details page template displaying order information and status The Main Order template displays detailed order information on customer account order pages at `/account/orders/[order-id]`, showing order status, items purchased, shipping address, payment details, and tracking information. This template provides transparency and order tracking for customers, reducing support inquiries and building trust through clear post-purchase communication. Use this template to give customers complete visibility into their orders, from confirmation through delivery tracking. *** ## Template Settings <AccordionGroup> <Accordion title="Section Width" icon="left-right"> * **Page** (default) - Contained within page margins * **Fluid** - Extends to container edges <Note> Most stores use "Page" width for comfortable reading and organized layout. "Fluid" provides more horizontal space for wide content. </Note> </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Order Page Elements The order details page automatically displays: ### Order Summary <AccordionGroup> <Accordion title="Order Number" icon="hashtag"> * Unique order identifier * Displayed prominently at top * Format: #1001, #1002, etc. * Clickable in some themes (prints invoice) </Accordion> <Accordion title="Order Date" icon="calendar"> * Date order was placed * Formatted based on store locale * Helps customer reference timeline </Accordion> <Accordion title="Order Status" icon="circle-info"> Displays current order status: * **Pending** - Payment processing * **Unfulfilled** - Payment complete, awaiting shipment * **Partially Fulfilled** - Some items shipped * **Fulfilled** - All items shipped * **Canceled** - Order canceled * **Refunded** - Order refunded (full or partial) <Tip> Clear status communication reduces "Where's my order?" support tickets. </Tip> </Accordion> <Accordion title="Payment Status" icon="credit-card"> * **Paid** - Payment successful * **Pending** - Awaiting payment * **Refunded** - Full or partial refund issued * **Voided** - Payment voided * **Partially Paid** - Split payments, deposit, etc. </Accordion> </AccordionGroup> ### Order Items <AccordionGroup> <Accordion title="Product List" icon="list"> Each ordered product displays: * Product image (thumbnail) * Product name (linked to product page) * Variant details (size, color, etc.) * Quantity ordered * Individual price * Line total (quantity × price) * SKU (if available) </Accordion> <Accordion title="Fulfillment Status" icon="truck"> Per-item fulfillment: * **Unfulfilled** - Not yet shipped * **Fulfilled** - Shipped (may show tracking) * **Partially Fulfilled** - Some quantity shipped <Note> If order has multiple shipments, items group by fulfillment status. </Note> </Accordion> </AccordionGroup> ### Financial Details <AccordionGroup> <Accordion title="Subtotal" icon="calculator"> * Sum of all product line totals * Before shipping, taxes, discounts </Accordion> <Accordion title="Discounts" icon="tag"> If applicable: * Discount code applied * Discount amount * Discount description * Savings clearly highlighted </Accordion> <Accordion title="Shipping" icon="truck"> * Shipping method selected * Shipping cost * Free shipping (if \$0.00) </Accordion> <Accordion title="Taxes" icon="receipt"> * Tax amount * Tax rate (if displayed) * Tax label (VAT, GST, Sales Tax, etc.) * May show multiple tax types </Accordion> <Accordion title="Order Total" icon="coins"> * Final total paid * Displayed prominently * All charges included </Accordion> </AccordionGroup> ### Addresses <AccordionGroup> <Accordion title="Shipping Address" icon="location-dot"> * Recipient name * Street address * City, state/province, ZIP/postal code * Country * Phone number (if provided) </Accordion> <Accordion title="Billing Address" icon="building-columns"> * Name on payment method * Billing street address * City, state/province, ZIP/postal code * Country * Often same as shipping ("Same as shipping address") </Accordion> </AccordionGroup> ### Tracking Information <AccordionGroup> <Accordion title="Tracking Numbers" icon="magnifying-glass-location"> If order is fulfilled: * Shipping carrier name (USPS, FedEx, UPS, DHL, etc.) * Tracking number(s) * Tracking link (clickable to carrier website) * Estimated delivery date (if available) <Tip> Tracking information automatically appears when merchant fulfills order with tracking details in Shopify Admin. </Tip> </Accordion> <Accordion title="Fulfillment Updates" icon="clock-rotate-left"> * Fulfillment date/time * Multiple fulfillments (if split shipment) * Delivery confirmation (when delivered) </Accordion> </AccordionGroup> ### Actions <AccordionGroup> <Accordion title="Print Order" icon="print"> * Print-friendly version * Generates invoice/receipt * Useful for records </Accordion> <Accordion title="Return to Orders" icon="arrow-left"> * Link back to order list (`/account/orders`) * Breadcrumb navigation </Accordion> <Accordion title="Reorder" icon="rotate-right"> Some themes include: * "Reorder" or "Buy Again" button * Adds all order items to cart * Quick repeat purchase </Accordion> <Accordion title="Contact Support" icon="headset"> Some themes show: * "Need help?" link * Contact form * Support email/phone * FAQ link </Accordion> </AccordionGroup> *** ## Order Status Meanings <CardGroup> <Card title="Unfulfilled" icon="clock"> Order paid, awaiting merchant to ship items </Card> <Card title="Partially Fulfilled" icon="box-open"> Some items shipped, others still processing </Card> <Card title="Fulfilled" icon="truck-fast"> All items shipped, tracking provided </Card> <Card title="Delivered" icon="house-circle-check"> Package delivered to destination (carrier confirmed) </Card> <Card title="Canceled" icon="xmark"> Order canceled before fulfillment </Card> <Card title="Refunded" icon="rotate-left"> Full or partial refund issued to customer </Card> </CardGroup> *** ## Best practices <CardGroup> <Card title="Status communication" icon="comments"> Keep customers informed by sending automatic order confirmation, fulfillment, and delivery confirmation emails. Provide proactive updates for delays and maintain clear status on the order page, customizing email templates in Shopify Admin → Settings → Notifications. </Card> <Card title="Tracking information" icon="route"> Always provide tracking by entering tracking numbers when fulfilling orders and using recognized carriers like USPS, FedEx, UPS, or DHL. This reduces "Where's my order?" inquiries, builds customer confidence, and improves overall satisfaction. </Card> <Card title="Customer support" icon="life-ring"> Make support accessible by including contact information on the order page and linking to your help center or FAQ. Enable a "Contact us about this order" button, respond promptly to inquiries, and provide self-service options. </Card> <Card title="Returns & exchanges" icon="arrow-rotate-left"> If offering returns, link to your return policy and include the return window like "30-day returns" with clear instructions. Consider using a return portal app and show return status for initiated returns. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Standard E-commerce" icon="shopping-bag"> Order #1234, items with images, tracking link, estimated delivery </Card> <Card title="Digital Products" icon="download"> Order #5678, download links, no shipping info, instant fulfillment </Card> <Card title="Pre-orders" icon="calendar-clock"> Order #9012, unfulfilled status, expected ship date communicated </Card> <Card title="Custom Orders" icon="pen-ruler"> Order #3456, production status, estimated completion date </Card> </CardGroup> *** ## Related Templates <CardGroup> <Card title="Main Account" icon="user-circle"> Customer account dashboard with order list link </Card> <Card title="Order List" icon="list-check"> Customer's full order history (`/account/orders`) </Card> <Card title="Email Notifications" icon="envelope"> Shopify email templates for order confirmation, fulfillment, etc. </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="Order Not Showing" icon="eye-slash"> **Possible Causes:** * Customer not logged in * Order placed under different email * Order in draft or abandoned status * Guest checkout without account **Solutions:** * Verify customer is logged into correct account * Search by order number in Shopify Admin * Customer may need to create account with order email </Accordion> <Accordion title="Tracking Not Appearing" icon="link-slash"> **Reasons:** * Merchant hasn't fulfilled order yet * Tracking number not entered in admin * Carrier not recognized * Recent fulfillment (may take time to sync) **Fix:** * Merchant: Enter tracking in **Shopify Admin → Orders → \[Order] → Fulfill items** * Use supported carriers * Allow 15 minutes for tracking to appear </Accordion> <Accordion title="Wrong Status Displayed" icon="circle-exclamation"> **Check:** * Cache cleared (hard refresh) * Status updated in Shopify Admin * No webhooks delayed * Theme displaying correct status variable </Accordion> <Accordion title="Payment Discrepancy" icon="money-bill-wave"> **If totals don't match:** * Check for post-purchase edits (staff edited order) * Verify all discounts applied * Check tax calculation * Review order timeline in Shopify Admin for changes </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Detailed order information page * **URL:** `/account/orders/[order-id]` * **Displays:** Order number, status, items, pricing, addresses, tracking * **Settings:** Section width, color scheme, spacing, borders (minimal customization) * **Content:** Automatically populated from Shopify order data * **Key Features:** Order status, tracking links, financial breakdown, addresses * **Mobile:** Fully responsive, stacked layout for easy scrolling <Note> Order content is generated automatically from Shopify order data. Merchants update order information in **Shopify Admin → Orders**, and changes appear on customer-facing order page. </Note> # Register Source: https://docs.digifist.com/themes/sahara/pages-templates/customers/register Customer registration/signup page template with optional sidebar image The Main Register template displays the customer registration page at `/account/register`, allowing new customers to create accounts with email and password alongside an optional branded sidebar image. Customize the registration experience with welcoming imagery to encourage account creation and build long-term customer relationships. Use this template to create a positive first impression that converts anonymous visitors into registered customers, enabling personalized experiences and repeat purchases. *** ## Template Settings <AccordionGroup> <Accordion title="Image Aside" icon="image"> Add decorative image to registration page sidebar. * **Type:** Image picker * **Location:** Displays on left or right side of registration form * **Optional:** Leave blank for form-only layout **Recommended Image:** * Minimum size: 800x1200px * Aspect ratio: Portrait (2:3 or 3:4) * Welcoming imagery, brand visuals, or promotional graphics * File size: Under 500KB (compress for performance) **Effective Image Ideas:** * Welcome message graphic * Brand benefits ("Join Our Community", "Exclusive Member Perks") * Product lifestyle imagery * First-order discount promotion * Loyalty program highlights <Tip> Use images that communicate value: "Why create an account?" Show benefits like order tracking, wishlists, exclusive offers, or early access. </Tip> </Accordion> <Accordion title="Section Width" icon="left-right"> * **Page** (default) - Contained within page margins * **Fluid** - Extends to container edges * **Full** - Full browser width (edge-to-edge) </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Registration Page Elements The registration page automatically includes: <AccordionGroup> <Accordion title="Page Title" icon="h1"> * "Create Account" or "Sign Up" heading * H1 for SEO * Centered at top of page </Accordion> <Accordion title="First Name Field" icon="user"> * First name input * Required field * Autocomplete enabled </Accordion> <Accordion title="Last Name Field" icon="user"> * Last name input * Required field * Autocomplete enabled </Accordion> <Accordion title="Email Field" icon="envelope"> * Email address input * Required field * Email format validation * Must be unique (not already registered) * Autocomplete enabled </Accordion> <Accordion title="Password Field" icon="lock"> * Password input (obscured) * Required field * Minimum length requirement (typically 5+ characters) * Show/hide password toggle (theme-dependent) * Password strength indicator (theme-dependent) <Note> Shopify requires minimum 5-character passwords. Encourage customers to use strong passwords with mix of letters, numbers, and symbols. </Note> </Accordion> <Accordion title="Create Account Button" icon="user-plus"> * Primary action button * Submits registration form * Loading state on click * Creates customer account </Accordion> <Accordion title="Already Have Account Link" icon="right-to-bracket"> * "Already have an account? Sign in" link * Redirects to `/account/login` * For returning customers </Accordion> <Accordion title="Marketing Consent" icon="envelope-circle-check"> Some themes include: * Newsletter subscription checkbox * Email marketing opt-in * SMS marketing opt-in (if enabled) * Privacy policy link <Tip> Collect email marketing consent during registration to grow your mailing list. Ensure compliance with GDPR, CAN-SPAM, and regional privacy laws. </Tip> </Accordion> </AccordionGroup> *** ## Layout Variations <CardGroup> <Card title="With Sidebar Image" icon="images"> **Structure:** * Two-column layout * Image on left (50% width) * Registration form on right (50% width) **Best For:** * Communicating account benefits * Brand storytelling * Visual engagement * Lifestyle/fashion brands * First-time visitors </Card> <Card title="Form Only" icon="rectangle-list"> **Structure:** * Centered registration form * No sidebar image * Minimalist design **Best For:** * Fast, no-distraction signup * B2B or wholesale registration * Functional priority * Mobile-optimized experience </Card> </CardGroup> *** ## Account Creation Benefits Communicate these benefits to encourage registration: <AccordionGroup> <Accordion title="Order Tracking" icon="truck"> * View order history * Track shipments * Reorder previous purchases * Access invoices </Accordion> <Accordion title="Wishlist & Favorites" icon="heart"> * Save products for later * Create wish lists * Share lists with others * Track price changes (if enabled) </Accordion> <Accordion title="Faster Checkout" icon="bolt"> * Saved addresses * Saved payment methods * One-click checkout * Auto-fill information </Accordion> <Accordion title="Exclusive Offers" icon="tag"> * Member-only discounts * Early access to sales * Birthday rewards * Loyalty program points </Accordion> <Accordion title="Personalization" icon="user-gear"> * Product recommendations * Size preferences * Communication preferences * Customized experience </Accordion> </AccordionGroup> *** ## Best practices <CardGroup> <Card title="Reduce friction" icon="hand-sparkles"> Keep form fields to the minimum required information like first name, last name, email, and password, making marketing opt-in optional rather than required. Use clear language, provide password visibility toggle, and show password requirements upfront, as each additional required field reduces signup conversion. </Card> <Card title="Communicate value" icon="bullseye"> Use sidebar image or text to highlight specific benefits like free shipping for members, 10% off first order, or exclusive access to new products. Be specific rather than generic—"Join to save 10% on your first order" is more compelling than "Create an account for perks." </Card> <Card title="Password security" icon="shield"> Display password requirements clearly and show a password strength indicator while encouraging strong passwords. While Shopify requires minimum 5 characters, recommend 8+ characters with a mix of letters, numbers, and symbols. </Card> <Card title="Marketing consent" icon="check-square"> Make opt-in checkbox unchecked by default for GDPR compliance and use clear language like "Yes, I want to receive email updates." Link to your privacy policy, explain email frequency, and ensure an easy unsubscribe process since regulations require explicit opt-in consent. </Card> <Card title="Mobile optimization" icon="mobile"> Use large, easy-to-tap form fields with 44x44px minimum touch targets and appropriate input types for each field. Sidebar images hide on small screens in stacked layouts, so enable autocomplete for faster input and test on actual iOS and Android devices. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="E-commerce Store" icon="shopping-cart"> Sidebar image: "Get 15% Off Your First Order", form with email opt-in </Card> <Card title="Membership Site" icon="id-card"> Sidebar lists member benefits, minimal form fields, emphasize exclusive access </Card> <Card title="B2B Wholesale" icon="briefcase"> Form-only layout, may require additional fields (company name, tax ID) </Card> <Card title="Fashion Boutique" icon="shirt"> Lifestyle image showing community, loyalty program highlights, style quiz opt-in </Card> </CardGroup> *** ## Related Templates <CardGroup> <Card title="Main Login" icon="right-to-bracket"> Customer login page for returning customers </Card> <Card title="Main Account" icon="user-circle"> Customer account dashboard after registration </Card> <Card title="Password Reset" icon="key"> Forgot password / reset password page </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="Registration Errors" icon="triangle-exclamation"> **Common Errors:** **"Email already exists":** * Customer already has account * Direct to login page instead * Offer password reset if forgotten **"Password too short":** * Must be 5+ characters * Display requirement clearly * Show character count **"Invalid email format":** * Check for typos * Validate email format client-side * Provide helpful error message </Accordion> <Accordion title="Image Not Displaying" icon="image-slash"> **Check:** * Image uploaded in "Image Aside" setting * File format is supported (JPG, PNG, WebP) * File size is reasonable (\< 5MB) * Browser cache cleared * View on desktop (may hide on mobile) </Accordion> <Accordion title="Form Not Submitting" icon="spinner"> **Possible Causes:** * Required fields empty * JavaScript errors (check browser console) * Network issues * Conflicting apps **Solutions:** * Verify all required fields completed * Test in different browser * Disable conflicting apps temporarily * Check Shopify status page </Accordion> <Accordion title="Redirect After Registration" icon="arrow-turn-down-right"> **Expected Behavior:** * Successful registration redirects to `/account` (account dashboard) * Or returns to previous page * Or proceeds to checkout (if registering during checkout) **Custom Redirects:** * May require theme code customization * Some apps provide redirect options </Accordion> <Accordion title="Marketing Checkbox Issues" icon="square-check"> **Not Appearing:** * Check if email marketing enabled in Shopify Admin * Verify **Settings → Customer privacy → Marketing** * May require Shopify Email app or marketing app **Not Saving:** * Check app permissions * Verify customer accepted marketing in admin * Check customer profile after registration </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Customer registration/signup page * **URL:** `/account/register` * **Required Fields:** First name, last name, email, password * **Optional Fields:** Marketing opt-in, phone number (theme-dependent) * **Settings:** Sidebar image, section width, color scheme, spacing, borders * **Key Feature:** Optional branded sidebar image to communicate value * **Mobile:** Responsive, sidebar image hidden on small screens <Note> Customer accounts must be enabled in **Shopify Admin → Settings → Customer accounts → Accounts are optional** or **Accounts are required** for registration to work. "Disabled" hides all account functionality. </Note> # Page Template (main-page) Source: https://docs.digifist.com/themes/sahara/pages-templates/page Generic page template for About, Contact, custom content pages with optional additional info section The Main Page template displays standard content pages like About Us, Contact, FAQs, Shipping Info, and other custom pages with optional page title display, customizable heading size, and additional info section for supplementary content. This versatile template works for any text-based content page and supports calls-to-action, highlights, or supplementary messaging through its flexible layout. Use this template to create informational pages that communicate your brand story, policies, and essential information while maintaining design consistency. *** ## Template Settings ### Page Title <AccordionGroup> <Accordion title="Show Page Title" icon="heading"> Display page title as heading. * **Type:** Checkbox * **Default:** Enabled **When Enabled:** * Page title appears as H1 heading at top * Automatically pulls from page title set in Shopify Admin * SEO-optimized (one H1 per page) **When Disabled:** * Page title hidden * Useful if page content starts with custom heading * Or if using page banner section above <Note> The page title is set in **Shopify Admin → Online Store → Pages → \[Page] → Title field**, not in the Theme Customizer. </Note> </Accordion> <Accordion title="Heading Size" icon="text-size"> Control page title heading size. * **XS** (h6) - Smallest * **S** (h5) * **M** (h4) * **L** (h3) * **XL** (h2) - Default, largest <Tip> Use larger heading (XL, L) for primary landing pages. Use smaller heading (M, S) for supplementary pages or if page content has its own prominent title. </Tip> </Accordion> <Accordion title="Title Alignment" icon="align-center"> Align page title horizontally. * **Left** (start) * **Center** (default) * **Right** (end) <Note> Most content pages use centered titles. Left-aligned works well for blog-style or document pages. </Note> </Accordion> </AccordionGroup> ### Additional Info Section <AccordionGroup> <Accordion title="Info Title" icon="heading"> Optional supplementary heading above page content. * **Type:** Inline rich text * **Optional:** Leave blank to hide * Supports bold, italic, links **Use Cases:** * Promotional headline * Call-to-action heading * Section introduction * Highlight important message **Examples:** * "Free Shipping on Orders Over \$50" * "We're Here to Help!" * "Trusted by 10,000+ Customers" </Accordion> <Accordion title="Info Heading Size" icon="text-size"> Control info title heading size. * **XS** (h6) * **S** (h5) * **M** (h4) - Default * **L** (h3) * **XL** (h2) <Tip> Use smaller heading than main page title (e.g., page title XL, info title M) to create visual hierarchy. </Tip> </Accordion> <Accordion title="Info Content" icon="align-left"> Descriptive text for additional info section. * **Type:** Rich text * **Optional:** Leave blank to hide * Supports formatting: bold, italic, lists, links **Use Cases:** * Value proposition * Key benefits or features * Promotional message * Call-to-action description **Example:** ``` Need help choosing the right product? Our expert team is available Monday-Friday, 9am-5pm EST. Call us at 1-800-123-4567 or chat now! ``` </Accordion> <Accordion title="Content Alignment" icon="align-justify"> Align additional info section content. * **Left** (start) * **Center** (default) * **Right** (end) <Note> Most pages use centered alignment for additional info. Left-align for longer, paragraph-style content. </Note> </Accordion> </AccordionGroup> ### Layout Settings <AccordionGroup> <Accordion title="Section Width" icon="left-right"> Control content area width. * **Narrower** - Very narrow (ideal for blog posts, long-form reading) * **Narrow** (default) - Comfortable reading width * **Page** - Standard page margins * **Fluid** - Extends to container edges **Width Comparison:** **Narrower:** * \~600px max width * Optimal for long-form reading * Blog posts, articles, stories **Narrow (Default):** * \~800px max width * Comfortable for most content pages * About, FAQs, Policies **Page:** * \~1200px max width * Wide content areas * Tables, multiple columns **Fluid:** * Full container width * Edge-to-edge content * Wide layouts, full-width images </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Page Content The main page content is **not** controlled by template settings: <AccordionGroup> <Accordion title="Where Content Comes From" icon="file-lines"> **Page Content Source:** Page content is edited in **Shopify Admin → Online Store → Pages → \[Page] → Content field**. * Rich text editor for formatting * Supports headings, paragraphs, lists, images, videos * HTML mode available for advanced formatting * Can embed code snippets <Note> The template controls **how** content displays (width, spacing, colors), not the actual content text. </Note> </Accordion> <Accordion title="Content Formatting" icon="paragraph"> **Available Formatting:** * Headings (H2-H6, not H1 - page title is H1) * Paragraphs * Bold, italic, underline * Bulleted and numbered lists * Links (internal and external) * Images (uploaded or from URL) * Videos (YouTube, Vimeo embeds) * Tables * Code blocks * Horizontal lines </Accordion> </AccordionGroup> *** ## Common Page Types <CardGroup> <Card title="About Us" icon="building"> **Setup:** * Title: "About Us" or "Our Story" * Narrow width for comfortable reading * Additional info: brand values, mission statement * Content: company history, team, values </Card> <Card title="Contact" icon="envelope"> **Setup:** * Title: "Contact Us" * Narrow width * Additional info: "We're here to help!" * Content: contact form, email, phone, hours, address </Card> <Card title="Shipping & Returns" icon="truck"> **Setup:** * Title: "Shipping & Returns" * Narrow width * Additional info: Free shipping threshold * Content: Shipping rates, delivery times, return policy </Card> <Card title="FAQs" icon="circle-question"> **Setup:** * Title: "Frequently Asked Questions" * Narrow or Page width * Additional info: "Find answers here" * Content: Q\&A format, accordions (if theme supports) </Card> <Card title="Size Guide" icon="ruler"> **Setup:** * Title: "Size Guide" * Page or Fluid width (for wide tables) * Content: Size charts, measurement instructions, fit tips </Card> <Card title="Terms & Conditions" icon="file-contract"> **Setup:** * Title: "Terms & Conditions" * Narrower width for legal document readability * Content: Legal terms, policies, disclaimers </Card> </CardGroup> *** ## Best practices <CardGroup> <Card title="Content organization" icon="list-tree"> Structure content clearly with headings to break up sections (H2, H3), keep paragraphs short (3-5 sentences), use bulleted lists for easy scanning, include whitespace, bold important information, and link related pages. Most visitors scan rather than read. </Card> <Card title="Width selection" icon="ruler-horizontal"> Use Narrower for long-form reading (About Us, Brand Story, legal documents). Use Narrow for most content pages (Contact, FAQs, Shipping) as default. Use Page for images/media and multiple columns. Use Fluid for full-width designs and landing pages. </Card> <Card title=" Additional info strategy" icon="sparkles"> Use strategically on high-traffic pages for promotional messaging ("Free Shipping on All Orders"), supportive content ("Questions? We're Here to Help!"), trust-building ("100% Satisfaction Guaranteed"), or directional guidance. Don't overuse as it loses impact. </Card> <Card title="SEO optimization" icon="magnifying-glass"> Use descriptive page titles (set in Shopify Admin), write unique meta descriptions for each page, use H1 for page title (one per page), structure content with H2-H6 headings, include internal links, optimize images with alt text, and keep URLs short and descriptive. </Card> <Card title="Mobile optimization" icon="mobile-screen"> Use short paragraphs for small screens, large tappable links and buttons, responsive images that scale to fit, avoid wide tables (consider vertical layout), test on actual mobile devices, and ensure forms work well especially on contact pages. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Customer Service Page" icon="headset"> Title: "Customer Service" Additional Info: "We're here for you 24/7" Content: Contact methods, FAQ links, return info, live chat </Card> <Card title="Brand Story" icon="book-open"> Title: "Our Story" Narrower width for reading Content: Founder story, mission, values, timeline </Card> <Card title="Press & Media" icon="newspaper"> Title: "Press" Additional Info: "As featured in..." Content: Press releases, media mentions, download assets </Card> <Card title="Wholesale Inquiry" icon="briefcase"> Title: "Wholesale" Additional Info: "Interested in carrying our products?" Content: Wholesale terms, minimum order, contact form </Card> </CardGroup> *** ## Related Templates & Sections <CardGroup> <Card title="Page Banner" icon="image"> Hero banner section for pages (add above page content) </Card> <Card title="Contact Form" icon="message"> Section for embedded contact forms </Card> <Card title="Rich Text" icon="align-left"> Section for additional formatted text blocks </Card> <Card title="Image with Text" icon="image"> Section for combining images with text content </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="Page Title Not Showing" icon="eye-slash"> **Check:** * "Show Page Title" checkbox is enabled * Page has title set in Shopify Admin * Template is assigned to page * Not using custom template without title </Accordion> <Accordion title="Content Not Displaying" icon="file-slash"> **Verify:** * Page content added in Shopify Admin → Pages → \[Page] → Content * Page is published (not draft) * Correct template assigned to page * No theme errors (check browser console) </Accordion> <Accordion title="Additional Info Not Appearing" icon="info-circle"> **Reasons:** * Info Title or Info Content fields are empty * Both must have content to display * Check if section is hidden by color scheme </Accordion> <Accordion title="Width Too Narrow/Wide" icon="left-right"> **Adjust:** * Change "Section Width" setting * Options: Narrower → Narrow → Page → Fluid * Preview changes before saving * Consider content type when choosing </Accordion> <Accordion title="Formatting Issues" icon="code"> **Common Problems:** * HTML code visible (escaped HTML) * Images not responsive (use responsive image tags) * Videos not loading (check embed code) * Tables overflow on mobile (use responsive tables) **Solutions:** * Use Shopify's rich text editor (not raw HTML unless needed) * Upload images through editor (auto-responsive) * Use proper video embed codes (YouTube, Vimeo) * Test mobile view for all content </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Generic content page template (About, Contact, FAQs, etc.) * **Content Source:** Shopify Admin → Pages → \[Page] → Content field * **Title Control:** Show/hide, size (h6-h2), alignment * **Additional Info:** Optional supplementary heading, content, alignment * **Width Options:** Narrower, Narrow (default), Page, Fluid * **Best For:** Text-based content pages with optional promotional messaging * **Settings:** Minimal template settings, most content edited in Page editor <Note> Create new pages in **Shopify Admin → Online Store → Pages → Add page**. Set title, content, and SEO fields there. Template settings control layout, not content. </Note> # Password page Source: https://docs.digifist.com/themes/sahara/pages-templates/password Password-protected store page with email signup and coming soon message The Main Password template displays the password-protected storefront page when your store is password-protected, featuring customizable "Coming Soon" messaging and email signup form to collect leads before launch. This template builds anticipation and captures email addresses during store development, pre-launch periods, or for exclusive access stores. Use this template to create a professional coming-soon experience that converts early visitors into subscribers and generates launch momentum. *** ## Template Settings ### Main Content <AccordionGroup> <Accordion title="Title" icon="heading"> Main heading for password page. * **Type:** Textarea (multi-line text) * **Default:** "Opening soon" **Common Messages:** * "Opening Soon" * "Coming Soon" * "Under Construction" * "We're Getting Ready" * "Launching \[Month Year]" * "Members Only" <Tip> Keep title short and exciting. Build anticipation without revealing too much. </Tip> </Accordion> <Accordion title="Subtext" icon="align-left"> Supporting message below title. * **Type:** Rich text * **Optional:** Leave blank to hide * Supports bold, italic, links, lists **Effective Subtext:** * Launch date: "Launching March 2024" * Brief description: "Your new destination for handcrafted goods" * Anticipation: "Something special is on the way..." * Benefit: "Join our list for exclusive early access" <Note> Use subtext to provide context, build excitement, or explain the delay without overwhelming visitors. </Note> </Accordion> </AccordionGroup> ### Email Signup <AccordionGroup> <Accordion title="Enable Email Signup" icon="envelope"> Display email capture form. * **Type:** Checkbox * **Default:** Enabled **When Enabled:** * Email form appears below main content * Collects email addresses * Builds mailing list pre-launch * Stores emails in Shopify customer list **When Disabled:** * No email form shown * Page shows only title, subtext, and password form * Use for exclusive/private stores without marketing <Tip> Enable email signup to build your audience before launch. These early subscribers are highly engaged potential customers. </Tip> </Accordion> <Accordion title="Email Signup Title" icon="heading"> Heading above email form. * **Type:** Text * **Optional:** Leave blank for no heading **Examples:** * "Notify Me at Launch" * "Get Early Access" * "Join the Waiting List" * "Be the First to Know" * "Subscribe for Updates" </Accordion> <Accordion title="Email Signup Text" icon="paragraph"> Description text for email signup. * **Type:** Rich text * **Optional:** Leave blank to hide **Effective Text:** * Value proposition: "Get 15% off your first order when we launch!" * Benefit: "Exclusive early access for subscribers" * Simple: "Enter your email to be notified when we open" * Urgency: "Limited spots available for early access members" </Accordion> </AccordionGroup> ### Layout Settings <AccordionGroup> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Password Page Elements The password page automatically includes: <AccordionGroup> <Accordion title="Password Form" icon="lock"> * Password input field * "Enter using password" button * Error message if wrong password * Managed by Shopify (not customizable) <Note> The store password is set in **Shopify Admin → Online Store → Preferences → Password protection**. </Note> </Accordion> <Accordion title="Store Logo" icon="image"> * Appears in password header section * Controlled by main-password-header template * Maintains brand identity on locked page </Accordion> <Accordion title="Social Media Links" icon="share-nodes"> Some themes include: * Links to social profiles * Follow us messaging * Build social presence before launch </Accordion> </AccordionGroup> *** ## Email Signup Functionality <AccordionGroup> <Accordion title="How It Works" icon="gears"> **Email Collection Process:** 1. Visitor enters email in signup form 2. Email submits to Shopify 3. Shopify creates customer record (accepts marketing) 4. Customer appears in admin customer list 5. Tagged as "password page signup" (theme-dependent) 6. Can be exported or synced to email marketing <Tip> After launch, these emails are gold. Send a "We're Live!" campaign with exclusive launch offer to reward early supporters. </Tip> </Accordion> <Accordion title="Managing Signups" icon="users"> **Access Collected Emails:** * Go to **Shopify Admin → Customers** * Filter by "Accepts marketing" * Export email list * Import to email marketing platform * Tag for segmentation **Launch Day Campaign:** * Send to all password page signups * Subject: "We're Live! Get Your Exclusive 15% Off" * Include thank you for waiting * Provide special launch discount code * Create urgency (limited time offer) </Accordion> <Accordion title="GDPR Compliance" icon="shield"> **Email Marketing Compliance:** * Password page signups opt-in to marketing * Clearly state what emails they'll receive * Provide unsubscribe option in all emails * Follow CAN-SPAM, GDPR, CASL regulations * Don't sell or share email addresses * Honor unsubscribe requests immediately <Warning> Ensure your email signup language clearly explains what subscribers will receive. Ambiguous opt-ins may violate privacy regulations. </Warning> </Accordion> </AccordionGroup> *** ## Use Cases <CardGroup> <Card title="Pre-Launch Store" icon="rocket"> "Launching Spring 2024", email signup for launch notification, social links </Card> <Card title="Coming Soon" icon="clock"> "Under Construction", brief description, "Subscribe for Updates" </Card> <Card title="Exclusive Access" icon="lock"> "Members Only", no email signup, password-only access for VIP/wholesale </Card> <Card title="Seasonal Shop" icon="calendar"> "Opens November 1st", countdown timer (custom), holiday theme </Card> <Card title="Pop-Up Store" icon="store"> "Limited Time Shop", dates announced, email for reminder when open </Card> <Card title="Maintenance Mode" icon="wrench"> "We'll be right back!", brief maintenance message, expected return time </Card> </CardGroup> *** ## Best practices <CardGroup> <Card title="Build anticipation" icon="fire"> Create excitement by teasing products without full reveals, sharing behind-the-scenes content on social platforms, and offering exclusive early access to email subscribers. Use countdown timers and limited quantities to generate FOMO, while keeping messaging brief and benefit-focused. Set clear launch date expectations and leverage influencer previews to build momentum before opening your store. </Card> <Card title="Email incentives" icon="tag"> Encourage signups with compelling offers like 15-20% off first orders, free shipping for higher-value products, or early access 24-48 hours before public launch. Consider exclusive subscriber-only products, gifts with first purchases, or giveaway entries to make the email exchange worthwhile. Your offer must provide real value beyond generic "stay updated" messaging. </Card> <Card title="Social presence" icon="hashtag"> Build your community before launch by linking to Instagram, TikTok, and Pinterest profiles while sharing platform-specific sneak peeks. Use Instagram Stories for behind-the-scenes content, TikTok for creative reveals and founder stories, Pinterest for inspiration boards, and Facebook groups for community building. Direct all social traffic back to your password page for email signups. </Card> <Card title="Launch timing" icon="calendar-check"> Set a specific launch date and announce it in advance, timing your go-live for peak traffic hours (10am-2pm local time). Send your launch email 30 minutes before removing the password, and consider a soft launch for email subscribers 48 hours early to test checkout flow. This rewards early supporters while letting you fix issues before public launch. </Card> <Card title="Password page design" icon="paintbrush"> Use high-quality brand-aesthetic background images with clean, focused design and strong typography for your title. Keep the page mobile-optimized with fast loading times and minimal distractions that guide visitors toward email signup. Ensure your brand colors and logo are prominent throughout the experience. </Card> </CardGroup> *** ## Related Templates <CardGroup> <Card title="Main Password Header" icon="header"> Password page header with logo and background image </Card> <Card title="Password Settings" icon="gear"> Shopify Admin password protection settings </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="Email Signups Not Saving" icon="envelope-open-text"> **Check:** * Email signup checkbox is enabled in template * Form submits without errors (check browser console) * Customers appearing in Shopify Admin → Customers * "Accepts marketing" is checked on customer profiles </Accordion> <Accordion title="Can't Access Password Page" icon="lock"> **Verify:** * Password protection enabled: **Shopify Admin → Online Store → Preferences → Password protection** * Correct password entered * Not logged into Shopify Admin (bypass password) * Clear browser cookies if issues </Accordion> <Accordion title="Changes Not Showing" icon="eye-slash"> **Solutions:** * Save template changes in Theme Customizer * Hard refresh browser (Cmd/Ctrl + Shift + R) * Clear cache * View in incognito/private window * Verify correct theme is published </Accordion> <Accordion title="Password Page Not Appearing" icon="question"> **Reasons:** * Password protection not enabled * You're logged into Shopify Admin (automatic bypass) * Using ?password= URL parameter to bypass **To View as Customer:** * Log out of Shopify Admin * Visit store in incognito window * Use different browser </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Password-protected storefront page for pre-launch or exclusive access * **Key Features:** Custom title/subtext, email signup form, password entry * **Email Signup:** Collects leads before launch, builds mailing list * **Settings:** Title, subtext, email signup (enable/title/text), color scheme, spacing * **Common Uses:** Pre-launch, coming soon, exclusive access, maintenance mode * **Password Set In:** Shopify Admin → Online Store → Preferences → Password protection <Note> Enable password protection in **Shopify Admin → Online Store → Preferences → Enable password** and set your password. Template controls the design; Shopify controls the password functionality. </Note> # Gift Card Source: https://docs.digifist.com/themes/sahara/products/gift-card Customize the appearance of gift card pages with logo branding ## What It Does The **Gift Card** section controls the branding and visual appearance of Shopify gift card pages. When customers purchase or receive a digital gift card, they see a gift card page displaying: * Gift card code * Balance/value * Store branding (logo) * Instructions for use This section lets you customize the logos displayed on gift card pages to match your brand identity. <Note> This section only appears on **gift card template pages** (**/products/\[gift-card-handle]**). It does not appear on regular product or homepage sections. </Note> ## Settings ### Logo Image **Type:** Image picker\ **Purpose:** Upload your store logo to display at the top of gift card pages **Recommended specifications:** * **Format:** PNG with transparency (for clean logo display) or JPG * **Size:** 200-400px width recommended * **Aspect ratio:** Horizontal logo (wider than tall) works best * **File size:** Under 100KB for fast loading **Best practices:** * Use high-resolution logo (2x size for retina displays) * Ensure logo visible on both light and dark backgrounds * Match logo used in header for brand consistency <Tip> If you have a logo with transparency, use PNG format. If logo has white background, use JPG for smaller file size. </Tip> ### Logo SVG Code **Type:** Textarea\ **Purpose:** Paste SVG code for vector logo (alternative to image upload) **Why use SVG:** * **Scalable** - Sharp at any size/resolution (perfect for retina displays) * **Small file size** - Typically smaller than PNG/JPG * **Editable** - Colors can be changed with CSS * **Accessibility** - Better for screen readers **How to use:** 1. Export logo as SVG from design software (Adobe Illustrator, Figma, Sketch) 2. Open SVG file in text editor 3. Copy entire `<svg>...</svg>` code 4. Paste into "Logo SVG Code" field **Example SVG code:** ```svg theme={null} <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 50"> <text x="10" y="35" font-family="Arial" font-size="30" fill="currentColor"> My Store </text> </svg> ``` <Warning> Only use SVG code from trusted sources. Malicious SVG code can contain scripting vulnerabilities. Always use SVG files you created or from reputable sources. </Warning> ### Logo Card Image **Type:** Image picker\ **Purpose:** Upload decorative logo/image to display **on the gift card itself** (visual card design) **Purpose:** * Appears as decorative element on the visual gift card * Can be store logo, brand mark, or decorative graphic * Adds branding to the gift card customers see and share **Recommended specifications:** * **Format:** PNG with transparency (recommended) or JPG * **Size:** 100-200px recommended * **Design:** Simple, recognizable brand mark or icon * **Contrast:** Ensure visible on gift card background color **Difference from "Logo Image":** * **Logo Image** - Top of gift card **page** (header area) * **Logo Card Image** - **On the gift card itself** (decorative branding on card visual) ### Logo Card SVG Code **Type:** Textarea\ **Purpose:** Paste SVG code for logo/icon on gift card itself (alternative to Logo Card Image) Same benefits as "Logo SVG Code" but specifically for the decorative branding on the gift card visual. **When to use:** * Vector logo or icon for perfect scaling * Smaller file size than raster image * Need to match color scheme dynamically ## Use Cases <CardGroup> <Card title="Standard Logo Branding" icon="image"> Upload same logo used in header to "Logo Image" for consistent branding across store and gift card pages. </Card> <Card title="SVG Logo for Scalability" icon="vector-square"> Use SVG code for ultra-sharp logo display on high-resolution devices (retina, 4K displays). Perfect for simple logos. </Card> <Card title="Branded Gift Cards" icon="gift"> Upload brand mark/icon to "Logo Card Image" to add decorative branding on the gift card customers see and share. </Card> <Card title="Seasonal Gift Card Design" icon="snowflake"> Update "Logo Card Image" seasonally (holiday icon forChristmas, heart for Valentine's, etc.) to match promotions. </Card> </CardGroup> ## Best practices <CardGroup> <Card title="Use Consistent Branding" icon="paintbrush"> Use same logo across store (header, footer, gift card pages) for cohesive brand identity customers recognize. </Card> <Card title="Optimize Image Size" icon="compress"> Compress logo images to under 100KB. Large images slow gift card page load. Use TinyPNG or similar tools. </Card> <Card title="Test on Mobile" icon="mobile"> View gift card page on mobile to ensure logos display properly and are readable at smaller sizes. </Card> <Card title="Ensure Logo Contrast" icon="circle-half-stroke"> Logo must be visible on gift card page background. Test with different color schemes or use logo with transparency. </Card> <Card title="Prefer SVG for Simple Logos" icon="code"> SVG provides best quality and smallest file size for text-based or simple icon logos. Use PNG for complex logos with gradients/photos. </Card> <Card title="Keep Card Logo Simple" icon="circle"> "Logo Card Image" appears small on gift card. Use simple, recognizable brand mark rather than detailed logo. </Card> </CardGroup> ## Gift Card Setup ### Enabling Gift Cards Gift cards must be enabled in Shopify Admin before customers can purchase: <Steps> <Step title="Go to Gift Cards settings"> Shopify Admin → **Products** → **Gift cards** </Step> <Step title="Enable gift cards"> Toggle "Gift cards are enabled" to ON </Step> <Step title="Configure gift card values"> Set available gift card denominations (e.g., $25, $50, $100, $250) </Step> <Step title="Customize branding"> Go to **Online Store → Themes → Customize** → Open gift card product template → Configure Gift Card section logos </Step> <Step title="Test purchase"> Make test gift card purchase to verify page displays correctly with logos </Step> </Steps> ### Gift Card Page Location Gift card pages are accessed at: * **Product page:** `/products/gift-card` (where customers purchase) * **Gift card issued page:** `/gift_cards/[code]` (unique page customers receive via email after purchase) Both use the Gift Card section for branding. ## Image vs SVG: When to Use | Format | Best For | Pros | Cons | | ------- | ----------------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------ | | **PNG** | Complex logos with gradients, photos, multiple colors | Wide compatibility, easy to use, supports transparency | Larger file size, pixelated when scaled up | | **JPG** | Simple logos on solid backgrounds | Smallest file size for photos | No transparency, lossy compression | | **SVG** | Text-based logos, simple icons, single/few colors | Infinitely scalable, tiny file size, editable with CSS | Not ideal for complex designs, requires code knowledge | **Recommendation:** Use SVG for simple logos (text, basic shapes). Use PNG for complex logos with gradients or many colors. ## Troubleshooting <AccordionGroup> <Accordion title="Logo not displaying on gift card page"> **Possible causes:** * Logo not uploaded or SVG code not pasted * Image file corrupted or wrong format * SVG code contains errors **Solution:** * Verify image uploaded successfully in Theme Customizer * Try different image format (PNG instead of JPG) * Validate SVG code (paste in [https://jakearchibald.github.io/svgomg/](https://jakearchibald.github.io/svgomg/) to check for errors) * Check browser console (F12 → Console) for loading errors </Accordion> <Accordion title="Logo appears too large or too small"> **Solution:** * Logo size controlled by theme CSS (not adjustable in Gift Card section settings) * Upload logo at recommended size (200-400px width) * If using SVG, adjust `viewBox` and `width`/`height` attributes in SVG code * Contact theme developer for custom CSS to resize logo </Accordion> <Accordion title="Logo Card Image not visible on gift card"> **Solution:** * Check "Logo Card Image" uploaded (different from "Logo Image") * Ensure logo has sufficient contrast with gift card background * Use PNG with transparency if logo blends into background * Test with simple brand mark/icon rather than full detailed logo </Accordion> <Accordion title="SVG code displays as text instead of image"> **Solution:** * Ensure pasting complete SVG code including opening `<svg>` and closing `</svg>` tags * Check for syntax errors in SVG code (missing quotes, unclosed tags) * Validate SVG code with online SVG validator * Try simplifying SVG (remove unnecessary attributes added by design software) </Accordion> <Accordion title="Logo looks blurry on high-resolution displays"> **Solution:** * Upload logo at 2x size (if logo displays at 200px, upload 400px image) * Use SVG for perfect sharpness at any resolution * Check image format (PNG preferred over JPG for logos) * Ensure not uploading low-resolution image and stretching </Accordion> </AccordionGroup> ## Related Settings ### Theme Settings for Gift Cards * **Admin → Online Store → Themes → Customize → Theme settings → Colors** - Affects gift card page colors * **Admin → Products → Gift cards** - Configure denominations, enable/disable gift cards * **Admin → Settings → Notifications → Customer notifications → Gift card created** - Customize email customers receive ### Related Sections * **Header** - Uses similar logo settings; maintain consistency * **Footer** - May include logo; use same logo file for brand consistency ## Key Takeaways * **Two logo types** - Logo Image (page header) and Logo Card Image (on gift card itself) * **Image or SVG** - Upload image (PNG/JPG) or paste SVG code for each logo * **SVG benefits** - Scalable, tiny file size, perfect for simple logos * **PNG for complex logos** - Use PNG with transparency for detailed logos with gradients * **Consistent branding** - Use same logo as header/footer for cohesive brand identity * **Optimize file size** - Compress images to under 100KB for fast page load * **Test on mobile** - Ensure logos readable at smaller sizes on mobile devices Gift Card section provides simple logo branding customization to ensure gift card pages match your store's professional appearance. # Pre-order Source: https://docs.digifist.com/themes/sahara/products/pre-order Enable and configure pre-order functionality for upcoming product releases. Pre-orders allow customers to purchase products before they are officially released, helping you generate buzz, secure sales in advance, and gauge demand for new products. The theme supports pre-order messaging on product pages, custom buy button labels, optional estimated shipping dates, and pre-order badges on product cards. <img alt="Pre-order feature overview" /> ## What this feature controls Pre-order functionality manages: * **Pre-order availability** - Enable products for advance purchase before launch * **Custom button labels** - Replace "Add to cart" with "Pre-order" button * **Shipping date display** - Show estimated availability/shipping dates * **Product badges** - Display "Pre-order" badges on product cards * **Metafield integration** - Use Shopify metafields to mark pre-order products * **Inventory management** - Accept orders while awaiting stock arrival * **Customer expectations** - Clearly communicate future delivery dates * **Launch momentum** - Build anticipation and secure early sales ## Getting started <Steps> <Step title="Create pre-order metafield definition"> Set up the metafield to mark products as pre-order. 1. In Shopify admin, go to **Settings → Custom data → Metafield definitions** 2. Click **Products** → **Add definition** 3. Create the **Preorder** metafield: * **Name:** Preorder * **Namespace and key:** `theme.preorder` * **Type:** True or false * **Description:** "Enable pre-order for this product" 4. Save the definition <Note> The namespace and key must be exactly `theme.preorder` for the theme to recognize pre-order products. </Note> </Step> <Step title="Create shipping date metafield (optional)"> Add a metafield for estimated shipping/availability dates. 1. In **Settings → Custom data → Metafield definitions → Products** 2. Click **Add definition** 3. Create the **Preorder shipping date** metafield: * **Name:** Preorder shipping date * **Namespace and key:** `theme.preorder_shipping_date` * **Type:** Date * **Description:** "Estimated shipping or availability date" 4. Save the definition <Tip> Shipping dates are optional but highly recommended. They set clear customer expectations and reduce support inquiries about delivery timing. </Tip> </Step> <Step title="Enable pre-order for products"> Set metafields on products you want to offer as pre-order. 1. Go to **Products** and open a product 2. Scroll to the **Metafields** section 3. Set **Preorder** to `True` 4. (Optional) Add **Preorder shipping date** if you have an estimated date 5. Save the product <Note> You can enable pre-order on products with or without inventory. Pre-order works for both out-of-stock items awaiting restock and unreleased products. </Note> </Step> <Step title="Configure pre-order in Theme Customizer"> Enable pre-order display on product pages and cards. 1. Go to **Online Store → Themes → Customize** 2. Navigate to **Product pages** 3. Add the **Pre-order** block to the product page template 4. Configure block settings (messaging, date format) 5. Go to **Theme settings → Products** 6. Enable **Pre-order** option in product card settings 7. Save your changes </Step> <Step title="Test pre-order functionality"> Verify pre-order appears correctly on your storefront. 1. Visit a product with pre-order enabled 2. Check that "Pre-order" button replaces "Add to cart" 3. Verify shipping date displays (if set) 4. Check pre-order badge on product cards 5. Test adding pre-order item to cart </Step> </Steps> ## How pre-order works Pre-order transforms the standard purchase flow to accommodate unreleased or out-of-stock products: ### Standard purchase vs. Pre-order **Standard purchase:** * Product is in stock * "Add to cart" button * Ships immediately after order * Inventory decremented on purchase **Pre-order:** * Product not yet available * "Pre-order" button (customizable) * Ships on future date * Captures orders before availability * Inventory managed separately or accepts unlimited orders ### Pre-order flow 1. **Product marked as pre-order** - Metafield set to True 2. **Customer visits product page** - Sees "Pre-order" button and estimated date 3. **Customer adds to cart** - Item added with pre-order status 4. **Checkout process** - Standard checkout, payment collected 5. **Order fulfillment** - Held until product available 6. **Shipping on date** - Order fulfilled when inventory arrives ### Metafield structure <Tabs> <Tab title="Preorder metafield"> **Namespace and key:** `theme.preorder`\ **Type:** True or false\ **Purpose:** Indicates if product is available for pre-order **Values:** * `True` - Product is pre-order, shows pre-order messaging * `False` or empty - Standard product, normal buy button **Where it affects:** * Product page buy button text * Product page messaging * Product card badges * Cart item display (optional) <Warning> The namespace and key must be exactly `theme.preorder`. Any variation will not work. </Warning> </Tab> <Tab title="Shipping date metafield"> **Namespace and key:** `theme.preorder_shipping_date`\ **Type:** Date\ **Purpose:** Estimated shipping or availability date **Format:** YYYY-MM-DD (standard date format) **Display examples:** * "Ships March 15, 2026" * "Available April 2026" * "Estimated delivery: May 2026" **Benefits:** * Sets clear customer expectations * Reduces "when will this ship?" inquiries * Builds trust with transparency * Can be displayed on product page and cart <Tip> Even if you don't have an exact date, provide an estimated month/quarter. "Ships Q2 2026" is better than no date information. </Tip> </Tab> </Tabs> ## Pre-order configuration ### Product page settings Configure how pre-order appears on individual product pages: **Location:** Theme Customizer → **Product pages** → Add **Pre-order** block <AccordionGroup> <Accordion title="Pre-order block"> **Type:** Block\ **Location:** Product page template Add the Pre-order block to customize pre-order messaging and button text. **Block settings:** **Buy button text** * Customize "Pre-order" button label * Examples: "Pre-order now", "Reserve yours", "Order in advance" * Default: "Pre-order" **Pre-order message** * Text displayed near button * Explain pre-order terms * Example: "This item will ship when available" **Show shipping date** * Toggle to display estimated date * Uses `theme.preorder_shipping_date` metafield * Formats date based on locale **Date format** * Choose how date displays * Options: Full date, Month/Year, Custom <Tip> Place the Pre-order block near the buy button area for maximum visibility. Customers need to immediately understand this is a pre-order product. </Tip> </Accordion> <Accordion title="Button text customization"> **Type:** Text input\ **Default:** "Pre-order" Customize the buy button label for pre-order products. **Effective button text examples:** * "Pre-order" - Clear and standard * "Pre-order now" - Adds urgency * "Reserve yours" - Emphasizes exclusivity * "Order in advance" - Descriptive * "Secure your order" - Trust-building **Avoid:** * "Buy now" - Confusing, implies immediate shipment * "Add to cart" - Same as regular products * Overly long text that doesn't fit button <Tip> Keep button text short (1-3 words) so it fits comfortably on mobile devices. </Tip> </Accordion> <Accordion title="Pre-order messaging"> **Type:** Text input\ **Default:** Empty Additional message explaining pre-order terms or shipping timeline. **Effective messaging examples:** * "This item will ship when available in March 2026" * "Pre-order now. Estimated shipping: \[date]" * "Reserve yours today. Ships upon release." * "Launching soon. Pre-order to guarantee yours." * "Your card will be charged now. Item ships \[date]." **Key information to include:** * When product will ship * When payment is charged (now or later) * That this is a pre-order product * Any pre-order benefits (discount, exclusivity) <Tip> Be transparent about payment timing. Clarify if you charge immediately or upon shipping to avoid confusion and chargebacks. </Tip> </Accordion> <Accordion title="Shipping date display"> **Type:** Toggle\ **Default:** Enabled Show or hide the estimated shipping date from the `theme.preorder_shipping_date` metafield. **When enabled:** * Date displays prominently on product page * Formats automatically based on store locale * Updates if metafield date changes **When disabled:** * No date shown to customers * Use when dates are uncertain * Rely on pre-order message text instead <Tip> Always show shipping dates when available. Transparency about timing builds customer trust and reduces inquiries. </Tip> </Accordion> </AccordionGroup> ### Product card settings Configure pre-order badges and indicators on product cards: **Location:** Theme Customizer → **Theme settings → Products** <AccordionGroup> <Accordion title="Pre-order badge"> **Type:** Toggle\ **Default:** Enabled Display "Pre-order" badge on product cards for pre-order items. **When enabled:** * Badge appears on collection pages * Shows on search results * Visible on homepage product sections * Clearly identifies pre-order products **Badge appearance:** * Usually displays near product image * Styled to match theme badge design * Can combine with other badges (New, Sale) <Tip> Keep pre-order badges enabled. They help customers identify pre-order products before clicking through to product pages. </Tip> </Accordion> <Accordion title="Pre-order button text on cards"> **Type:** Text input\ **Default:** Inherits from product page setting Optional: Override button text specifically for product cards. **Use cases:** * Shorter text for cards: "Pre-order" vs "Pre-order now" * Different messaging for collection views * A/B test card vs. page button text <Note> If left empty, uses the same button text as product page pre-order block. </Note> </Accordion> </AccordionGroup> ## Common use cases <Tabs> <Tab title="New product launch"> Generate buzz and secure sales before official release. **Setup:** * Set `theme.preorder` to True * Add `theme.preorder_shipping_date` with launch date * Enable pre-order badges on cards * Button text: "Pre-order now" * Message: "Launches \[date]. Pre-order to guarantee yours." **Strategy:** * Open pre-orders 2-4 weeks before launch * Offer pre-order incentive (10% off, free shipping) * Build email list of pre-order customers * Create urgency with limited quantities * Send reminder emails as launch approaches **Benefits:** * Generate revenue before launch * Gauge demand accurately * Build anticipation and buzz * Reduce launch day traffic issues </Tab> <Tab title="Out of stock restock"> Accept orders while awaiting inventory arrival. **Setup:** * Set `theme.preorder` to True on out-of-stock products * Add estimated restock date to shipping date metafield * Button text: "Pre-order" * Message: "Currently out of stock. Pre-order now, ships \[date]" **Strategy:** * Enable pre-order when inventory depletes * Clearly communicate restock timeline * Update shipping date as restock approaches * Convert lost sales into pre-orders * Disable pre-order when inventory arrives **Benefits:** * Don't lose sales during stockouts * Keep customers engaged with brand * Forecast demand for restock quantity * Maintain revenue during supply gaps </Tab> <Tab title="Seasonal collection"> Take pre-orders for seasonal products before season starts. **Setup:** * Enable pre-order 1-3 months before season * Set shipping date to season start * Button text: "Reserve yours" * Message: "New \[Season] collection. Ships \[month]" **Strategy:** * Launch pre-orders for Fall collection in July * Spring collection pre-orders in January * Holiday collection in September * Give early customers first access **Benefits:** * Predict seasonal demand * Order correct inventory quantities * Build excitement before season * Reward loyal customers with early access </Tab> <Tab title="Limited edition"> Create exclusivity with limited pre-order quantities. **Setup:** * Enable pre-order with inventory tracking * Set limited quantity (e.g., 100 units) * Add shipping date 2-4 weeks out * Button text: "Secure yours" * Message: "Limited to \[X] units. Pre-order now." * Add `badge:limited_edition` tag **Strategy:** * Emphasize scarcity in messaging * Show inventory countdown * Close pre-orders at quantity limit * Create FOMO with limited availability **Benefits:** * Generate urgency and demand * Sell limited quantities quickly * Create collector appeal * Premium positioning </Tab> <Tab title="Made-to-order"> Accept orders for custom or handmade products. **Setup:** * Enable pre-order permanently * Set realistic production timeline (2-6 weeks) * Update shipping date regularly * Button text: "Order now" * Message: "Handmade to order. Ships in \[X] weeks" **Strategy:** * Use for artisan/handmade products * Custom or personalized items * Small batch production * Build-to-order business model **Benefits:** * No inventory costs * Reduce waste * Offer customization * Sustainable business model <Tip> For made-to-order, use a relative date ("Ships in 3-4 weeks") rather than specific date, as production time varies. </Tip> </Tab> <Tab title="Crowdfunded product"> Test demand before committing to production. **Setup:** * Enable pre-order with goal quantity * Set shipping date 2-3 months out * Button text: "Back this project" * Message: "Pre-order now. Production starts at \[X] orders." * Show progress toward goal **Strategy:** * Set minimum order quantity for production * Show progress bar (50 of 100 orders) * Offer early-bird pricing * Refund if goal not met **Benefits:** * Validate product demand * Fund production with pre-orders * Minimize financial risk * Build community around product </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Clear communication" icon="message"> Always clearly communicate that this is a pre-order. State when payment is charged (now or later) and when product ships. Transparency prevents confusion and disputes. </Card> <Card title="Set realistic dates" icon="calendar"> Only provide shipping dates you're confident you can meet. Missing pre-order dates damages trust and creates refund requests. Build in buffer time. </Card> <Card title="Update customers" icon="envelope"> Send regular updates to pre-order customers. Notify when shipping date changes, when product is ready, and when order ships. Keep customers informed. </Card> <Card title="Pre-order incentive" icon="gift"> Offer incentive to pre-order: 10-15% discount, free shipping, exclusive variants, or bonus items. Reward customers for committing early. </Card> <Card title="Transparent terms" icon="file-contract"> Include pre-order terms on product page: when charged, when ships, cancellation policy, refund terms. Link to full pre-order policy page. </Card> <Card title="Inventory management" icon="boxes-stacked"> Decide if pre-orders track inventory or accept unlimited orders. Set limits if you want to cap pre-order quantity at production capacity. </Card> <Card title="Payment timing" icon="credit-card"> Decide when to charge: immediately (most common) or upon shipping. Immediate payment is simpler. Charging later reduces chargebacks but complicates accounting. </Card> <Card title="Disable when available" icon="toggle-off"> Remove pre-order metafield when product becomes available. Switch to standard "Add to cart" button once inventory arrives and ships immediately. </Card> <Card title="Email segmentation" icon="users"> Tag pre-order customers in email system. Send targeted updates about their pre-order. Thank them for early support. Notify first when product launches. </Card> <Card title="Mobile optimization" icon="mobile"> Test pre-order messaging on mobile devices. Ensure shipping dates and messages display properly. Pre-order button should be clearly tappable. </Card> </CardGroup> ## Legal and operational considerations <Warning> **Payment timing regulations:** Some regions have laws about when you can charge for pre-orders (e.g., can't charge more than 30 days before shipping). Research applicable laws for your store's location and customer locations. </Warning> <Note> **Refund policies:** Clearly state your pre-order refund/cancellation policy. Some jurisdictions require allowing cancellations before shipping. Make policy easy to find. </Note> <Tip> **Shopify Payments:** If using Shopify Payments, be aware of their policies on pre-orders. Orders must ship within 7 days of the maximum estimated delivery date you provide at checkout. </Tip> ### Operational checklist Before launching pre-orders: * [ ] Create clear pre-order terms and policy page * [ ] Set up email templates for pre-order updates * [ ] Plan production/ordering timeline with buffer * [ ] Decide payment timing (now or at shipping) * [ ] Set up inventory tracking or limits * [ ] Configure notification systems for updates * [ ] Train support team on pre-order questions * [ ] Test full pre-order flow (order to fulfillment) * [ ] Prepare post-launch communication plan * [ ] Set calendar reminders for status updates ## Technical notes <Note> **Metafield namespace:** The theme specifically looks for `theme.preorder` and `theme.preorder_shipping_date` namespaces. Using different namespaces will not work without theme code modifications. </Note> <Warning> **Date format:** The shipping date metafield must use Shopify's Date type. String dates won't format properly. Ensure you select "Date" not "Single line text" when creating the metafield. </Warning> <Tip> **Bulk editing:** Use Shopify's bulk editor to add/remove pre-order metafields across multiple products. Filter by collection or tag, then edit metafields in bulk. </Tip> ### Combining with other features Pre-order works alongside: * **Product badges** - Add `badge:pre_order` tag for pre-order badge * **Inventory tracking** - Can track pre-order inventory or accept unlimited * **Variants** - Each variant can have separate pre-order dates * **Discounts** - Apply discount codes to pre-order products * **Back in stock notifications** - Disable when switching from pre-order to in-stock ## Related guides <CardGroup> <Card title="Product Page" icon="box" href="/themes/release/pages-templates/product-page"> Configure the product page template and Pre-order block </Card> <Card title="Product Badges" icon="tag" href="/themes/release/products/product-badges"> Add pre-order badges to product cards </Card> <Card title="Metafields Guide" icon="database" href="https://help.shopify.com/en/manual/custom-data/metafields"> Learn more about Shopify metafields and custom data </Card> <Card title="Inventory Management" icon="warehouse" href="https://help.shopify.com/en/manual/products/inventory"> Managing inventory for pre-order products </Card> </CardGroup> # Product badges Source: https://docs.digifist.com/themes/sahara/products/product-badges Learn how to enable and configure product badges for highlighting important product information. Product badges are visual indicators that highlight important product information like sale status, new arrivals, bestsellers, or custom promotional messages. They appear on product cards throughout your store and on product pages to draw attention to key product attributes. The theme uses a tag-based system with custom localization support for displaying badges in multiple languages. <img alt="Product badges overview" /> ## What this feature controls Product badges manages: * **Visual indicators** - Display badges on product cards and product pages * **Tag-based system** - Use product tags to trigger badge display * **Custom messages** - Create unlimited custom badge types * **Multi-language support** - Translate badges into multiple languages * **Pre-configured badges** - Built-in badges for common use cases (sale, new, bestseller) * **Placement control** - Show badges on cards, pages, or both * **Automatic display** - Badges appear automatically based on product tags * **Locale integration** - Seamless integration with Shopify's locale system ## Getting started <Steps> <Step title="Add badge tags to products"> Add specific tags to products you want to highlight with badges. 1. In Shopify admin, go to **Products** 2. Open the product you want to add a badge to 3. In the **Tags** section, add badge tags using this format: * **Format:** `badge:badge_key` * **Examples:** `badge:sale`, `badge:new`, `badge:best_seller` 4. Save the product <Tip> Use underscores (`_`) instead of spaces in badge keys. For example, use `badge:best_seller` not `badge:best seller`. </Tip> <Note> You can add multiple badge tags to a single product. All badges will display according to your theme settings. </Note> </Step> <Step title="Enable badges on product cards"> Configure badge display in Theme Customizer settings. 1. Go to **Online Store → Themes → Customize** 2. Open **Theme settings → Products** 3. Enable the **Product Badges** option for product cards 4. Save your changes <Note> This setting controls badge display on collection pages, search results, and anywhere product cards appear. </Note> </Step> <Step title="Enable badges on product pages"> Add the Badges block to product page template. 1. In Theme Customizer, navigate to **Product pages** 2. Add the **Badges** block to the product page template 3. Configure badge position and styling in block settings 4. Save your changes <Tip> Position the Badges block near the product title or price for maximum visibility. </Tip> </Step> <Step title="Test badge display"> Verify badges appear correctly on your storefront. 1. Visit a product with badge tags 2. Check badge appearance on collection pages 3. Check badge appearance on product page 4. Test with different languages if using translations </Step> </Steps> ## How product badges work Product badges use a simple but powerful tag-based system: ### Tag format Badges are triggered by product tags following this format: ``` badge:badge_key ``` **Components:** * **`badge:`** - Required prefix that identifies this as a badge tag * **`badge_key`** - Unique identifier for the badge type **Examples:** * `badge:sale` - Triggers "Sale" badge * `badge:new` - Triggers "New" badge * `badge:limited_edition` - Triggers "Limited Edition" badge ### Display logic 1. **Tag check** - Theme scans product tags for `badge:` prefix 2. **Key extraction** - Extracts badge\_key from tag 3. **Translation lookup** - Looks for translation in locale file 4. **Badge render** - Displays badge with translated text 5. **Fallback** - If no translation found, displays badge\_key as-is ### Pre-configured badges The theme includes seven built-in badge translations: <AccordionGroup> <Accordion title="New"> **Tag:** `badge:new`\ **Display:** "New"\ **Use for:** New arrivals, recent additions, latest products </Accordion> <Accordion title="Best seller"> **Tag:** `badge:best_seller`\ **Display:** "Best seller"\ **Use for:** Top-selling products, popular items, customer favorites </Accordion> <Accordion title="Featured"> **Tag:** `badge:featured`\ **Display:** "Featured"\ **Use for:** Highlighted products, editor's picks, curated selections </Accordion> <Accordion title="On sale"> **Tag:** `badge:on_sale`\ **Display:** "On sale"\ **Use for:** Discounted products, sale items, promotions </Accordion> <Accordion title="Coming soon"> **Tag:** `badge:coming_soon`\ **Display:** "Coming soon"\ **Use for:** Pre-launch products, upcoming releases, future availability </Accordion> <Accordion title="Pre-order"> **Tag:** `badge:pre_order`\ **Display:** "Pre-order"\ **Use for:** Products available for pre-order, advance purchases </Accordion> <Accordion title="Sold out"> **Tag:** `badge:sold_out`\ **Display:** "Sold out"\ **Use for:** Out of stock products, unavailable items </Accordion> </AccordionGroup> ### Locale file structure Badges are defined in theme locale files under the `badges` section: ```json locales/en.default.json theme={null} { "badges": { "new": "New", "best_seller": "Best seller", "featured": "Featured", "on_sale": "On sale", "coming_soon": "Coming soon", "pre_order": "Pre-order", "sold_out": "Sold out" } } ``` ## Creating custom badges <Tabs> <Tab title="Single language"> Add custom badges for one language. <Steps> <Step title="Choose badge key"> Decide on a unique key for your badge. **Guidelines:** * Use lowercase letters * Use underscores for spaces: `limited_edition` * Keep it short and descriptive * Examples: `eco_friendly`, `handmade`, `local`, `exclusive` </Step> <Step title="Edit locale file"> Add your custom badge to the locale file. 1. In your theme code, open `locales/en.default.json` 2. Find the `badges` section 3. Add your custom badge key and text: ```json theme={null} "badges": { "new": "New", "best_seller": "Best seller", "limited_edition": "Limited Edition", "eco_friendly": "Eco-Friendly", "handmade": "Handmade" } ``` 4. Save the file </Step> <Step title="Add tag to products"> Apply the badge tag to products. 1. Go to **Products** in Shopify admin 2. Open a product 3. Add tag: `badge:limited_edition` 4. Save the product </Step> </Steps> </Tab> <Tab title="Multiple languages"> Create translated badges for multiple languages. <Steps> <Step title="Add to primary locale"> Start with your default language. Edit `locales/en.default.json`: ```json theme={null} "badges": { "limited_edition": "Limited Edition", "eco_friendly": "Eco-Friendly" } ``` </Step> <Step title="Add translations"> Add the same keys to other locale files. Edit `locales/es.json`: ```json theme={null} "badges": { "limited_edition": "Edición Limitada", "eco_friendly": "Ecológico" } ``` Edit `locales/fr.json`: ```json theme={null} "badges": { "limited_edition": "Édition Limitée", "eco_friendly": "Écologique" } ``` Edit `locales/de.json`: ```json theme={null} "badges": { "limited_edition": "Limitierte Auflage", "eco_friendly": "Umweltfreundlich" } ``` </Step> <Step title="Test translations"> Verify badges appear correctly in each language. 1. Change storefront language 2. Visit product with badge 3. Confirm translated badge appears 4. Repeat for all supported languages </Step> </Steps> </Tab> </Tabs> ## Badge configuration ### Product card settings Configure badge display on product cards (collection pages, search results): **Location:** Theme Customizer → **Theme settings → Products** <AccordionGroup> <Accordion title="Product badges toggle"> **Type:** Toggle\ **Default:** Enabled Enable or disable badge display on product cards throughout the store. **When enabled:** * Badges appear on all product cards * Visible in collections, search, home page sections * Automatically displays based on product tags **When disabled:** * No badges show on product cards * Product page badges are unaffected * Clean minimal card appearance <Tip> Keep enabled for most stores. Badges increase engagement and help customers identify special products quickly. </Tip> </Accordion> </AccordionGroup> ### Product page settings Configure badge display on individual product pages: **Location:** Theme Customizer → **Product pages** → Add **Badges** block <AccordionGroup> <Accordion title="Badges block"> **Type:** Block\ **Location:** Product page template Add the Badges block to display badges on product pages. **Block settings:** * Position (above/below title, near price) * Badge style (color scheme, size) * Multiple badge display **Placement options:** * Above product title * Below product title * Near product price * In product info section <Tip> Place badges near the product title for maximum visibility. This draws immediate attention to special product attributes. </Tip> </Accordion> </AccordionGroup> ## Translation management ### Fallback behavior When a badge translation is missing: 1. **Tag:** Product has `badge:custom_badge` 2. **Lookup:** Theme searches locale file for `"custom_badge": "..."` 3. **Not found:** Translation doesn't exist in current locale 4. **Fallback:** Badge displays as "custom\_badge" (the key itself) **Example:** * Tag: `badge:summer_sale` * No translation defined * Displays: "summer\_sale" on storefront <Warning> Always provide translations for all badge keys in all supported languages to maintain consistent branding and user experience. </Warning> ### Translation best practices <CardGroup> <Card title="Match brand voice" icon="message"> Translate badges to match your brand voice in each language, not just literal translations. "Hot Deal" might be "Oferta Caliente" (literal) or "Oferta Especial" (better branding) in Spanish. </Card> <Card title="Keep it short" icon="text-width"> Badge text should be 1-3 words maximum. Long text doesn't fit well on badges. "Limited Edition" works better than "Available in Limited Quantities Only". </Card> <Card title="Use consistent keys" icon="hashtag"> Use the same badge keys across all products. Don't create `badge:sale1`, `badge:sale2`, etc. Use one `badge:sale` for consistency. </Card> <Card title="Test all locales" icon="language"> After adding translations, test badge appearance in every language your store supports. Ensure text fits and looks good. </Card> </CardGroup> ## Common use cases <Tabs> <Tab title="Sale promotions"> Highlight discounted products during sales. **Setup:** * Badge tag: `badge:on_sale` * Display: "On sale" (or translated) * Products: All items with active discounts **Implementation:** 1. Add `badge:on_sale` tag to sale products 2. Enable badges on product cards and pages 3. When sale ends, remove tags **Bulk tag management:** * Use bulk editor to add/remove tags quickly * Filter by collection or discount code * Add/remove sale badges en masse <Tip> Combine with product badges automation apps to automatically add sale badges when discount is applied and remove when sale ends. </Tip> </Tab> <Tab title="New arrivals"> Feature recently added products. **Setup:** * Badge tag: `badge:new` * Display: "New" * Products: Recent additions (last 30-60 days) **Implementation:** 1. Add `badge:new` to products when publishing 2. Create workflow to remove after 30-60 days 3. Badge draws attention to latest inventory **Automation options:** * Use Shopify Flow to auto-add "new" tag on publish * Schedule tag removal after X days * Keep new arrivals collection fresh </Tab> <Tab title="Bestsellers"> Showcase popular products. **Setup:** * Badge tag: `badge:best_seller` * Display: "Best seller" * Products: Top 10-20% by sales **Implementation:** 1. Review sales data monthly 2. Add badge to top performers 3. Social proof increases conversions **Selection criteria:** * Top 10% by unit sales * Top revenue generators * Highest rated products * Most favorited/wishlisted </Tab> <Tab title="Sustainability"> Highlight eco-friendly products. **Setup:** * Custom badges: `badge:eco_friendly`, `badge:organic`, `badge:recycled` * Products: Sustainable product line **Locale setup:** ```json theme={null} "badges": { "eco_friendly": "Eco-Friendly", "organic": "Organic", "recycled": "Recycled Materials", "carbon_neutral": "Carbon Neutral" } ``` **Implementation:** 1. Create custom sustainability badges 2. Add translations in all languages 3. Apply to certified/verified eco products 4. Build trust with eco-conscious customers </Tab> <Tab title="Limited editions"> Create urgency with limited availability. **Setup:** * Custom badge: `badge:limited_edition` * Display: "Limited Edition" * Products: Exclusive or time-limited items **Implementation:** 1. Add custom badge to locale files 2. Apply to limited quantity products 3. Remove badge when sold out 4. Creates FOMO and urgency **Variations:** * `badge:exclusive` - "Exclusive" * `badge:limited_stock` - "Limited Stock" * `badge:last_chance` - "Last Chance" </Tab> <Tab title="Made-to-order"> Inform customers about production time. **Setup:** * Custom badges: `badge:made_to_order`, `badge:handmade`, `badge:custom` * Products: Custom/made-to-order items **Locale setup:** ```json theme={null} "badges": { "made_to_order": "Made to Order", "handmade": "Handmade", "custom": "Customizable", "artisan": "Artisan Made" } ``` **Implementation:** 1. Create badges for production types 2. Set customer expectations upfront 3. Reduce support inquiries about shipping times </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Limit badge count" icon="hashtag"> Don't use more than 1-2 badges per product. Multiple badges create visual clutter and reduce impact. Choose the most important badge. </Card> <Card title="Use meaningful badges" icon="circle-check"> Every badge should provide valuable information to customers. Avoid generic badges that don't influence purchase decisions. </Card> <Card title="Consistent naming" icon="code"> Use underscore format consistently: `best_seller`, not `bestseller` or `best-seller`. Maintain consistent key formatting across all badges. </Card> <Card title="Translate everything" icon="language"> Provide translations for all badge keys in every language your store supports. Missing translations look unprofessional. </Card> <Card title="Regular maintenance" icon="clock-rotate-left"> Review and update badges regularly. Remove "new" badges after 60 days, update "bestseller" badges monthly based on sales data. </Card> <Card title="Bulk tag management" icon="tags"> Use Shopify's bulk editor to add/remove badge tags efficiently. Filter products by collection or condition, then edit tags in bulk. </Card> <Card title="Strategic placement" icon="location-dot"> Enable badges where they matter most. High-traffic collection pages benefit most. Consider disabling on pages where badges distract. </Card> <Card title="A/B test badge text" icon="flask"> Test different badge wording to see what drives conversions. "On Sale" vs "Limited Offer" vs "Special Price" may perform differently. </Card> <Card title="Automation consideration" icon="robot"> For large catalogs, consider Shopify Flow or apps to automatically manage badge tags based on rules (sales data, publish date, stock levels). </Card> <Card title="Visual consistency" icon="palette"> Ensure badge styling matches your brand. Customize badge colors and styles in theme settings to align with overall design. </Card> </CardGroup> ## Technical implementation ### Tag format requirements <Warning> **Critical:** Badge tags must follow this exact format: `badge:badge_key` **Correct:** * `badge:sale` * `badge:new_arrival` * `badge:limited_edition` **Incorrect:** * `Badge:sale` (capital B) * `badge: sale` (space after colon) * `badges:sale` (plural badges) * `sale` (missing badge: prefix) </Warning> ### Key naming rules <Note> **Badge key requirements:** * Use lowercase only * Use underscores for spaces: `best_seller` not `best seller` * No special characters except underscores * Keep under 20 characters * Use descriptive names: `eco_friendly` not `eco` </Note> ### Multiple badges per product Products can have multiple badge tags: ``` Tags: badge:new, badge:on_sale, badge:eco_friendly ``` **Display behavior:** * All badges appear on product * Order determined by theme settings * May stack or display inline depending on theme style * Consider limiting to 2 badges maximum for clean appearance ## Related guides <CardGroup> <Card title="Product Page" icon="box" href="/themes/release/pages-templates/product-page"> Configure the product page template and Badges block </Card> <Card title="Product Card Settings" icon="table-cells-large" href="/themes/release/theme-settings/products"> Manage product card display settings including badges </Card> <Card title="Product Tags" icon="tag" href="https://help.shopify.com/en/manual/products/details/tags"> Learn more about Shopify product tags and management </Card> <Card title="Theme Localization" icon="language" href="https://shopify.dev/docs/themes/architecture/locales"> Understanding Shopify theme locale files and translations </Card> </CardGroup> # Product groups Source: https://docs.digifist.com/themes/sahara/products/product-groups Organize products into groups for better navigation and cross-selling. Product Groups allow you to link separate products so they behave like variants of one another. Each product maintains its own description, variants, and images while being presented as part of a unified group on product cards and pages. This creates a seamless shopping experience where customers can switch between related products without leaving the product page. <img alt="Product groups overview" /> ## What this feature controls Product Groups manages: * **Product linking** - Connect separate products to act as variant options * **Navigation between products** - Allow customers to switch between grouped products * **Display types** - Show groups as swatches, images, text, or product thumbnails * **Metaobject integration** - Use Shopify metaobjects to define product relationships * **Custom option values** - Set custom images or text for variant options * **Card and page display** - Control how groups appear on product cards vs. pages * **Native variant integration** - Works alongside standard product variants ## Getting started <Steps> <Step title="Create Product Groups metaobject definition"> Set up the metaobject structure for product groups. 1. In Shopify admin, go to **Content → Metaobjects → Add definition** 2. Create a **Product Groups** metaobject definition: * **Name:** Product Groups * **Handle:** `product_groups` 3. Add the following fields to the definition: | Field Name | Handle | Type | | :------------------- | :--------------------- | :----------------------------------- | | Name | `name` | One : Single line text | | Group | `group` | List : Product | | Group by option | `group_by_option` | One : Choice list (Single line text) | | Type on card | `type_on_card` | One : Choice list (Single line text) | | Type on page | `type_on_page` | One : Choice list (Single line text) | | Custom label on page | `custom_label_on_page` | One : True or false | 4. For **Group by option** field, add common options: * Color * Size * Capacity * Material * Style 5. For **Type on card** and **Type on page** fields, add these options: * Swatch * Image * Text * Product 6. Save the definition <Warning> Field handles must be exactly as shown above. Incorrect handles will break the product groups functionality. </Warning> <img alt="Product groups metaobject setup" /> </Step> <Step title="Create Product Options Type Values metaobject"> Set up custom option values for images and text. 1. In Shopify admin, go to **Content → Metaobjects → Add definition** 2. Create a **Product Options Type Values** metaobject definition: * **Name:** Product Options Type Values * **Handle:** `product_options_type_values` 3. Add the following fields: | Field Name | Handle | Type | | :--------- | :------ | :--------------------- | | Name | `name` | One : Single line text | | Image | `image` | One : Image (File) | | Text | `text` | One : Single line text | 4. Save the definition <Note> This metaobject is optional. Only create it if you want custom images or text labels for your product group options. </Note> </Step> <Step title="Link metaobjects in Theme Settings"> Connect the metaobject definitions to your theme. 1. Go to **Online Store → Themes → Customize** 2. Open **Theme settings → Products** 3. Scroll to **Product Groups** section 4. Select the **Product Groups** metaobject definition you created 5. If you created it, select the **Product Options Type Values** metaobject 6. Save your changes </Step> <Step title="Create your first product group"> Add products to a group. 1. Go to **Content → Metaobjects → Product Groups → Add entry** 2. Fill in the fields: * **Name:** Descriptive name (e.g., "T-Shirt Collection") * **Group:** Select 2+ products to link together * **Group by option:** Choose what differentiates them (e.g., "Color") * **Type on card:** How to display on collection pages (e.g., "Swatch") * **Type on page:** How to display on product pages (e.g., "Product") * **Custom label on page:** Enable if using custom labels 3. Save the product group </Step> <Step title="Create custom option values (optional)"> Add custom images or text for option values. 1. Go to **Content → Metaobjects → Product Options Type Values → Add entry** 2. For each custom value, add: * **Name:** Option value name (must match variant option exactly) * **Image:** Upload custom image (for Image type display) * **Text:** Custom text label (for Text type display) 3. Save each entry <Tip> Name must exactly match the product variant option. For example, if your product has "Navy Blue" as a color, the custom value Name must be "Navy Blue". </Tip> </Step> <Step title="Test product groups"> Verify groups appear correctly on your storefront. 1. Visit a product that's part of a group 2. Check that group options appear as configured 3. Test switching between products in the group 4. Verify display on both collection cards and product pages </Step> </Steps> ## How Product Groups work Product Groups create relationships between separate products, making them appear as different variants of the same item: ### Standard variants vs. Product Groups **Standard variants:** * Single product with multiple variants (e.g., one t-shirt with colors) * All variants share same description and product details * Limited to 3 variant options (Shopify limit) * All managed within one product **Product Groups:** * Multiple separate products linked together * Each product has its own description, images, pricing * No limit on number of products in a group * Each product can have its own variants too ### Display types Product Groups can be displayed in four different ways: <AccordionGroup> <Accordion title="Swatch display"> **Best for:** Color variations, patterns, materials Displays small circular or square swatches representing each product in the group. Uses Shopify's native color swatch metaobject (`shopify--color-pattern`) by default. **When to use:** * Color variations (Red, Blue, Black) * Pattern variations (Striped, Solid, Checkered) * Material swatches (Cotton, Linen, Silk) **Appearance:** * Small clickable swatches below product image * Shows color or pattern visually * Hover to preview product name </Accordion> <Accordion title="Image display"> **Best for:** Style variations, design differences Displays small thumbnail images for each product option. Can use product's main image or custom images from Product Options Type Values metaobject. **When to use:** * Different styles or designs * Pattern variations needing visual display * Products where appearance matters more than text **Appearance:** * Small square thumbnails * Shows actual product or custom image * Click to switch products </Accordion> <Accordion title="Text display"> **Best for:** Size, capacity, specific names Displays text labels for each product option. Can use product's option value or custom text from metaobject. **When to use:** * Size variations (Small, Medium, Large) * Capacity options (8oz, 16oz, 32oz) * Named variations (Classic, Premium, Deluxe) **Appearance:** * Text buttons or pills * Clear readable labels * Selected state highlighting </Accordion> <Accordion title="Product display"> **Best for:** Complete product cards, related items Displays full product cards with images and details for each product in the group. **When to use:** * Very different products in the group * When customers need to see full product details * Related product recommendations **Appearance:** * Full product cards in a row * Shows image, title, price * More visual weight than other types </Accordion> </AccordionGroup> ### Custom option values When you want more control over how options appear, use the Product Options Type Values metaobject: **Without custom values:** * Theme uses product's variant option name (e.g., "Navy Blue") * Swatch type uses Shopify's color swatch metaobject * Image type uses product's featured image **With custom values:** * **Custom images** - Upload specific images for Image type display * **Custom text** - Use different text labels than variant names * **Better control** - Ensure consistent appearance across products <Note> Custom value **Name** must exactly match the product's variant option value. Matching is case-sensitive. </Note> ## Metaobject structure ### Product Groups metaobject <Tabs> <Tab title="Required Fields"> **Name** (`name`) * Type: Single line text * Purpose: Internal name for the product group * Example: "T-Shirt Collection - Summer 2024" **Group** (`group`) * Type: List of Products * Purpose: Select all products to include in this group * Requirement: Minimum 2 products * Example: \[Product A, Product B, Product C] **Group by option** (`group_by_option`) * Type: Choice list (Single line text) * Purpose: Variant option that differentiates products * Example: "Color", "Size", "Material" * Must match variant option name on products **Type on card** (`type_on_card`) * Type: Choice list (Single line text) * Purpose: How to display group on collection/card views * Options: Swatch, Image, Text, Product **Type on page** (`type_on_page`) * Type: Choice list (Single line text) * Purpose: How to display group on product pages * Options: Swatch, Image, Text, Product </Tab> <Tab title="Optional Fields"> **Custom label on page** (`custom_label_on_page`) * Type: True or false * Purpose: Enable custom labels on product pages * Default: False * When enabled: Uses custom text from Product Options Type Values </Tab> </Tabs> ### Product Options Type Values metaobject <Tabs> <Tab title="Field Structure"> **Name** (`name`) * Type: Single line text * Purpose: Must exactly match product variant option value * Example: "Navy Blue" (if product has Navy Blue variant) * Case-sensitive matching **Image** (`image`) * Type: Image (File) * Purpose: Custom image for Image type display * Recommended: 100x100px or larger * Format: JPG, PNG, WebP **Text** (`text`) * Type: Single line text * Purpose: Custom label for Text type display * Example: Use "L" instead of "Large" </Tab> </Tabs> ## Common use cases <Tabs> <Tab title="Color variations"> Link products that differ only by color. **Setup:** * Group by option: "Color" * Type on card: "Swatch" * Type on page: "Swatch" or "Product" * Products: Same item in different colors **Example:** * T-Shirt in Red, Blue, Black, White * Each color is a separate product * Customers switch colors without leaving page **Benefits:** * Each color has unique images showing actual color * Different colors can have different inventory * Each color product can have its own size variants </Tab> <Tab title="Style variations"> Group related products with different designs. **Setup:** * Group by option: "Style" * Type on card: "Image" * Type on page: "Product" * Products: Different designs/patterns **Example:** * T-Shirt in Striped, Solid, Graphic * Each style is separate product * Show style options as thumbnails **Benefits:** * Each style has unique descriptions * Different styles can have different prices * Separate inventory tracking per style </Tab> <Tab title="Capacity options"> Link products with different sizes or capacities. **Setup:** * Group by option: "Capacity" * Type on card: "Text" * Type on page: "Text" * Products: Same item in different capacities **Example:** * Water Bottle: 16oz, 24oz, 32oz * Candle: Small (8oz), Medium (16oz), Large (24oz) * Each capacity is separate product **Benefits:** * Different capacities have different prices * Separate descriptions explaining capacity benefits * Independent inventory management </Tab> <Tab title="Material variations"> Group products made from different materials. **Setup:** * Group by option: "Material" * Type on card: "Swatch" or "Image" * Type on page: "Image" * Products: Same design in different materials **Example:** * Bag in Leather, Canvas, Nylon * Shirt in Cotton, Linen, Silk * Each material is separate product **Benefits:** * Material-specific descriptions and care instructions * Different materials have different prices * Separate imagery showing material texture </Tab> <Tab title="Collection series"> Link products from the same collection or series. **Setup:** * Group by option: "Product" * Type on card: "Product" * Type on page: "Product" * Products: Related items from same collection **Example:** * Jewelry Set: Necklace, Earrings, Bracelet * Furniture Set: Chair, Sofa, Ottoman * Show as complete product cards **Benefits:** * Encourage purchasing multiple items * Show complete product information for each * Cross-sell related products </Tab> <Tab title="Product bundles"> Group standalone products that work together. **Setup:** * Group by option: "Type" * Type on card: "Text" * Type on page: "Product" * Products: Complementary products **Example:** * Phone Case, Screen Protector, Charger * Camera Body, Lens, Bag * Each item sold separately but grouped **Benefits:** * Customer sees all compatible products * Each product maintains separate pricing * Flexible purchasing options </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Match option names" icon="check"> Ensure "Group by option" exactly matches the variant option name on your products. If products have "Color" option, use "Color" not "Colour" or "Colors". </Card> <Card title="Consistent product structure" icon="equals"> All products in a group should have the same variant option structure. Don't mix products with "Color" option and products without it. </Card> <Card title="Choose right display type" icon="palette"> Use Swatch for colors, Image for styles, Text for sizes/capacities. Match display type to what customers need to see. </Card> <Card title="Different types per location" icon="window-restore"> Use different display types for cards vs. pages. Example: Swatch on card, Product on page for more detail. </Card> <Card title="Logical grouping" icon="layer-group"> Group products that truly belong together. Customers should understand why these products are linked. </Card> <Card title="Custom images quality" icon="image"> When using custom option images, use high-quality 100x100px+ images. Keep consistent style across all options. </Card> <Card title="Limit group size" icon="list-ol"> Don't create groups with 20+ products. Large groups overwhelm customers. Keep to 3-8 products per group typically. </Card> <Card title="Test switching behavior" icon="arrows-rotate"> Always test switching between products in a group. Ensure images, prices, and descriptions update correctly. </Card> <Card title="Mobile considerations" icon="mobile"> Test product groups on mobile. Swatches should be large enough to tap easily. Too many options may need scrolling. </Card> <Card title="Handle naming carefully" icon="code"> Metaobject field handles must be exact. Double-check handles when setting up. Incorrect handles break functionality. </Card> </CardGroup> ## Technical notes <Note> **Native swatch integration:** The theme automatically uses Shopify's native color swatch metaobject (`shopify--color-pattern`) for Swatch type display. You don't need to create custom swatches for standard colors. </Note> <Note> **Product type display:** When using "Product" as the display type, the theme shows each product's featured image and basic information. Clicking switches to that product while staying on the product page. </Note> <Warning> **Metaobject handles are critical:** Field handles in the metaobject definitions must exactly match the specified names. The theme code looks for these specific handles. Any variation will cause product groups to fail silently. </Warning> <Tip> **Combine with standard variants:** Each product in a group can still have its own standard variants. For example, products grouped by Color can each have their own Size variants. </Tip> ## Related guides <CardGroup> <Card title="Product Page" icon="box" href="/themes/release/pages-templates/product-page"> Configure the product page template where groups display </Card> <Card title="Product Badges" icon="tag" href="/themes/release/products/product-badges"> Add badges to products in groups for sales or new items </Card> <Card title="Metaobjects Documentation" icon="database" href="https://help.shopify.com/en/manual/custom-data/metaobjects"> Learn more about Shopify metaobjects and custom data </Card> <Card title="Product Variants" icon="list-check" href="https://help.shopify.com/en/manual/products/variants"> Understanding standard Shopify product variants </Card> </CardGroup> # Product Page (PDP) Source: https://docs.digifist.com/themes/sahara/products/product-page Product detail page template with flexible block-based layout, media gallery, variants, and purchase options The Product Page (PDP) powers individual product pages with flexible block-based content layout, advanced media gallery with thumbnails, variant selection, dynamic checkout buttons, and extensive customization options. This is your most important template for conversions - carefully configured media display, variant selection, and purchase options can optimize the buying experience and significantly increase conversion rates. Use this template to create compelling product presentations that address customer questions and reduce purchase friction. *** ## Template Settings <Tabs> <Tab title="Media Gallery"> <AccordionGroup> <Accordion title="Product Media Layout" icon="images"> Control media gallery layout style: * **Full** (default) - Full-width media, max impact * **Partial** - Partial width, more compact **Full Layout:** * Media takes maximum available space * Best for lifestyle imagery * Visual impact priority * Works well for fashion, home decor **Partial Layout:** * More compact media presentation * Better balance with product info * Good for technical products with detailed specs </Accordion> <Accordion title="Slides with Thumbnails" icon="grip-vertical"> Display thumbnail navigation for media gallery: * **None** (default) - No thumbnails, arrows/dots only * **Desktop and Mobile** - Thumbnails on all devices * **Only Mobile** - Thumbnails on mobile, not desktop <Tip> Thumbnails help customers navigate multiple product images quickly. Enable for products with 4+ images. </Tip> </Accordion> <Accordion title="Product Media Object Fit" icon="expand"> How main product images scale: * **Cover** (default) - Fill container, may crop * **Contain** - Fit entire image, may show background **Cover:** * No whitespace around images * Consistent container size * May crop edges * Best for uniform image sizes **Contain:** * Shows full image * May show background color * Preserves entire image * Best for mixed aspect ratios </Accordion> <Accordion title="Thumbnail Object Fit" icon="clone"> How thumbnail images scale: * **Cover** - Fill thumbnail, may crop * **Contain** (default) - Fit entire image in thumbnail <Tip> Contain works well for thumbnails to show full preview. Cover creates uniform thumbnail grid. </Tip> </Accordion> <Accordion title="Adaptive Ratio & Auto Height" icon="arrows-up-down"> Control media gallery height behavior: * **Default** - Fixed aspect ratio (set below) * **Adaptive Ratio** - Height adapts to each image * **Slider Auto Height** - Slider adjusts per slide **When to Use:** * **Default:** Consistent product image sizes * **Adaptive Ratio:** Mixed aspect ratios, preserve original dimensions * **Slider Auto Height:** Varying image heights in slideshow </Accordion> <Accordion title="Media Aspect Ratio" icon="rectangle"> Set fixed aspect ratio (visible when Adaptive Ratio = Default): * **Default** - Theme default ratio * **1:1** - Square * **2:3** - Portrait * **3:4** - Standard portrait * **4:5** - Tall portrait <Note> This setting only appears when "Adaptive Ratio & Auto Height" is set to "Default". </Note> </Accordion> <Accordion title="Slider Background Transparent" icon="fill"> Make slider background transparent: * **Type:** Checkbox * **Default:** Disabled (has background) <Tip> Enable for products photographed on white/transparent backgrounds to blend with page color scheme. </Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Controls"> <AccordionGroup> <Accordion title="Show Tags on Mobile" icon="tags"> Display product tags on mobile devices: * **Type:** Checkbox * **Default:** Enabled <Note> Tags help with product discovery and SEO.Desktop version typically shows tags; this controls mobile visibility. </Note> </Accordion> <Accordion title="Enable Actions Bar" icon="bars"> Show sticky actions bar (add to cart, wishlist, etc.): * **Type:** Checkbox * **Default:** Enabled **Actions Bar Features:** * Sticky on scroll * Quick add to cart * Share buttons * Wishlist toggle (if enabled) * Price display <Tip> Actions bar improves mobile UX by keeping purchase buttons accessible while scrolling product details. </Tip> </Accordion> <Accordion title="Horizontal Alignment" icon="align-center"> Align product information content: * **Left** - Left-aligned content * **Center** (default) - Centered content * **Right** - Right-aligned content <Note> This controls text alignment for product title, price, description, and other text elements. </Note> </Accordion> </AccordionGroup> </Tab> <Tab title="Layout"> <AccordionGroup> <Accordion title="Section Width" icon="left-right"> * **Page** (default) - Contained within page margins * **Fluid** - Extends to container edges * **Full** - Full browser width </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0 (default), 1, 2, 4, or 6 * **Bottom Spacing**: 0 (default), 1, 2, 4, or 6 <Note> Default spacing is 0 for both, assuming product content fills the page naturally. </Note> </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> </Tab> </Tabs> *** ## Blocks <Tabs> <Tab title="Core Blocks"> <AccordionGroup> <Accordion title="@app Block" icon="puzzle-piece"> Embed app blocks from installed Shopify apps. * Review apps (Judge.me, Loox, Yotpo) * Size chart apps * Inventory apps * Trust badge apps * Customization apps <Note> Apps must support app blocks. Drag and position where desired in product layout. </Note> </Accordion> <Accordion title="Title Block (Limit 1)" icon="heading"> Display product title. * Automatically pulls product name * Rendered as H1 (SEO-optimized) * No settings (automatic) * Position anywhere in layout </Accordion> <Accordion title="Description Block (Limit 1)" icon="align-left"> Display product description with flexible behavior. **Settings:** **Behaviour:** * **Plain** (default) - Standard text display * **Row (Accordion)** - Collapsible accordion * **Tab** - Tab interface **Heading:** * Custom heading for description section * Optional (leave blank to hide) **Truncated Lines:** * Range: 0-5 lines (default: 3) * Show "Read more" link if exceeds * 0 = no truncation, show all <Tip> Use accordion or tab behavior for long descriptions to keep page compact and scannable. </Tip> </Accordion> <Accordion title="Text Block" icon="font"> Add custom text anywhere in product layout. **Settings:** **Text:** Custom text content **Text Style:** * **Link** - Styled as link/hyperlink * **Body** - Standard body text **Link to Resource:** * **None** - No link * **Type** - Links to product type page * **Vendor** - Links to vendor/brand page **Use Cases:** * Shipping information * Return policy link * Brand story * Care instructions * Certifications/badges </Accordion> <Accordion title="SKU Block (Limit 1)" icon="barcode"> Display product SKU (Stock Keeping Unit). * Automatically pulls from product variant * Updates when variant changes * Useful for B2B, technical products * No settings (automatic) </Accordion> <Accordion title="Price Block (Limit 1)" icon="dollar-sign"> Display product price. **Settings:** **Show Price Extra Info:** * **Type:** Checkbox (default: enabled) * Shows sale price, compare-at price * Tax information * Unit pricing (if applicable) * Payment term preview **Price Display:** * Current price (large, prominent) * Compare-at price (strikethrough if on sale) * "Sale" or "On Sale" badge * Price per unit (if configured) </Accordion> </AccordionGroup> </Tab> <Tab title="Purchase"> <AccordionGroup> <Accordion title="Variant Picker Block (Limit 1)" icon="square-check"> Allow customers to select product options (size, color, etc.). **Settings:** **Title:** * Custom heading for variant section * Default: "Variant picker" **Back in Stock:** * **Type:** Checkbox (default: disabled) * Show "Notify me" for out-of-stock variants * Collects emails for restock notifications **Variant Picker Layout:** * **Buttons** (default) - Clickable option buttons (e.g., S, M, L, XL) * **Dropdowns** - Select dropdowns for each option * **Stacked** - Buttons stacked vertically **Size Guide Page:** * Link to size guide page * "Size Guide" link appears next to size selector <Tip> Buttons work great for 2-6 options. Use dropdowns for many options (10+ sizes, 20+ colors). </Tip> </Accordion> <Accordion title="Purchase Options Block (Limit 1)" icon="repeat"> Display selling plans (subscriptions, payment plans). * One-time purchase * Subscribe and save * Payment plans * Frequency selection * Discount display <Note> Requires selling plans configured in Shopify Admin. Only appears if product has selling plans. </Note> </Accordion> <Accordion title="Buy Buttons Block (Limit 1)" icon="cart-plus"> Add to cart and checkout buttons. **Settings:** **Show Quantity:** * **Type:** Checkbox (default: enabled) * Show quantity selector * Increase/decrease buttons **Quantity Type:** * **Inline** (default) - Quantity + button together * **Separate** - Quantity above button **Show Dynamic Checkout:** * **Type:** Checkbox (default: enabled) * Apple Pay, Google Pay, Shop Pay buttons * Skip cart, direct to checkout **Show Gift Card Recipient:** * **Type:** Checkbox (default: disabled) * For gift card products * Collect recipient info during purchase <Tip> Dynamic checkout buttons can increase conversion by reducing friction. Keep enabled unless you need custom cart logic. </Tip> </Accordion> </AccordionGroup> </Tab> <Tab title="Content"> <AccordionGroup> <Accordion title="Content Tabs Block (Limit 4)" icon="folder-open"> Create tabbed or accordion content sections (up to 4 tabs). **Global Settings:** * **Tabs Alignment:** Left, Center (default), Right * **Tabs Content Alignment:** Left, Center(default), Right **Each Tab (1-4):** **Show:** Enable/disable tab (checkbox) **Open by Default:** Auto-expand tab (checkbox) **Title:** Tab heading text **Content:** Rich text content **Page:** Or link to page for content **Tab 1 Special Features:** * **Show Product Content:** Include product description * **Product Content Type:** * All: Full product description * Above: Content before description * Below: Content after description **Common Tab Uses:** * Tab 1: Description + Details * Tab 2: Shipping & Returns * Tab 3: Size Guide * Tab 4: Care Instructions <Tip> Use tabs to organize detailed information without overwhelming the page. Most customers prefer 2-3 tabs over one long page. </Tip> </Accordion> <Accordion title="Custom Liquid Block" icon="code"> Add custom Liquid code for advanced functionality. * Custom HTML/Liquid * Metafield displays * Custom product data * Third-party integrations * Advanced customization <Warning> Requires Liquid knowledge. Incorrect code can break product page. Test thoroughly. </Warning> </Accordion> <Accordion title="Pickup Availability Block (Limit 1)" icon="store"> Show in-store pickup availability. * Displays nearby store locations * Stock availability per location * Store hours and address * "Check other stores" link <Note> Requires Shopify POS or local inventory setup. Only shows if product has inventory at physical locations. </Note> </Accordion> <Accordion title="Inventory Notice Block (Limit 1)" icon="warehouse"> Display low stock warnings. **Settings:** **Inventory Threshold:** * Range: 1-50 (default: 5) * Shows notice when stock below this number * Creates urgency **Notice Just Text:** * **Type:** Checkbox (default: disabled) * Text only (no icon/styling) * Subtle notification **Display Examples:** * "Only 3 left in stock!" * "Low stock - order soon" * "Limited availability" <Tip> Low stock notices create urgency and can increase conversions. Set threshold to 5-10 for best results. </Tip> </Accordion> <Accordion title="Collapsible Content Block" icon="caret-down"> Add collapsible accordion sections (unlimited). **Settings:** **Heading:** Accordion heading text **Row Content:** Rich text content inside **Icon:** Optional custom icon image **Page:** Or link to page for content **Product File Section:** * **Label:** Custom label for file link * **Metafield:** Product metafield for file URL * Downloads PDFs, manuals, spec sheets **Common Uses:** * Shipping & Returns * Size Guide * Care Instructions * Materials& Specs * Warranty Information * FAQs <Tip> Use multiple collapsible blocks to organize detailed information. Customers can expand only what they need. </Tip> </Accordion> </AccordionGroup> </Tab> </Tabs> *** ## Block Layout Strategy <CardGroup> <Card title="Recommended Order" icon="list-ol"> 1. **Title** - Product name (H1) 2. **Price** - Pricing with sale info 3. **Variant Picker** - Size, color selection 4. **Inventory Notice** - Stock urgency 5. **Buy Buttons** - Add to cart, dynamic checkout 6. **Description** - Product details (accordion/tab) 7. **Content Tabs** - Shipping, size guide, care 8. **Pickup Availability** - In-store options 9. **Collapsible Content** - Additional FAQs, specs 10. **@app** - Reviews at bottom </Card> <Card title="Mobile Optimization" icon="mobile"> * Keep critical blocks above fold (title, price, buy button) * Use accordions/tabs to reduce scroll * Enable actions bar for sticky purchase * Show tags on mobile for discovery * Test actual devices for layout </Card> </CardGroup> *** ## Media Gallery Best Practices <AccordionGroup> <Accordion title="Image Guidelines" icon="image"> **Product Image Specs:** * Minimum resolution: 2048x2048px * Aspect ratio: Consistent across all images (square or 3:4) * File format: JPG (photos) or PNG (graphics/transparency) * File size: Under 500KB each (compress) * Quality: High-resolution for zoom feature **Image Sequence:** 1. Main product image (front view) 2. Alternative angles (side, back, top) 3. Detail shots (texture, materials, features) 4. Lifestyle/use images (product in context) 5. Size/scale reference 6. Color variations (if applicable) <Tip> 6-12 images is ideal. Too few and customers lack confidence. Too many and page loads slowly. </Tip> </Accordion> <Accordion title="When to Use Thumbnails" icon="grip"> **Enable Thumbnails When:** * 4+ product images * Customers need quick navigation * Visual merchandising priority * Desktop browsing important **Skip Thumbnails When:** * 1-3 images only * Mobile-first audience * Minimal design aesthetic * Page speed critical </Accordion> <Accordion title="Video & 3D Media" icon="video"> **Shopify Supports:** * YouTube/Vimeo embeds * Direct video uploads * 3D models (GLB format) * 360-degree spin images **Best Practices:** * Place video after 2-3 images (not first) * Keep videos under 60 seconds * Mute by default * Provide play/pause controls * 3D models for complex products <Tip> Product videos can increase conversions 80%+. Show product in use, key features, and scale. </Tip> </Accordion> </AccordionGroup> *** ## Variant Selection Best Practices <AccordionGroup> <Accordion title="Variant Display Strategy" icon="palette"> **Buttons Layout:** * Best for: 2-8 options per type * Examples: S, M, L, XL or Red, Blue, Green * Visual, easy to scan * Shows all options at glance **Dropdowns Layout:** * Best for: 10+ options * Examples: 20 sizes, many colors * Saves space * Searchable (type to find) **Stacked Layout:** * Vertical button layout * Good for image swatches * Mobile-friendly * Visual emphasis <Tip> For color variants, use image swatches (color thumbnails) instead of text buttons for better UX. </Tip> </Accordion> <Accordion title="Variant Images" icon="images"> **Strategy:** * Assign variant-specific images in Shopify Admin * Image updates when variant selected * Show product in selected color * Reduces confusion **Setup:** 1. Upload images for each color variant 2. In Shopify Admin → Products → \[Product] → Media 3. Click image → Select variant association 4. Image auto-displays when variant chosen </Accordion> <Accordion title="Sold Out Handling" icon="ban"> **Best Practices:** **Visual Indicators:** * Strike-through sold out options * Gray out unavailable variants * "Sold Out" label overlay * Hide completely (not recommended - shows range) **Back in Stock Notifications:** * Enable "Back in Stock" in variant picker setting * Collect customer emails * Auto-notify when restocked * Capture lost sales <Tip> Keep sold-out variants visible (but disabled) to show full product range and collect restock emails. </Tip> </Accordion> </AccordionGroup> *** ## Use Cases <CardGroup> <Card title="Fashion Store" icon="shirt"> Buttons variant picker, 8 lifestyle images, size guide page, content tabs for materials/care </Card> <Card title="Electronics" icon="laptop"> Dropdowns for tech specs, video demo, detailed tabs (specs, warranty, support), SKU display </Card> <Card title="Subscription Product" icon="rotate"> Purchase options block, benefits tabs, inventory notice for urgency </Card> <Card title="Gift Card" icon="gift"> Amount variants as buttons, gift recipient form enabled, minimal description </Card> <Card title="Handmade Goods" icon="hand-sparkles"> Artisan images, collapsible content for story/process, inventory notice (limited quantity) </Card> <Card title="B2B Wholesale" icon="briefcase"> SKU prominent, quantity discounts in tabs, pickup availability for warehouse locations </Card> </CardGroup> *** ## Quick Summary * **Purpose:** Individual product detail page template * **Layout:** Flexible block-based (drag & drop blocks) * **Media:** Advanced gallery with thumbnails, aspect ratios, object fit * **Core Blocks:** Title, price, variants, description, buy buttons (limit 1 each) * **Content Blocks:** Tabs (4 max), collapsibles (unlimited), custom liquid * **Features:** Inventory notices, pickup availability, selling plans, dynamic checkout * **Customization:** 14 block types, media controls, alignment, color schemes * **Settings:** Media layout, thumbnails, object fit, actions bar, alignment <Note> Product content (title, price, images, description, variants) is managed in **Shopify Admin → Products**. This template controls **how** that content displays, not the content itself. </Note> # Accordions Source: https://docs.digifist.com/themes/sahara/sections/accordions Organize content into expandable topics for FAQs, policies, and product details The Accordions section organizes content into expandable and collapsible topics, ideal for FAQs, product details, policies, or any content that benefits from progressive disclosure. Accordions help reduce visual clutter and improve page scannability by allowing users to selectively reveal only the information they need. Add this section wherever you need organized, scannable content that doesn't overwhelm first-time visitors. ## What this section controls This section controls expandable content displays with the following capabilities: * Multiple collapsible topic blocks with headings and content * Section title with customizable heading size * Four width options (Narrower, Narrow, Page width, Fluid) * Individual control for expanded/collapsed state on page load * Color scheme selection * Vertical spacing and border options ## Section settings <AccordionGroup> <Accordion title="Section title"> Add a main heading displayed above the accordion list. Supports rich text formatting (bold, italic, links). Configure the heading size from XS to XL (default: XL). </Accordion> <Accordion title="Section width"> Choose the container width for the accordion section: * **Narrower** — Most compact width for focused content * **Narrow** — Compact width ideal for text-heavy content * **Page width** — Standard container width * **Fluid** — Wider, edge-to-edge within padding Default is **Narrow** for optimal reading experience. </Accordion> <Accordion title="Color scheme"> Select the color scheme for the entire accordion section (default: scheme-1). </Accordion> <Accordion title="Spacing"> Control the vertical spacing above and below the section with options ranging from None to XL (0, S, M, L, XL). Default is M for both top and bottom spacing. </Accordion> <Accordion title="Section border"> Add decorative borders to the section: * **None** (default) — No borders * **Top** — Border above the section * **Bottom** — Border below the section * **Both** — Borders above and below </Accordion> </AccordionGroup> ## Block: Topic Create individual accordion items with expandable content. <AccordionGroup> <Accordion title="Show content on page load"> Enable this checkbox to display the topic content expanded by default when the page loads. When disabled, the content remains hidden until users click the heading. Use this for the first or most important topic to demonstrate the accordion functionality. </Accordion> <Accordion title="Topic heading"> Add the clickable heading text that users will see. This text appears in the collapsed and expanded states. Keep headings concise and descriptive (5-8 words maximum) for quick scanning. </Accordion> <Accordion title="Heading size"> Control the size of the individual topic heading: * XS, S, M, L, XL * Default: S This is separate from the section title size, allowing visual hierarchy within the accordion list. </Accordion> <Accordion title="Content"> Add the main text content displayed when the topic is expanded. Supports rich text formatting for bold, italic, lists, and links. </Accordion> <Accordion title="Page"> Optionally select a Shopify page to output its content as the accordion body. This overrides the Content field when selected. <Warning> When a page is selected, it replaces any text entered in the Content field. </Warning> This is particularly useful for managing large or frequently updated information from a centralized page, such as detailed policies or legal content. </Accordion> </AccordionGroup> ## Default configuration The section includes a preset with three example topics: * **Shipping details** (expanded by default) * **Delivery details** * **Refund details** This provides a starting point for common e-commerce FAQ content. ## Best practices <CardGroup> <Card title="Concise headings" icon="heading"> Keep topic headings to 5-8 words maximum for quick scanning and easy comprehension. </Card> <Card title="Default state" icon="eye"> Avoid opening too many topics by default to maintain a clean initial page state. Consider expanding only the first item to demonstrate functionality. </Card> <Card title="Page content" icon="file"> Use the Page field for long or frequently updated information to simplify content management from a single source. </Card> <Card title="Logical grouping" icon="layer-group"> Group related topics together and order them by importance or frequency of access. </Card> <Card title="Mobile testing" icon="mobile"> Test accordion interactions on mobile devices to ensure smooth expand/collapse animations and touch targets. </Card> <Card title="Consistent formatting" icon="text"> Use consistent text formatting within accordion content for a professional appearance. </Card> </CardGroup> ## Use cases * **Frequently asked questions (FAQ)** — Answer common customer questions in an organized, scannable format * **Shipping and return policies** — Display policy details without overwhelming the page * **Product specifications** — Show detailed technical information progressively * **Size guides and charts** — Provide measurement information that users can access when needed * **Store information** — Share operational details like hours, locations, and contact methods * **Legal or informational content** — Present terms of service, privacy policies, or guidelines * **Product care instructions** — Organize maintenance and care information by topic * **Help and support sections** — Create self-service support resources # Age verification popup Source: https://docs.digifist.com/themes/sahara/sections/age-verification-popup Modal popup requiring age confirmation before site access The Age verification popup displays a modal overlay requiring visitors to confirm their age before accessing your site. Commonly used for stores selling age-restricted products like alcohol, tobacco, CBD, or adult content, this popup ensures compliance with age restrictions while maintaining a professional user experience. Visitors verify their age once per browser session, preventing repeated interruptions. ## What this section controls This section controls age verification displays with the following capabilities: * Modal popup overlay requiring age confirmation * Session-based verification (verify once per browser session) * Customizable heading and descriptive text * Confirm button with three style options (Filled, Outlined, Text) * Decline button with configurable redirect URL * Optional blurred backdrop for visual focus * Heading size controls (XS to XL) * Rich text support for content customization ## Section settings <AccordionGroup> <Accordion title="Content"> **Heading** — Main verification prompt displayed to visitors (default: "Verify your age"). Supports rich text formatting. **Heading size** — Control the heading size from XS to XL (default: XL) **Text** — Descriptive content explaining your age requirements. Default: "You must be 18 years of age or older to enter this site. Please verify your age." Supports rich text formatting for multiple paragraphs or emphasized text. </Accordion> <Accordion title="Blurred backdrop"> Enable **Show blurred backdrop** to blur the page content behind the popup, creating visual focus on the verification prompt. Default: Disabled <Note> You may need to refresh the Theme Customizer preview to see backdrop blur changes take effect. </Note> </Accordion> <Accordion title="Confirm button"> Configure the button users click to confirm they meet age requirements: **Button confirm** — Button label text (default: "Yes") **Button confirm style** — Visual appearance: * **Filled** (default) — Solid background button * **Outlined** — Border-only button * **Text** — Text-style link button When clicked, the popup closes and stores the verification in the browser session. </Accordion> <Accordion title="Decline button"> Configure the button for visitors who don't meet age requirements: **Button decline** — Button label text (default: "No") **Button decline URL** — Destination when declined (default: /). Typically set to your homepage, a "must be 18+" page, or an external site like Google. **Button decline style** — Visual appearance: * Filled * **Outlined** (default) * Text <Tip> Use contrasting styles between confirm and decline buttons to guide user choice. The defaults (filled for confirm, outlined for decline) create clear visual hierarchy. </Tip> </Accordion> <Accordion title="Customizer visibility"> Enable **Show popup on customizer** to display the age verification popup while editing in the Theme Customizer. This allows you to preview and adjust the popup design without refreshing the page. Default: Disabled When disabled, the popup won't appear in the customizer but will still show to actual site visitors. </Accordion> <Accordion title="Color scheme"> Select the color scheme for the popup overlay, including background, text, and button colors (default: scheme-1). </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Clear messaging" icon="message"> State age requirements clearly and concisely. Use language appropriate for your jurisdiction (e.g., "21+" for US alcohol, "18+" for most other products). </Card> <Card title="Button hierarchy" icon="arrow-pointer"> Use filled buttons for the confirm action and outlined or text buttons for decline to create clear visual hierarchy. </Card> <Card title="Backdrop blur" icon="eye"> Enable backdrop blur to improve focus on the verification prompt and prevent users from interacting with page content before verifying. </Card> <Card title="Decline destination" icon="link"> Set the decline URL to an appropriate page—either your homepage, an informational page, or an external site. </Card> <Card title="Legal compliance" icon="scale-balanced"> Ensure your age verification meets legal requirements for your jurisdiction and product type. Consult legal counsel if needed. </Card> <Card title="Mobile testing" icon="mobile"> Test the popup display and button interactions on mobile devices to ensure usability on smaller screens. </Card> </CardGroup> ## Legal considerations <Warning> **Important:** An age verification popup provides a basic age gate but may not satisfy all legal requirements in your jurisdiction. This is a self-attestation system—visitors simply click to confirm their age without providing proof. For regulated products like alcohol, tobacco, or cannabis, consult with legal counsel to determine if additional age verification measures are required, such as: * ID verification at checkout * Third-party age verification services * Age verification at delivery * Geolocation restrictions </Warning> ## Common use cases * **Alcohol sales** — Verify 21+ age (US) or 18+ (many other regions) * **Tobacco and vaping** — Age gate for tobacco, e-cigarette, or nicotine product sales * **CBD and cannabis** — Age verification for CBD, hemp, or cannabis products where legal * **Adult content** — 18+ verification for mature content or products * **Gaming and gambling** — Age verification for betting, lottery, or gambling sites * **Mature video games** — Age gate for M-rated or AO-rated game sales * **Dietary supplements** — Some supplement categories require age verification ## Technical notes The age verification popup uses browser session storage to remember verification status. This means: * Visitors verify once per browser session * Closing the browser clears the verification * Opening a new private/incognito window requires re-verification * Verification is not shared across devices or browsers The popup appears automatically on page load to unverified visitors. Once confirmed, the session storage flag prevents the popup from showing again until the session ends. ## Related sections <Card title="Custom liquid" icon="code" href="/themes/sahara/sections/custom-liquid"> Add custom age verification logic with additional requirements </Card> # Apps Source: https://docs.digifist.com/themes/sahara/sections/apps App embeds section for integrating third-party Shopify apps The **Apps** section allows you to embed approved Shopify apps directly into your storefront. Apps can add functionality like reviews, wishlists, size guides, live chat, and more without requiring custom code. ## What this section controls This section controls app embeds with the following capabilities: * Integration of third-party Shopify app embeds * Support for @app blocks from installed apps * Multiple app blocks in single section * App-specific settings configured within each app block * No section-level settings (all configuration in app blocks) * Automatic app detection from installed Shopify apps * Ordered rendering of multiple app embeds <Note> Apps must be **app embed-enabled** to appear in this section. Not all Shopify apps support app embeds. Check the app's documentation or Shopify App Store listing. </Note> ## How It Works ### App Blocks The Apps section uses **@app blocks** which are special blocks provided by installed Shopify apps. When you install an app that supports app embeds: 1. App automatically appears in Theme Customizer → App embeds (or within sections that support @app blocks) 2. Enable the app in Theme Customizer 3. Configure app settings (if available) 4. App content renders on your storefront ### No Section Settings This section has **no configurable settings** at the section level. All configuration happens within individual app blocks. Each app provides its own settings and customization options. ### Multiple Apps Add multiple app blocks to embed several apps in one section. Apps render in order from top to bottom as arranged in Theme Customizer. ## Adding Apps <Steps> <Step title="Install app"> Install an app embed-supported app from Shopify App Store </Step> <Step title="Open Theme Customizer"> Go to **Online Store → Themes → Customize** </Step> <Step title="Add Apps section"> Click **Add section** and select **Apps** (or navigate to existing Apps section) </Step> <Step title="Add app blocks"> Click **Add block** within the Apps section → Select installed app from list </Step> <Step title="Configure app"> Configure app-specific settings provided by the app developer </Step> <Step title="Save"> Click **Save** to publish changes </Step> </Steps> ## Use Cases <CardGroup> <Card title="Product Reviews" icon="star"> Embed review apps (Judge.me, Yotpo, Loox) to display customer reviews on product pages or homepage. </Card> <Card title="Wishlist Functionality" icon="heart"> Add wishlist apps to let customers save products for later without purchasing immediately. </Card> <Card title="Live Chat Support" icon="messages"> Integrate live chat apps (Tidio, Gorgias) for real-time customer support across your store. </Card> <Card title="Size Guides" icon="ruler"> Embed sizing apps to help customers choose correct sizes, reducing returns and improving satisfaction. </Card> <Card title="Social Proof" icon="users"> Display recent purchases, visitor counts, or social media feeds to build trust and urgency. </Card> <Card title="Email Popups" icon="envelope"> Add email capture popups (Privy, Justuno) to grow your subscriber list with promotions and announcements. </Card> </CardGroup> ## Best practices <CardGroup> <Card title="Limit Number of Apps" icon="list-check"> Too many apps slow page load time. Use only essential apps to maintain fast performance. </Card> <Card title="Test Performance" icon="gauge-high"> After adding apps, test page speed with Google PageSpeed Insights. Remove apps that significantly slow your site. </Card> <Card title="Configure App Settings" icon="sliders"> Each app has its own settings. Configure appearance, behavior, and triggers within app settings panel. </Card> <Card title="Check Mobile Display" icon="mobile"> Test how apps display on mobile devices. Some apps may need mobile-specific configuration. </Card> <Card title="Review App Permissions" icon="shield-check"> Review what data each app accesses. Only install trusted apps from reputable developers. </Card> <Card title="Keep Apps Updated" icon="arrows-rotate"> Update apps regularly in Shopify Admin → Apps to get latest features, fixes, and performance improvements. </Card> </CardGroup> ## Common App Types ### Reviews & Ratings * **Judge.me** - Customer reviews and photo reviews * **Yotpo** - Reviews, ratings, and user-generated content * **Loox** - Photo reviews and referral programs * **Stamped.io** - Product reviews and loyalty rewards ### Wishlist & Favorites * **Wishlist Plus** - Save products for later * **Wishlist King** - Advanced wishlist with sharing * **Swym Wishlist** - Multi-list wishlists ### Live Chat & Support * **Tidio** - Live chat and chatbots * **Gorgias** - Helpdesk and live chat * **Re:amaze** - Customer support platform * **Zendesk Chat** - Enterprise live chat ### Email & Popups * **Privy** - Email popups and exit-intent * **Justuno** - Popup builder and promotions * **OptiMonk** - Exit-intent popups * **Klaviyo** - Email marketing integration ### Social Proof * **Fomo** - Recent purchase notifications * **Proof Factor** - Social proof notifications * **Sales Pop** - Live visitor notifications ## Troubleshooting <AccordionGroup> <Accordion title="App doesn't appear in Theme Customizer"> **Solution:** Not all apps support app embeds. Check: * App documentation for app embed support * Shopify Admin → Apps → Check if app is enabled * App may need to be configured in its own settings first * Contact app developer if app should support embeds but doesn't appear </Accordion> <Accordion title="App not rendering on storefront"> **Possible causes:** * App disabled in Theme Customizer (check Theme Customizer → App embeds) * App settings require configuration before displaying * App has display rules (e.g., only show on product pages) * App may have been uninstalled but block remains (remove block) **Solution:** Verify app is enabled in both App embeds section and within Apps section blocks. </Accordion> <Accordion title="Page loading slowly after adding apps"> **Solution:** Apps add JavaScript and external requests which can slow page load: * Remove non-essential apps * Check app settings for performance options (lazy loading, async loading) * Contact app developer about performance optimization * Consider alternative lightweight apps * Use Google PageSpeed Insights to identify slow apps </Accordion> <Accordion title="App conflicts with theme or other apps"> **Solution:** App conflicts can cause: * Visual layout issues * JavaScript errors (check browser console) * Features not working **Steps:** * Disable apps one by one to identify conflict * Contact conflicting app developers * Check app documentation for known compatibility issues * May need to choose one app or the other </Accordion> <Accordion title="Can't remove app block"> **Solution:** * Click on app block in Theme Customizer * Click trash/delete icon or "Remove block" button * If app uninstalled but block remains, manually remove block * Save changes after removing </Accordion> </AccordionGroup> ## Related Sections * [Theme Settings](/themes/sahara/common-settings) - Configure global theme styles that affect app appearance ## Key Takeaways * **No section settings** - Apps section has no configuration; all settings within app blocks * **App embed support required** - Only apps with app embed functionality appear in Theme Customizer * **Performance impact** - Each app adds load time; use apps sparingly * **Individual app settings** - Configure each app within its own settings panel * **Multiple apps supported** - Add multiple app blocks in one Apps section * **Mobile testing essential** - Always test app display and functionality on mobile devices Apps extend your store's functionality without custom code, but choose wisely to maintain fast page performance and good user experience. # Blog articles Source: https://docs.digifist.com/themes/sahara/sections/blog-articles Showcase selected blog posts with customizable layouts, flexible metadata display, and manual article selection options. The Blog articles section displays selected blog posts from a Shopify blog. It supports two layout styles, customizable metadata (author, date, excerpt), and both automatic blog-based display and manual article selection through blocks. Blog articles help drive content engagement by featuring editorial content, company updates, tutorials, or educational resources directly within your storefront pages. <img alt="Blog articles section overview" /> ## What this section controls This section controls blog article displays with the following capabilities: * Automatic article display from selected Shopify blog * Manual article selection via Article blocks * Two distinct layout options * Customizable metadata visibility (excerpt, date, author, read more link) * Flexible content alignment * Section-level button linking to blog * Responsive grid design ## How Blog articles works The Blog articles section uses a flexible content system: **Automatic mode:** * Select a Shopify blog as the source * Displays most recent articles automatically * Updates when new blog posts are published **Manual mode:** * Add Article blocks to hand-pick specific posts * Override automatic ordering * Curate featured content manually You can combine both approaches: select a blog for defaults, then add Article blocks to prioritize specific posts at the beginning. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Blog articles section"> Add the section to your homepage or page template. </Step> <Step title="Select blog source"> Choose which Shopify blog to pull articles from using the Blog selector. </Step> <Step title="Add manual articles (optional)"> Click "Add block" and select Article to manually choose featured posts. </Step> <Step title="Configure metadata"> Toggle excerpt, date, author, and read more link visibility. </Step> </Steps> <img alt="Blog articles section in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Content"> ### Heading Main title text for the section. * Inline rich text supported (bold, italic, links) * **Default:** "Blog" ### Heading size Controls the size of section heading. **Options:** XS, S, M, L, XL\ **Default:** XL <img alt="Heading configuration" /> ### Blog Select which Shopify blog to display articles from. * Shopify blog selector * Provides automatic article source * Manual Article blocks override automatic ordering <Note> If you add manual Article blocks, they appear first, followed by automatic articles from the selected blog. </Note> ### Button text Label for section-level button linking to the blog. * Plain text * **Default:** "Visit Blog" * Leave empty to hide button ### Button style Visual style of the section button. <AccordionGroup> <Accordion title="Filled" icon="square"> Solid background with contrasting text (default). **Best for:** Primary CTAs, strong visibility </Accordion> <Accordion title="Outlined" icon="border-outer"> Border-only style with transparent background. **Best for:** Secondary actions, subtle CTAs </Accordion> <Accordion title="Default" icon="link"> Standard text link styling. **Best for:** Minimal designs, non-intrusive links </Accordion> </AccordionGroup> <img alt="Button configuration" /> </Tab> <Tab title="Layout"> ### Layout Controls the visual style and arrangement of article cards. <AccordionGroup> <Accordion title="Layout 1" icon="grid"> Standard article card layout with consistent styling (default). **Best for:** * Clean, minimal designs * Focus on article imagery * Standard blog displays </Accordion> <Accordion title="Layout 2" icon="grip"> Alternative layout with different card treatment and spacing. **Best for:** * Visual variety * Differentiation from other sections * Enhanced visual hierarchy </Accordion> </AccordionGroup> <img alt="Layout style options" /> ### Content alignment Controls horizontal alignment of text within article cards. **Options:** Left, Center (default), Right <Tip> Center alignment works best for image-focused layouts, while left alignment suits text-heavy editorial designs. </Tip> </Tab> <Tab title="Metadata"> ### Show excerpt Displays article excerpt text below the title. **Default:** True <AccordionGroup> <Accordion title="Excerpt behavior" icon="align-left"> **Enabled (True):** * Shows article excerpt (if available) * Provides content preview * Helps users decide which articles to read **Disabled (False):** * Only shows article title * Cleaner, more minimal cards * Image and title focus </Accordion> </AccordionGroup> <Tip> Keep excerpts enabled for editorial or storytelling layouts to provide context. Disable for visual-first designs. </Tip> ### Show date Displays article publication date. **Default:** False <Note> Dates help users understand content freshness, especially for time-sensitive topics like news or seasonal content. </Note> ### Show author Displays article author name. **Default:** False <Note> Author display is useful for multi-author blogs or when building authority around specific writers. </Note> ### Show read more Displays "Read more" link on article cards. **Default:** False <AccordionGroup> <Accordion title="Read more link usage" icon="arrow-right"> **Enabled (True):** * Adds explicit "Read more" or "Continue reading" link * Provides clear call-to-action * Improves accessibility with text links **Disabled (False):** * Entire card is clickable * Cleaner design * Less visual clutter </Accordion> </AccordionGroup> <img alt="Metadata visibility options" /> </Tab> <Tab title="Styling"> ### Section width Controls horizontal width of the section. **Options:** * **Page** - Standard container width (default) * **Fluid** - Wider layout ### Color scheme Select color scheme for section background and text. ### Spacing Control vertical spacing around the section: * **Spacing top** - Margin above (None, S, M, L, XL) * **Spacing bottom** - Margin below (None, S, M, L, XL) Both default to M. ### Section border Add decorative borders: None (default), Top, Bottom, Both <img alt="Styling options" /> </Tab> </Tabs> ## Block settings Article blocks allow manual selection of specific blog posts, overriding automatic blog ordering. <Tabs> <Tab title="Article block"> ### Article Select a specific Shopify article to display. * Shopify article selector * Pick from any blog in your store * Manual articles appear first, before automatic blog articles <AccordionGroup> <Accordion title="When to use Article blocks" icon="hand-pointer"> **Manual curation scenarios:** * Highlighting featured or important posts * Showcasing specific campaigns or announcements * Creating curated collections of articles * Overriding chronological order **Keep automatic blog:** * Fresh content sites * High-frequency publishing * Dynamic, time-based content * Minimal manual maintenance </Accordion> </AccordionGroup> <Tip> Add 2-4 Article blocks to feature important posts at the beginning, then let the blog selector fill remaining space with recent articles automatically. </Tip> <img alt="Manual article selection" /> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Curated features" icon="star"> Use manual Article blocks to highlight key content or featured posts at the beginning of the section. </Card> <Card title="Context with excerpts" icon="align-justify"> Keep excerpts enabled for editorial layouts to provide content previews and improve engagement. </Card> <Card title="Minimal metadata" icon="minus"> Hide author or date for minimal designs focused on visual impact and clean aesthetics. </Card> <Card title="Consistent imagery" icon="image"> Ensure article featured images use consistent aspect ratios for visual harmony across all cards. </Card> <Card title="Limit metadata" icon="eye-slash"> Show only essential metadata (1-2 items) to reduce visual clutter and improve readability. </Card> <Card title="Blog button" icon="arrow-up-right-from-square"> Use section button to drive traffic to your main blog page for deeper content exploration. </Card> <Card title="Layout consistency" icon="grip"> Choose Layout 1 for standard blog displays, Layout 2 when differentiating from other sections. </Card> <Card title="Content alignment" icon="align-center"> Use center alignment for image-focused cards, left alignment for text-heavy editorial content. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Homepage blog preview" icon="house"> Select main blog, show excerpt and date. Hide author and read more. Center alignment. Layout 1. Button: "Read our blog" (filled style). Show 3-4 most recent articles automatically. </Accordion> <Accordion title="Featured content showcase" icon="bullseye"> Add 3 manual Article blocks for curated posts. Show excerpt only (hide date, author, read more). Center alignment. Layout 2 for visual distinction. Button: "View all articles" (outlined style). </Accordion> <Accordion title="Editorial blog section" icon="newspaper"> Select blog, show all metadata (excerpt, date, author). Enable read more link. Left alignment. Layout 1. Button: "Explore more stories" (default style). Emphasize written content. </Accordion> <Accordion title="Minimal news updates" icon="bolt"> No manual articles, select main blog. Hide all metadata except title. Center alignment. Layout 2 with tight spacing. Button: "All news" (filled style). Focus on article images. </Accordion> <Accordion title="Multi-author blog highlights" icon="users"> Add 2-3 Article blocks, select blog for more. Show excerpt and author (hide date and read more). Center alignment. Layout 1. Button: "Meet our authors" linking to about page. </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Carousel" icon="images" href="/themes/sahara/sections/carousel"> Sliding card displays for varied content </Card> <Card title="Featured collections" icon="layer-group" href="/themes/sahara/sections/featured-collections"> Collection showcase with custom styling </Card> </CardGroup> # Callout banner Source: https://docs.digifist.com/themes/sahara/sections/callout-banner Highlight promotional campaigns and time-sensitive offers with countdown timers The Callout banner section creates attention-grabbing banners for promotional campaigns, product launches, or time-sensitive announcements. It combines compelling visuals with countdown timers to create urgency and drive conversions. Use this section when you need to spotlight a single offer or campaign with maximum visual impact. ## What this section controls This section controls promotional banners with the following capabilities: * Optional background images for desktop and mobile * Countdown timer with customizable end date and timezone * Dual action options (button or newsletter form) * Section heading and text with customizable sizes * Image layout toggle (with/without images) * Button with three style options (Filled, Outlined, Text) * Color scheme, width, and spacing controls ## Section settings <AccordionGroup> <Accordion title="Layout"> Choose how the banner displays images: * **Image** — Display the banner with a background image or featured image * **Image none** (default) — Display banner without images, text-only layout </Accordion> <Accordion title="Banner images"> **Image** — Upload the main banner image displayed on desktop devices **Mobile image** — Upload a separate image optimized for mobile devices. When set, this image replaces the main image on mobile screens for better visual presentation. </Accordion> <Accordion title="Content"> **Heading** — Add the main banner message with rich text support for bold, italic, and links. Default: "Spring sale" **Heading size** — Control the heading size with options from XS to XL (default: XL) **Text** — Add supporting descriptive text below the heading with rich text formatting. Default: "50% Off Everything for a limited time only" </Accordion> <Accordion title="Action preference"> Choose the primary interaction type for the banner: **Button** (default) — Display a call-to-action button that links to a destination **Newsletter form** — Display an email signup form for collecting subscriber emails This setting determines which action element appears in the banner. </Accordion> <Accordion title="Button settings"> Configure the call-to-action button when "Button" is selected as the action preference: **Button text** — The clickable button label (default: "Shop sale") **Button URL** — Destination link for the button (default: /collections) **Button style** — Choose the visual appearance: * **Filled** (default) — Solid background button * **Outlined** — Border-only button * **Link** — Text-style link button </Accordion> <Accordion title="Newsletter settings"> Configure the email signup form when "Newsletter form" is selected as the action preference: **Newsletter button label** — Text for the submit button (default: "Submit") **Success message** — Message displayed after successful email submission (default: "Thanks for signing up!") </Accordion> </AccordionGroup> ## Countdown timer Create urgency with an integrated countdown timer for limited-time campaigns. <AccordionGroup> <Accordion title="Timer end date"> Set the exact date and time when the countdown ends: **Year** — Enter the target year (default: 2026) **Month** — Select from January to December (default: January) **Day** — Choose day 1-31 (default: 1) **Hour** — Set hour 0-23 in 24-hour format (default: 0) **Minute** — Set minute 0-59 (default: 0) </Accordion> <Accordion title="Timer extend"> Automatically extend the timer by a specified number of days after it ends. Range: 0-30 days (default: 0). This is useful for evergreen campaigns that repeat on a rolling cycle. When set to a value greater than 0, the timer automatically resets to that many days in the future when it reaches zero. </Accordion> <Accordion title="Timer end message"> Message displayed to users when the countdown reaches zero (default: "Sale has ended"). Supports rich text formatting. </Accordion> <Accordion title="Show borders"> Enable decorative borders around the countdown timer segments for visual separation (disabled by default). </Accordion> </AccordionGroup> ## Timer display settings Control which time units appear in the countdown timer. <AccordionGroup> <Accordion title="Time unit visibility"> Toggle the display of individual time components: **Show timer days** — Display the days remaining (enabled by default) **Show timer hours** — Display the hours remaining (enabled by default) **Show timer minutes** — Display the minutes remaining (enabled by default) **Show timer seconds** — Display the seconds remaining (enabled by default) Disable units for shorter campaigns or cleaner presentations. For example, hide days for a flash sale lasting only hours. </Accordion> </AccordionGroup> ## Section styling <AccordionGroup> <Accordion title="Section width"> Choose the container width: * **Page width** (default) — Standard container width * **Fluid** — Wider, edge-to-edge within padding </Accordion> <Accordion title="Color scheme"> Select the color scheme for the banner section (default: scheme-1). The color scheme controls background, text, and button colors. </Accordion> <Accordion title="Spacing"> Control vertical spacing above and below the section with options from None to XL (0, S, M, L, XL). Default is M for both top and bottom. </Accordion> <Accordion title="Section border"> Add decorative borders: * **None** (default) — No borders * **Top** — Border above the section * **Bottom** — Border below the section * **Both** — Borders above and below </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Clear messaging" icon="message"> Keep the heading concise and action-oriented. State the value proposition clearly within 5-8 words. </Card> <Card title="Appropriate timing" icon="clock"> Set realistic countdown timers that align with actual campaign end dates. Avoid extending timers indefinitely as it erodes trust. </Card> <Card title="Mobile optimization" icon="mobile"> Use the mobile image setting to provide appropriately-sized images that load quickly and look great on small screens. </Card> <Card title="Visual hierarchy" icon="layer-group"> Use larger heading sizes and contrasting colors to ensure the banner stands out without overwhelming other content. </Card> <Card title="Action clarity" icon="hand-pointer"> Choose one clear call-to-action. Use the button for direct linking or newsletter form for list building, not both. </Card> <Card title="Timer relevance" icon="hourglass"> Only show timer units relevant to your campaign duration. Hide days for hourly flash sales, hide seconds for week-long campaigns. </Card> </CardGroup> ## Use cases * **Flash sales** — Promote limited-time discounts with countdown timers to create urgency * **Product launches** — Build anticipation for upcoming product releases with countdown to launch date * **Seasonal campaigns** — Highlight holiday sales, seasonal collections, or special events * **Email list building** — Use newsletter form to grow subscriber lists during promotional periods * **Collection promotions** — Drive traffic to specific collections with attractive visuals and clear CTAs * **Limited inventory** — Communicate scarcity and urgency for high-demand products * **Event announcements** — Promote webinars, sales events, or in-store happenings * **Free shipping offers** — Highlight shipping promotions with clear end dates # Carousel Source: https://docs.digifist.com/themes/sahara/sections/carousel Display multiple content cards in a sliding carousel with customizable media, flexible layouts, and desktop/mobile-specific positioning. The Carousel section displays multiple content cards as interactive slides. Each card can contain media (images or videos), headings, text, and call-to-action buttons with independent desktop and mobile configurations for optimal display across all devices. <img alt="Carousel section overview" /> ## What this section controls This section controls carousel displays with the following capabilities: * Unlimited customizable card blocks * Two distinct layout modes (plain and image-only) * Configurable slides per view (1-6 cards) * Independent desktop and mobile media * Flexible content positioning and alignment * Per-card color schemes and aspect ratios * Automatic or manual slide navigation ## How the Carousel section works The Carousel uses a block-based system where each "Card" block becomes a carousel slide. You can add unlimited cards, each with its own media, content, and styling. The section automatically handles responsive behavior, showing fewer slides on mobile devices while maintaining optimal viewing. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Carousel section"> Add the section to your page or template. </Step> <Step title="Add card blocks"> Click "Add block" and select "Card" to create carousel slides. </Step> <Step title="Configure each card"> Add media, heading, text, and optional button for each card. </Step> <Step title="Adjust section settings"> Configure slideshow behavior, slides per view, and spacing. </Step> </Steps> <img alt="Carousel section in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Layout"> ### Section layout Controls the overall visual style of carousel cards. <AccordionGroup> <Accordion title="Plain" icon="square"> Standard card layout with visible card containers, borders, and padding. **Best for:** * Text-heavy content * Product highlights with descriptions * Multi-element cards (heading + text + button) Cards have clear separation with background and borders. </Accordion> <Accordion title="Only image" icon="image"> Streamlined layout emphasizing media without visible card containers. **Best for:** * Image galleries * Product showcases * Visual-first designs with minimal text Cards appear seamless with focus on imagery. </Accordion> </AccordionGroup> <img alt="Section layout options" /> ### Show card border Adds visible borders to individual cards. **Default:** False (hidden) <Note> Only applies when section layout is set to "Plain." </Note> </Tab> <Tab title="Slideshow"> ### Show navigation arrows Displays previous/next navigation arrows for manual slide control. **Default:** True <Tip> Keep arrows enabled for better user control, especially when autoplay is off. </Tip> ### Slideshow autoplay interval Controls automatic slide advancement timing. **Range:** 0 – 10 seconds (in 1-second increments)\ **Default:** 0 (autoplay disabled) <AccordionGroup> <Accordion title="Autoplay guidelines" icon="play"> **0 seconds:** * Manual navigation only * Best for text-heavy content * Recommended for accessibility **3-5 seconds:** * Quick browsing * Image-focused carousels * Marketing highlights **7-10 seconds:** * Detailed content * Longer text blocks * Video-inclusive slides </Accordion> </AccordionGroup> <Warning> Use autoplay sparingly. It can reduce accessibility and user control. </Warning> <img alt="Slideshow configuration" /> </Tab> <Tab title="Display"> ### Slides per view Number of cards visible simultaneously on desktop. **Range:** 1 – 6 slides\ **Default:** 4 <AccordionGroup> <Accordion title="Slides per view recommendations" icon="grip"> **1 slide:** * Full-width hero carousels * Large featured content * Video-heavy slides **2-3 slides:** * Balanced visibility * Product categories * Featured collections **4-6 slides:** * Compact cards (recommended: 4) * Icon features * Small product highlights </Accordion> </AccordionGroup> <Tip> Mobile automatically adjusts to show fewer slides regardless of this setting. </Tip> ### Spacing between blocks (Desktop) Controls horizontal spacing between cards on desktop. **Options:** No spacing, S, M, L, XL\ **Default:** L ### Spacing between blocks (Mobile) Controls horizontal spacing between cards on mobile independently. **Options:** No spacing, S, M, L, XL <Note> Separate mobile spacing allows tighter layouts on small screens for better card visibility. </Note> <img alt="Display configuration" /> </Tab> <Tab title="Content"> ### Heading Main title text for the section. * Inline rich text supported (bold, italic, links) * **Default:** "Carousel" ### Heading size Controls the size of section heading. **Options:** XS, S, M, L, XL\ **Default:** XL ### Subheading Optional descriptive text displayed above the heading. * Inline rich text supported * Leave empty to hide <img alt="Content configuration" /> </Tab> <Tab title="Styling"> ### Color scheme Select the color scheme for section background and text. ### Section width Controls horizontal width of the section. **Options:** * **Page** - Standard container width (default) * **Fluid** - Wider, more spacious layout * **Full** - Edge-to-edge full width ### Spacing Control vertical spacing around the section: * **Spacing top** - Margin above (None, S, M, L, XL) * **Spacing bottom** - Margin below (None, S, M, L, XL) Both default to M. ### Section border Add decorative borders: None (default), Top, Bottom, Both <img alt="Styling options" /> </Tab> </Tabs> ## Block settings Each Card block becomes a carousel slide with independent media, content, and styling. <Tabs> <Tab title="Content"> ### Heading Title text for the card. * Inline rich text supported * Leave empty to hide heading ### Heading size Controls the size of card heading. **Options:** XS, S, M, L, XL\ **Default:** XL ### Text Body content displayed below the heading. * Rich text editor with formatting support * **Supports:** * Bold, italic, underline * Lists (bulleted, numbered) * Links * Leave empty to hide <Tip> Keep text concise (20-30 words) for carousel readability. </Tip> <img alt="Card content settings" /> </Tab> <Tab title="Button"> ### Button label Text displayed on the call-to-action button. * Leave empty to hide button ### Button link Destination URL when button is clicked. ### Button style Visual style of the button. <AccordionGroup> <Accordion title="Filled" icon="square"> Solid background with contrasting text. **Best for:** Primary actions, strong CTAs </Accordion> <Accordion title="Outlined" icon="border-outer"> Border-only style with transparent background. **Best for:** Secondary actions, subtle CTAs </Accordion> <Accordion title="Text link" icon="link"> Minimal styling as underlined text (default). **Best for:** Tertiary actions, "Learn more" links </Accordion> </AccordionGroup> <img alt="Button style options" /> </Tab> <Tab title="Media"> ### Aspect ratio Controls the height-to-width ratio of card media. **Options:** * **Auto** - Uses natural image dimensions (default) * **Square:** 1:1 * **Landscape:** 4:3, 3:2, 5:4, 16:9, 2:1, 4:1, 8:1 * **Portrait:** 3:4, 2:3, 4:5, 9:16, 1:2 <Note> All cards in a carousel should use the same aspect ratio for visual consistency. </Note> ### Media position Controls how media relates to text content. <AccordionGroup> <Accordion title="Top" icon="arrow-up"> Media displays above text content. **Best for:** Standard card layouts </Accordion> <Accordion title="Bottom" icon="arrow-down"> Media displays below text content (default). **Best for:** Text-priority designs </Accordion> <Accordion title="Background" icon="layer-group"> Media serves as background with text overlay. **Best for:** Image-heavy designs, hero-style cards <Warning> Ensure sufficient contrast between media and text when using background position. </Warning> </Accordion> </AccordionGroup> <img alt="Media position options" /> </Tab> <Tab title="Desktop"> ### Content position Controls vertical alignment of text content on desktop. **Options:** Top, Center (default), Bottom ### Content alignment Controls horizontal alignment of text content on desktop. **Options:** Start, Center (default), End ### Image (Desktop) Upload image for desktop display. **Recommended:** 800-1200px width depending on slides per view ### Video (Desktop) Upload Shopify-hosted video file. <Tip> Shopify-hosted videos offer better performance than external embeds. </Tip> ### External video (Desktop) Embed YouTube or Vimeo video. Takes priority if set. ### Show video controls (Desktop) Displays play/pause and volume controls on desktop videos. **Default:** False <img alt="Desktop configuration" /> </Tab> <Tab title="Mobile"> ### Content position (Mobile) Controls vertical alignment of text content on mobile independently. **Options:** Top, Center (default), Bottom ### Content alignment (Mobile) Controls horizontal alignment of text content on mobile independently. **Options:** Start, Center (default), End ### Image (Mobile) Upload mobile-optimized image. **Recommended:** 600-800px width, portrait orientation <Note> Mobile media overrides desktop media on small screens when provided. </Note> ### Video (Mobile) Shopify-hosted video for mobile devices. ### External video (Mobile) YouTube or Vimeo video for mobile. <Warning> Videos on mobile can impact performance and data usage. Use sparingly. </Warning> ### Show video controls (Mobile) Displays play/pause and volume controls on mobile videos. **Default:** False <img alt="Mobile configuration" /> </Tab> <Tab title="Styling"> ### Color scheme Select color scheme for individual card background and text. <Note> Each card can have its own color scheme for visual variety. </Note> ### Spacing inner Controls internal padding within the card. **Options:** No spacing, S, M (default), L, XL <Tip> Reduce inner spacing for compact layouts or increase for breathing room around content. </Tip> <img alt="Card styling options" /> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Consistent aspect ratios" icon="crop"> Use the same aspect ratio across all cards for uniform height and professional appearance. </Card> <Card title="Optimal slides per view" icon="table-columns"> Use 3-4 slides for desktop. More than 5 can make cards too small to be effective. </Card> <Card title="Limit autoplay" icon="pause"> Avoid autoplay for text-heavy content. If used, set 5+ seconds for readability. </Card> <Card title="Mobile-specific media" icon="mobile-screen"> Provide portrait-oriented images for mobile to maximize card visibility on vertical screens. </Card> <Card title="Content brevity" icon="text-size"> Keep heading to 5-7 words and text to 20-30 words maximum per card. </Card> <Card title="Layout consistency" icon="grid"> Use "Only image" layout for visual galleries, "Plain" layout for content-rich cards. </Card> <Card title="Navigation arrows" icon="arrows-left-right"> Keep arrows enabled when autoplay is off to ensure users can browse slides. </Card> <Card title="Color variety" icon="palette"> Use different color schemes per card to create visual interest and highlight categories. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Product feature highlights" icon="sparkles"> Use 4-5 slides per view with "Plain" layout. Each card contains product image (4:3 aspect ratio), feature heading, brief description, and "Learn more" text link button. Center-aligned content with M inner spacing. </Accordion> <Accordion title="Customer testimonials" icon="quote-left"> Use 3 slides per view with "Plain" layout. Background media position with customer photos. Include quote text, customer name as heading, and optional link to case study. Varied color schemes per card. </Accordion> <Accordion title="Category showcase" icon="grid-2"> Use "Only image" layout with 4 slides per view. Category images with 1:1 aspect ratio, minimal text (category name as heading only), filled button linking to collection. Tight spacing between blocks. </Accordion> <Accordion title="Blog article preview" icon="newspaper"> Use 3 slides per view with "Plain" layout. Article featured image on top (16:9 ratio), article title as heading, excerpt as text, "Read more" outlined button. Navigation arrows enabled, no autoplay. </Accordion> <Accordion title="Image gallery" icon="images"> Use "Only image" layout with 5-6 slides per view. Images only (no text), auto aspect ratio, navigation arrows enabled. Mobile shows 2-3 slides with portrait images. Background media position on mobile for immersive feel. </Accordion> <Accordion title="Service offerings" icon="briefcase"> Use 4 slides per view with "Plain" layout. Icon or illustration as image (1:1 ratio), service name as heading, 2-sentence description, text link button. Each card with different color scheme matching service category. </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Hero banner" icon="panorama" href="/themes/sahara/sections/hero-banner"> Multi-slide full-width banners with carousel </Card> <Card title="Featured collections" icon="layer-group" href="/themes/sahara/sections/featured-collections"> Collection cards with custom images </Card> <Card title="Testimonials" icon="quote-left" href="/themes/sahara/sections/testimonials"> Customer reviews with carousel option </Card> </CardGroup> # Cart drawer Source: https://docs.digifist.com/themes/sahara/sections/cart-drawer Configure the slide-out cart drawer that displays when customers add products The Cart drawer section controls the slide-out drawer that appears when customers add items to their cart or click the cart icon. It provides a quick view of cart contents without leaving the current page, streamlining the shopping experience and reducing friction in the purchase journey. Configure this section to customize drawer behavior, content, and appearance across your entire store. ## What this section controls This section controls cart drawer displays with the following capabilities: * Slide-out drawer interface for cart contents * Sticky checkout button toggle for scrolling behavior * Product card thumbnail aspect ratios (1:1, 3:4, 5:6) * Empty cart "Continue Shopping" button URL * Color scheme selection * Store-wide drawer appearance and behavior * Quick cart view without page navigation ## Section settings <AccordionGroup> <Accordion title="Sticky checkout button"> Enable **Sticky checkout button** to keep the checkout button fixed at the bottom of the cart drawer as users scroll through their cart items. Default: Enabled <Tip> Keep this enabled for better mobile user experience, ensuring the checkout button is always accessible even with many cart items. </Tip> </Accordion> <Accordion title="Product card aspect ratio"> **Card media aspect ratio** — Controls the shape of product thumbnail images displayed in the cart drawer. Available options: * **1:1** — Square images, ideal for lifestyle products * **3:4** (default) — Portrait format, best for apparel and accessories * **5:6** — Tall portrait, maximizes vertical space Choose an aspect ratio that complements your product photography style. </Accordion> <Accordion title="Empty cart settings"> **Button URL** — Set the destination for the "Continue Shopping" button displayed when the cart is empty (default: /collections/all). This typically links to your main collections page, homepage, or featured collection. <Note> Empty cart title and description text are customized through theme translation files (locales), not in this section. </Note> </Accordion> <Accordion title="Color scheme"> Select the color scheme for the cart drawer, controlling background, text, and button colors (default: scheme-1). </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Aspect ratio selection" icon="image"> Use 3:4 portrait for apparel to show product details clearly. Use 1:1 square for products with square photography or lifestyle items. </Card> <Card title="Sticky checkout" icon="anchor"> Keep the sticky checkout button enabled, especially if you expect customers to add multiple items. This ensures easy access to checkout. </Card> <Card title="Empty cart destination" icon="link"> Set the empty cart button to your most important collection or homepage to guide shoppers back to browsing. </Card> <Card title="Mobile testing" icon="mobile"> Test the cart drawer on mobile devices to ensure smooth sliding animations, responsive product images, and accessible buttons. </Card> <Card title="Color contrast" icon="palette"> Choose a color scheme with sufficient contrast between background and text for readability, especially for cart totals and pricing. </Card> <Card title="Performance" icon="gauge-high"> The cart drawer updates dynamically. Ensure product images are optimized to maintain fast loading when items are added. </Card> </CardGroup> ## Cart drawer features The cart drawer typically includes: * **Product thumbnails** — Visual representation of cart items with the selected aspect ratio * **Product details** — Title, variant information, and individual pricing * **Quantity controls** — Increase, decrease, or remove items * **Cart subtotal** — Running total of all items in the cart * **Checkout button** — Primary action to proceed to checkout (sticky when enabled) * **Continue shopping** — Link to close drawer and keep browsing * **Empty state** — Message and button shown when cart has no items ## Common use cases * **Quick cart updates** — Allow customers to modify quantities without leaving product pages * **Cross-device shopping** — Provide consistent cart experience on desktop and mobile * **Fast checkout flow** — Enable one-click access to checkout from any page * **Cart review** — Let shoppers verify items before proceeding to checkout * **Impulse purchases** — Keep customers engaged while showing cart contents ## Additional customization Beyond this section, cart drawer behavior and content can be customized through: * **Theme settings** — Cart drawer opening behavior, animations, and global features * **Translation files** — Empty cart messaging, button labels, and informational text * **Custom code** — Advanced cart drawer modifications using the Custom liquid section or theme files ## Related sections <CardGroup> <Card title="Cart counter" icon="hashtag" href="/themes/sahara/sections/cart-counter"> Configure the cart icon and item count display </Card> <Card title="Header" icon="bars" href="/themes/sahara/sections/header"> Manage header navigation where the cart icon appears </Card> </CardGroup> # Compare slider Source: https://docs.digifist.com/themes/sahara/sections/compare-slider Interactive before/after image comparison with draggable slider The Compare slider section enables interactive visual comparison between two images using a draggable slider. Perfect for showcasing transformations, before/after results, product improvements, or visual differences, this interactive element engages visitors and provides clear visual proof of value. Use it when standard images can't adequately demonstrate the difference you're highlighting. ## What this section controls This section controls before/after image comparisons with the following capabilities: * Interactive draggable comparison slider * Two-image comparison (before and after) * Layout options (Full width or Shrink) * Section heading and descriptive text with customizable sizes * Optional call-to-action button with three style options * Initial slider position control (left/right bias) * Color scheme, width, and spacing controls ## Section settings <AccordionGroup> <Accordion title="Layout"> Choose how the comparison slider is displayed: **Full** — Slider spans the full width of the section container **Shrink** (default) — Slider is constrained to a narrower, content-focused width </Accordion> <Accordion title="Content"> **Heading** — Main title for the section (default: "Before / After"). Supports rich text for bold, italic, and links. **Heading size** — Control the heading size from XS to XL (default: XL) **Text** — Add descriptive content below the heading with rich text formatting. Default: "Before and after images are a great way to showcase the transformation or improvement in a particular subject." </Accordion> <Accordion title="Call-to-action button"> Add an optional button below the comparison slider: **Button text** — The button label (default: "Shop now"). Leave empty to hide the button. **Button URL** — Destination link for the button (default: /) **Button style** — Choose visual appearance: * **Filled** (default) — Solid background button * **Outlined** — Border-only button * **Text** — Text-style link button </Accordion> <Accordion title="Section width"> Choose the overall container width: * **Page width** (default) — Standard container width * **Fluid** — Wider, edge-to-edge within padding * **Full width** — Complete edge-to-edge layout </Accordion> <Accordion title="Color scheme"> Select the background and text color scheme for the section (default: scheme-1). </Accordion> <Accordion title="Spacing"> Control vertical spacing above and below the section with options from None to XL (0, S, M, L, XL). Default is M for both top and bottom. </Accordion> <Accordion title="Section border"> Add decorative borders: * **None** (default) — No borders * **Top** — Border above the section * **Bottom** — Border below the section * **Both** — Borders above and below </Accordion> </AccordionGroup> ## Block: Image before slide The "before" image block displays the initial state. Limited to **1 block** per section. <AccordionGroup> <Accordion title="Image"> Upload the "before" image using Shopify's image picker. <Tip> **Recommended best practices:** * Use the same resolution as the "after" image * Maintain identical subject framing and perspective * Match lighting conditions between images This ensures smooth and accurate visual comparison. </Tip> </Accordion> <Accordion title="Label"> **Title** — Text displayed on the image to identify it (e.g., "Before", "Original", "Without") **Label size** — Control the label text size from XS to XL (default: M) **Color scheme for label** — Select a color scheme for the label background and text (default: scheme-1) <Tip> Use high-contrast color schemes to ensure labels remain readable when overlaid on images. </Tip> </Accordion> </AccordionGroup> ## Block: Image after slide The "after" image block displays the transformed state. Limited to **1 block** per section. <AccordionGroup> <Accordion title="Image"> Upload the "after" image using Shopify's image picker. Follow the same best practices as the "before" image for optimal comparison. </Accordion> <Accordion title="Label"> **Title** — Text displayed on the image (e.g., "After", "Improved", "With") **Label size** — Control the label text size from XS to XL (default: M) **Color scheme for label** — Select a color scheme for the label (default: scheme-1) </Accordion> </AccordionGroup> ## Default configuration The section preset includes both required blocks: * **Image before** block with "Image before" label * **Image after** block with "Image after" label <Warning> Both "Image before" and "Image after" blocks are required for the comparison slider to function correctly. The section will not display properly with only one block. </Warning> ## Best practices <CardGroup> <Card title="Image consistency" icon="images"> Use images with matching dimensions, framing, and perspective. Inconsistent images create a jarring comparison experience. </Card> <Card title="Two blocks required" icon="layer-group"> Always add exactly two blocks (before and after). The slider requires both images to function properly. </Card> <Card title="Concise labels" icon="tag"> Keep labels short and clear—single words like "Before"/"After" work best. Avoid lengthy descriptive text. </Card> <Card title="High contrast labels" icon="palette"> Choose label color schemes that provide strong contrast with your images for maximum readability. </Card> <Card title="Image optimization" icon="gauge-high"> Optimize image file sizes before uploading to ensure fast loading without quality loss. </Card> <Card title="Avoid text in images" icon="font"> Keep images clean and focused on the visual comparison. Avoid embedding heavy text within the images themselves. </Card> </CardGroup> ## Use cases * **Beauty and skincare** — Show before/after results of treatments, products, or routines * **Home improvement** — Display room transformations, renovations, or staging results * **Photo editing services** — Demonstrate editing capabilities and transformation quality * **Fitness and wellness** — Showcase body transformations or progress over time * **Product effectiveness** — Prove product results with visual evidence * **Restoration services** — Highlight repair, cleaning, or restoration work * **Design services** — Compare original designs with improved versions * **Landscaping** — Show outdoor space transformations * **Dental work** — Display smile transformations or treatment results * **Hair styling** — Showcase color treatments, cuts, or styling results ## Technical notes The compare slider uses an interactive draggable control that allows users to move a divider left and right, revealing more or less of each image. This creates an engaging, hands-on comparison experience that static side-by-side images cannot provide. For the best user experience, ensure images load quickly and the slider responds smoothly to touch and mouse input on all devices. # Complete the set Source: https://docs.digifist.com/themes/sahara/sections/complete-the-set Display complementary products or featured imagery alongside collapsible product information The Complete the set section combines product information with complementary product recommendations or featured imagery on product pages. It organizes product details in collapsible blocks while showcasing related products or a custom image, helping with cross-selling while keeping product pages clean and organized. This product-page-only section increases average order value by suggesting coordinating items at the moment of highest purchase intent. ## What this section controls This section controls product cross-selling displays with the following capabilities: * Collapsible product information blocks (specifications, shipping, materials) * Complementary product recommendations via Shopify Search & Discovery * Featured image display as alternative to product recommendations * Desktop and mobile layout flip options * Fallback product selection when no recommendations available * Section title customization * Color scheme and width controls ## Section settings <AccordionGroup> <Accordion title="Section title"> Add the main heading for the section (default: "Complete The Set"). This title appears above the content blocks. </Accordion> <Accordion title="Content type"> Choose what displays alongside the collapsible information blocks: **Featured image** — Display a custom promotional or lifestyle image **Complementary products** (default) — Show product recommendations powered by Shopify Search & Discovery Complementary products are customizable through the Shopify Search & Discovery app to show the most relevant recommendations based on the current product. </Accordion> <Accordion title="Featured image"> Upload a custom image when "Featured image" is selected as the content type. Use this for lifestyle photography, promotional graphics, or brand imagery. </Accordion> <Accordion title="Default product"> Select a fallback product to display when complementary products are selected but no recommendations are available. This ensures the section always has content to show. </Accordion> <Accordion title="Layout options"> **Flip left and right side (Desktop)** — Swap the positions of collapsible content and featured content on desktop views (enabled by default) **Flip top and bottom content positions (Mobile)** — Reverse the content order on mobile devices (enabled by default) Use these options to prioritize different content on desktop versus mobile for optimal user experience. </Accordion> <Accordion title="Section width"> Choose the container width: * **Page width** (default) — Standard container width * **Fluid** — Wider, edge-to-edge within padding </Accordion> <Accordion title="Color scheme"> Select the color scheme for the section (default: scheme-1). </Accordion> <Accordion title="Spacing"> Control vertical spacing above and below the section with options from None to XL (0, S, M, L, XL). Default is M for both top and bottom. </Accordion> <Accordion title="Section border"> Add decorative borders: * **None** (default) — No borders * **Top** — Border above the section * **Bottom** — Border below the section * **Both** — Borders above and below </Accordion> </AccordionGroup> ## Block: Popup drawer Create interactive buttons that reveal content through drawers, collapsible panels, or links. <AccordionGroup> <Accordion title="Button text"> Enter the text label for the button (e.g., "Details", "Shipping Info", "Size Guide"). </Accordion> <Accordion title="Button type"> Choose how the content is revealed when the button is clicked: **Link** — Navigate to a URL (internal or external page) **Drawer** (default) — Open content in a slide-out drawer overlay **Collapsible** — Expand content inline below the button </Accordion> <Accordion title="Button URL"> Set the destination link when "Link" is selected as the button type. Use this to link to dedicated pages like size guides, care instructions, or policies. </Accordion> <Accordion title="Drawer content"> **Drawer richtext** — Add formatted content that appears in the drawer or collapsible panel. Supports rich text formatting including bold, italic, lists, and links. **Drawer page** — Alternatively, select a Shopify page to display its content in the drawer. This overrides the richtext field when set. <Warning> When a page is selected, it replaces any content entered in the Drawer richtext field. </Warning> Use the page option to manage frequently updated or lengthy content from a centralized location. </Accordion> </AccordionGroup> ## Default configuration The section preset includes three example blocks: 1. **Details** (drawer) — Shows product details content 2. **Description** (drawer) — Displays product description 3. **Contact us** (link) — Links to contact page Content type is set to "Featured image" by default in the preset. ## Best practices <CardGroup> <Card title="Strategic content" icon="bullseye"> Use complementary products to increase average order value by suggesting items that genuinely pair well with the main product. </Card> <Card title="Organized information" icon="bars-staggered"> Group related information into logical blocks. Common blocks include Details, Shipping, Care Instructions, and Size Guide. </Card> <Card title="Clear labels" icon="tag"> Use concise, descriptive button text (2-3 words) so customers know what information each block contains. </Card> <Card title="Mobile priority" icon="mobile"> Use the flip mobile option to show the most important content first on smaller screens where space is limited. </Card> <Card title="Page content" icon="file"> Use the Drawer page option for complex content like detailed size charts or comprehensive care instructions that are easier to manage as pages. </Card> <Card title="Default product" icon="box"> Always set a default product when using complementary products to ensure the section displays properly even when recommendations aren't available. </Card> </CardGroup> ## Use cases * **Cross-selling accessories** — Show complementary products like phone cases with phones, or shoes with clothing * **Product information hub** — Organize shipping, returns, care, and sizing information in collapsible blocks * **Size guides** — Provide detailed sizing information in drawers without cluttering the main product page * **Care instructions** — Display maintenance and care details for products that require special handling * **Warranty information** — Share warranty and guarantee details in an organized, accessible format * **Styling suggestions** — Use featured images to show lifestyle photography or styling inspiration * **Bundle promotions** — Highlight product bundles or "frequently bought together" items * **Policy information** — Link to shipping policies, return procedures, or terms ## Related sections <CardGroup> <Card title="Product recommendations" icon="sparkles" href="/themes/sahara/sections/product-recommendations"> Automated product recommendations section for cross-selling </Card> <Card title="Accordions" icon="bars-staggered" href="/themes/sahara/sections/accordions"> General-purpose collapsible content section </Card> </CardGroup> # Content tiles Source: https://docs.digifist.com/themes/sahara/sections/content-tiles Advanced grid-based layout system with unlimited customizable tiles and flexible column/row spanning The Content tiles section allows you to create complex, mosaic-style grid layouts with unlimited customizable tiles that can span multiple columns and rows. This advanced layout system enables sophisticated visual compositions for showcasing content, images, videos, or slideshows in creative, magazine-style arrangements. Use this section when standard grid layouts feel too rigid for your creative vision. ## What this section controls This section controls advanced grid layouts with the following capabilities: * Unlimited customizable tile blocks * Flexible column spanning (1-6 columns on desktop, 1-2 on mobile) * Flexible row spanning for vertical layouts * Mixed content types (images, videos, slideshows, text) * Individual tile color schemes and visibility settings * Section heading with customizable size and alignment * Three width options and vertical spacing controls ## Section settings ### General settings <AccordionGroup> <Accordion title="Block order (Mobile)"> Enable this option to reverse the tile order on mobile devices, useful for optimizing the visual hierarchy on smaller screens. </Accordion> <Accordion title="Section heading"> Add an optional heading above the tile grid. Configure the heading text, size (XS to XL), and alignment (left, center, or right). </Accordion> <Accordion title="Color scheme"> Select the default color scheme for the entire section. Individual tiles can override this with their own color schemes. </Accordion> <Accordion title="Section width"> Choose between three width options: * **Page width** — Standard container width * **Fluid** — Wider, edge-to-edge within padding * **Full width** — Complete edge-to-edge layout </Accordion> <Accordion title="Spacing"> Control the vertical spacing above and below the section with options ranging from None to XL (0, S, M, L, XL). </Accordion> </AccordionGroup> ## Block types ### Tile The primary content block for creating grid items with text, media, and buttons. <AccordionGroup> <Accordion title="Visibility settings"> Control where the tile appears: * **Desktop only** * **Mobile only** * **Both** (default) </Accordion> <Accordion title="Grid layout"> **Column factor** — Set how many columns the tile spans (1-6, default 1) **Row factor** — Set how many rows the tile spans (1-6, default 1) These settings enable flexible mosaic layouts by controlling the tile's grid size. A tile with column factor 3 and row factor 2 will occupy a 3×2 grid space. </Accordion> <Accordion title="Tile appearance"> **Color scheme** — Override the section's color scheme for this specific tile (default: scheme-5) **Custom background color** — Apply a custom gradient or solid background color, overriding the color scheme **Aspect ratio** — Choose between: * **Auto** — Height determined by content * **Fixed ratios** — Square (1:1), Landscape (4:3, 3:2, 5:4, 16:9, 2:1, 4:1, 8:1), Portrait (3:4, 2:3, 4:5, 9:16, 1:2) </Accordion> <Accordion title="Content positioning"> **Vertical position** — Align content to top, center (default), or bottom of the tile **Content alignment** — Position content left, center (default), or right **Content alignment (Mobile)** — Separate alignment control for mobile devices (default: left) </Accordion> <Accordion title="Media settings"> **Media position** — Choose where media appears: * **Top** — Above content * **Bottom** — Below content * **Background** (default) — Behind content as background **Image** — Upload a static image **Video** — Upload a native video file **External video** — Add a YouTube or Vimeo URL **Show video controls** — Display playback controls for videos </Accordion> <Accordion title="Mobile-specific media"> Provide alternative media assets optimized for mobile devices: * **Image (Mobile)** * **Video (Mobile)** * **External video (Mobile)** * **Show video controls (Mobile)** </Accordion> <Accordion title="Text content"> **Heading** — Add a tile heading with configurable size (XS to XL, default L) **Text** — Add descriptive text content supporting rich text formatting **Button label** — Add a call-to-action button with customizable text **Button link** — Set the button destination URL **Button style** — Choose filled, outlined, or text button style (default: filled) </Accordion> <Accordion title="Inner spacing"> Control the padding inside the tile, ranging from None to XL (0, S, M, L, XL, default M). </Accordion> </AccordionGroup> ### Slideshow A specialized tile block that displays a carousel of content slides. <AccordionGroup> <Accordion title="Visibility settings"> Control where the slideshow tile appears (desktop only, mobile only, or both). </Accordion> <Accordion title="Grid layout"> **Column factor** — Set column span (1-6, default 6) **Row factor** — Set row span (1-6, default 1) </Accordion> <Accordion title="Slideshow appearance"> **Media aspect ratio** — Choose from 11 preset ratios including square (1:1), landscape (4:3, 3:2, 5:4, 16:9, 2:1), and portrait (3:4, 2:3, 4:5, 9:16, 1:2). Default is 2:1. **Color scheme** — Select the color scheme (default: scheme-5) **Custom background color** — Override with a custom gradient or solid color </Accordion> <Accordion title="Content positioning"> **Vertical position** — Align content to top, center (default), or bottom **Content alignment** — Position content left, center (default), or right **Content alignment (Mobile)** — Separate alignment for mobile (default: left) </Accordion> <Accordion title="Slideshow controls"> **Autoplay** — Set automatic slide transition interval (0-10 seconds, 0 = disabled) **Actions alignment** — Position navigation controls at start, center (default), or end **Show arrows** — Display previous/next navigation arrows (enabled by default) **Show bullets** — Display slide indicator bullets (enabled by default) **Show progress** — Display a progress bar for autoplay (enabled by default) </Accordion> <Accordion title="Slideshow content source"> Choose between two content sources: * **Manual** — Manually configure up to 5 slides within the block settings * **Metaobject** — Dynamically populate slides from a metaobject definition </Accordion> <Accordion title="Manual slides (1-5)"> When using manual mode, configure up to 5 individual slides: * **Heading** — Slide title * **Text** — Slide description * **Image** — Slide image Each slide includes these three fields for creating rich content presentations. </Accordion> <Accordion title="Inner spacing"> Control the padding inside the slideshow tile (None to XL, default M). </Accordion> </AccordionGroup> ## Default configuration The section comes with a preset of three tiles arranged in a balanced grid layout: * First tile: 3 columns × 2 rows (large featured tile) * Second tile: 3 columns × 1 row (horizontal tile) * Third tile: 3 columns × 1 row (horizontal tile) This creates an asymmetric layout with one prominent tile and two smaller tiles below, ideal for highlighting key content. ## Best practices <CardGroup> <Card title="Grid planning" icon="grid"> Plan your grid layout before adding tiles. The section uses a 6-column grid, so ensure column factors add up logically for balanced rows. </Card> <Card title="Mobile optimization" icon="mobile"> Use the "Block order (Mobile)" setting and mobile-specific media to optimize the layout and content for smaller screens. </Card> <Card title="Visual hierarchy" icon="layer-group"> Use larger row and column factors for important content to create focal points. Combine different tile sizes for visual interest. </Card> <Card title="Aspect ratios" icon="crop"> Choose aspect ratios that complement your imagery. Use "auto" for text-heavy tiles and fixed ratios for image-focused tiles. </Card> <Card title="Color contrast" icon="palette"> When using background media, ensure sufficient contrast between the media and text content for readability. </Card> <Card title="Performance" icon="gauge-high"> Optimize images and videos before uploading. Use appropriate media for mobile to reduce data usage and improve loading times. </Card> </CardGroup> ## Use cases * **Homepage grids** — Create dynamic homepage layouts with mixed content types * **Feature showcases** — Highlight multiple product features or benefits in an engaging grid * **Portfolio displays** — Showcase projects or work samples with flexible sizing * **Content hubs** — Build navigation hubs linking to different site sections * **Mixed media galleries** — Combine images, videos, and text in a unified layout * **Story walls** — Tell brand stories through a mosaic of visual and textual content # Custom Liquid Source: https://docs.digifist.com/themes/sahara/sections/custom-liquid Add custom Liquid code to your storefront for advanced customization The **Custom Liquid** section allows you to add custom Liquid code directly to your storefront without editing theme files. Requires knowledge of Liquid (Shopify's templating language) and is perfect for advanced customizations, dynamic content from metafields, third-party integrations, and custom product displays. ## What this section controls This section controls custom code integration with the following capabilities: * Custom Liquid templating code execution * HTML, CSS, and JavaScript insertion * Access to all Shopify Liquid objects (shop, product, collection, cart, customer) * Liquid filters and logic operations * Metafield data display * Third-party script integration * Color scheme selection for section container * Width and spacing controls <Warning> Requires knowledge of **Liquid**, Shopify's templating language. Incorrect code can break your store's layout or functionality. Always test in a development theme first. </Warning> ## Settings ### Custom Liquid Code **Type:** Liquid code editor\ **Purpose:** Enter custom Liquid, HTML, CSS, or JavaScript code This multi-line code editor accepts: * **Liquid** - Shopify templating language (`{{ }}`, `{% %}` tags) * **HTML** - Structure and content markup * **CSS** - Inline styles (wrap in `<style>` tags) * **JavaScript** - Client-side functionality (wrap in `<script>` tags) **Access to Liquid objects:** * `shop` - Store information * `product` - Current product (on product pages) * `collection` - Current collection (on collection pages) * `cart` - Cart data * `customer` - Logged-in customer data * All global Liquid objects and filters ### Common Settings <Accordion title="Color Scheme"> **Options:** Theme color schemes (scheme-1, scheme-2, etc.)\ **Default:** scheme-1 **Purpose:** Apply background and text colors from theme's color scheme to the custom liquid section container. **Note:** Custom CSS within your liquid code can override these colors. </Accordion> <Accordion title="Section Width"> **Options:** * **Page** - Standard page width container * **Fluid** - Full-width with padding * **Full** - 100% width, no padding **Default:** Page **Purpose:** Control how wide your custom liquid content appears. Choose "Full" for edge-to-edge layouts. </Accordion> <Accordion title="Spacing Top"> **Options:** None, S, M, L, XL\ **Default:** M Vertical margin above section. See [Common Settings](/themes/sahara/common-settings) for details. </Accordion> <Accordion title="Spacing Bottom"> **Options:** None, S, M, L, XL\ **Default:** M Vertical margin below section. See [Common Settings](/themes/sahara/common-settings) for details. </Accordion> <Accordion title="Section Border"> **Options:** None, Top, Bottom, Both\ **Default:** None Add decorative borders above/below section. See [Common Settings](/themes/sahara/common-settings) for details. </Accordion> ## Use Cases <CardGroup> <Card title="Custom Product Grid" icon="grid"> Display products from specific collection with custom layout, filtering, or sorting logic using Liquid loops and conditionals. </Card> <Card title="Metafield Display" icon="database"> Show custom metafields (size charts, specifications, certifications) that aren't natively supported by theme sections. </Card> <Card title="Dynamic Banners" icon="rectangle-ad"> Create conditional banners that display based on cart value, customer tags, product availability, or other dynamic data. </Card> <Card title="Third-Party Widgets" icon="puzzle-piece"> Embed widgets from external services (analytics, chat, tracking pixels) that require custom HTML/JavaScript. </Card> <Card title="Custom Calculations" icon="calculator"> Build product configurators, price calculators, or bundle pricing displays with Liquid math filters. </Card> <Card title="Advanced Filtering" icon="filter"> Create custom collection filters beyond theme's built-in options using Liquid conditionals and product tags. </Card> </CardGroup> ## Examples ### Display Products from Collection ```liquid theme={null} {% assign featured_products = collections['summer-sale'].products %} <div class="custom-product-grid"> {% for product in featured_products limit: 4 %} <div class="product-card"> <a href="{{ product.url }}"> <img src="{{ product.featured_image | image_url: width: 400 }}" alt="{{ product.title }}"> <h3>{{ product.title }}</h3> <p>{{ product.price | money }}</p> </a> </div> {% endfor %} </div> <style> .custom-product-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 2rem; } .product-card img { width: 100%; height: auto; } </style> ``` ### Show Metafield Data ```liquid theme={null} {% if product.metafields.custom.size_chart %} <div class="size-chart-section"> <h3>Size Chart</h3> {{ product.metafields.custom.size_chart }} </div> {% endif %} ``` ### Conditional Banner Based on Cart Value ```liquid theme={null} {% if cart.total_price > 5000 %} <div class="free-shipping-banner"> You've qualified for free shipping! </div> {% else %} {% assign remaining = 5000 | minus: cart.total_price %} <div class="almost-free-shipping"> Add {{ remaining | money }} more to qualify for free shipping </div> {% endif %} ``` ### Custom HTML/CSS/JavaScript Widget ```liquid theme={null} <div class="countdown-widget"> <p>Sale ends in: <span id="countdown"></span></p> </div> <script> const countdownDate = new Date('2026-12-31T23:59:59').getTime(); const timer = setInterval(function() { const now = new Date().getTime(); const distance = countdownDate - now; const days = Math.floor(distance / (1000 * 60 * 60 * 24)); const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); document.getElementById('countdown').innerHTML = days + 'd ' + hours + 'h'; if (distance < 0) { clearInterval(timer); document.getElementById('countdown').innerHTML = 'EXPIRED'; } }, 1000); </script> <style> .countdown-widget { background: #f5f5f5; padding: 2rem; text-align: center; font-size: 1.5rem; } </style> ``` ## Best practices <CardGroup> <Card title="Test in Development Theme" icon="flask"> Always test custom liquid code in a development/preview theme before publishing to live store. Errors can break your storefront. </Card> <Card title="Comment Your Code" icon="comment"> Add comments explaining what code does. Makes troubleshooting easier: `{% comment %}Show products from summer collection{% endcomment %}` </Card> <Card title="Validate HTML/CSS" icon="circle-check"> Use validators (W3C HTML Validator, CSS Validator) to check code syntax before deploying. </Card> <Card title="Optimize Images" icon="images"> Use Liquid image filters (`image_url`, `image_tag`) with width/height parameters to serve optimized images. </Card> <Card title="Handle Missing Data" icon="shield-exclamation"> Use conditionals to check if data exists before displaying: `{% if product.metafields.custom.size_chart %}` </Card> <Card title="Keep Code Maintainable" icon="code"> Break complex logic into smaller snippets. Reuse snippets with `{% render 'snippet-name' %}` for cleaner code. </Card> <Card title="Performance Considerations" icon="gauge-high"> Avoid heavy Liquid loops (e.g., looping through all products). Limit API calls and external scripts to maintain fast load times. </Card> <Card title="Mobile Responsiveness" icon="mobile"> Test custom layouts on mobile devices. Use CSS media queries or responsive grid layouts for mobile compatibility. </Card> </CardGroup> ## Liquid Resources ### Official Documentation * **[Shopify Liquid Documentation](https://shopify.dev/docs/api/liquid)** - Complete Liquid reference * **[Liquid Objects](https://shopify.dev/docs/api/liquid/objects)** - Available objects (product, shop, cart, etc.) * **[Liquid Filters](https://shopify.dev/docs/api/liquid/filters)** - Data manipulation filters * **[Liquid Tags](https://shopify.dev/docs/api/liquid/tags)** - Control flow and logic ### Learning Resources * **Shopify Liquid Cheat Sheet** - Quick reference guide * **Liquid Code Examples** - Community examples on GitHub * **Shopify Partners Blog** - Tutorials and best practices ## Troubleshooting <AccordionGroup> <Accordion title="Code doesn't display or breaks layout"> **Common causes:** * Syntax error in Liquid code (missing `{% endif %}`, unmatched tags) * Unclosed HTML tags (`<div>` without `</div>`) * JavaScript errors (check browser console) **Solution:** * Check for syntax errors (missing closing tags, typos) * Use browser developer tools (F12) to check console for JavaScript errors * Validate HTML/CSS with online validators * Remove code and add back section by section to isolate error </Accordion> <Accordion title="Liquid objects don't work (e.g., {{ product.title }} is blank)"> **Possible causes:** * Object not available in current page context (e.g., `product` object only on product pages) * Incorrect object/property name * Object is nil/null (data doesn't exist) **Solution:** * Check [Liquid Objects documentation](https://shopify.dev/docs/api/liquid/objects) for object availability * Use conditionals to check if object exists: `{% if product %}{{ product.title }}{% endif %}` * Verify property names match Liquid documentation </Accordion> <Accordion title="Custom CSS not applying"> **Solution:** * Ensure CSS wrapped in `<style>` tags * Check CSS specificity (theme styles may override custom CSS) * Use `!important` sparingly to force styles (not recommended long-term) * Inspect element in browser to see which styles are applied/overridden </Accordion> <Accordion title="JavaScript not executing"> **Solution:** * Ensure JavaScript wrapped in `<script>` tags * Check browser console (F12 → Console tab) for errors * Verify DOM elements exist before manipulating (`getElementById` returns null if element doesn't exist) * Use `DOMContentLoaded` event to ensure page loaded before running scripts </Accordion> <Accordion title="Section looks different than expected"> **Solution:** * Theme's global styles may conflict with custom code * Check Common Settings (Color Scheme, Section Width) which affect container styles * Use custom CSS classes to override theme styles * Test with Section Width set to "Full" to remove container constraints </Accordion> </AccordionGroup> ## Security & Performance <Warning> **Security considerations:** * Never expose API keys or sensitive data in custom liquid code (visible in page source) * Validate and sanitize user input if accepting data (forms, URL parameters) * Be cautious with third-party scripts - only embed trusted sources </Warning> **Performance tips:** * Limit Liquid loops (e.g., `limit: 10` instead of looping all products) * Use lazy loading for images * Minimize external scripts and API calls * Cache dynamic data when possible (use metafields for static data) ## Related Sections * [Custom Liquid (Shopify Docs)](https://shopify.dev/docs/api/liquid) - Official Liquid documentation * [Common Settings](/themes/sahara/common-settings) - Section-level styling options ## Key Takeaways * **Requires Liquid knowledge** - Advanced feature for developers or technical users * **Test before deploying** - Always test in development theme to avoid breaking live store * **Access to Liquid objects** - Full access to shop, product, cart, customer data * **HTML/CSS/JavaScript supported** - Build custom layouts, styles, and functionality * **Flexible width options** - Page, Fluid, or Full width for different layout needs * **Handle missing data** - Use conditionals to check data exists before displaying Custom Liquid section provides unlimited flexibility for advanced store customization beyond standard theme sections. # Dual tiles Source: https://docs.digifist.com/themes/sahara/sections/dual-tiles Display two side-by-side content tiles with flexible sizing, independent media, rich text, and customizable spacing. The Dual tiles section creates two side-by-side content areas perfect for highlighting complementary content, campaigns, or product stories. Each tile can contain independent media, text, buttons, and has separate desktop/mobile configurations for maximum flexibility. Dual tiles help create balanced, visually engaging layouts that showcase parallel narratives, split campaigns, or contrasting product offerings in a structured format. <img alt="Dual tiles section overview" /> ## What this section controls This section controls dual-tile layouts with the following capabilities: * Two side-by-side content tiles (maximum 2 blocks) * Flexible tile sizing (full, half, large, small) * Configurable gap spacing between tiles * Desktop and mobile-specific media and positioning * Independent content alignment per tile * Rich text, buttons, and video support * Per-tile color schemes and padding controls ## How Dual tiles works The Dual tiles section uses a block-based system: * Section supports **maximum 2 Tile blocks** * First tile size determines layout proportions * Second tile automatically adjusts to complement first * Each tile configured independently with its own media, text, and styling * Responsive behavior with mobile-specific ordering and sizing ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Dual tiles section"> Add the section to your page or template. </Step> <Step title="Add tile blocks"> Click "Add block" and select "Tile" to create content areas (add 2 tiles). </Step> <Step title="Configure block size"> Set first block size to control tile proportions (half, large, small, full). </Step> <Step title="Add content"> For each tile, add heading, text, media, and optional button. </Step> </Steps> <img alt="Dual tiles section in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Layout"> ### Block size Controls the width proportions of the two tiles. <AccordionGroup> <Accordion title="Full" icon="square"> First tile takes full width, second tile full width below. **Best for:** * Stacked layout * Vertical storytelling * Mobile-first designs **Result:** Tiles stack vertically on both desktop and mobile. </Accordion> <Accordion title="Half" icon="table-columns"> Both tiles equal width, 50/50 split (default). **Best for:** * Balanced content * Equal emphasis * Symmetrical layouts **Result:** Tiles side-by-side on desktop, stacked on mobile. </Accordion> <Accordion title="Large" icon="expand"> First tile takes approximately 66%, second tile 33%. **Best for:** * Primary/secondary content * Featured content + supporting info * Text-heavy + compact layout **Result:** Unequal split emphasizing first tile. </Accordion> <Accordion title="Small" icon="compress"> First tile takes approximately 33%, second tile 66%. **Best for:** * Supporting info + primary content * Compact accent + featured content * Reverse emphasis **Result:** Unequal split emphasizing second tile. </Accordion> </AccordionGroup> <img alt="Block size layout options" /> ### Gap between tiles (Desktop) Controls horizontal and vertical spacing between tiles on desktop. **Options:** No spacing, S, M (default), L, XL ### Gap between tiles (Mobile) Controls spacing between tiles on mobile devices independently. **Options:** No spacing, S, M (default), L, XL <Tip> Use no spacing or small gaps for seamless, edge-to-edge tile layouts. Increase gaps for clearly separated content areas. </Tip> ### Reverse on mobile Swaps tile order on mobile devices. **Default:** False <AccordionGroup> <Accordion title="Mobile ordering strategy" icon="mobile"> **Disabled (False - default):** * Tiles maintain desktop order on mobile * First tile displays first * Standard top-to-bottom flow **Enabled (True):** * Reverses order on mobile only * Second tile displays first * Useful when second tile is more important on mobile </Accordion> </AccordionGroup> <img alt="Gap spacing and mobile ordering" /> </Tab> <Tab title="Styling"> ### Section width Controls horizontal width of the section. **Options:** * **Page** - Standard container width (default) * **Fluid** - Wider layout * **Full** - Edge-to-edge full width <Note> Full width works well for immersive dual tile layouts with background images. </Note> ### Color scheme Select default color scheme for section background. <Note> Individual tiles can override section color scheme with their own settings. </Note> ### Spacing Control vertical spacing around the section: * **Spacing top** - Margin above (None, S, M, L, XL) * **Spacing bottom** - Margin below (None, S, M, L, XL) Both default to M. ### Section border Add decorative borders: None (default), Top, Bottom, Both <img alt="Section styling options" /> </Tab> </Tabs> ## Block settings Each Tile block represents one of the two content areas. Configure them independently for maximum flexibility. <Tabs> <Tab title="Visibility"> ### Show on Controls which devices the tile is visible on. **Options:** * **Desktop** - Desktop only * **Mobile** - Mobile only * **Both** - All devices (default) <AccordionGroup> <Accordion title="Device-specific tiles" icon="devices"> **Use cases for selective visibility:** * Different messaging for mobile vs desktop * Desktop-only detailed content * Mobile-only app promotions * A/B testing across devices </Accordion> </AccordionGroup> <img alt="Tile visibility options" /> </Tab> <Tab title="Styling"> ### Color scheme Select color scheme for individual tile background and text. <Note> Overrides section-level color scheme for this specific tile. </Note> ### Media position Controls where media appears relative to text content. <AccordionGroup> <Accordion title="Top" icon="arrow-up"> Media displays above text content (default). **Best for:** Standard card layouts, image-first designs </Accordion> <Accordion title="Bottom" icon="arrow-down"> Media displays below text content. **Best for:** Text-priority designs, inverted layouts </Accordion> <Accordion title="Background" icon="layer-group"> Media serves as background with text overlay. **Best for:** Hero-style tiles, immersive imagery, full-bleed designs </Accordion> </AccordionGroup> ### Inner padding (Horizontal) Controls left and right padding inside the tile. **Options:** No padding, S, M (default), L, XL <Note> Only applies when media position is Top or Bottom (not Background). </Note> ### Inner padding (Vertical) Controls top and bottom padding inside the tile. **Options:** No padding, S, M (default), L, XL <Note> Only applies when media position is Top or Bottom (not Background). </Note> <img alt="Tile styling options" /> </Tab> <Tab title="Content"> ### Heading Tile heading text. * Inline rich text supported (bold, italic, links) * **Default:** "Heading for Dual Content Tiles" ### Heading size Controls the size of tile heading. **Options:** XS, S, M, L, XL\ **Default:** XL ### Text Main body content of the tile. * Rich text editor with formatting support * **Supports:** * Bold, italic, underline * Lists (bulleted, numbered) * Links * Leave empty to show heading and button only <Tip> Keep text concise (30-50 words) for tile readability. Use tiles for highlights, not long-form content. </Tip> <img alt="Content configuration" /> </Tab> <Tab title="Button"> ### Button text Label displayed on the call-to-action button. * Plain text * Leave empty to hide button ### Button URL Destination link when button is clicked. ### Button style Visual style of the button. <AccordionGroup> <Accordion title="Filled" icon="square"> Solid background with contrasting text (default). **Best for:** Primary CTAs, strong visibility </Accordion> <Accordion title="Outlined" icon="border-outer"> Border-only style with transparent background. **Best for:** Secondary actions, subtle CTAs </Accordion> <Accordion title="Text" icon="link"> Minimal text link styling. **Best for:** Tertiary actions, minimal designs </Accordion> </AccordionGroup> ### Button separator Adds a visual separator (line) above the button. **Default:** False <Note> Separator creates visual hierarchy separating button from content above. </Note> <img alt="Button configuration" /> </Tab> <Tab title="Desktop"> ### Content position Controls vertical alignment of text content on desktop. **Options:** Start (top), Center (default), End (bottom) ### Content alignment Controls horizontal alignment of text content on desktop. **Options:** Start (left), Center (default), End (right) ### Image (Desktop) Upload image for desktop display. **Recommended:** 1200px+ width, aspect ratio matching tile size ### Video (Desktop) Upload Shopify-hosted video file. Overwrites image when set. ### External video (Desktop) Embed YouTube or Vimeo video. Takes priority over image and video. **Accepts:** YouTube, Vimeo URLs <Warning> External videos may impact page load performance. </Warning> ### Aspect ratio (Desktop) Controls the height-to-width ratio of tile media. **Options:** * **Auto** - Uses natural image dimensions (default) * **Square:** 1:1 * **Landscape:** 4:3, 3:2, 5:4, 16:9, 2:1, 4:1, 8:1 * **Portrait:** 3:4, 2:3, 4:5, 9:16, 1:2 <Tip> Use Auto for varied content heights or fixed ratios for uniform tile dimensions. </Tip> <img alt="Desktop media configuration" /> </Tab> <Tab title="Mobile"> ### Content position (Mobile) Controls vertical alignment of text content on mobile independently. **Options:** Start (top), Center (default), End (bottom) ### Content alignment (Mobile) Controls horizontal alignment of text content on mobile independently. **Options:** Start (left), Center (default), End (right) ### Image (Mobile) Upload mobile-optimized image. **Recommended:** 800-1200px width, portrait orientation <Note> Mobile media overrides desktop media on small screens when provided. </Note> ### Video (Mobile) Shopify-hosted video for mobile devices. Overwrites mobile image. ### External video (Mobile) YouTube or Vimeo video for mobile. Takes priority. ### Aspect ratio (Mobile) Controls media aspect ratio on mobile devices independently. **Options:** Same as desktop\ **Default:** 1:1 (Square) ### Video mobile compact Reduces video padding on mobile for more compact display. **Default:** False <img alt="Mobile media configuration" /> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Balanced content" icon="scale-balanced"> Use Half (50/50) block size for equal emphasis, Large/Small for primary/secondary content hierarchy. </Card> <Card title="Consistent imagery" icon="image"> Use matching aspect ratios across both tiles for visual harmony and professional appearance. </Card> <Card title="Mobile optimization" icon="mobile"> Provide portrait-oriented mobile images and consider reversing tile order if second tile is more important on mobile. </Card> <Card title="Strategic gaps" icon="grip-lines"> Use larger gaps (L, XL) for clearly separated tiles, no gap for seamless edge-to-edge layouts. </Card> <Card title="Content brevity" icon="text-size"> Keep text concise (30-50 words per tile) for readability. Tiles are for highlights, not essays. </Card> <Card title="Button placement" icon="hand-pointer"> Add buttons to both tiles for balanced CTAs or just one tile to create visual hierarchy. </Card> <Card title="Color contrast" icon="palette"> Use different color schemes per tile to create visual interest and differentiate content types. </Card> <Card title="Background positioning" icon="layer-group"> When using background media position, ensure sufficient text-to-image contrast for readability. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Campaign split feature" icon="badge-percent"> Half (50/50) block size. Tile 1: "Men's Sale" with background image. Tile 2: "Women's Sale" with background image. Both with filled buttons. Center content alignment. Different color schemes per tile. </Accordion> <Accordion title="Primary/secondary content" icon="star"> Large (66/33) block size. Tile 1: Featured collection with background video, heading, text, outlined button. Tile 2: Newsletter signup with top media, heading, form description, filled button. </Accordion> <Accordion title="Product showcase duo" icon="bag-shopping"> Half (50/50) block size, small gap. Both tiles: product images (top position), product names as headings, brief descriptions, "Shop now" outlined buttons. Matching color schemes for cohesion. </Accordion> <Accordion title="Story + testimonial" icon="quote-left"> Large (66/33) block size. Tile 1: Brand story with background image, heading, 3-4 sentence text, "Learn more" text link. Tile 2: Customer testimonial with top portrait image, quote as text, customer name as heading. </Accordion> <Accordion title="Seasonal two-up banner" icon="calendar"> Full width section. Half (50/50) block size, no gap. Both tiles: background holiday images, seasonal headings, promotional text, filled buttons. Reverse on mobile to prioritize primary campaign. </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Carousel" icon="images" href="/themes/sahara/sections/carousel"> Multiple sliding content cards </Card> <Card title="Featured collections" icon="layer-group" href="/themes/sahara/sections/featured-collections"> Collection showcase with custom styling </Card> <Card title="Content tiles" icon="grip" href="/themes/sahara/sections/content-tiles"> Multi-tile grid layouts </Card> </CardGroup> # FAQ tile Source: https://docs.digifist.com/themes/sahara/sections/faq-tile Interactive visual FAQ section with central image and expandable content blocks The FAQ tile section creates an interactive, visually-engaging FAQ experience with a central image and expandable content blocks positioned around it. This page-template-only section provides a unique alternative to traditional accordion-style FAQs, offering a more visual and spatially interesting way to present frequently asked questions. Perfect for FAQ pages where you want to break from standard list layouts. ## What this section controls This section controls visual FAQ displays with the following capabilities: * Central featured image as focal point * Multiple expandable content blocks positioned around image * Section title with customizable size (XS to XL) * Optional call-to-action button with three style options * Three width options (Narrow, Page width, Fluid) * Separate desktop and mobile spacing controls * Color scheme selection * Page template only (not available on homepage) ## Section settings <AccordionGroup> <Accordion title="Section title"> Add the main heading displayed with the FAQ tile. Supports rich text formatting for bold, italic, and links. Configure the heading size from XS to XL (default: S). </Accordion> <Accordion title="Featured image"> Upload a central image that appears prominently in the FAQ tile layout. This image serves as the visual focal point of the section, making FAQs more engaging and branded. </Accordion> <Accordion title="Color scheme"> Select the color scheme for the FAQ tile section (default: scheme-1). This controls background colors, text colors, and overall visual styling. </Accordion> <Accordion title="Call-to-action button"> Add an optional button for additional help or escalation: **Button text** — The button label (default: "Contact Us"). Leave empty to hide the button. **Button URL** — Destination link for the button (default: /) **Button style** — Choose the visual appearance: * **Filled** (default) — Solid background button * **Outlined** — Border-only button * **Default** — Text-style link button </Accordion> <Accordion title="Section width"> Choose the container width for the FAQ tile: * **Narrow** — Compact width for focused content * **Page width** (default) — Standard container width * **Fluid** — Wider, edge-to-edge within padding </Accordion> <Accordion title="Spacing"> Control vertical spacing with separate settings for desktop and mobile: **Spacing top** — Top spacing for desktop (None, S, M, L, XL, default: M) **Spacing bottom** — Bottom spacing for desktop (None, S, M, L, XL, default: M) **Spacing top (Mobile)** — Independent top spacing for mobile devices (default: M) **Spacing bottom (Mobile)** — Independent bottom spacing for mobile devices (default: M) </Accordion> <Accordion title="Section border"> Add decorative borders to the section: * **None** (default) — No borders * **Top** — Border above the section * **Bottom** — Border below the section * **Both** — Borders above and below </Accordion> </AccordionGroup> ## Block: Content Create individual FAQ items with expandable content. <AccordionGroup> <Accordion title="FAQ title"> Add the question or topic heading for this FAQ item. Supports rich text formatting. </Accordion> <Accordion title="Heading size"> Control the size of the individual FAQ heading: * XS, S, M (default), L, XL This is separate from the section title size, allowing visual hierarchy. </Accordion> <Accordion title="Content"> Add the answer or detailed explanation for this FAQ item. Supports rich text formatting including lists, bold, italic, and links. </Accordion> </AccordionGroup> ## Default configuration The section includes a basic preset with the heading "Faq Tile Heading" and color scheme-5. Add Content blocks to populate with FAQ items. ## Best practices <CardGroup> <Card title="Visual branding" icon="image"> Use the featured image strategically to reinforce your brand identity or visually represent the FAQ topic area. </Card> <Card title="Concise questions" icon="heading"> Keep FAQ titles brief and question-focused (5-10 words) so users can quickly scan for their specific concern. </Card> <Card title="Comprehensive answers" icon="align-left"> Provide complete, helpful answers in the content field. Include links to related pages or resources when appropriate. </Card> <Card title="Logical organization" icon="sort"> Order FAQ blocks by importance or frequency. Place the most common questions first for quick access. </Card> <Card title="Contact escalation" icon="phone"> Use the call-to-action button to provide a contact option for questions not covered in the FAQs. </Card> <Card title="Mobile spacing" icon="mobile"> Utilize separate mobile spacing controls to optimize vertical rhythm on smaller screens where space is more constrained. </Card> </CardGroup> ## Use cases * **Product information pages** — Answer common product questions with visual appeal * **Store policy pages** — Explain shipping, returns, and other policies in an engaging format * **Support pages** — Create self-service help resources with branded visual identity * **About/Company pages** — Address frequently asked questions about your business * **Service pages** — Explain service details, processes, or requirements * **Landing pages** — Provide quick answers to objections or common concerns * **Educational content** — Create topic-focused FAQ sections with relevant imagery ## Related sections <Card title="Accordions" icon="bars-staggered" href="/themes/sahara/sections/accordions"> Traditional accordion-style FAQ section with expandable topics </Card> # Featured collections Source: https://docs.digifist.com/themes/sahara/sections/featured-collections Showcase multiple collections with flexible layouts, card styles, and customizable presentation options. The Featured collections section displays multiple collections in an organized, visually appealing format. It allows you to highlight different product categories, seasonal collections, or themed groups with flexible styling and layout options. <img alt="Featured collections section overview" /> ## What this section controls This section controls collection showcase displays with the following capabilities: * Multiple collection cards with custom images and headings * Two layout options for heading and button positioning * Normal or compact card styling * Individual color schemes per collection * Section-level button for viewing all collections ## How the Featured collections section works The section uses collection-slide blocks where each block represents one collection card. You can add custom images to override collection defaults, write custom headings, and apply individual styling to each collection card. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Featured collections section"> Add the Featured collections section to your page or template. </Step> <Step title="Add collection slides"> Click "Add block" and select "Collection slide" to add collections. </Step> <Step title="Select collections"> Choose a Shopify collection for each slide and customize as needed. </Step> </Steps> <img alt="Featured collections section in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Layout & Content"> ### Layout Controls the positioning of the section heading and button. <AccordionGroup> <Accordion title="Layout 1" icon="object-group"> Heading aligned to the start (left), button aligned to the end (right). **When to use:** * Standard collection sections * When button is secondary to heading * Horizontal balance in content layout </Accordion> <Accordion title="Layout 2" icon="align-center"> Heading and button both centered, with button displayed at the section bottom. **When to use:** * Centered page designs * Promotional collection showcases * Creating visual symmetry </Accordion> </AccordionGroup> <img alt="Layout comparison" /> ### Heading Main section heading text supporting rich text formatting (bold, italic, links). **Default:** "Heading for Featured Collections" ### Heading size Controls the visual size of the heading. **Available options:** XS, S, M, L, XL (default) ### Button settings <AccordionGroup> <Accordion title="Button label" icon="tag"> Text displayed on the section button. Default is "Explore all". <Tip> Leave empty to hide the button if not needed. </Tip> </Accordion> <Accordion title="Button link" icon="link"> Destination URL when the button is clicked. Default is "/collections" (all collections page). </Accordion> <Accordion title="Button style" icon="palette"> Visual styling of the button. **Available options:** * **Filled** - Solid background (default, highest emphasis) * **Outlined** - Border with transparent background * **Text link** - Minimal styling, text only </Accordion> </AccordionGroup> </Tab> <Tab title="Collection Cards"> ### Card style Controls the visual density and presentation of collection cards. <AccordionGroup> <Accordion title="Normal" icon="square"> Standard card presentation with full spacing and padding. **When to use:** * When emphasizing collection images * For larger, more prominent displays * When you have high-quality collection imagery </Accordion> <Accordion title="Compact" icon="compress"> Reduced spacing and tighter layout (default). **When to use:** * Displaying many collections in limited space * Cleaner, more minimal designs * When collection names are more important than images </Accordion> </AccordionGroup> <img alt="Card style comparison" /> </Tab> <Tab title="Styling"> ### Section width Controls the maximum width of the section container. <AccordionGroup> <Accordion title="Page width" icon="window-restore"> Content limited to theme's page width (default). **When to use:** Standard sections that align with other page content. </Accordion> <Accordion title="Full width" icon="expand"> Content extends to full browser width. **When to use:** Edge-to-edge designs, maximizing collection visibility. </Accordion> </AccordionGroup> ### Color scheme Select the background and text color scheme for the entire section. ### Spacing Control vertical spacing around the section: * **Spacing top** - Margin above the section (None, S, M, L, XL) * **Spacing bottom** - Margin below the section (None, S, M, L, XL) Both default to M (medium spacing). ### Section border Add decorative borders to the section. **Available options:** * **None** - No borders (default) * **Top** - Border on top edge only * **Bottom** - Border on bottom edge only * **Both** - Borders on top and bottom edges <img alt="Styling and spacing options" /> </Tab> </Tabs> ## Block settings Each collection-slide block represents one collection card in the display. <Tabs> <Tab title="Collection"> ### Collection selection Select a Shopify collection to display. <AccordionGroup> <Accordion title="Collection behavior" icon="layer-group"> The selected collection determines: * Default collection image (if custom image not set) * Collection link destination * Default heading (if custom heading not provided) * Product count and availability Collections update automatically when products are added or removed. </Accordion> </AccordionGroup> ### Custom image Upload a custom image to override the collection's default image. <AccordionGroup> <Accordion title="When to use custom images" icon="image"> **Use custom images when:** * Collection default image doesn't match your design * Creating seasonal or promotional variants * Maintaining visual consistency across all cards * Collection has no default image set **Image recommendations:** * High resolution (at least 800px width) * Consistent aspect ratios across all collection cards * Clear focal points that work at different sizes * Optimized file sizes for web performance </Accordion> </AccordionGroup> <img alt="Custom image option" /> </Tab> <Tab title="Content"> ### Heading (Title) Custom heading text for this collection card. <AccordionGroup> <Accordion title="Heading behavior" icon="heading"> If no custom heading is provided, the collection name will be used automatically. **When to customize:** * Create marketing-friendly names ("Shop Summer Styles" vs. "summer-2024") * Add promotional context or urgency * Maintain consistent heading style * Include specific calls-to-action **When to leave empty:** * Collection name is already clear and customer-friendly * Reducing manual maintenance * Letting collection metadata control display </Accordion> </AccordionGroup> ### Heading size Controls the visual size of the collection heading. **Available options:** XS, S, M, L (default), XL Typically use L or M for consistency across all collection cards. <Tip> Use the same heading size across all collection slides for visual harmony. </Tip> </Tab> <Tab title="Styling"> ### Color scheme Select an individual color scheme for this specific collection card. <AccordionGroup> <Accordion title="Individual color schemes" icon="palette"> Each collection card can have its own color scheme, independent from the section's overall color scheme. **When to use different colors:** * Seasonal collection differentiation * Brand-specific collections (multi-brand stores) * Creating visual hierarchy or emphasis * Thematic categorization (e.g., warm colors for summer, cool for winter) **When to use uniform colors:** * Maintaining clean, consistent design * Professional, minimalist aesthetics * When collection images provide enough visual variety </Accordion> </AccordionGroup> <img alt="Individual color scheme options" /> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Consistent imagery" icon="images"> Use similar aspect ratios and image styles across all collection cards for professional appearance. </Card> <Card title="Clear headings" icon="heading"> Use descriptive, action-oriented headings that explain what customers will find in each collection. </Card> <Card title="Strategic count" icon="list"> Display 3-6 collections for optimal browsing. Too many collections overwhelm customers. </Card> <Card title="Compact for many" icon="compress"> Use compact card style when displaying 5+ collections to save space and reduce scrolling. </Card> <Card title="Color purposefully" icon="palette"> Use individual color schemes sparingly. Too many colors create visual chaos. </Card> <Card title="Update seasonally" icon="calendar"> Refresh collection selections and custom images seasonally to keep content relevant. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Homepage category navigation" icon="grid"> Display 4-6 main product categories using Layout 1 with compact cards. Use collection default images and names. Link button to "/collections" for full catalog access. </Accordion> <Accordion title="Seasonal collection showcase" icon="snowflake"> Use 3 collection slides with custom seasonal images. Apply individual color schemes matching seasonal themes (warm/cool tones). Use custom headings like "Winter Essentials 2024". </Accordion> <Accordion title="Shop by style landing page" icon="shirt"> Create 4-8 style-based collections with Layout 2 (centered). Use normal card style for prominent imagery. Add custom images showing lifestyle shots of each style. </Accordion> <Accordion title="Brand category page" icon="tag"> For multi-brand stores, display brand collections with their logos as custom images. Use compact cards to fit more brands. Apply individual color schemes matching brand colors. </Accordion> <Accordion title="Gender-based navigation" icon="users"> Simple 2-3 collection setup (Men's, Women's, Kids) with large normal cards and Layout 2. Use high-impact lifestyle images and filled button style for strong CTAs. </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Featured products" icon="box" href="/themes/sahara/sections/featured-products"> Display individual products instead of collections </Card> <Card title="Collection list page" icon="list" href="/themes/sahara/templates/list-collections"> Learn about the all-collections page template </Card> </CardGroup> # Featured products Source: https://docs.digifist.com/themes/sahara/sections/featured-products Showcase selected products or collections with flexible layouts and styling options. The Featured products section displays a curated selection of products in a prominent layout. It supports manual product selection or collection-based display, making it ideal for highlighting seasonal items, bestsellers, or new arrivals. <img alt="Featured products section overview" /> ## What this section controls This section controls product showcase displays with the following capabilities: * Manual product selection or automatic collection loading * Two layout options for heading and button positioning * Configurable product count from 4 to 12 items * Section-level button for viewing full collection * Display control for unavailable products ## How the Featured products section works The section uses collection blocks to define product sources. You can either manually select specific products or choose a Shopify collection. When a collection is selected, it automatically overrides any manual product selections, keeping the display updated with the latest collection contents. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Featured products section"> Add the Featured products section to your page or template. </Step> <Step title="Add collection block"> Click "Add block" and select "Collection" to define your product source. </Step> <Step title="Select products or collection"> Either manually select products or choose a Shopify collection. </Step> </Steps> <img alt="Featured products section in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Layout & Content"> ### Layout Controls the positioning of the section heading and button. <AccordionGroup> <Accordion title="Layout 1" icon="object-group"> Heading aligned to the start (left), button aligned to the end (right). **When to use:** * Standard product sections with clear hierarchy * When the button is secondary to the heading * Desktop-friendly layouts with horizontal balance </Accordion> <Accordion title="Layout 2" icon="align-center"> Heading and button both centered, with button displayed at the section bottom. **When to use:** * Centered page designs * When creating visual symmetry * Promotional sections with equal emphasis on heading and action </Accordion> </AccordionGroup> <img alt="Layout comparison" /> ### Heading Main section heading text supporting rich text formatting (bold, italic, links). ### Heading size Controls the visual size of the heading. **Available options:** XS, S, M, L, XL (default) Choose smaller sizes for secondary sections and larger sizes for primary homepage features. ### Button settings <AccordionGroup> <Accordion title="Button label" icon="tag"> Text displayed on the section button. Default is "View all". <Tip> Leave empty to hide the button completely if not needed. </Tip> </Accordion> <Accordion title="Button link" icon="link"> Destination URL when the button is clicked. Typically links to a collection page or category. </Accordion> <Accordion title="Button style" icon="palette"> Visual styling of the button. **Available options:** * **Filled** - Solid background (default, highest emphasis) * **Outlined** - Border with transparent background * **Text link** - Minimal styling, text only </Accordion> </AccordionGroup> </Tab> <Tab title="Products"> ### Number of products for each group Controls how many products are displayed from the collection or manual selection. **Range:** 4 – 12 products (default: 8) <AccordionGroup> <Accordion title="Choosing product count" icon="list-ol"> **When to use different counts:** * **4 products** - Minimal showcases, sidebar sections * **8 products** - Standard homepage display (recommended) * **12 products** - Large collection previews, full-width sections Consider your section width and product card size when selecting the count. More products require more scrolling on mobile devices. </Accordion> </AccordionGroup> <Tip> For mobile optimization, we recommend 8 or fewer products to avoid excessive scrolling. </Tip> </Tab> <Tab title="Styling"> ### Section width Controls the maximum width of the section container. <AccordionGroup> <Accordion title="Page width" icon="window-restore"> Content limited to theme's page width (default). **When to use:** Standard sections that align with other page content. </Accordion> <Accordion title="Full width" icon="expand"> Content extends to full browser width. **When to use:** Edge-to-edge designs, promotional sections, maximizing product visibility. </Accordion> </AccordionGroup> ### Color scheme Select the background and text color scheme for the section. ### Spacing Control vertical spacing around the section: * **Spacing top** - Margin above the section (None, S, M, L, XL) * **Spacing bottom** - Margin below the section (None, S, M, L, XL) Both default to M (medium spacing). ### Section border Add decorative borders to the section. **Available options:** * **None** - No borders (default) * **Top** - Border on top edge only * **Bottom** - Border on bottom edge only * **Both** - Borders on top and bottom edges <img alt="Styling and spacing options" /> </Tab> </Tabs> ## Block settings Each collection block defines a product source and configuration. <Tabs> <Tab title="Product source"> ### Products (Manual selection) Manually select up to 12 specific products to display. <AccordionGroup> <Accordion title="When to use manual selection" icon="hand-pointer"> **Best for:** * Curated product sets for campaigns * Specific product combinations (e.g., outfit bundles) * Promotional displays with hand-picked items * Temporary seasonal showcases <Warning> Manual selections require updating when products change. Collection selections update automatically. </Warning> </Accordion> </AccordionGroup> ### Collection Select a Shopify collection to automatically display its products. <AccordionGroup> <Accordion title="Collection vs manual selection" icon="circle-question"> When a collection is selected, it **overrides** any manual product selections. **Collection benefits:** * Automatically updates when collection contents change * Respects collection sorting rules * Easier to maintain long-term * Scales with inventory changes **When to use collections:** * New arrivals sections (auto-updated) * Bestsellers (dynamic sorting) * Seasonal categories * Standard collection preview sections </Accordion> </AccordionGroup> <img alt="Product source configuration" /> </Tab> <Tab title="Block settings"> ### Title (Heading) Optional heading for this specific collection block shown above the products. <AccordionGroup> <Accordion title="Title behavior" icon="heading"> If no heading is provided, the section will use the collection name automatically. **When to customize:** * Create marketing-friendly names ("Shop Our Bestsellers" vs. "bestsellers-2024") * Add context or calls-to-action * Maintain consistent heading style across sections **When to leave empty:** * Collection name is already clear and user-friendly * Reducing visual clutter * Letting collection metadata control display </Accordion> </AccordionGroup> ### Show unavailable products Controls whether out-of-stock or unavailable products are displayed. <AccordionGroup> <Accordion title="Unavailable products behavior" icon="box-open"> When enabled, products marked as unavailable or out of stock will still appear in the list. **When to enable:** * Pre-order campaigns * Coming soon product previews * Maintaining consistent product count * Showing full collection range **When to disable (default):** * Standard product displays * Avoiding customer frustration * Focusing on purchasable items * Improving conversion rates </Accordion> </AccordionGroup> <Note> Unavailable products typically display with reduced opacity or an "Out of Stock" badge based on theme settings. </Note> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Use collections" icon="layer-group"> Prefer collection selection over manual picks for automatic updates and easier long-term maintenance. </Card> <Card title="Optimize count" icon="list"> Limit to 8 products or fewer on mobile-heavy stores to reduce scrolling and improve load times. </Card> <Card title="Clear headings" icon="heading"> Use descriptive headings that clarify the product selection ("New This Week" vs. "Featured Products"). </Card> <Card title="Strategic placement" icon="location-dot"> Place on homepage, collection pages, or landing pages for maximum visibility and engagement. </Card> <Card title="Consistent styling" icon="palette"> Match section color schemes with your overall theme design for visual coherence. </Card> <Card title="Button clarity" icon="hand-pointer"> Use action-oriented button text ("Shop Collection", "View All") instead of generic labels. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Homepage new arrivals" icon="sparkles"> Use a "New Arrivals" collection with 8 products. Set layout to 1 (heading left, button right). Enable button linking to the full collection page. This automatically updates as new products are added. </Accordion> <Accordion title="Seasonal promotion" icon="calendar"> Manually select 8-12 seasonal products. Use layout 2 (centered) for promotional emphasis. Set custom heading like "Summer Essentials 2024". Use filled button style for maximum visibility. </Accordion> <Accordion title="Bestsellers showcase" icon="fire"> Select your "Bestsellers" or "Popular" collection. Set to 8 products with layout 1. Leave heading empty to use collection name. This creates a dynamic display that updates based on sales data. </Accordion> <Accordion title="Category preview" icon="grid-2"> On a landing page, use collection block to preview a category. Set to 4-6 products with compact layout. Add button linking to full collection for deeper browsing. </Accordion> <Accordion title="Coming soon preview" icon="eye"> Manually select upcoming products. Enable "Show unavailable products" to display pre-order or coming soon items. Use custom heading explaining launch date or availability. </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Featured collections" icon="layer-group" href="/themes/sahara/sections/featured-collections"> Display multiple collections in grid or carousel format </Card> <Card title="Product recommendations" icon="wand-magic-sparkles" href="/themes/sahara/sections/product-recommendations"> Show AI-powered product recommendations </Card> </CardGroup> # Contact form Source: https://docs.digifist.com/themes/sahara/sections/form-contact Display a simple contact form with name, email, and message fields for customer inquiries and support requests. The Contact form section provides a straightforward way for customers to reach you with inquiries, support requests, or feedback. It includes three pre-configured fields (Name, Email, Message) and integrates with Shopify's contact form system for email delivery. This section is essential for customer communication and typically used on dedicated contact pages or support pages. <img alt="Contact form section overview" /> ## What this section controls This section controls contact form displays with the following capabilities: * Pre-configured contact form with three standard fields * Name field (optional, auto-fills for logged-in customers) * Email field (required, auto-fills for logged-in customers) * Message/body field (textarea for longer messages) * Form submission handling with success/error messaging * Customer data auto-population for logged-in users * Narrow, focused layout optimized for form completion ## How the Contact form works The Contact form section uses Shopify's built-in contact form functionality: **Form fields:** * **Name** - Text input, optional, auto-completes with customer name if logged in * **Email** - Required text input with email validation, auto-completes if customer logged in * **Message** - Large textarea for customer message or inquiry **Form submission:** 1. Customer fills out form 2. Form validates required fields (email) 3. Upon successful submission: * Displays success message * Sends email to store owner's notification address * Form content sent to Shopify admin customer contact records 4. If errors occur: * Displays error messages * Preserves form data for correction ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Navigate to Contact page"> In left sidebar, click **Pages** > **Contact** or add section to your contact page template. </Step> <Step title="Add Contact form section"> If not already present, add the Contact form section to the page. </Step> <Step title="Configure layout"> Adjust section width, color scheme, and spacing settings. </Step> <Step title="Test submission"> Preview and test form submission to verify email delivery. </Step> </Steps> <img alt="Contact form in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Layout"> ### Section width Controls the maximum width of the contact form. <AccordionGroup> <Accordion title="Narrower" icon="compress"> Most compact width, highly focused (default). **Best for:** * Maximum form focus * Minimal distractions * Higher completion rates * Standard contact pages **Recommended** for most contact forms. </Accordion> <Accordion title="Narrow" icon="left-right"> Moderately narrow width, balanced. **Best for:** * Slightly more spacious layout * Pages with additional content * Balanced appearance </Accordion> <Accordion title="Page" icon="window-maximize"> Standard page container width. **Best for:** * Matching other page sections * Multi-column layouts * Additional context alongside form </Accordion> <Accordion title="Fluid" icon="expand"> Wider container utilizing more screen space. **Best for:** * Wide screen displays * Forms with extensive content * Custom designs </Accordion> </AccordionGroup> <Tip> Narrower width (default) improves form readability and completion rates by reducing visual noise and focusing attention. </Tip> <img alt="Section width options" /> </Tab> <Tab title="Styling"> ### Color scheme Select color scheme for form background, text, and input styling. <Note> Color scheme affects background, text color, input borders, and submit button appearance. </Note> ### Spacing Control vertical spacing around the section: * **Spacing top** - Margin above (None, S, M, L, XL) * **Spacing bottom** - Margin below (None, S, M, L, XL) Default: Spacing top None, Spacing bottom M <Note> Contact form sections typically use no top spacing when placed directly below a page banner. </Note> ### Section border Add decorative borders: None (default), Top, Bottom, Both <img alt="Styling options" /> </Tab> </Tabs> ## Form fields The Contact form includes three pre-configured fields: <AccordionGroup> <Accordion title="Name field" icon="user"> **Type:** Text input\ **Required:** No\ **Auto-fill:** Yes (for logged-in customers) Customer's name. Optional field that auto-completes with `customer.name` for logged-in users. **Input attributes:** * `autocomplete="name"` for browser auto-fill * Full-width on mobile, half-width on desktop (shares row with email) </Accordion> <Accordion title="Email field" icon="envelope"> **Type:** Email input (required)\ **Required:** Yes\ **Auto-fill:** Yes (for logged-in customers)\ **Validation:** Email format Customer's email address. Required field with email validation. Auto-completes with `customer.email` for logged-in users. **Input attributes:** * `autocomplete="email"` for browser auto-fill * `spellcheck="false"` to prevent unwanted corrections * `autocapitalize="off"` for proper email formatting * `aria-required="true"` for accessibility **Error handling:** * Displays validation error if email format invalid * Shows required field error if left empty * Preserves entered value on error for correction </Accordion> <Accordion title="Message field" icon="message"> **Type:** Textarea\ **Required:** No\ **Auto-fill:** No Large text area for customer's message, inquiry, or feedback. **Input attributes:** * Multi-line text input (textarea) * Full-width across all devices * Expandable height for longer messages </Accordion> </AccordionGroup> <img alt="Contact form fields" /> ## Form submission ### Success state When form is submitted successfully: * **Success message displayed:**\ "Thanks for contacting us. We'll get back to you as soon as possible."\ (Translation key: `contact.form.success`) * **Email sent:**\ Form contents delivered to store's customer notification email address (configured in Shopify Settings > Notifications) * **Customer record:**\ If customer logged in, inquiry added to their customer record in Shopify admin <img alt="Form success message" /> ### Error handling When form submission fails or validation errors occur: * **Error display:**\ Red error message shown above form * **Field preservation:**\ Customer's entered data preserved for correction * **Common errors:** * "Email address is required" * "Email is invalid" * Connection/server errors <Warning> Ensure your Shopify store's notification email is correctly configured to receive contact form submissions. </Warning> ## Best practices <CardGroup> <Card title="Narrow width" icon="compress-wide"> Use Narrower (default) or Narrow width for better form completion rates and reduced distractions. </Card> <Card title="Page placement" icon="location-dot"> Place directly below Page banner section with no top spacing for cohesive contact page layout. </Card> <Card title="Clear heading" icon="heading"> Use Page banner section heading to introduce the form: "Get in Touch", "Contact Us", "How Can We Help?". </Card> <Card title="Email verification" icon="envelope-circle-check"> Test form submission to verify emails arrive at your notification address before going live. </Card> <Card title="Success confirmation" icon="circle-check"> Consider adding text in Page banner description setting customer expectations: "We typically respond within 24 hours." </Card> <Card title="Mobile optimization" icon="mobile"> Form automatically stacks fields vertically on mobile for optimal usability on small screens. </Card> <Card title="Accessibility" icon="universal-access"> Email field includes proper ARIA attributes and required field indicators (\*) for screen readers. </Card> <Card title="Color contrast" icon="palette"> Ensure color scheme provides sufficient contrast for input fields and text readability. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Standard contact page" icon="address-card"> Page banner with heading "Contact Us" and description "Have questions? We're here to help." Contact form below with Narrower width, default color scheme, no top spacing. </Accordion> <Accordion title="Support inquiry page" icon="headset"> Page banner heading "Customer Support" with FAQ search enabled. Contact form below with Narrow width for balance with search functionality. Message placeholder guidance: "Describe your issue..." </Accordion> <Accordion title="Custom order requests" icon="shopping-cart"> Page banner heading "Custom Order Inquiry" with description explaining custom order process. Contact form with Page width to accommodate additional content. Clear call-to-action in banner. </Accordion> <Accordion title="Partnership inquiries" icon="handshake"> Page banner heading "Partner With Us" with business partnership description. Contact form with Narrower width, professional color scheme (scheme-2 or scheme-3), standard spacing. </Accordion> <Accordion title="General inquiries" icon="circle-question"> Page banner heading "Get In Touch" with multi-channel contact info (email, phone, hours). Contact form below as primary method with Narrower width and M bottom spacing. </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Page banner" icon="window" href="/themes/sahara/sections/page-banner"> Page header banners for contact pages </Card> <Card title="Rich text" icon="align-left" href="/themes/sahara/sections/rich-text"> Additional contact information and policy text </Card> </CardGroup> ## Email configuration <AccordionGroup> <Accordion title="Configure notification email" icon="gear"> Contact form submissions are sent to your store's customer notification email address. **To configure:** 1. Go to Shopify Admin > **Settings** > **Notifications** 2. Scroll to **Staff notification email** section 3. Set **Customer contact** email address 4. Save changes <Note> This email address receives all contact form submissions from your store. </Note> </Accordion> <Accordion title="Notification email content" icon="envelope-open-text"> Email includes: * Customer's name (if provided) * Customer's email address * Message content * Submission timestamp * Customer information (if logged in) <Tip> Set up email filters or labels to organize contact form submissions in your inbox. </Tip> </Accordion> </AccordionGroup> # Hero alt Source: https://docs.digifist.com/themes/sahara/sections/hero-alt Alternative hero banner with adjustable height and side-by-side text and media layout The Hero alt section provides an alternative hero banner design featuring a side-by-side layout with text content and media. Unlike the standard hero banner, this section offers a customizable viewport height and supports a maximum of two blocks for simpler, more focused messaging. Use this when you want a cleaner, less complex hero than the full hero banner provides. ## What this section controls This section controls hero banner displays with the following capabilities: * Adjustable viewport height (40vh to 100vh) * Side-by-side text and media layout * Maximum of 2 content blocks (1 text + 1 media) * Three width options (Page width, Fluid, Full width) * Text content with heading, description, and CTA buttons * Media support for images and videos * Color scheme and spacing controls ## Section settings <AccordionGroup> <Accordion title="Banner height"> **Hero alt banner height** — Control the vertical height of the hero section as a percentage of the viewport height. Range: 40vh to 100vh (default: 50vh) Step: 10vh increments <Tip> Use 50vh (half screen) for balanced layouts that don't dominate the page. Use 100vh (full screen) for dramatic, immersive hero experiences. </Tip> </Accordion> <Accordion title="Section width"> Choose the overall container width: * **Page width** (default) — Standard container width * **Fluid** — Wider, edge-to-edge within padding * **Full width** — Complete edge-to-edge layout </Accordion> <Accordion title="Color scheme"> Select the background and text color scheme for the section (default: scheme-1). </Accordion> <Accordion title="Spacing"> Control vertical spacing above and below the section with options from None to XL (0, S, M, L, XL). Default is M for both top and bottom. </Accordion> <Accordion title="Section border"> Add decorative borders: * **None** (default) — No borders * **Top** — Border above the section * **Bottom** — Border below the section * **Both** — Borders above and below </Accordion> </AccordionGroup> ## Block: Text The text content block displays promotional messaging and call-to-action. Limited to **1 block** per section. <AccordionGroup> <Accordion title="Content"> **Subtitle** — Secondary text appearing above the main title (default: "Highlight your promotion") **Title** — Main heading text using textarea for multi-line support (default: "Highlight an image") **Content** — Descriptive text with rich text formatting support. Default: "Add text to describe your promotion." </Accordion> <Accordion title="Call-to-action button"> **Button style** — Choose the visual appearance: * **Filled** (default) — Solid background button * **Outlined** — Border-only button * **Default** — Text-style link button **Button text** — The button label (default: "View more") **Button URL** — Destination link (default: /) **Button separator** — Enable a visual separator line above the button (enabled by default). This creates visual distinction between content and the call-to-action. </Accordion> </AccordionGroup> ## Block: Media The media block displays an image alongside the text content. Limited to **1 block** per section. <AccordionGroup> <Accordion title="Image"> Upload an image using Shopify's image picker. This image appears in a side-by-side layout with the text block. <Tip> Use high-quality images that complement your promotional message. Ensure images are optimized for web to maintain fast loading times. </Tip> </Accordion> </AccordionGroup> ## Default configuration The section preset includes both required blocks: * **Text block** — With subtitle, title, content, and button * **Media block** — For image display This creates a complete side-by-side hero layout ready for customization. ## Best practices <CardGroup> <Card title="Height selection" icon="arrows-up-down"> Use 50vh for balanced layouts that leave room for content below. Reserve 100vh for landing pages or major promotional campaigns. </Card> <Card title="Image quality" icon="image"> Use high-resolution images (at least 2000px wide) to support full-width displays on large screens without quality loss. </Card> <Card title="Text brevity" icon="align-left"> Keep title and subtitle concise for maximum impact. Long text blocks can overwhelm the hero layout. </Card> <Card title="Button clarity" icon="hand-pointer"> Use action-oriented button text like "Shop Now", "Learn More", or "Get Started" rather than generic "Click Here". </Card> <Card title="Button separator" icon="minus"> Keep the button separator enabled for visual hierarchy, especially when using default or outlined button styles. </Card> <Card title="Mobile testing" icon="mobile"> Preview on mobile devices where the side-by-side layout may stack vertically. Ensure content remains readable. </Card> </CardGroup> ## Use cases * **Product launches** — Announce new products with compelling imagery and promotional text * **Seasonal campaigns** — Highlight holiday sales or seasonal collections * **Brand storytelling** — Share brand values or mission with supporting visuals * **Collection promotions** — Feature specific product collections with targeted messaging * **Landing pages** — Create focused landing page heroes for marketing campaigns * **Event announcements** — Promote sales events, webinars, or special occasions * **Value propositions** — Communicate key benefits with visual reinforcement ## Comparison with standard hero | Feature | Hero alt | Hero banner | | -------------- | --------------------- | ----------------------------- | | Max blocks | 2 blocks | Unlimited slides | | Layout | Side-by-side | Full-width image with overlay | | Height control | Adjustable (40-100vh) | Typically fixed or auto | | Complexity | Simplified, focused | Feature-rich with slideshows | | Best for | Direct messaging | Multiple products/messages | Use **Hero alt** for simpler, more focused promotional messaging. Use **Hero banner** for complex slideshows or multiple promotional messages. ## Related sections <CardGroup> <Card title="Hero banner" icon="image" href="/themes/sahara/sections/hero-banner"> Full-featured hero section with slideshow capabilities </Card> <Card title="Full width banner" icon="panorama" href="/themes/sahara/sections/full-width-banner"> Simple full-width banner section </Card> </CardGroup> # Main Blog Banner Source: https://docs.digifist.com/themes/sahara/sections/main-blog-banner Blog page header banner displaying blog title and breadcrumbs The Main Blog Banner template section displays a header banner at the top of blog listing pages showing the blog title and optional breadcrumb navigation. This simple presentation section improves site navigation and SEO by providing clear context for blog content while maintaining visual consistency across your storefront. Use this section on all blog listing pages for professional page structure and improved user orientation. ## What this section controls This section controls blog page headers with the following capabilities: * Automatic blog title display * Optional breadcrumb navigation * Three section width options (Narrow, Page, Fluid) * Color scheme selection * Top and bottom spacing controls (0-6 scale) * Border options (None, Top, Bottom, Both) * Template-only section (blog listing pages) * Automatic content from blog settings *** ## Template Settings The Main Blog Banner has basic layout and styling controls: <AccordionGroup> <Accordion title="Section Width" icon="left-right"> Control the width of the banner content: * **Narrow** - Narrower content width * **Page** (default) - Standard page width * **Fluid** - Extends to container edges <Tip> Page width provides good balance between readability and visual presence for blog titles. </Tip> </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 <Note> Consider using a contrasting color scheme from the blog listing below to create visual separation. </Note> </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** <Tip> Bottom border can help visually separate the banner from the article grid below. </Tip> </Accordion> </AccordionGroup> *** ## Display Content The banner automatically displays: ### Blog Title <Accordion title="Title Display" icon="heading"> * Displays the blog name (from blog settings in Shopify Admin) * Rendered as H1 heading for SEO * Centered alignment * Large, prominent typography <Note> The blog title is set in **Shopify Admin → Content → Blog posts → Manage blogs → Select blog → Title field**. It cannot be customized within the template. </Note> </Accordion> ### Breadcrumbs (Optional) <Accordion title="Breadcrumb Navigation" icon="chevrons-right"> Displays breadcrumb trail if enabled in theme settings. * **Controlled by:** Theme settings (not section settings) * **Setting location:** Theme customizer → General settings → Breadcrumbs * **Visibility:** Desktop only (hidden on mobile) **Typical breadcrumb path:** ``` Home > Blog ``` or (if on tagged page): ``` Home > Blog > Tag Name ``` <Tip> Breadcrumbs improve navigation and provide SEO benefits by creating internal linking structure. </Tip> </Accordion> *** ## Use Cases <CardGroup> <Card title="Blog Identity" icon="id-card"> Clearly identifies the blog section of your site and sets context for readers </Card> <Card title="SEO Structure" icon="sitemap"> Provides H1 heading and breadcrumbs for search engine optimization </Card> <Card title="Visual Separation" icon="layer-group"> Creates clear header before article grid, improving page structure </Card> <Card title="Navigation Aid" icon="map-location-dot"> Breadcrumbs help users understand their location within site hierarchy </Card> </CardGroup> *** ## Best practices <CardGroup> <Card title="Color scheme selection" icon="palette"> Use the same scheme as blog article cards for a cohesive look, or choose a contrasting scheme to create a distinct header section. Lifestyle blogs should consider softer, branded color schemes, while corporate blogs benefit from professional, neutral schemes that reflect your blog's dedicated brand identity. </Card> <Card title="Spacing strategy" icon="arrows-up-down"> Default M (2) spacing works for most layouts, but increase bottom spacing to L or XL to create breathing room before the article grid. Reduce spacing to 0 if using borders for separation instead, and match spacing with your header section for visual consistency. The banner automatically includes large padding on mobile for better UX. </Card> <Card title="Blog title optimization" icon="heading"> Keep your blog title concise at 1-4 words and make it descriptive of your content type, such as "Blog" (simple), "News & Updates" (informative), "Style Journal" (branded), or "The Edit" (creative). Choose something that scales across all contexts since it appears on all blog listing pages and in page titles. </Card> <Card title="Breadcrumb settings" icon="sliders"> Enable breadcrumbs if you have a complex site structure, or disable them if navigation is obvious or your site is simple. Test on mobile where breadcrumbs auto-hide on small screens, and ensure breadcrumb styling matches your theme. Settings are controlled globally and affect all pages where breadcrumbs appear. </Card> </CardGroup> *** ## Design Variations <CardGroup> <Card title="Minimal" icon="minimize"> * Narrow width * Light neutral color scheme * No borders * Default spacing Clean, understated header </Card> <Card title="Prominent" icon="maximize"> * Fluid width * Bold contrasting color scheme * Bottom border * L or XL bottom spacing Eye-catching blog header </Card> <Card title="Branded" icon="palette"> * Page width * Custom brand color scheme * Matching spacing to blog cards * Optional bottom border On-brand blog identity </Card> <Card title="Corporate" icon="building"> * Narrow width * Professional neutral scheme * Clean lines (no borders) * Minimal spacing Business-appropriate styling </Card> </CardGroup> *** ## Related Templates <CardGroup> <Card title="Main Blog" icon="newspaper"> The blog listing template that appears below this banner </Card> <Card title="Main Article" icon="file-lines"> Individual article template (doesn't use this banner) </Card> <Card title="Page Banner Section" icon="image"> Similar banner section used on other page types </Card> </CardGroup> *** ## Technical Details ### Automatic Content The banner automatically pulls: * **Blog title:** From `blog.title` Liquid object * **Breadcrumbs:** From theme settings and current URL structure ### CSS Classes The banner uses: * `page-banner` - Base banner styling * `page-banner--padding-lg-mobile` - Mobile padding adjustment * `center` - Centered text alignment * `color-{{ scheme }}` - Color scheme class ### SEO Impact <AccordionGroup> <Accordion title="H1 Heading" icon="hashtag"> The blog title is rendered as an H1 tag, which is important for SEO: * Only one H1 per page (search engine best practice) * Contains blog name for keyword relevance * Provides clear page topic signal </Accordion> <Accordion title="Breadcrumb Structured Data" icon="code"> When breadcrumbs are enabled: * Creates navigational hierarchy * May appear in search results (Google rich snippets) * Improves crawlability and site architecture understanding * Provides additional internal links </Accordion> </AccordionGroup> *** ## Customization Options While the template is simple, you can enhance it: <CardGroup> <Card title="Add Description" icon="text"> Use theme code to add blog description below title (requires development) </Card> <Card title="Add Search" icon="magnifying-glass"> Consider adding a search bar for large blogs (requires custom code) </Card> <Card title="Above Banner" icon="arrow-up"> Add sections above the banner (promotional banners, announcements) </Card> <Card title="Below Banner" icon="arrow-down"> Add sections between banner and blog listing (featured posts, newsletter) </Card> </CardGroup> *** ## Quick Summary * **Purpose:** Blog page header banner * **Content:** Blog title (H1) + optional breadcrumbs * **Settings:** Width, color scheme, spacing, borders * **Configuration:** Minimal (content is automatic) * **Title Source:** Blog settings in Shopify Admin * **Breadcrumbs:** Controlled by global theme setting * **SEO:** Provides H1 heading and breadcrumb navigation <Note> This is a template section, meaning it only appears on blog listing pages, not on individual article pages. </Note> # Collection Banner Source: https://docs.digifist.com/themes/sahara/sections/main-collection-banner Collection page hero banner with customizable layout and transparent header support The Collection Banner section displays a hero banner at the top of collection pages, automatically showing the collection title, description, and optional featured image. This banner creates a visually striking introduction to collection pages, establishing clear branding and context before the product grid. Use this section on all collection pages to elevate your catalog presentation with professional, immersive collection headers. ## What this section controls This section controls collection page headers with the following capabilities: * Hero banner with collection title and description * Optional featured image display * Transparent header overlay option * Section height control (30vh to 100vh) * Three banner layout modes (Full, Split, Text) * Desktop and mobile image support * Image position controls (Center, Top, Bottom) * Color scheme and spacing controls * Template-only section (collection pages) *** ## Template Settings <AccordionGroup> <Accordion title="Enable Transparent Header" icon="eye-slash"> Makes the site header transparent, overlaying the banner. * **Type:** Checkbox * **Default:** Enabled <Note> When enabled, the header becomes transparent and floats over the banner, creating a modern, immersive design. The header background appears when scrolling down. </Note> <Tip> Transparent headers work best with high-contrast banner images. Ensure collection images have good contrast for header visibility. </Tip> </Accordion> <Accordion title="Section Height" icon="arrows-up-down"> Control the vertical height of the banner. * **Range:** 30vh - 100vh (viewport height) * **Step:** 10vh increments * **Unit:** vh (viewport height percentage) * **Default:** 40vh **Height Recommendations:** * **30-40vh:** Standard collection banners * **50-60vh:** Prominent featured collections * **70-100vh:** Full-screen hero collections <Note> vh units scale with viewport (browser window) height. 40vh = 40% of screen height. </Note> </Accordion> <Accordion title="Banner Layout" icon="grid-2"> Choose content layout pattern: * **Full** (default) - Full-width image with centered text overlay * **70/30** - 70% image, 30% content sidebar * **30/70** - 30% image, 70% content sidebar * **Split** - 50/50 image and content side-by-side <CardGroup> <Card title="Full Layout" icon="maximize"> Best for: Image-focused collections with short titles </Card> <Card title="70/30 Layout" icon="columns"> Best for: Balancing visual and text content </Card> <Card title="30/70 Layout" icon="columns"> Best for: Content-heavy collections with longer descriptions </Card> <Card title="Split Layout" icon="square-dashed"> Best for: Equal emphasis on image and text </Card> </CardGroup> </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 <Note> Color scheme affects text overlay and background areas. Choose schemes with good contrast against collection images. </Note> </Accordion> </AccordionGroup> *** ## Automatic Content The banner automatically displays collection information: ### Collection Data <AccordionGroup> <Accordion title="Collection Title" icon="heading"> * Automatically pulls from collection settings * Rendered as H1 heading (SEO-friendly) * Prominent, large typography * Centered or left-aligned based on layout </Accordion> <Accordion title="Collection Description" icon="align-left"> * Displays collection description if set * Rich text formatting supported * Appears below title * Optional (shows only if description exists) <Tip> Add collection descriptions in **Shopify Admin → Products → Collections → Select collection → Description field** for better SEO and customer context. </Tip> </Accordion> <Accordion title="Collection Image" icon="image"> * Uses collection featured image * Full-width background or side panel (based on layout) * Responsive scaling * Optional overlay for better text contrast <Note> Set collection images in **Shopify Admin → Products → Collections → Select collection → Image**. Recommended minimum size: 1920x600px. </Note> </Accordion> <Accordion title="Product Count" icon="hashtag"> Some themes display product count in collection banner: * "120 products" or similar * Dynamic based on collection filters * Helps set expectations </Accordion> </AccordionGroup> *** ## Layout Comparison <CardGroup> <Card title="Full Layout" icon="rectangle-wide"> **Structure:** * Full-width background image * Centered text overlay * Title + description stacked vertically **Best For:** * Lifestyle/fashion collections * Strong imagery * Minimal text content * Hero-style presentation </Card> <Card title="70/30 Layout" icon="table-columns"> **Structure:** * 70% image area (left) * 30% content area (right) * Asymmetric balance **Best For:** * Image-primary with sidebar text * Medium-length descriptions * Modern, magazine-style layouts </Card> <Card title="30/70 Layout" icon="table-columns"> **Structure:** * 30% image area (left) * 70% content area (right) * Text-focused layout **Best For:** * Content-heavy collections * Detailed descriptions * Product education * Text-primary presentations </Card> <Card title="Split Layout" icon="grip-vertical"> **Structure:** * 50% image (left) * 50% content (right) * Perfectly balanced **Best For:** * Equal image-text emphasis * Clean, symmetric design * Professional presentations * Versatile collections </Card> </CardGroup> *** ## Best practices <CardGroup> <Card title="Image guidelines" icon="image"> Use high-resolution collection images (minimum 1920x600px) in 16:9 or 3:1 aspect ratios, keeping file sizes under 300KB for optimal performance. Choose lifestyle images showing products in context with good contrast for text overlay, avoiding busy backgrounds that compete with your collection title and description. </Card> <Card title="Transparent header usage" icon="eye"> Enable transparent headers for high-quality, visually striking collection images with good contrast and modern, immersive aesthetics. Disable for low-contrast or busy background images where header visibility is a concern. Always test with all collections to ensure adequate contrast for header elements. </Card> <Card title="Height selection" icon="ruler-vertical"> Use 30vh for quick context with minimal emphasis, 40vh (default) for balanced presence across most collection types, 60vh for featured seasonal campaigns with strong visual impact, or 80-100vh for landing page collections and premium luxury products. Choose height based on whether you want to focus on products or create maximum visual impact. </Card> <Card title="Layout selection guide" icon="layout-grid"> Choose Full layout for stunning lifestyle photography with short titles, 70/30 for balanced image-text with moderate descriptions, 30/70 for text-heavy educational collections, or Split layout for clean symmetric aesthetics with equal emphasis. Match your layout to your content emphasis and brand positioning. </Card> <Card title="Mobile considerations" icon="mobile-screen"> Layouts automatically stack vertically on mobile with proportionally reduced banner heights and adjusted text sizes for readability. Test banners on actual mobile devices to ensure text remains readable, image focal points work on narrow screens, and transparent headers maintain adequate contrast throughout the mobile experience. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Seasonal Collections" icon="calendar"> Full layout with 60vh height, transparent header, lifestyle imagery showcasing seasonal products </Card> <Card title="Sale Collections" icon="tag"> 70/30 layout highlighting sale imagery with promotional text in sidebar </Card> <Card title="New Arrivals" icon="sparkles"> Split layout with product photography and "What's New" description </Card> <Card title="Category Collections" icon="grip"> Standard 40vh full layout with product category imagery and short description </Card> <Card title="Brand Collections" icon="award"> 30/70 layout with brand logo/image and detailed brand story in content area </Card> <Card title="Curated Collections" icon="hand-holding-heart"> Full layout, tall height (60-80vh), editorial-style imagery </Card> </CardGroup> *** ## Related Templates & Sections <CardGroup> <Card title="Collection Page" icon="grid-2"> Collection product grid template that appears below this banner </Card> <Card title="Featured Collections" icon="star"> Section for displaying collection grid on homepage or other pages </Card> <Card title="Hero Banner" icon="image"> Similar hero section for homepage with manual content control </Card> </CardGroup> *** ## SEO Considerations <AccordionGroup> <Accordion title="Collection Title (H1)" icon="hashtag"> * Automatically renders collection name as H1 tag * Critical for SEO (one H1 per page) * Use keyword-rich collection names * Keep titles descriptive (50-60 characters) </Accordion> <Accordion title="Collection Description" icon="file-text"> * Appears in banner and in meta description * Provides SEO context for collection pages * Use 150-160 characters for optimal search results * Include relevant keywords naturally </Accordion> <Accordion title="Image Alt Text" icon="i-cursor"> * Set alt text for collection images in Shopify Admin * Describes image content for accessibility and SEO * Include collection name and key details </Accordion> </AccordionGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="Transparent Header Not Visible" icon="eye-slash"> **Possible Issues:** * Dark header on dark image background * Light header on light image background * Insufficient contrast **Solutions:** * Use collection images with contrasting areas * Disable transparent header for problematic collections * Add overlay gradient in theme code (developer) * Choose different color scheme </Accordion> <Accordion title="Banner Too Short/Tall" icon="ruler"> **Adjust:** * Change section height setting (30-100vh) * Test different vh values * Consider content amount when setting height * Verify mobile appearance (height may feel different) </Accordion> <Accordion title="Image Not Displaying" icon="image-slash"> **Check:** * Collection has featured image set * Image file uploaded successfully * Image file format is supported (JPG, PNG, GIF, WebP) * Browser cache (hard refresh: Cmd/Ctrl + Shift + R) </Accordion> <Accordion title="Text Not Readable" icon="font"> **Improve Readability:** * Choose color scheme with better contrast * Select different collection image with clearer background * Disable transparent header if it interferes * Use darker/lighter images based on text color * Add text shadow via theme code (developer) </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Collection page hero banner * **Content:** Automatic (collection title, description, image) * **Layouts:** Full, 70/30, 30/70, Split * **Height:** 30-100vh (default: 40vh) * **Transparent Header:** Optional overlay effect * **Settings:** Layout, height, color scheme, transparent header toggle * **SEO:** H1 heading, collection description, image alt text <Note> Collection information (title, description, image) is set in **Shopify Admin → Products → Collections**, not in the Theme Customizer. The banner template controls how this content is displayed. </Note> # Main Password Header Source: https://docs.digifist.com/themes/sahara/sections/main-password-header Password page header with branded logo for locked storefronts The Main Password Header section displays the header and logo area on password-protected storefront pages when your store is locked behind a password. This section maintains brand identity even before launch by prominently displaying your store logo with customizable sizing for desktop and mobile. Use this section on password pages to create a professional first impression for invited customers, partners, or testers accessing your pre-launch store. ## What this section controls This section controls password page headers with the following capabilities: * Logo display on password-protected pages * Dual logo support (image file or SVG code) * Separate desktop and mobile logo width controls * Logo width range (50px to 300px) * Template-only section (password pages) * Brand identity maintenance during pre-launch * High-resolution and vector logo support *** ## Template Settings ### Logo Settings <AccordionGroup> <Accordion title="Logo Image" icon="image"> Upload store logo image. * **Type:** Image picker * **Format:** PNG (transparent background recommended), JPG, or SVG * **Recommended Size:** 400x400px minimum * **Aspect Ratio:** Square or horizontal <Tip> Use PNG with transparent background for logos that sit on colored backgrounds. Ensure logo is high-resolution for retina displays. </Tip> </Accordion> <Accordion title="Logo SVG Code" icon="code"> Alternative: Use SVG code instead of image file. * **Type:** HTML/SVG code * **Optional:** Leave blank to use logo image instead * **Takes Priority:** If filled, overrides logo image **When to Use SVG:** * Perfect scaling at any size * Smaller file size * Crisp on all displays * Can be styled with CSS * Supports animations **Example SVG:** ```svg theme={null} <svg width="100" height="100" viewBox="0 0 100 100"> <circle cx="50" cy="50" r="40" fill="#000" /> </svg> ``` <Note> Paste full SVG code including `<svg>` tags. SVG must be self-contained (no external references). </Note> </Accordion> <Accordion title="Logo Width (Desktop)" icon="desktop"> Control logo size on desktop. * **Range:** 100px - 200px * **Step:** 2px * **Unit:** Pixels * **Default:** 120px **Size Guidelines:** * **100-120px:** Subtle, minimalist branding * **120-150px:** Standard logo size (recommended) * **150-200px:** Bold, prominent branding </Accordion> <Accordion title="Logo Width (Mobile)" icon="mobile"> Control logo size on mobile devices. * **Range:** 60px - 160px * **Step:** 2px * **Unit:** Pixels * **Default:** 80px **Mobile Sizing:** * **60-80px:** Compact mobile logo * **80-100px:** Standard mobile size (recommended) * **100-160px:** Large mobile logo <Tip> Mobile logo should be smaller than desktop (default: 80px mobile vs 120px desktop) to conserve screen space. </Tip> </Accordion> </AccordionGroup> ### Layout Settings <AccordionGroup> <Accordion title="Section Width" icon="left-right"> * **Page** (default) - Contained within page margins * **Fluid** - Extends to container edges * **Full** - Full browser width (edge-to-edge) </Accordion> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 * Affects background and text colors </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Logo Best Practices <AccordionGroup> <Accordion title="Logo File Formats" icon="file-image"> **Format Comparison:** **PNG (Recommended):** * Supports transparency * Good for most logos * High quality * File size: 20-100KB * Use for colored backgrounds **SVG (Best for scalability):** * Perfect scaling * Smallest file size * Crisp at any resolution * Requires code knowledge * Best for simple logos **JPG (Not recommended):** * No transparency * Can look pixelated when scaled * Only use if logo has photographic elements </Accordion> <Accordion title="Logo Sizing Strategy" icon="expand"> **Desktop vs Mobile Balance:** **Typical Setups:** * Subtle: 100px desktop, 60px mobile * Standard: 120px desktop, 80px mobile (default) * Prominent: 160px desktop, 100px mobile * Bold: 200px desktop, 120px mobile **Sizing Tips:** * Keep mobile size 60-70% of desktop size * Test on actual devices (varies by screen) * Consider logo shape (horizontal logos can be wider) * Ensure readability at all sizes * Leave breathing room (don't max out) </Accordion> <Accordion title="Logo Design Tips" icon="paintbrush"> **Effective Password Page Logos:** * Simple, recognizable mark * High contrast for visibility * Works on light and dark backgrounds * Scalable (readable at small sizes) * Brand-appropriate style * Minimal detail (clutter-free) **Logo Variations:** * **Full logo:** Name + icon * **Icon only:** Logo mark without text (for small sizes) * **Wordmark:** Text-only logo * **Monogram:** Initials or abbreviated logo <Tip> If your full logo has small text, consider using icon-only version for password page to ensure legibility. </Tip> </Accordion> <Accordion title="Background Coordination" icon="fill-drip"> **Logo + Background Harmony:** * Match color scheme to background image/color * Ensure logo stands out (sufficient contrast) * Test logo on actual background color * Consider drop shadow for logos on photos * White logos on dark backgrounds (or vice versa) <Note> Password page background is often set in the main-password section or theme settings, not in this header section. </Note> </Accordion> </AccordionGroup> *** ## SVG Logos <AccordionGroup> <Accordion title="Using SVG Code" icon="code"> **How to Get SVG Code:** 1. Export logo as SVG from design software (Illustrator, Figma, etc.) 2. Open SVG file in text editor 3. Copy all code (from `<svg>` to `</svg>`) 4. Paste into "Logo SVG Code" field **SVG Code Example:** ```svg theme={null} <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 80"> <text x="10" y="50" font-family="Arial" font-size="40" fill="#000"> My Store </text> </svg> ``` </Accordion> <Accordion title="SVG Benefits" icon="star"> **Why Use SVG:** * Infinitely scalable (no pixelation) * Tiny file size (faster loading) * Perfect on retina displays * Can change colors via CSS * Supports animation * Accessible (screen readers) **When to Avoid SVG:** * Complex logos with many colors/gradients * Logos with photographic elements * No access to SVG source file * Don't understand code </Accordion> <Accordion title="Troubleshooting SVG" icon="wrench"> **Common SVG Issues:** **SVG Not Displaying:** * Check for complete `<svg>` opening/closing tags * Verify viewBox attribute exists * Remove any invalid characters * Ensure no external file references **SVG Too Large/Small:** * Adjust logo width settings (not SVG code) * Check viewBox dimensions * Don't set fixed width/height in SVG code **SVG Wrong Color:** * Set fill/stroke colors in SVG code * Or remove colors to inherit from CSS * Test on actual color scheme background </Accordion> </AccordionGroup> *** ## Use Cases <CardGroup> <Card title="Pre-Launch Store" icon="rocket"> Logo: 160px desktop, 100px mobile, clean white PNG on dark background </Card> <Card title="Minimal Branding" icon="circle"> Logo: 100px desktop, 60px mobile, subtle icon-only mark </Card> <Card title="Bold Statement" icon="square"> Logo: 200px desktop, 120px mobile, SVG wordmark with brand colors </Card> <Card title="Coming Soon Event" icon="calendar"> Logo: 140px desktop, 90px mobile, seasonal themed logo variation </Card> </CardGroup> *** ## Related Sections <CardGroup> <Card title="Main Password" icon="lock"> Password page content with title, subtext, and email signup </Card> <Card title="Header (Main)" icon="header"> Regular site header for unlocked store </Card> </CardGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="Logo Not Appearing" icon="image-slash"> **Check:** * Logo image uploaded OR SVG code pasted * File format is supported (PNG, JPG, SVG) * Image file size reasonable (\< 5MB) * SVG code is valid (no errors) * Color scheme provides contrast * Browser cache cleared </Accordion> <Accordion title="Logo Too Large/Small" icon="expand"> **Adjust:** * "Logo Width (Desktop)" setting (100-200px) * "Logo Width (Mobile)" setting (60-160px) * Preview on actual devices (mobile vs desktop) * Consider logo aspect ratio (horizontal logos appear larger) </Accordion> <Accordion title="SVG Code Not Working" icon="code"> **Verify:** * Complete `<svg>` tags (opening and closing) * Valid XML/SVG syntax * No external file dependencies * viewBox attribute present * Try pasting in code validator first * Alternative: Use PNG image instead </Accordion> <Accordion title="Logo Pixelated/Blurry" icon="image"> **Solutions:** * Upload higher resolution image (2-3x larger) * Use SVG format for perfect scaling * Save PNG at 2x or 3x intended size * Optimize for retina displays * Avoid JPG (use PNG) </Accordion> <Accordion title="Wrong Logo Showing" icon="arrow-rotate-left"> **Reasons:** * Old logo cached in browser * Wrong theme active * Not saved after upload **Fix:** * Hard refresh (Cmd/Ctrl + Shift + R) * Clear browser cache * Verify correct theme published * Re-upload logo and save </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Display store logo on password-protected page * **Logo Options:** Upload image (PNG/JPG) or paste SVG code * **Sizing:** 100-200px desktop (default: 120px), 60-160px mobile (default: 80px) * **Settings:** Logo image/SVG, desktop/mobile sizing, section width, color scheme, spacing * **Best Format:** PNG with transparency or SVG for perfect scaling * **Appears On:** Password-protected storefront only (not regular site) <Note> This header only appears when password protection is enabled. Regular site header is controlled by the main header section. Enable password protection in **Shopify Admin → Online Store → Preferences → Password protection**. </Note> # Main Search Banner Source: https://docs.digifist.com/themes/sahara/sections/main-search-banner Search results page banner displaying search query The Main Search Banner section displays a simple header banner at the top of search results pages, automatically showing the search query and basic page context. This minimal banner provides search context without distracting from search results below. Use this section on search results pages to give customers clear confirmation of their search query while maintaining focus on the results themselves. ## What this section controls This section controls search page headers with the following capabilities: * Automatic search query display * SEO-optimized H1 heading * Dynamic content from URL search parameter * Color scheme selection * Top and bottom spacing controls (0-6 scale) * Border options (None, Top, Bottom, Both) * Template-only section (search results pages) * Minimal design for results focus *** ## Template Settings <AccordionGroup> <Accordion title="Color Scheme" icon="palette"> * Select from available theme color schemes * **Default:** scheme-1 * Affects background and text colors </Accordion> <Accordion title="Spacing" icon="arrows-up-down"> * **Top Spacing**: 0, 1, 2 (default), 4, or 6 * **Bottom Spacing**: 0, 1, 2 (default), 4, or 6 </Accordion> <Accordion title="Borders" icon="border-top-left"> * **None** (default) * **Top Border** * **Bottom Border** * **Both Borders** </Accordion> </AccordionGroup> *** ## Banner Content The banner automatically displays: <AccordionGroup> <Accordion title="Search Results Title" icon="h1"> * Displays "Search results for \[query]" or similar * H1 heading (SEO-optimized) * Automatically pulls search query from URL * Updates dynamically based on search term **Example:** * User searches "blue shoes" * Banner shows: "Search results for 'blue shoes'" </Accordion> <Accordion title="Result Count" icon="hashtag"> Some themes display: * Number of results found * Format: "120 results" * Updates with filters/sorting * Helps set expectations </Accordion> <Accordion title="Search Query Highlight" icon="highlighter"> * Search term displayed prominently * Often in quotes or bold * Confirms what user searched for * Useful if arriving from external link </Accordion> </AccordionGroup> *** ## Search Page Structure <CardGroup> <Card title="Typical Search Page Layout" icon="layer-group"> 1. **Main Search Banner** (this section) - displays search query 2. **Main Search** - displays search results grid with filters/sorting 3. Optional sections below (featured collections, recently viewed, etc.) </Card> </CardGroup> *** ## Best practices <CardGroup> <Card title="Keep it simple" icon="minimize"> This banner should be minimal with clear search query display, optional result count, and no distractions to maintain focus on results below. The banner's job is orientation, not conversion, so keep it simple for quick user scanning. </Card> <Card title="Color scheme selection" icon="palette"> Choose a scheme that contrasts with main content without overwhelming results, maintaining readability while matching your overall site aesthetic. A common approach uses light neutral backgrounds (gray, beige) with dark text for subtle separation from content. </Card> <Card title="Spacing strategy" icon="arrows-up-down"> Default spacing (2,2) works for most cases, but reduce top spacing if a search bar appears above or increase bottom spacing for visual separation. Always test your mobile view as spacing may need adjustment for smaller screens. </Card> </CardGroup> *** ## Use Cases <CardGroup> <Card title="Minimal Banner" icon="rectangle"> Default spacing, neutral color scheme, simple "Search results for \[query]" text </Card> <Card title="Prominent Banner" icon="square"> Increased spacing (4,4), contrasting color scheme, larger heading size </Card> <Card title="Bordered Banner" icon="border-all"> Bottom border to separate from results, standard spacing </Card> </CardGroup> *** ## Related Templates <CardGroup> <Card title="Main Search" icon="magnifying-glass"> Search results grid with filters and sorting </Card> <Card title="Predictive Search" icon="wand-magic-sparkles"> Instant search suggestions dropdown in header </Card> <Card title="Search Settings" icon="gear"> Shopify search configuration and filters </Card> </CardGroup> *** ## SEO Considerations <AccordionGroup> <Accordion title="Search Results SEO" icon="magnifying-glass"> **Search Page SEO:** * Title uses H1 tag (SEO-friendly) * Search term appears in page title * URL includes search query (`/search?q=blue+shoes`) * Results page crawlable by search engines <Note> Search results pages are typically indexed by Google. Ensure they provide good user experience. </Note> </Accordion> <Accordion title="No Results Handling" icon="zero"> **When No Results Found:** * Banner still shows search query * Main search section displays "No results" message * Suggests alternative searches * Shows popular products or collections * Provides search refinement options <Tip> Good no-results experience prevents bounces. Suggest related products or alternate search terms. </Tip> </Accordion> </AccordionGroup> *** ## Troubleshooting <AccordionGroup> <Accordion title="Banner Not Showing" icon="eye-slash"> **Check:** * Template assigned to search page * Section not hidden or deleted * Color scheme visible (not white text on white) * Page cache cleared </Accordion> <Accordion title="Wrong Search Query Displayed" icon="text-slash"> **Verify:** * URL contains correct search parameter (`?q=`) * No URL redirect issues * Theme code pulling correct variable * Browser cache cleared </Accordion> <Accordion title="Text Not Readable" icon="font"> **Solutions:** * Choose color scheme with better contrast * Ensure text color contrasts with background * Test on actual browser (not just preview) * Check theme CSS (may require developer) </Accordion> <Accordion title="Spacing Issues" icon="ruler"> **Adjust:** * Increase/decrease top spacing (0-6) * Increase/decrease bottom spacing (0-6) * Test mobile appearance * Verify borders not causing overlap </Accordion> </AccordionGroup> *** ## Quick Summary * **Purpose:** Simple banner displaying search query on results page * **Content:** Automatically shows "Search results for \[query]" * **Settings:** Color scheme, spacing (top/bottom), borders * **Customization:** Minimal (content is automatic, only styling controlled) * **Appears On:** Search results page (`/search`) * **Works With:** Main Search section (displays actual results) <Note> This is a minimal banner section. The actual search results, filters, and sorting are controlled by the **Main Search** template, which appears below this banner. </Note> # Map Source: https://docs.digifist.com/themes/sahara/sections/map Embed a Google Map displaying your store location with customizable zoom level The Map section embeds an interactive Google Map displaying a specific address or location, perfect for showcasing physical store locations, office addresses, event venues, or any location customers need to find. This section requires a valid Google Maps API key to function and provides customers with an easy way to locate your business. Use this section on contact pages, store locator pages, or anywhere you want to provide clear geographic context. ## What this section controls This section controls map displays with the following capabilities: * Interactive Google Maps embed * Custom address or default shop address display * Configurable zoom level (0-21) * Map height controls for desktop and mobile * Google Maps API key integration * Section title with customizable heading size * Section button with link and style options * Color scheme, width, and spacing controls ## Prerequisites Before using the Map section, you need to: 1. Create a Google Cloud Console account 2. Enable the Google Maps Embed API 3. Generate an API key [Learn how to get a Google Maps API key](https://support.google.com/googleapi/answer/6158862?hl=en) ## Section settings <AccordionGroup> <Accordion title="API key"> **API key** — Paste your Google Maps API key in this field. This is required for the map to display. Without a valid API key, the map embed will not load. <Tip> Keep your API key secure. Consider setting up API key restrictions in Google Cloud Console to limit usage to your domain only. </Tip> </Accordion> <Accordion title="Address"> **Address query** — Enter the address to display on the map. **Format:** street address, city state/country **Example:** 123 Main Street, New York NY <Note> If left empty, the map displays your shop's default address from Settings > General in Shopify admin. </Note> </Accordion> <Accordion title="Zoom level"> **Zoom level** — Control how close the map zooms into the location. Range: 0-21 (default: 16) * **0** — Fully zoomed out (world view) * **10-12** — City-level view * **16** — Street-level view (default) * **21** — Maximum zoom (building-level detail) <Tip> Use 14-16 for most retail locations to show nearby streets and landmarks. Use higher zoom (18-20) if you want to highlight a specific building entrance. </Tip> </Accordion> <Accordion title="Section width"> Choose the map container width: * **Page width** — Standard container width * **Fluid** — Wider, edge-to-edge within padding * **Full width** (default) — Complete edge-to-edge layout Full width is recommended for maps to maximize usability and visual impact. </Accordion> <Accordion title="Color scheme"> Select the background color scheme for the section container (default: scheme-1). This affects the area around the map if not using full width. </Accordion> <Accordion title="Spacing"> Control vertical spacing above and below the section with options from None to XL (0, S, M, L, XL). Default: M for top spacing, None for bottom spacing </Accordion> <Accordion title="Section border"> Add decorative borders: * **None** (default) — No borders * **Top** — Border above the section * **Bottom** — Border below the section * **Both** — Borders above and below </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="API key security" icon="lock"> Set up API key restrictions in Google Cloud Console to limit usage to your domain and prevent unauthorized use. </Card> <Card title="Accurate address" icon="location-dot"> Use the exact address format that Google Maps recognizes. Test your address in Google Maps search first to verify it's correct. </Card> <Card title="Optimal zoom" icon="magnifying-glass-plus"> Use zoom level 14-16 for most locations to show context (nearby streets and landmarks) while highlighting your specific location. </Card> <Card title="Full width display" icon="arrows-left-right"> Use full width section setting for maps to maximize usability and provide better navigation experience. </Card> <Card title="Mobile testing" icon="mobile"> Preview on mobile devices to ensure the map is easily navigable with touch gestures. </Card> <Card title="Strategic placement" icon="map-pin"> Place the map section on your Contact page, About page, or dedicated Store Locations page for easy discovery. </Card> <Card title="Combine with text" icon="align-left"> Add a Rich Text section above the map with hours, parking information, or public transit instructions. </Card> <Card title="API usage monitoring" icon="chart-line"> Monitor your Google Maps API usage in Google Cloud Console to avoid unexpected charges if you exceed free tier limits. </Card> </CardGroup> ## Common use cases * **Contact pages** — Display store location so customers can find you * **About pages** — Show company headquarters or primary location * **Store locator pages** — Multiple map sections for different store locations * **Event pages** — Highlight venue location for in-store events * **Shipping/Returns pages** — Show return center or warehouse location * **Landing pages** — Local business landing pages highlighting service areas ## Google Maps API pricing Google Maps Embed API offers generous free tier usage: * **Free tier:** 25,000 map loads per day * **Pricing:** \$7 per 1,000 additional loads (after free tier) For most small to medium businesses, the free tier is sufficient. [View current Google Maps pricing](https://mapsplatform.google.com/pricing/) ## Troubleshooting ### Map not displaying **Common causes:** * Invalid or missing API key * API key restrictions blocking your domain * Maps Embed API not enabled in Google Cloud Console * Incorrect address format **Solutions:** 1. Verify API key is correct and Maps Embed API is enabled 2. Check API key restrictions allow your domain 3. Test address in Google Maps to verify format 4. Check browser console for specific error messages ### Map shows wrong location * Verify the address format matches what Google Maps expects * Try entering additional detail (city, state, country) * Test the exact address string in Google Maps search * Use coordinates format: `latitude,longitude` if address lookup fails ## Related sections <CardGroup> <Card title="Rich text" icon="align-left" href="/themes/sahara/sections/rich-text"> Add text content above the map with hours and directions </Card> <Card title="Store locator" icon="store" href="/themes/sahara/sections/store-locator"> Advanced multi-location store finder section </Card> </CardGroup> # Marquees Source: https://docs.digifist.com/themes/sahara/sections/marquees Continuously scrolling horizontal ticker displaying text items with icons The Marquees section creates a continuously scrolling horizontal ticker animation displaying text items with optional icons. Perfect for highlighting key messages, store features, promotional offers, or trust indicators in an eye-catching, dynamic format. This animated section draws attention without being obtrusive and works particularly well for highlighting multiple short messages or benefits in limited vertical space. ## What this section controls This section controls scrolling ticker displays with the following capabilities: * Continuously scrolling horizontal animation * Multiple text items with optional icons * Adjustable animation speed (duration rate 1-10) * Font size control (1-4) for text items * Icon size control (1-4) for icon scaling * Animation enable/disable toggle * Three width options (Page width, Fluid, Full width) * Color scheme, spacing, and border controls ## Section settings <AccordionGroup> <Accordion title="Animation"> **Enable animation** — Toggle the scrolling animation on or off (enabled by default). When enabled, items scroll continuously. When disabled, items display statically. **Marquee duration rate** — Control the animation speed. Range: 1-10 (default: 5) <Note> Higher numbers result in slower animation. Lower numbers create faster scrolling. </Note> </Accordion> <Accordion title="Element sizing"> **Marquee font size** — Control the text size of marquee items. Range: 1-4 (default: 1) Larger values increase text size for more prominent display. **Marquee icon size** — Control the size of icons displayed with items. Range: 1-4 (default: 1) Adjust to balance icon and text proportions. </Accordion> <Accordion title="Section width"> Choose the container width: * **Page width** (default) — Standard container width * **Fluid** — Wider, edge-to-edge within padding * **Full width** — Complete edge-to-edge layout <Tip> Use full width for maximum visual impact and to ensure smooth scrolling across the entire viewport. </Tip> </Accordion> <Accordion title="Color scheme"> Select the background and text color scheme for the section (default: scheme-1). </Accordion> <Accordion title="Spacing"> Control vertical spacing above and below the section with options from None to XL (0, S, M, L, XL). Default is M for both top and bottom. </Accordion> <Accordion title="Section border"> Add decorative borders: * **None** (default) — No borders * **Top** — Border above the section * **Bottom** — Border below the section * **Both** — Borders above and below </Accordion> </AccordionGroup> ## Block: Item Create individual scrolling marquee items with text and optional icons. Unlimited blocks allowed. <AccordionGroup> <Accordion title="Icon"> Upload a custom icon image to display before the text. This is optional—items can have text only. <Tip> Use simple, recognizable icons (check marks, stars, shipping trucks, etc.) that complement your messaging. Icons help items stand out in the scrolling animation. </Tip> </Accordion> <Accordion title="Title"> Enter the text content for this marquee item (e.g., "Free Shipping Over \$50", "Secure Checkout", "30-Day Returns"). Keep text concise—typically 2-6 words work best for scannability in a moving ticker. </Accordion> <Accordion title="Link"> Optionally add a URL to make the entire item clickable. Useful for linking to policy pages, collections, or promotional landing pages. </Accordion> </AccordionGroup> ## Default configuration The section preset includes four example items: 1. "Store Specification 1" 2. "Store Specification 2" 3. "Store Specification 3" 4. "Store Specification 4" Replace these with your actual store features, promotions, or trust indicators. ## Best practices <CardGroup> <Card title="Concise messaging" icon="align-left"> Keep item text brief (2-6 words) for easy reading in the scrolling animation. Longer text becomes difficult to scan. </Card> <Card title="Consistent icons" icon="icons"> Use a consistent icon style across all items for a cohesive visual appearance. Match icon style to your brand aesthetic. </Card> <Card title="Speed balance" icon="gauge"> Set duration rate carefully—too fast creates stress, too slow may be ignored. Test different speeds to find the sweet spot (4-6 typically works well). </Card> <Card title="Item count" icon="hashtag"> Add 4-8 items for optimal visual effect. Too few items create obvious repetition; too many can overwhelm. </Card> <Card title="Full width impact" icon="arrows-left-right"> Use full width section setting for maximum visual impact and seamless edge-to-edge scrolling. </Card> <Card title="Strategic placement" icon="map-pin"> Place marquees strategically—below header for announcements, above footer for trust signals, or between sections for visual breaks. </Card> <Card title="Pause consideration" icon="circle-pause"> The animation typically pauses on hover (theme setting). This allows users to read and click items without chasing them. </Card> <Card title="Mobile testing" icon="mobile"> Preview on mobile devices where font and icon sizes may need adjustment for smaller screens. </Card> </CardGroup> ## Common use cases * **Shipping benefits** — "Free Shipping Over \$50" / "Express Delivery Available" / "Worldwide Shipping" * **Trust indicators** — "Secure Checkout" / "SSL Encrypted" / "Trusted Since 2020" * **Return policies** — "30-Day Returns" / "Free Returns" / "Easy Exchanges" * **Store features** — "Handmade Products" / "Eco-Friendly" / "Small Batch" * **Promotional messages** — "New Arrivals Weekly" / "Limited Editions" / "Member Discounts" * **Service highlights** — "Expert Support" / "Gift Wrapping" / "Personal Shopper" * **Social proof** — "10K+ Happy Customers" / "5-Star Rated" / "Award Winning" * **Announcements** — "Spring Sale Now On" / "Holiday Hours" / "New Location" ## Accessibility considerations * Ensure sufficient color contrast between text and background for readability * Avoid setting animation speed too fast, which can cause motion sickness for some users * The pause-on-hover functionality (if enabled globally) helps users who need more time to read * Keep critical information in non-animated sections as well, as some users may overlook scrolling content ## Related sections <CardGroup> <Card title="Trust indicators" icon="shield-check" href="/themes/sahara/sections/trust-indicators"> Static trust badges and indicators section </Card> <Card title="Announcement bar" icon="bullhorn" href="/themes/sahara/sections/announcement-bar"> Top-of-page announcement banner </Card> </CardGroup> # Newsletter popup Source: https://docs.digifist.com/themes/sahara/sections/newsletter-popup Display a timed popup modal to capture email subscriptions with customizable content, imagery, and delay controls. The Newsletter popup section creates a modal overlay that appears after a configurable delay to capture email subscriptions. It includes optional imagery, customizable heading and text, an integrated newsletter signup form, and a friendly dismissal option. This section is essential for building your email list and engaging visitors with special offers, exclusive content, or product updates. <img alt="Newsletter popup overview" /> ## What this section controls This section controls newsletter popup displays with the following capabilities: * Timed appearance after page load (4-30 seconds) * Optional image for visual appeal and branding * Customizable heading and descriptive text * Integrated email signup form with validation * Friendly close/dismiss button * Theme Customizer preview mode * Session-based dismissal tracking ## How the Newsletter popup works The Newsletter popup displays as a centered modal overlay: * Appears automatically after the configured delay * Shows optional image alongside form content * Displays heading, supporting text, and email input field * Users can submit their email or dismiss the popup * Remembers dismissal for the browsing session (appears once per session) * Mobile-responsive design adapts layout for small screens ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Newsletter popup section"> Add this section to your global theme sections (not page-specific). </Step> <Step title="Configure content"> Set heading, descriptive text, and optional image. </Step> <Step title="Adjust timing"> Set the delay to control when the popup appears (10-15 seconds recommended). </Step> <Step title="Customize close button"> Update the close button text to match your brand voice. </Step> </Steps> <img alt="Newsletter popup in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Timing"> ### Delay Controls when the popup appears after page load. **Range:** 4 – 30 seconds (in 1-second increments)\ **Default:** 10 seconds <AccordionGroup> <Accordion title="Delay recommendations" icon="clock"> **4-7 seconds:** * Very early appearance * High urgency promotions * Risk of interrupting users **8-12 seconds:** * Balanced timing (recommended) * Allows initial page engagement * Standard for most stores **15-20 seconds:** * Patient approach * For engaged visitors * Lower conversion but better UX **25-30 seconds:** * Minimal interruption * Exit-intent alternative * Blog or content-heavy sites </Accordion> </AccordionGroup> <Warning> Setting delay too short (\< 8 seconds) may interrupt users before they engage with your content, creating a negative first impression. </Warning> <Tip> A delay of 10-15 seconds balances conversion opportunity with positive user experience. Test different timings to find optimal performance for your audience. </Tip> <img alt="Popup timing configuration" /> </Tab> <Tab title="Content"> ### Image Optional image displayed within the popup. * Displays on left side (desktop) or above content (mobile) * Rendered at 550px width * Leave empty to hide image <AccordionGroup> <Accordion title="Image best practices" icon="image"> **Recommended subjects:** * Brand logo or mascot * Product highlights * Lifestyle imagery matching your brand * Promotional graphics (e.g., "10% off") **Technical specs:** * Recommended size: 550px × 550px * Square or portrait orientation * High contrast for visibility * Optimized file size for fast loading </Accordion> </AccordionGroup> <Note> Image should support your value proposition without overwhelming the signup form. </Note> ### Heading Main heading text for the popup. * Inline rich text supported (bold, italic, links) * **Default:** "Newsletter heading here" <Tip> Make heading value-focused and concise: "Get 10% Off", "Join Our VIP List", "Exclusive Access Awaits" </Tip> ### Heading size Controls the size of heading text. **Options:** XS, S, M, L, XL\ **Default:** XL ### Text Descriptive text displayed below the heading. * Rich text editor with formatting support * **Default:** "An example subheading for new subscribers." * **Supports:** * Bold, italic, underline * Links * Paragraphs <Tip> Keep text brief (1-2 sentences, 15-25 words) to maintain focus on the signup form. Explain the benefit clearly: "Sign up for exclusive deals and early access to new products." </Tip> <img alt="Popup content configuration" /> </Tab> <Tab title="Settings"> ### Button close text Label for the close/dismiss link. * Plain text only * **Default:** "No thanks" <AccordionGroup> <Accordion title="Close button language" icon="xmark"> Use friendly, non-pushy language: **Good examples:** * "No thanks" * "Maybe later" * "Not now" * "Skip for now" **Avoid:** * "Close" (too direct) * "I don't want discounts" (guilt-inducing) * "Dismiss" (too formal) </Accordion> </AccordionGroup> <Note> Friendly dismissal language respects user choice and maintains positive brand perception. </Note> ### Customizer visible Controls whether popup displays immediately in the Theme Customizer. **Options:** True / False\ **Default:** False <AccordionGroup> <Accordion title="When to use Customizer visible" icon="eye"> **Enable (True) when:** * Designing the popup initially * Testing content layout and styling * Previewing color scheme changes * Checking mobile responsiveness **Disable (False) for:** * Normal operation (default) * Accurate delay testing * Live site behavior * When popup design is finalized </Accordion> </AccordionGroup> <Tip> Enable temporarily to preview popup appearance and styling without waiting for the delay. Remember to disable before publishing. </Tip> <img alt="Customizer visible setting" /> </Tab> <Tab title="Styling"> ### Color scheme Select color scheme for popup background, text, and form elements. <Warning> Ensure your color scheme provides sufficient contrast between background and text for readability and accessibility compliance. </Warning> <Note> Choose a color scheme that makes the popup distinct from page content without being visually jarring. </Note> <img alt="Color scheme configuration" /> </Tab> </Tabs> ## Newsletter form The popup includes an integrated email signup form with the following features: <AccordionGroup> <Accordion title="Email input field" icon="envelope"> Standard email input with built-in validation. * Placeholder text from theme translations * Browser-level email format validation * Required field </Accordion> <Accordion title="Submit button" icon="paper-plane"> Call-to-action button to submit the form. * Button text from theme translations ("Subscribe") * Disabled state during submission * Integrates with Shopify customer accounts </Accordion> <Accordion title="Form handling" icon="check"> Backend integration with Shopify: * Adds email to customer mailing list * Sends double opt-in email if enabled * Tracks newsletter consent * GDPR compliant </Accordion> <Accordion title="Error messaging" icon="triangle-exclamation"> Displays validation and server errors: * Invalid email format * Already subscribed * Server connection issues * User-friendly error messages </Accordion> <Accordion title="Success state" icon="circle-check"> Confirmation after successful submission: * Thank you message * Auto-dismiss or manual close * Session tracking prevents re-display </Accordion> </AccordionGroup> <img alt="Newsletter form in popup" /> ## Best practices <CardGroup> <Card title="Optimal timing" icon="stopwatch"> Set delay to 10-15 seconds to allow users to engage with page content first before interruption. </Card> <Card title="Value-focused heading" icon="bullseye"> Use clear, benefit-driven headings: "Get 10% Off", "Join Our VIP List", "Exclusive Early Access". </Card> <Card title="Supporting imagery" icon="image"> Choose high-quality brand imagery that reinforces your value proposition without overwhelming the form. </Card> <Card title="Friendly dismissal" icon="hand-wave"> Use non-pushy close button text like "No thanks" or "Maybe later" to respect user choice. </Card> <Card title="Preview mode" icon="eye"> Enable "Customizer visible" temporarily for testing appearance, then disable before publishing. </Card> <Card title="Avoid short delays" icon="timer"> Don't set delay below 8 seconds—this interrupts users immediately and creates negative impressions. </Card> <Card title="Color contrast" icon="palette"> Ensure color scheme provides strong contrast for text readability and meets accessibility standards. </Card> <Card title="Concise text" icon="text-size"> Limit descriptive text to 1-2 sentences (15-25 words) for quick scanning and focus on form. </Card> <Card title="A/B testing" icon="chart-line"> Test different delays, headlines, and images to optimize conversion rates for your specific audience. </Card> <Card title="Mobile optimization" icon="mobile"> Preview on mobile devices to ensure image and text remain readable on small screens. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Welcome discount offer" icon="percent"> Set 10-12 second delay. Heading: "Welcome! Get 10% Off Your First Order". Text: "Join our newsletter for exclusive deals and early access." Image: Product highlight or brand logo. Close text: "No thanks". </Accordion> <Accordion title="VIP list signup" icon="crown"> Set 15 second delay. Heading: "Join Our VIP List". Text: "Be the first to know about new launches and member-only sales." Image: Lifestyle brand imagery. Close text: "Maybe later". </Accordion> <Accordion title="Content updates" icon="newspaper"> Set 20 second delay. Heading: "Stay Inspired". Text: "Get weekly tips, recipes, and exclusive content delivered to your inbox." No image. Close text: "Not now". </Accordion> <Accordion title="Product launch alert" icon="rocket"> Set 8 second delay (urgent). Heading: "New Collection Drops Friday". Text: "Sign up now for exclusive early access 24 hours before public launch." Image: New product teaser. Close text: "Skip for now". </Accordion> <Accordion title="Seasonal campaign" icon="gift"> Set 12 second delay. Heading: "Holiday Gift Guide Inside". Text: "Subscribe to receive our curated gift guide and holiday shopping tips." Image: Seasonal themed graphic. Close text: "No thanks". </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Newsletter" icon="envelope-open-text" href="/themes/sahara/sections/newsletter"> Inline newsletter signup forms for pages </Card> <Card title="Announcement bar" icon="bullhorn" href="/themes/sahara/sections/announcement-bar"> Persistent top-of-page announcements </Card> </CardGroup> # Page banner Source: https://docs.digifist.com/themes/sahara/sections/page-banner Create customizable hero banners for pages, collections, products, and blogs with media, text, navigation, and FAQ search. The Page banner section creates versatile hero banners that automatically adapt to different template types (pages, collections, products, blogs). It displays titles, descriptions, media backgrounds, breadcrumb navigation, optional collection menus, and an FAQ search feature. This section is essential for creating impactful page headers that provide context, visual appeal, and wayfinding across your entire site. <img alt="Page banner section overview" /> ## What this section controls This section controls page hero banners with the following capabilities: * Automatic page title display with custom overrides * Optional default or custom descriptions * Separate desktop and mobile media (images, videos) * Transparent header integration * Breadcrumb navigation * Collection navigation menu * FAQ page search functionality * Flexible content positioning and alignment * Multiple section height options ## How the Page banner works The Page banner intelligently adapts to your template type: * **Page templates:** Displays page title and description * **Collection templates:** Shows collection title, description, and optional menu * **Product templates:** Displays product title and description * **Blog templates:** Shows blog title and description Content defaults to template metadata but can be overridden with custom text. Media positioning options allow background overlays, top placement, or bottom placement with separate desktop and mobile configurations. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Navigate to target template"> Go to the page, collection, product, or blog template you want to customize. </Step> <Step title="Add or customize Page banner"> Add the Page banner section (usually as first section) or customize existing instance. </Step> <Step title="Configure content"> Set custom heading/description or use template defaults. </Step> <Step title="Add media"> Upload images or videos for desktop and mobile displays. </Step> <Step title="Adjust positioning"> Configure content alignment, media position, and section height. </Step> </Steps> <img alt="Page banner in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Header"> ### Enable transparent header Makes header transparent and overlay the banner when using background media. **Default:** False <AccordionGroup> <Accordion title="Transparent header requirements" icon="window"> **Required conditions:** * Media position set to "Background" * Banner has desktop or mobile media * Section placed as first on the page **When it works:** * Creates immersive full-bleed effect * Header navigation overlays banner media * Maximizes visual impact **When it doesn't apply:** * Media position set to "Top" or "Bottom" * No media uploaded * Section not first on page </Accordion> </AccordionGroup> <Warning> Ensure sufficient contrast between header navigation and banner media for readability. </Warning> <img alt="Transparent header option" /> </Tab> <Tab title="Content"> ### Title Custom heading text that overwrites the default title from template. * Inline rich text supported (bold, italic, links) * Leave empty to use default page/collection/product/blog title <Note> Custom title always takes priority over template defaults when provided. </Note> ### Heading size Controls the size of banner heading. **Options:** XS, S, M, L, XL\ **Default:** XL ### Content Custom descriptive text displayed below the heading. * Rich text editor with formatting support * Leave empty to use default description (if enabled) ### Show default description Displays the description from the current template (page/collection/product/blog). **Default:** True <AccordionGroup> <Accordion title="Default description behavior" icon="text"> **Enabled (True):** * Uses page/collection/product/blog description * Falls back to custom content if default is empty * Automatically pulls template metadata **Disabled (False):** * Only shows custom content field value * Template descriptions ignored * Full manual control </Accordion> </AccordionGroup> <Tip> For consistent automation, enable default descriptions. For precise control, disable and use custom content field. </Tip> ### Show on description Controls where description text is visible. **Options:** * **Desktop** - Desktop devices only (default) * **Mobile** - Mobile devices only * **Both** - All devices <Note> Hiding descriptions on mobile conserves vertical space on small screens. </Note> <img alt="Content configuration" /> </Tab> <Tab title="Positioning"> ### Content position Controls vertical position of text content within the banner. **Options:** Start (top), Center (default), End (bottom) <Note> Not applicable when section height is set to "Auto" (height adapts to content). </Note> ### Content alignment Controls horizontal alignment of text content. **Options:** Start (left), Center (default), End (right) ### Media position Controls where media appears relative to content. <AccordionGroup> <Accordion title="Top" icon="arrow-up"> Media displays above text content. **Best for:** * Image banners with text below * Product category headers * Decorative imagery </Accordion> <Accordion title="Bottom" icon="arrow-down"> Media displays below text content. **Best for:** * Text-priority designs * Minimal banners * Secondary imagery </Accordion> <Accordion title="Background" icon="layer-group"> Media serves as background with text overlay (default). **Best for:** * Hero-style banners * Full-bleed media * Transparent header integration * Maximum visual impact </Accordion> </AccordionGroup> <Tip> Use Background position with fixed section heights (33svh, 50svh, 100svh) for best display. Auto height with background media calculates based on image aspect ratio. </Tip> <img alt="Positioning configuration" /> </Tab> <Tab title="Navigation"> ### Page menu Link list for collection or page navigation menu. * Shopify link list selector * First-level link names must match collection handles or page titles * Leave empty to hide menu <AccordionGroup> <Accordion title="How page menu works" icon="bars"> **Setup:** 1. Create navigation in Shopify admin 2. First-level links must match collection handles or page titles 3. Add second-level links for submenus 4. Assign to Page banner **Display:** * Shows when current page/collection matches first-level link * Displays second-level links as menu items * Useful for collection filtering or page sections </Accordion> </AccordionGroup> <Note> Commonly used on collection pages to show category filters or subcollections. </Note> ### Enable breadcrumbs Shows breadcrumb navigation on the page. **Default:** True <Tip> Breadcrumbs must also be enabled in theme settings to appear. This setting acts as section-level override. </Tip> <img alt="Navigation configuration" /> </Tab> <Tab title="Desktop"> ### Section height Height of the banner on desktop devices. <AccordionGroup> <Accordion title="Auto" icon="wand-magic-sparkles"> Height based on content and media. **Best for:** Variable content lengths, text-focused banners </Accordion> <Accordion title="33svh" icon="compress"> One-third viewport height (compact). **Best for:** Secondary pages, minimal banners </Accordion> <Accordion title="50svh" icon="square"> Half viewport height (balanced) - default. **Best for:** Most pages, standard banners </Accordion> <Accordion title="100svh" icon="expand"> Full viewport height (immersive). **Best for:** Homepage, major campaign pages </Accordion> </AccordionGroup> **Default:** Auto ### Image (Desktop) Upload image for desktop banner background. **Recommended:** 1920px+ width, aspect ratio matching section height ### Video (Desktop) Upload Shopify-hosted video file. Overwrites image when set. <Tip> Shopify-hosted videos offer better performance than external embeds. </Tip> ### External video (Desktop) Embed YouTube or Vimeo video. Takes priority over image and video. **Accepts:** YouTube, Vimeo URLs <Warning> External videos may impact page load performance. Use sparingly. </Warning> ### Show controls on video Displays play/pause and volume controls on desktop videos. **Default:** False <img alt="Desktop media configuration" /> </Tab> <Tab title="Mobile"> ### Section height (Mobile) Height of the banner on mobile devices, independent of desktop. **Options:** Auto, 33svh, 50svh (default), 100svh <Note> Mobile defaults to 50svh for balanced visibility on vertical screens. </Note> ### Image (Mobile) Upload mobile-optimized image. **Recommended:** 800-1200px width, portrait orientation <Note> Mobile media overrides desktop media on small screens when provided. </Note> ### Video (Mobile) Shopify-hosted video for mobile devices. Overwrites mobile image. ### External video (Mobile) YouTube or Vimeo video for mobile. Takes priority. ### Show controls on video (Mobile) Displays video controls on mobile devices. **Default:** False <img alt="Mobile media configuration" /> </Tab> <Tab title="FAQ Search"> ### Search bar Enables FAQ-specific search functionality within the banner. **Default:** False <AccordionGroup> <Accordion title="FAQ search feature" icon="magnifying-glass"> **Purpose:** * Helps customers find FAQ answers quickly * Searches page content in real-time * Typically used on FAQ or Help pages **Functionality:** * Displays search input in banner * Filters page content as user types * Shows matching results below **Best for:** * FAQ pages * Help centers * Documentation pages * Knowledge bases </Accordion> </AccordionGroup> <Note> This feature is specialized for FAQ pages. Most pages should keep this disabled. </Note> ### Search bar placeholder Placeholder text displayed in the search input. * Plain text * **Default:** "Search for 'return' or 'size'" <Tip> Use example search terms relevant to your FAQ content to guide users. </Tip> <img alt="FAQ search configuration" /> </Tab> <Tab title="Styling"> ### Section width Controls horizontal width of the banner. **Options:** * **Page** - Standard container width (default) * **Fluid** - Wider layout * **Full** - Edge-to-edge full width ### Color scheme Select color scheme for section background and text. <Note> Applies when no media is present, or when media position is "Top" or "Bottom". </Note> ### Spacing Control vertical spacing around the section: * **Spacing top** - Margin above (None, S, M, L, XL) * **Spacing bottom** - Margin below (None, S, M, L, XL) Both default to M. ### Section border Add decorative borders: None (default), Top, Bottom, Both <img alt="Styling options" /> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Template defaults" icon="wand-magic"> Enable "Show default description" to automatically pull content from pages/collections/products/blogs. </Card> <Card title="Mobile-specific media" icon="mobile-screen"> Always provide portrait-oriented mobile images for optimal vertical screen display. </Card> <Card title="Height balance" icon="ruler-vertical"> Use 50svh height for most pages. Reserve 100svh for homepage or major campaigns. </Card> <Card title="Transparent header" icon="layer-group"> Enable only with background media and ensure sufficient text-to-image contrast. </Card> <Card title="Breadcrumb navigation" icon="chevron-right"> Keep breadcrumbs enabled for SEO benefits and improved user navigation. </Card> <Card title="Desktop descriptions only" icon="desktop"> Hide descriptions on mobile (default) to conserve vertical space on small screens. </Card> <Card title="FAQ search targeting" icon="bullseye"> Only enable FAQ search on actual FAQ or help pages—not general pages. </Card> <Card title="Collection menus" icon="sitemap"> Use page menu for collection subcategory filtering or related page navigation. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Collection page header" icon="layer-group"> Enable default description. Background media position. 50svh height. Upload collection banner image (desktop 1920×600px, mobile 800×1000px). Page menu with subcollections. Breadcrumbs enabled. Center alignment. </Accordion> <Accordion title="Product page banner" icon="tag"> Show default description (desktop only). Background media with product lifestyle image. Auto height. Breadcrumbs enabled. No page menu. Center content position and alignment. </Accordion> <Accordion title="FAQ page with search" icon="circle-question"> Custom title: "How can we help?". Enable FAQ search bar. Placeholder: "Search for 'shipping' or 'returns'". No media or background color scheme only. Auto height. Center alignment. </Accordion> <Accordion title="About page hero" icon="users"> Custom title and content. Background media 100svh height. Transparent header enabled. Team photo background (desktop 1920×1080px, mobile 800×1200px). Bottom content position for readability. </Accordion> <Accordion title="Blog landing banner" icon="newspaper"> Default blog title and description. Top media position. Auto height. Blog featured image (16:9 aspect). Breadcrumbs enabled. No page menu. Standard page width. </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Hero banner" icon="panorama" href="/themes/sahara/sections/hero-banner"> Multi-slide carousel banners with slideshow </Card> <Card title="Full width banner" icon="expand" href="/themes/sahara/sections/full-width-banner"> Edge-to-edge banners with block-based content </Card> </CardGroup> # Product recommendations Source: https://docs.digifist.com/themes/sahara/sections/product-recommendations Display Shopify's AI-powered product recommendations to encourage cross-selling, upselling, and complementary purchases. The Product recommendations section displays Shopify's AI-powered product recommendations based on the current product or cart contents. It shows personalized product suggestions to encourage cross-selling and upselling, with optional manual product fallback. Shopify's recommendation engine analyzes purchase patterns, product relationships, and customer behavior to suggest the most relevant products, helping increase average order value and improve the shopping experience. <img alt="Product recommendations section overview" /> ## What this section controls This section controls AI-powered product recommendation displays with the following capabilities: * Shopify AI-powered recommendations (automatic) * Manual product fallback when recommendations unavailable * Configurable product limit (4-12 products) * Two layout options for visual variety * Optional section-level button * Stock status visibility control * Responsive grid display ## How Product recommendations works The Product recommendations section leverages two data sources: **Primary (Automatic):** * Shopify's AI recommendation engine suggests products based on: * Current product relationships * Cart contents * Purchase patterns across your store * Customer behavior and browsing history **Fallback (Manual):** * If AI recommendations are unavailable, displays manually selected products * Useful for new stores or products with limited data * Provides consistent display until recommendations improve ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Product recommendations section"> Add the section to a product page template or cart page. </Step> <Step title="Configure heading"> Set descriptive heading like "You may also like" or "Complete the look". </Step> <Step title="Add fallback products"> Select manual products to display when AI recommendations are unavailable. </Step> <Step title="Set display options"> Configure maximum products, layout, and stock visibility. </Step> </Steps> <img alt="Product recommendations section in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Layout"> ### Layout Controls the visual style and arrangement of the product grid. <AccordionGroup> <Accordion title="Layout 1" icon="grid"> Standard grid layout with consistent product card styling. **Best for:** * Clean, minimal designs * Focus on product imagery * Standard product pages </Accordion> <Accordion title="Layout 2" icon="grip"> Alternative layout with different spacing and card treatment (default). **Best for:** * Visual variety * Differentiation from other product sections * Enhanced visual hierarchy </Accordion> </AccordionGroup> <Note> Layout choice should match your overall theme aesthetic and other product section layouts. </Note> <img alt="Layout options" /> </Tab> <Tab title="Content"> ### Heading Main title text for the section. * Inline rich text supported (bold, italic, links) * **Default:** "Heading for Product Recommendations" <AccordionGroup> <Accordion title="Effective heading examples" icon="heading"> **For product pages:** * "You may also like" * "Complete the look" * "Customers also bought" * "Pairs well with" **For cart page:** * "Don't forget these" * "Add to your order" * "Recommended for you" * "Frequently bought together" </Accordion> </AccordionGroup> <Tip> Use action-oriented, contextual headings that encourage exploration without being pushy. </Tip> ### Heading size Controls the size of section heading. **Options:** XS, S, M, L, XL\ **Default:** XL <img alt="Heading configuration" /> </Tab> <Tab title="Button"> ### Button text Label for optional section-level button. * Plain text * **Default:** "View all" * Leave empty to hide button ### Button URL Destination link for section button. * Shopify URL selector * Useful for linking to collection or shop page ### Button style Visual style of the section button. <AccordionGroup> <Accordion title="Filled" icon="square"> Solid background with contrasting text (default). **Best for:** Primary calls-to-action, prominent visibility </Accordion> <Accordion title="Outlined" icon="border-outer"> Border-only style with transparent background. **Best for:** Secondary actions, subtle CTAs </Accordion> <Accordion title="Text link" icon="link"> Minimal styling as underlined text. **Best for:** Tertiary actions, non-intrusive links </Accordion> </AccordionGroup> <Note> Section button appears below product grid and provides an escape route to browse more products beyond recommendations. </Note> <img alt="Button configuration" /> </Tab> <Tab title="Products"> ### Products (Manual fallback) Select up to 12 products to display when AI recommendations are unavailable. * Product list selector * **Limit:** 12 products * Acts as fallback only <AccordionGroup> <Accordion title="When manual products display" icon="hand"> Manual products appear in these situations: **New stores:** * Insufficient purchase data * Limited product relationships * Recently launched products **Preview mode:** * Theme Customizer * Development environments * Testing scenarios **No recommendations:** * Shopify API temporarily unavailable * Product has no related items * Recommendation algorithm returns empty set </Accordion> </AccordionGroup> <Tip> Select best-selling, complementary, or popular products as fallbacks to ensure quality suggestions even when AI recommendations are unavailable. </Tip> ### Max products Maximum number of products to display (AI or manual). **Range:** 4 – 12 products\ **Default:** 8 <AccordionGroup> <Accordion title="Product count recommendations" icon="calculator"> **4-6 products:** * Minimal, focused suggestions * Mobile-first designs * Cart page recommendations **7-8 products (recommended):** * Balanced presentation * Standard product pages * Good variety without overwhelming **9-12 products:** * Maximum exposure * Category landing pages * Desktop-optimized layouts </Accordion> </AccordionGroup> <Warning> Shopify's AI may return fewer products than max\_products setting if insufficient recommendations exist. </Warning> ### Show unavailable products Display products that are out of stock. **Options:** True / False\ **Default:** False <AccordionGroup> <Accordion title="Stock visibility strategy" icon="boxes-stacked"> **Hide unavailable (False - default):** * Only show in-stock products * Reduces customer frustration * Focuses on actionable recommendations * **Best for:** Most stores **Show unavailable (True):** * Display all recommendations regardless of stock * Allows "Notify when available" interactions * Shows full product range * **Best for:** Limited inventory or pre-order products </Accordion> </AccordionGroup> <img alt="Product configuration" /> </Tab> <Tab title="Styling"> ### Section width Controls horizontal width of the section. **Options:** * **Page** - Standard container width (default) * **Fluid** - Wider, more spacious layout <Note> Fluid width works well for product grids, providing more breathing room for product images. </Note> ### Color scheme Select color scheme for section background and text. ### Spacing Control vertical spacing around the section: * **Spacing top** - Margin above (None, S, M, L, XL) * **Spacing bottom** - Margin below (None, S, M, L, XL) Both default to M. ### Section border Add decorative borders: None (default), Top, Bottom, Both <img alt="Styling options" /> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Strategic placement" icon="location-dot"> Add to product pages (below description) and cart page for maximum cross-sell opportunity. </Card> <Card title="Contextual headings" icon="message"> Use descriptive, action-oriented headings: "Complete the look", "You may also like", "Customers also bought". </Card> <Card title="Optimal product count" icon="list-ol"> Set max products to 6-8 for balanced variety without overwhelming customers. </Card> <Card title="Quality fallbacks" icon="shield-check"> Select best-selling or complementary products as manual fallbacks for new stores or products. </Card> <Card title="Hide out-of-stock" icon="eye-slash"> Keep "Show unavailable products" disabled to avoid customer frustration with unavailable items. </Card> <Card title="Section button" icon="arrow-up-right-from-square"> Add section button linking to collection or shop for customers who want more options. </Card> <Card title="Fluid width" icon="arrows-left-right"> Consider fluid section width for product grids to maximize space and visual impact. </Card> <Card title="Monitor performance" icon="chart-line"> Track click-through and conversion rates from recommendations to optimize placement and heading. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Product page cross-sell" icon="tags"> Place below product description. Heading: "You may also like". Max products: 8. Hide unavailable products. Manual fallbacks: Best-sellers from same collection. Button: "Shop all products". </Accordion> <Accordion title="Cart page upsell" icon="cart-plus"> Add to cart page template. Heading: "Complete your order". Max products: 6. Show unavailable for pre-orders. Manual fallbacks: Popular accessories. Button: "Continue shopping". </Accordion> <Accordion title="Complementary products" icon="puzzle-piece"> Product page for apparel. Heading: "Complete the look". Max products: 6. Hide unavailable. Manual fallbacks: Matching accessories. Filled button style. Layout 2 for differentiation. </Accordion> <Accordion title="Category suggestions" icon="layer-group"> Product page in specific category. Heading: "More from this collection". Max products: 12. Fluid width. Manual fallbacks: Same-category products. Text link button: "View full collection". </Accordion> <Accordion title="Frequently bought together" icon="users"> Below add-to-cart button. Heading: "Customers also bought". Max products: 4. Hide unavailable. Manual fallbacks: Bundle-worthy items. Layout 1. Outlined button: "Shop more". </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Featured products" icon="star" href="/themes/sahara/sections/featured-products"> Manually curated product showcases </Card> <Card title="Carousel" icon="images" href="/themes/sahara/sections/carousel"> Sliding card displays for varied content </Card> </CardGroup> # Promotional Banner Source: https://docs.digifist.com/themes/sahara/sections/promotional-banner Flexible promotional section with customizable banner and product blocks that can be arranged side-by-side or full-width The **Promotional Banner** section creates highly customizable promotional areas with flexible layout options. Add multiple banner blocks that can be sized to create unique side-by-side arrangements, or showcase featured products with rich media and content. ## What this section controls This section controls promotional displays with the following capabilities: * Multiple banner and product blocks with flexible sizing (Full, Large, Half, Small) * Side-by-side block arrangements for creative layouts * Overlapping media positioning for images and videos * Separate desktop and mobile media with aspect ratio controls * Section-level heading and button * Mobile block order reversal * Color scheme, width, and spacing controls ## Key Features <CardGroup> <Card title="Flexible Sizing" icon="expand"> Four block sizes (Full, Large, Half, Small) enable creative side-by-side layouts </Card> <Card title="Two Block Types" icon="cube"> Banner blocks for promotions and Product blocks for featured items </Card> <Card title="Overlapping Media" icon="layer-group"> Advanced media positioning with optional overlapping images or videos </Card> <Card title="Mobile Optimization" icon="mobile"> Separate media, aspect ratios, and alignment controls for mobile devices </Card> </CardGroup> ## Section Settings <AccordionGroup> <Accordion title="Section Header & Button"> **Mobile Block Order** * Reverse block order on mobile devices **Heading** * Section-level heading text * Size options: H6 (XS) through H2 (XL) * Default: H2 **Section Button** * Button label, link, and style * Styles: Filled, Outlined, Text * Default: Outlined </Accordion> <Accordion title="Section Layout"> **Color Scheme** * Choose from available color schemes * Default: Scheme 1 **Section Width** * **Page**: Standard page width with padding * **Fluid**: Edge-to-edge with contained content * **Full**: Complete full-width layout * Default: Page **Spacing** * Top/Bottom spacing: None, S (1), M (2), L (4), XL (6) * Default: M (2) </Accordion> </AccordionGroup> ## Block Types ### Banner Block The primary block type for creating promotional content areas with flexible sizing and advanced media options. <AccordionGroup> <Accordion title="Block Size & Visibility"> **Show On** * Desktop only, Mobile only, or Both * Default: Both **Block Size** ⭐ Key Feature * **Full**: 100% width - single full-width banner * **Large**: \~66% width - can pair with Small blocks * **Half**: 50% width - perfect for side-by-side pairs * **Small**: \~33% width - can group multiple Small blocks * Default: Full <Tip> Mix different block sizes to create unique layouts: combine a Large banner with a Small one, or place three Small blocks side-by-side for a gallery effect. </Tip> </Accordion> <Accordion title="Block Styling"> **Color Scheme** * Choose from available color schemes * Default: Scheme 3 **Gradient Background Color** * Custom gradient color override * Takes precedence over color scheme background </Accordion> <Accordion title="Content Positioning"> **Vertical Position** * Start, Center, End * Default: Center **Content Alignment** * Left, Center, Right (controls both text and items) * Default: Center **Mobile Alignment** * Separate alignment control for mobile * Default: Center </Accordion> <Accordion title="Text Content"> **Subheading** * Optional subtitle above the main heading **Heading** * Main banner title * Default: "Promotional Collection Banner" **Heading Size** * H6 (XS) through H2 (XL) * Default: H3 (L) **Heading Bottom Spacing** * Space between heading and text: No, S (0.25), M (0.5), L (0.75), XL (1) * Default: S (0.25) **Text** * Rich text description content **Button** * Button label, link, and style * Styles: Filled, Outlined, Text * Default: Filled (different from section button) </Accordion> <Accordion title="Media Settings"> **Enable Overlapping Media** * Advanced feature for layered media composition * Displays two media elements with overlap effect * Default: Disabled <Note> When overlapping media is disabled, you get standard single media with left/right/background position. When enabled, you can position two separate media elements that overlap for unique visual effects. </Note> *** **Standard Media (when overlapping disabled)** **Media Position** * **Left**: Media on left, content on right * **Right**: Media on right, content on left * **Background**: Media behind content * Default: Right **Enable Media Overlay** * Add overlay layer when media is background * Only available for background position **Media Assets** * Image picker for static images * Video upload for Shopify-hosted videos * External video (YouTube/Vimeo) URL * Show/hide video controls option **Desktop Aspect Ratio** * **Auto**: Natural image dimensions * **Square**: 1:1 * **Landscape**: 4:3, 3:2, 5:4, 16:9, 2:1, 4:1, 8:1 * **Portrait**: 3:4, 2:3, 4:5, 9:16, 1:2 * Default: 4:5 (Portrait) *** **Overlapping Media (when enabled)** **Media Position (Overlapping)** * Top, Bottom, Left, Right * Controls where overlapping media appears * Default: Right * Note: Mobile displays overlapping media at bottom **Main Media** * Image, video, or external video for primary media * Show controls option for videos * Aspect ratio (same options as standard media) **Overlapping Media** * Separate image, video, or external video * Show controls option for videos * Aspect ratio: Default 4:3 (Landscape) **Overlap Offset** * How much the media overlaps: 0-10 * Higher values = more overlap * Default: 6 *** **Mobile-Specific Media** **Enable Mobile Media** * Use different media for mobile devices * Default: Disabled (uses desktop media) **Mobile Media Assets** (when enabled) * Separate image, video, or external video * Show controls option for videos **Mobile Aspect Ratio** * Same options as desktop aspect ratio * Default: 1:1 (Square) **Mobile Overlapping Media** (when both enabled) * Separate overlapping media for mobile * Separate offset control (0-10, default 6) * Separate aspect ratio (default: Auto) <Warning> Mobile-specific media settings only appear when "Enable Mobile Media" is checked. This allows complete control over mobile presentation while keeping desktop settings separate. </Warning> </Accordion> <Accordion title="Spacing"> **Inner Spacing** * Padding inside the banner block * Options: No, S (1), M (2), L (4), XL (6) * Default: M (2) </Accordion> </AccordionGroup> ### Product Block Showcase a featured product with customizable media positioning and optional badge. <AccordionGroup> <Accordion title="Block Size & Visibility"> **Show On** * Desktop only, Mobile only, or Both * Default: Both **Block Size** * Same options as Banner block (Full, Large, Half, Small) * Default: Full </Accordion> <Accordion title="Block Styling"> **Color Scheme** * Choose from available color schemes * Default: Scheme 3 **Gradient Background Color** * Custom gradient color override </Accordion> <Accordion title="Product Settings"> **Product** * Select featured product from catalog **Show Price** * Display product price * Default: Enabled **Badge** * Custom badge text (e.g., "NEW", "SALE", "Limited Edition") * Only appears when product is selected **Badge Color Scheme** * Choose color scheme for badge * Default: Scheme 1 * Only available when badge text is added </Accordion> <Accordion title="Content Positioning & Text"> Same content positioning options as Banner block: * Vertical position (Start/Center/End) * Content alignment (Left/Center/Right) * Mobile alignment (separate control) Same text content options as Banner block: * Subheading, Heading, Heading size * Heading bottom spacing * Rich text description * Button (default link: product URL) </Accordion> <Accordion title="Product Media"> **Media Position** * **Left**: Product image left, content right * **Right**: Product image right, content left * **Top**: Product image above content * **Bottom**: Product image below content * Default: Bottom <Note> Product blocks use the selected product's images and don't require separate media uploads. Position controls where the product image appears relative to the content. </Note> **Desktop Aspect Ratio** * Same options as Banner block * Default: 4:5 (Portrait) **Mobile Aspect Ratio** * Separate aspect ratio for mobile * Default: 2:3 (Portrait) </Accordion> <Accordion title="Spacing"> **Inner Spacing** * Same options as Banner block * Default: M (2) </Accordion> </AccordionGroup> ## Layout Examples <CardGroup> <Card title="Full-Width Single Banner"> **1 Banner Block** (size: Full) Perfect for hero-style promotions with full attention on one message. </Card> <Card title="Side-by-Side Pair"> **2 Banner Blocks** (size: Half each) Showcase two equal promotions or categories side-by-side. </Card> <Card title="Large + Small"> **1 Large + 1 Small Banner** Feature primary promotion with secondary callout. </Card> <Card title="Triple Small"> **3 Small Banners** Gallery-style layout for multiple categories or features. </Card> </CardGroup> ## Best practices <Tip> **Aspect Ratio Guidelines** * **Full-width banners**: Use wide ratios like 16:9, 4:1, or 8:1 * **Side-by-side banners**: Use portrait ratios like 4:5, 2:3, or 9:16 * **Mobile**: Square (1:1) or portrait ratios work best for vertical scrolling </Tip> <Tip> **Overlapping Media Tips** * Use overlapping media to create depth and visual interest * Offset of 6-8 works well for standard layouts * Keep overlapping content in mind when positioning text * Test on mobile as overlapping media always appears at bottom </Tip> <Warning> **Performance Considerations** * Use mobile-specific media to serve appropriately-sized images on mobile devices * Optimize images before uploading, especially for background media * External videos (YouTube/Vimeo) load faster than uploaded videos * Limit the number of videos playing simultaneously </Warning> <Note> **Color Scheme Defaults** * Section: Scheme 1 * Banner/Product blocks: Scheme 3 * Product badges: Scheme 1 This creates visual hierarchy between section header and block content. </Note> ## Common Use Cases 1. **Homepage Hero Split**: Two Half blocks showcasing seasonal collections 2. **Product Launch**: One Large banner (main product) + Small banner (features) 3. **Category Navigation**: Three Small blocks linking to different departments 4. **Featured Product**: Single Product block with overlapping lifestyle image 5. **Sale Promotion**: Full-width banner with background video and countdown timer text ## Preset Configuration Default preset includes: * One Banner block * Size: Full width * Desktop aspect ratio: 16:9 (wide landscape) * Mobile aspect ratio: 3:4 (portrait) * Category: Promotional # Recently Viewed Products Source: https://docs.digifist.com/themes/sahara/sections/recently-viewed-products Browser-based product history display helping customers quickly return to previously viewed items The **Recently Viewed Products** section displays products that customers have previously viewed during their browsing session. Using browser local storage to track viewing history, it creates a personalized shopping experience that helps customers quickly return to items of interest. ## What this section controls This section controls product history displays with the following capabilities: * Browser-based automatic product view tracking * Display of 4-12 recently viewed products (configurable) * Two layout styles for visual presentation * Auto-hide when no product history exists * Local storage persistence across visits * Section heading with customizable size * Product columns control for desktop and mobile * Color scheme, width, and spacing controls * Display on any page template ## Key Features <CardGroup> <Card title="Browser Storage" icon="hard-drive"> Automatically tracks product views in browser local storage </Card> <Card title="Personalized History" icon="clock-rotate-left"> Shows up to 12 recently viewed products per customer </Card> <Card title="Auto-Hide Empty" icon="eye-slash"> Section automatically hides when no products have been viewed </Card> <Card title="Two Layouts" icon="table-layout"> Choose between two visual layout styles </Card> </CardGroup> ## How It Works <AccordionGroup> <Accordion title="Automatic Tracking"> **Product View Detection:** * JavaScript automatically tracks when customers view product pages * Stores product IDs in browser's local storage * Updates history in real-time as browsing continues * Persists across multiple visits (until browser data is cleared) **Tracking Behavior:** * Only tracks products when customer visits product pages * Excludes currently viewed product from display * Stores up to configured maximum (4-12 products) * Newest views push out oldest when limit is reached <Note> The tracking happens automatically via JavaScript - no manual configuration needed. Customers must have JavaScript enabled and browser local storage available. </Note> </Accordion> <Accordion title="Display Logic"> **When Section Appears:** * Customer has viewed at least one product * Browser local storage contains product history * Section is added to a page template (product page, homepage, etc.) **When Section Hides:** * No products have been viewed yet (first visit) * Browser local storage is empty or cleared * All recently viewed products are unavailable (if show unavailable is disabled) **Current Product Exclusion:** * If viewing a product page, that product is excluded from the recently viewed list * This prevents showing the same product the customer is currently viewing <Tip> Place this section on product pages to encourage cross-selling, or on the homepage to help returning customers quickly find products they were interested in. </Tip> </Accordion> <Accordion title="Product Limit & Ordering"> **Maximum Products:** 4-12 products (configurable) * Default: 8 products * Shows most recently viewed first * Older products removed as new ones are viewed **Display Order:** * Newest viewed products appear first * Chronological order from most to least recent * Automatically updates as customer continues browsing **Grid Display:** * Products arranged in responsive grid * Number of columns adapts to screen size * Uses theme's standard product card component </Accordion> </AccordionGroup> ## Section Settings <AccordionGroup> <Accordion title="Layout Style"> **Layout** * **Layout 1**: Standard layout style * **Layout 2**: Alternative layout style * Default: Layout 1 <Note> Layout options control the visual arrangement and styling. Test both to see which fits your store's design better. </Note> </Accordion> <Accordion title="Section Header"> **Heading** * Section title text * Supports inline rich text (bold, italic, links) * Default: "Recently Viewed Products" **Heading Size** * H6 (XS), H5 (S), H4 (M), H3 (L), H2 (XL) * Default: H2 (XL) <Tip> Consider headings like "You Recently Viewed", "Come Back To", or "Still Interested In?" for more engaging copy. </Tip> </Accordion> <Accordion title="Section Button"> **Button Text** * Optional button label * Leave empty to hide button * Default: "View all" **Button URL** * Destination link for button * Use Shopify URL picker * Common links: /collections/all, /pages/shop **Button Style** * **Filled**: Solid background button * **Outlined**: Border-only button * **Link**: Text-only link style * Default: Filled <Tip> Link the button to your main catalog or "New Arrivals" to encourage continued browsing when customers finish viewing their history. </Tip> </Accordion> <Accordion title="Product Display"> **Maximum Products** * Range: 4-12 products * Default: 8 products * Controls how many products appear in the section * More products = more scrolling required **Show Unavailable Products** * When enabled: Shows all recently viewed products (even if sold out) * When disabled: Hides products that are unavailable * Default: Disabled <Warning> If "Show Unavailable Products" is disabled and all recently viewed products are out of stock, the section will be hidden completely. </Warning> </Accordion> <Accordion title="Section Width & Color"> **Section Width** * **Page**: Standard page width with margins * **Fluid**: Minimal side margins, edge-to-edge * Default: Page **Color Scheme** * Choose from available color schemes * Default: Scheme 1 <Tip> Use the same color scheme as your product sections for visual consistency, or use a contrasting scheme to make recently viewed products stand out. </Tip> </Accordion> <Accordion title="Spacing & Borders"> **Spacing Top** * Padding above section: None, S (1), M (2), L (4), XL (6) * Default: M (2) **Spacing Bottom** * Padding below section: None, S (1), M (2), L (4), XL (6) * Default: M (2) **Section Border** * None, Top, Bottom, or Both * Default: None * Adds thin border line to separate section </Accordion> </AccordionGroup> ## Setup & Placement <Steps> <Step title="Add Section"> In Theme Customizer, add the "Recently Viewed Products" section to your desired template (product page, homepage, etc.). </Step> <Step title="Configure Settings"> Set maximum products, heading text, button label/URL, and layout preferences. </Step> <Step title="Test Tracking"> View several product pages in your preview to populate the recently viewed list and see how it displays. </Step> <Step title="Adjust Display"> Fine-tune the maximum products, spacing, and color scheme based on how it looks with actual product data. </Step> </Steps> ## Best Placement Locations <CardGroup> <Card title="Product Pages" icon="box"> **Perfect for cross-selling** Shows other products customer has viewed, encouraging comparison shopping </Card> <Card title="Homepage" icon="house"> **Great for returning visitors** Helps customers quickly find products they were interested in on previous visits </Card> <Card title="Cart Page" icon="cart-shopping"> **Suggests additional items** Reminds customers of other products they viewed while deciding what to buy </Card> <Card title="Collection Pages" icon="grid"> **Enhances navigation** Provides quick access to previously viewed items while browsing categories </Card> </CardGroup> ## Technical Details <AccordionGroup> <Accordion title="Browser Storage"> **Local Storage Implementation:** * Uses browser's `localStorage` API * Stores product IDs as JSON array * Key typically: `recentlyViewedProducts` or similar * Data persists until browser cache is cleared **Storage Limits:** * Most browsers allow \~5-10MB of local storage * Product IDs are small (a few bytes each) * Practically unlimited for product tracking purposes **Privacy Considerations:** * Data stored locally on customer's device only * Not sent to servers or shared * Customers can clear via browser settings * Respects private/incognito browsing limits <Note> Local storage is domain-specific. If customer switches between `www.yourstore.com` and `yourstore.com`, they may see different recently viewed products. </Note> </Accordion> <Accordion title="JavaScript Requirements"> **Dependencies:** * JavaScript must be enabled in browser * Local storage must be available (not disabled) * Modern browser (supports localStorage API) **Fallback Behavior:** * If JavaScript disabled: Section doesn't appear * If localStorage full: Oldest products removed first * If localStorage blocked: Section hides gracefully **Performance:** * Lightweight tracking code (\~2-5KB) * No server requests for tracking * Fast rendering (products loaded from cache) </Accordion> <Accordion title="Product Card Integration"> **Uses Standard Product Cards:** * Same card component as product grids * Inherits theme's product card settings * Respects card layout configuration * Includes images, titles, prices, variants **Unavailable Products:** * Marked as "Sold Out" if setting is enabled * Filtered out if setting is disabled * Quick add/cart actions may be disabled </Accordion> </AccordionGroup> ## Best practices <CardGroup> <Card title="Optimal product limits" icon="list-ol"> Display 6-8 products on product pages to encourage exploration without overwhelming visitors. Show 8-12 products on homepage where more space is available and returning visitors appreciate more options. Limit cart page to 4-6 products as a subtle reminder without distracting from checkout. </Card> <Card title="Heading copy suggestions" icon="heading"> For B2C stores use "You Recently Viewed", "Come Back To These", or "Still Interested?". Fashion stores work best with "Your Style History" or "Products You Loved". Tech stores benefit from "Your Recent Searches" or "Items You Compared". Use "Recently Viewed Products" as a clear, straightforward default for general stores. </Card> <Card title="Button strategy" icon="hand-pointer"> Link to main catalog with "View All Products", link to new arrivals with "See What's New", or link to sale collection with "Browse Sale Items". Leave button empty for product pages to avoid navigation distraction and keep focus on the current product. </Card> <Card title="Storage considerations" icon="database"> Customer viewing history persists indefinitely until browser cache or cookies are cleared. Each browser and device maintains separate storage. No automatic expiration exists, so history remains across all visits until manually cleared or storage limits are reached. </Card> <Card title="Testing requirements" icon="flask"> Use incognito or private browsing to test fresh visitor experience. Clear local storage to reset recently viewed products and view products in different orders to test chronological sorting. Check displays on both desktop and mobile devices and test with sold-out products to verify unavailable product handling. </Card> <Card title="Common troubleshooting" icon="triangle-exclamation"> If section never appears, verify customers have JavaScript enabled and viewed at least one product. Products disappearing means customer cleared browser cache or cookies. Unavailable products showing requires enabling the "Show Unavailable Products" setting. Differences between mobile and desktop indicate separate browsers or cleared cache on one device. </Card> </CardGroup> ## Common Questions <AccordionGroup> <Accordion title="How long does viewing history persist?"> **Indefinitely**, until: * Customer clears browser cache/cookies * Customer uses browser's "Clear browsing data" function * Browser storage limit is reached and older data is removed * Customer uses a different browser or device (each has separate storage) There's no automatic expiration - viewing history persists across all visits until manually cleared. </Accordion> <Accordion title="Can I show more than 12 products?"> Not via theme settings. The maximum is limited to 12 to prevent: * Overwhelming customers with too many options * Performance issues with large product grids * Excessive scrolling on mobile devices To increase beyond 12, you would need to edit the section's schema file and modify the `max_products` range, though this is not recommended for UX reasons. </Accordion> <Accordion title="Does this work for guest visitors?"> **Yes!** Recently viewed products work for all visitors: * Guest (not logged in) * Logged-in customers * First-time visitors (after viewing first product) Viewing history is stored in the browser, not tied to customer accounts. Each browser/device has its own independent history. </Accordion> <Accordion title="Why don't I see recently viewed products on my own store?"> Common reasons: 1. You haven't viewed any products yet in that browser session 2. You cleared your browser cache recently 3. You're using incognito/private browsing mode (limited storage) 4. JavaScript is disabled or blocked 5. The section isn't added to the current page template Test by viewing 2-3 products, then navigate to a page with the section added. </Accordion> <Accordion title="Can I customize which products are tracked?"> No, the tracking is automatic and includes all product page views. There's no way to: * Exclude specific products from tracking * Manually add products to viewing history * Filter by collection or product type * Prioritize certain products over others The JavaScript tracks every product page view automatically and chronologically. </Accordion> <Accordion title="Does this slow down my store?"> **No.** Recently Viewed Products is very lightweight: * Tracking happens client-side (in browser) * No server requests for tracking * Minimal JavaScript (\~2-5KB) * Products loaded from browser cache * No API calls required It has negligible impact on page load speed or server performance. </Accordion> </AccordionGroup> ## Privacy & Data <AccordionGroup> <Accordion title="GDPR & Privacy Compliance"> **Data Storage:** * Stored locally on customer's device only * Not transmitted to servers * Not shared with third parties * Not used for tracking across sites **Customer Control:** * Customers can clear data via browser settings * Private/incognito browsing limits storage * No customer account required **Compliance Notes:** * Generally considered functional storage (required for feature) * May not require explicit cookie consent in most jurisdictions * Consult legal advisor for specific compliance requirements </Accordion> <Accordion title="Cross-Device Synchronization"> Recently viewed products do **not** sync across devices or browsers: * Each browser has independent storage * Switching from mobile to desktop shows different histories * Logging in doesn't sync viewing history * Clearing cache on one device doesn't affect others This is by design - viewing history is browser-local, not account-based. </Accordion> </AccordionGroup> ## Related Sections & Features * **Product Recommendations**: Shopify's AI-powered recommendations (alternative approach) * **Featured Products**: Manually curated product selections * **Product Grids**: Standard product collection displays * **Card Product Component**: The component used to display products in this section ## Developer Notes <AccordionGroup> <Accordion title="JavaScript API"> The section typically uses a JavaScript function like: ```javascript theme={null} // Track product view addToRecentlyViewed(productId); // Get recently viewed products getRecentlyViewedProducts(maxProducts); // Clear viewing history clearRecentlyViewed(); ``` Check theme's JavaScript files for exact implementation details. </Accordion> <Accordion title="Local Storage Key"> Products are typically stored under a key like: ``` localStorage.getItem('recentlyViewedProducts') ``` Returns JSON array of product IDs: `["123456", "234567", "345678"]` </Accordion> </AccordionGroup> # Rich Text Source: https://docs.digifist.com/themes/sahara/sections/rich-text Display formatted text content with headings and rich formatting The **Rich Text** section displays formatted text content with customizable heading, body text, and layout options. Perfect for About Us pages, policies, editorial content, mission statements, and informational pages that require multi-paragraph formatted content. ## What this section controls This section controls text content displays with the following capabilities: * Rich formatted body text with paragraph support * Customizable heading with size options (XS to XL) * Two layout modes (Normal or Boxed) * Text alignment options (Left, Center, Right) * Section width options (Narrower, Narrow, Page width, Fluid) * Color scheme selection * Vertical spacing and border controls ## Settings ### Layout **Options:** * **Normal** - Standard layout with text flowing naturally * **Boxed** - Text contained in a bordered box with background **Default:** Normal **Purpose:** Boxed layout adds visual emphasis and separates content from surrounding sections. Use for callouts, important policies, or highlighted information. **When to use:** * **Normal:** Most text content, about pages, standard descriptions * **Boxed:** Important notices, highlighted policies, special announcements ### Text Content <Accordion title="Heading"> **Type:** Inline rich text\ **Default:** "Heading for longer content" Main heading displayed above body text. Supports basic formatting (bold, italic) via inline rich text editor. **Best practices:** * Keep concise (3-8 words) * Clearly describe content below * Use sentence case or title case consistently </Accordion> <Accordion title="Heading Size"> **Options:** XS (h6), S (h5), M (h4), L (h3), XL (h2)\ **Default:** XL (h2) Controls heading text size. Larger headings draw more attention and establish visual hierarchy. **Recommended sizes:** * **XL (h2):** Main page headings, section titles * **L (h3):** Subheadings, secondary sections * **M (h4):** Tertiary headings, smaller sections * **S/XS (h5/h6):** Minor headings, inline section titles </Accordion> <Accordion title="Content"> **Type:** Rich text editor\ **Default:** "Enter your long text content here..." Main body text displayed below heading. Rich text editor supports: * **Paragraphs** - Multiple paragraphs with spacing * **Bold/Italic** - Emphasize text * **Lists** - Bulleted or numbered lists * **Links** - Hyperlinks to pages, products, external sites * **Headings** - Sub-headings within content (H4, H5, H6) **Best practices:** * Break long text into paragraphs (3-5 sentences each) * Use lists for easy-to-scan information * Add links to relevant pages/products * Keep sentences concise for readability </Accordion> <Accordion title="Text Size"> **Type:** Range slider\ **Range:** 1x - 4x\ **Step:** 0.5x\ **Default:** 1x Multiplier for body text size. Increase for emphasis or readability on content-heavy pages. **Recommended sizes:** * **1x:** Standard body text (most use cases) * **1.5x - 2x:** About pages, story content, featured text * **2.5x - 4x:** Hero text, large editorial statements </Accordion> <Accordion title="Content Position"> **Options:** Start (left), Center, End (right)\ **Default:** Center Horizontal alignment of heading and body text. **When to use:** * **Start (Left):** Standard text-heavy content, blog-style layouts, reading-focused pages * **Center:** Landing pages, short announcements, hero content, symmetrical layouts * **End (Right):** Decorative layouts, design-focused pages (use sparingly) </Accordion> ### Common Settings <Accordion title="Section Width"> **Options:** Narrower, Page, Fluid\ **Default:** Page Controls content width on page. * **Narrower:** \~600-800px, optimized for long-form reading * **Page:** Standard container width (\~1200px) * **Fluid:** Full width with padding, expansive layouts **Recommendation:** Use "Narrower" for text-heavy content (improves readability by limiting line length to \~60-80 characters). </Accordion> <Accordion title="Color Scheme"> **Options:** Theme color schemes (scheme-1, scheme-2, etc.)\ **Default:** scheme-1 Applies theme colors to section background and text. See [Common Settings](/themes/sahara/common-settings) for details. </Accordion> <Accordion title="Spacing Top"> **Options:** None, S, M, L, XL\ **Default:** M Vertical margin above section. See [Common Settings](/themes/sahara/common-settings) for details. </Accordion> <Accordion title="Spacing Bottom"> **Options:** None, S, M, L, XL\ **Default:** M Vertical margin below section. See [Common Settings](/themes/sahara/common-settings) for details. </Accordion> <Accordion title="Section Border"> **Options:** None, Top, Bottom, Both\ **Default:** None Add decorative borders above/below section. See [Common Settings](/themes/sahara/common-settings) for details. </Accordion> ## Use Cases <CardGroup> <Card title="About Us Page" icon="building"> Tell your brand story with heading "Our Story" and multi-paragraph content about company history, values, and mission. </Card> <Card title="Shipping Policy" icon="truck"> Layout: Boxed, heading "Shipping Information", detailed policy content with processing times, carriers, and international shipping. </Card> <Card title="Homepage Brand Statement" icon="bullhorn"> Center-aligned, large text size (2x), heading "Crafted with Care", short brand philosophy paragraph. </Card> <Card title="Product Collection Description" icon="tags"> Heading "Summer Collection 2026", section width "Narrower", descriptive paragraph about seasonal products and design inspiration. </Card> <Card title="FAQ Section" icon="circle-question"> Multiple Rich Text sections, each with question as heading, answer as content. Boxed layout for visual separation. </Card> <Card title="Sustainability Statement" icon="leaf"> Heading "Our Commitment to Sustainability", list of eco-friendly practices, links to certifications and impact reports. </Card> </CardGroup> ## Best practices <CardGroup> <Card title="Optimize for Readability" icon="book-open"> Use "Narrower" section width for long text content. Line length of 60-80 characters optimal for reading comprehension. </Card> <Card title="Break Up Text" icon="align-left"> Use short paragraphs (3-5 sentences), bullet lists, and sub-headings to make content scannable. Avoid walls of text. </Card> <Card title="Choose Appropriate Heading Size" icon="text-height"> Match heading size to importance: XL for main sections, L for subordinate sections. Maintain hierarchy across page. </Card> <Card title="Use Boxed Layout Sparingly" icon="square"> Boxed layout adds emphasis but can clutter if overused. Reserve for important notices, policies, or highlighted content. </Card> <Card title="Add Relevant Links" icon="link"> Link to related products, collections, or pages within content. Example: "Read our [Return Policy](/policies/refunds)" in shipping text. </Card> <Card title="Center vs Left Align" icon="align-center"> Center alignment works for short content (1-3 paragraphs), hero statements. Left-align for longer, reading-focused content. </Card> <Card title="Test Text Size on Mobile" icon="mobile"> Large text sizes (2x+) may be too large on mobile. Test responsive display and adjust if needed. </Card> <Card title="Consistent Color Schemes" icon="palette"> Use consistent color schemes across similar sections (all policy pages same scheme) for cohesive visual experience. </Card> </CardGroup> ## Examples ### About Us Page * **Layout:** Normal * **Heading:** "Our Story" * **Heading Size:** XL * **Text Size:** 1x * **Content Position:** Start (Left) * **Section Width:** Narrower * **Content:** 3-4 paragraphs about company founding, mission, team, values ### Shipping Policy (Boxed) * **Layout:** Boxed * **Heading:** "Shipping & Delivery" * **Heading Size:** L * **Text Size:** 1x * **Content Position:** Start * **Section Width:** Page * **Content:** Bullet list of shipping times, carriers, costs, international options ### Homepage Hero Statement * **Layout:** Normal * **Heading:** "Handcrafted Elegance" * **Heading Size:** XL * **Text Size:** 2x * **Content Position:** Center * **Section Width:** Page * **Content:** Single impactful paragraph (2-3 sentences) about brand philosophy ### FAQ Entry * **Layout:** Boxed * **Heading:** "What is your return policy?" * **Heading Size:** M * **Text Size:** 1x * **Content Position:** Start * **Section Width:** Page * **Content:** Concise answer with link to full return policy page ## Troubleshooting <AccordionGroup> <Accordion title="Text too small or too large on mobile"> **Solution:** * Adjust "Text Size" setting (reduce from 2x to 1.5x for mobile readability) * Test on actual mobile device or browser dev tools mobile emulator * Large text sizes (3x-4x) may require custom CSS media queries for mobile optimization </Accordion> <Accordion title="Content looks cramped or too spaced out"> **Solution:** * Adjust "Spacing Top" and "Spacing Bottom" settings * Check "Section Width" - "Narrower" provides more white space for long text * Ensure adequate spacing between multiple Rich Text sections (M or L spacing) </Accordion> <Accordion title="Boxed layout doesn't stand out"> **Solution:** * Change Color Scheme to contrasting scheme (e.g., scheme-2 if page is scheme-1) * Ensure theme color schemes have distinct background colors (check Theme Settings → Colors) * Consider adding Section Border (Top/Bottom/Both) for additional separation </Accordion> <Accordion title="Heading and body text alignment different"> **Solution:** * "Content Position" applies to both heading and body text * If they appear misaligned, check that content doesn't have inline styles overriding alignment * Clear any custom HTML alignment tags in rich text editor </Accordion> <Accordion title="Links not working or styled incorrectly"> **Solution:** * Verify link URL format (internal links: `/collections/summer`, external: `https://example.com`) * Check link styling in theme settings (Theme Settings → Typography → Link styles) * Ensure link text visible on selected color scheme background </Accordion> </AccordionGroup> ## Related Sections * **[Common Settings](/themes/sahara/common-settings)** - Section width, color scheme, spacing, borders * **[Custom Liquid](/themes/sahara/custom-liquid)** - For advanced text formatting beyond rich text capabilities ## Key Takeaways * **Perfect for long-form content** - About pages, policies, editorial content * **Boxed layout** - Adds emphasis and visual separation for important content * **Readable line length** - Use "Narrower" section width for text-heavy content * **Flexible alignment** - Center for short hero statements, left for reading-focused content * **Heading hierarchy** - XL for main sections, smaller sizes for subordinate sections * **Text size multiplier** - 1x standard, 1.5-2x for emphasis, 2.5-4x for hero statements * **Rich text editor** - Supports paragraphs, formatting, lists, links, sub-headings Rich Text section provides flexible formatting for all your text-based content needs with professional readability and visual appeal. # Shop the Look Source: https://docs.digifist.com/themes/sahara/sections/shop-the-look Interactive shoppable images with clickable product dots positioned over lifestyle photography The **Shop the Look** section creates shoppable lifestyle images by placing interactive product dots directly on styled photography. Customers click dots to discover products featured in the scene, creating an immersive shopping experience similar to Instagram Shopping posts. ## What this section controls This section controls shoppable image displays with the following capabilities: * Interactive product hotspot dots positioned over images * Separate desktop and mobile images with independent dot positioning * Unlimited product slide blocks per image * Percentage-based dot positioning system (1-100% horizontal and vertical) * Product quick-view with add-to-cart functionality * Section heading and description with customizable sizes * Color scheme, width, and spacing controls ## Key Features <CardGroup> <Card title="Clickable Dots" icon="circle-dot"> Position interactive dots anywhere on your image to highlight products </Card> <Card title="Product Discovery" icon="magnifying-glass"> Customers click dots to reveal product details and purchase </Card> <Card title="Mobile Optimized" icon="mobile"> Separate images for desktop and mobile with independent dot positioning </Card> <Card title="Unlimited Products" icon="tag"> Add as many product dots as needed to tag all items in the scene </Card> </CardGroup> ## How It Works <AccordionGroup> <Accordion title="Interactive Dots Concept"> **Visual Shopping Experience:** * Upload a lifestyle or scene image (e.g., styled room, outfit, table setting) * Add product "slide" blocks - one for each product in the image * Position each dot precisely over the corresponding product in the image * Customers click dots to see product details and add to cart **Example Use Cases:** * Fashion: Model wearing multiple products (shoes, shirt, accessories) * Home decor: Styled room with furniture, lighting, and decor items * Beauty: Flatlay with multiple makeup or skincare products * Food: Recipe scene with ingredients or kitchen tools <Tip> This section works best with high-quality lifestyle photography where multiple products are naturally arranged in a scene. Professional product photography in context performs better than plain product images. </Tip> </Accordion> <Accordion title="Dot Positioning System"> **How Positioning Works:** * Each product dot has horizontal and vertical position controls * Positions are percentage-based (1-100% for each axis) * **Horizontal**: 1% = far left, 50% = center, 100% = far right * **Vertical**: 1% = top, 50% = middle, 100% = bottom * Default: 50% horizontal, 50% vertical (center of image) **Positioning Tips:** * Use Theme Customizer preview to adjust positions visually * Fine-tune with 1% increments for precision * Consider responsive behavior - test on mobile * Dots should clearly point to products without overlapping <Note> Position percentages are relative to the image container, not the actual product in the photo. You'll need to visually align dots with products using the preview. </Note> </Accordion> <Accordion title="Desktop vs Mobile"> **Separate Images:** * Upload different images for desktop and mobile * Mobile image is optional (uses desktop image if not provided) * Allows cropping or reformatting for different aspect ratios **Aspect Ratio Controls:** * Desktop: Auto, Square (1:1), Portrait (1:2, 2:3, 3:4, 4:5, 9:16), Landscape (3:2, 4:3, 5:4, 16:9, 2:1, 4:1, 8:1) * Mobile: Same options as desktop * Default: Auto (natural image dimensions) **Important:** Dot positions are the same for desktop and mobile. If you use different images with different composition, dots may not align correctly on mobile. <Warning> If using different desktop and mobile images, ensure products are in similar positions in both images, or dots will appear misaligned on one device. </Warning> </Accordion> <Accordion title="Product Display"> **Product Grid:** * Products appear in a grid below or beside the image * Uses theme's standard product card component * Shows product images, titles, prices, and variants * Clicking a dot highlights the corresponding product card **Reverse Positions:** * When enabled: Product grid appears on opposite side * When disabled: Default positioning (typically image left, products right) * Helps create varied layouts when using multiple Shop the Look sections <Tip> The product grid provides an overview at a glance, while dots enable discovery within the styled context. Both work together for best UX. </Tip> </Accordion> </AccordionGroup> ## Section Settings <AccordionGroup> <Accordion title="Section Header"> **Title** * Section heading text * Supports inline rich text (bold, italic, links) * Default: "Essentials" * Examples: "Shop the Look", "Get the Look", "Style This Outfit" **Heading Size** * H6 (XS), H5 (S), H4 (M), H3 (L), H2 (XL) * Default: H2 (XL) </Accordion> <Accordion title="Desktop Image"> **Image (Desktop)** * Main lifestyle/scene image * Upload via image picker * Recommended: High-resolution images (1800-2400px wide) **Aspect Ratio (Desktop)** * **Auto**: Natural image dimensions (recommended for varied photography) * **Square**: 1:1 (perfect for Instagram-style content) * **Portrait**: 1:2, 2:3, 3:4, 4:5, 9:16 (vertical compositions) * **Landscape**: 3:2, 4:3, 5:4, 16:9, 2:1, 4:1, 8:1 (horizontal compositions) * Default: Auto <Tip> **Aspect Ratio Guidelines:** * **Fashion/Outfit**: 3:4 or 2:3 portrait (shows full outfit) * **Room/Interior**: 16:9 or 4:3 landscape (captures full space) * **Flatlay/Tabletop**: 1:1 square (centered composition) * **Wide scenes**: 2:1 or 4:1 landscape (panoramic feel) </Tip> </Accordion> <Accordion title="Mobile Image"> **Image (Mobile)** * Optional mobile-specific image * Upload via image picker * If not provided, desktop image is used * Recommended: 800-1200px wide for mobile **Aspect Ratio (Mobile)** * Same options as desktop * Default: Auto * Often better to use portrait ratios on mobile (2:3, 3:4, 9:16) <Note> Mobile images are useful when desktop composition doesn't work vertically (e.g., wide landscape scene needs to be cropped/recomposed for mobile portrait view). </Note> </Accordion> <Accordion title="Layout Options"> **Reverse Positions** * Swaps the position of image and product grid * Default: Disabled (image on left, products on right) * Enabled: Products on left, image on right * Useful for creating varied layouts with multiple sections **Show Dots** * Shows or hides the interactive product dots on the image * Default: Enabled * Disable if you only want product grid without interactive dots **Color Scheme for Dots** * Choose color scheme that applies to dot styling * Default: Scheme 1 * Affects dot color, pulse animation, and hover states * Choose scheme with good contrast against your image <Tip> Use a contrasting color scheme for dots to ensure they're visible against your image. Light dots on dark images, dark dots on light images. </Tip> </Accordion> <Accordion title="Section Width & Color"> **Section Width** * **Page**: Standard page width with margins * **Fluid**: Minimal side margins, edge-to-edge * **Full**: Complete full-width layout * Default: Page **Color Scheme** * Choose from available color schemes * Default: Scheme 1 * Applies to section background and product grid area </Accordion> <Accordion title="Spacing & Borders"> **Spacing Top** * Padding above section: None, S (1), M (2), L (4), XL (6) * Default: M (2) **Spacing Bottom** * Padding below section: None, S (1), M (2), L (4), XL (6) * Default: M (2) **Section Border** * None, Top, Bottom, or Both * Default: None </Accordion> </AccordionGroup> ## Block Settings: Product Slide Each "slide" block represents one product tagged in the image. Add one block per product featured in your scene. <AccordionGroup> <Accordion title="Product Selection"> **Product** * Select product from your catalog using product picker * Each product appears as a clickable dot on the image * Each product also appears in the product grid * No limit to number of products (add as many slide blocks as needed) <Warning> Ensure selected products are published and available. Unpublished or unavailable products may not display correctly. </Warning> </Accordion> <Accordion title="Dot Position"> **Horizontal Position** * Range: 1-100% * Default: 50% (center horizontally) * Controls left-to-right placement * **1%** = Far left edge * **50%** = Horizontal center * **100%** = Far right edge **Vertical Position** * Range: 1-100% * Default: 50% (center vertically) * Controls top-to-bottom placement * **1%** = Top edge * **50%** = Vertical center * **100%** = Bottom edge <Tip> **Positioning Best Practices:** * Position dots directly on or very close to the product in the image * Avoid placing dots too close to image edges (5-95% range is safer) * Space dots apart to prevent overlap (especially on mobile) * Test positioning on both desktop and mobile previews * Use consistent positioning logic across multiple Shop the Look sections </Tip> </Accordion> </AccordionGroup> ## Setup Guide <Steps> <Step title="Prepare Lifestyle Image"> Create or source a high-quality lifestyle photo featuring multiple products arranged in a natural scene. Ensure good lighting, composition, and clear product visibility. </Step> <Step title="Add Section"> In Theme Customizer, add "Shop the Look" section to your homepage or desired page template. </Step> <Step title="Upload Image"> Upload desktop image (and optionally mobile image). Set appropriate aspect ratios for best presentation. </Step> <Step title="Add Product Slides"> For each product in your image: * Click **Add Product slide** block * Select the product from your catalog * Adjust horizontal and vertical position to align dot with product * Repeat for all products in the scene </Step> <Step title="Configure Display"> Set heading text, color schemes for dots and section, spacing, and reverse positioning as desired. </Step> <Step title="Test & Refine"> Preview on desktop and mobile to verify: * Dots align correctly with products * Dots are visible against image (adjust color scheme if needed) * Product grid displays properly * Clicking dots reveals correct products </Step> </Steps> ## Best practices <CardGroup> <Card title="Photography guidelines" icon="camera"> Use high-resolution images (min 1800px wide for desktop) with even lighting across the scene. Arrange products with clear separation for easier dot positioning. Avoid overly busy backgrounds that compete with products. Keep number of products manageable (3-8 products ideal) and maintain consistent styling across multiple Shop the Look sections. </Card> <Card title="Dot positioning strategy" icon="location-dot"> Position dots slightly offset from product center (not directly on top). Create visual flow with dot placement (left to right, top to bottom). Avoid clustering dots in one area. Test responsive behavior on actual mobile devices and consider using larger products in the center, smaller in periphery. </Card> <Card title="Product selection" icon="box-open"> Feature products from same collection or style theme. Include variety of price points (high-low mix). Ensure all products are in stock when launching section. Consider featuring complementary products (complete the look) and update regularly with seasonal or trending products. </Card> <Card title="Image quality" icon="image"> Avoid using low-resolution or poorly-lit images. Don't tag too many products (overcrowding dots). Position dots away from image edges (may get cut off on mobile) and use consistent desktop/mobile images to prevent dot misalignment. </Card> <Card title="Testing requirements" icon="mobile-screen"> Always test on actual mobile devices before launching. Verify dots align correctly with products, remain visible against the image, and that product grid displays properly. Check that clicking dots reveals correct products across all screen sizes. </Card> <Card title="Product availability" icon="circle-check"> Never use products that are out of stock or discontinued. Check inventory levels before featuring products. Update sections regularly to remove sold-out items and replace with available alternatives to maintain customer trust. </Card> </CardGroup> ## Use Case Examples <CardGroup> <Card title="Fashion Outfit" icon="shirt"> **Scene**: Model wearing complete outfit Tagged products: Shirt, pants, shoes, belt, watch, bag, sunglasses Best for: Apparel stores, fashion boutiques </Card> <Card title="Home Office Setup" icon="house-laptop"> **Scene**: Styled desk workspace Tagged products: Desk, chair, lamp, laptop stand, plant, artwork, storage Best for: Home goods, furniture stores </Card> <Card title="Skincare Routine" icon="droplet"> **Scene**: Flatlay of skincare products Tagged products: Cleanser, toner, serum, moisturizer, eye cream, sunscreen Best for: Beauty and cosmetics stores </Card> <Card title="Outdoor Adventure" icon="mountain"> **Scene**: Camping or hiking gear arrangement Tagged products: Tent, backpack, sleeping bag, stove, water bottle, boots Best for: Outdoor and sports equipment </Card> </CardGroup> ## Technical Details <AccordionGroup> <Accordion title="Image Optimization"> **Recommended Specifications:** * Format: JPG or PNG (JPG for photos, PNG for graphics with transparency) * Desktop: 1800-2400px wide, 72-150 DPI * Mobile: 800-1200px wide, 72-150 DPI * File size: Under 500KB (compress images before uploading) * Color mode: RGB (not CMYK) **Performance Tips:** * Use Shopify's image optimization (automatic) * Compress images before uploading (TinyPNG, ImageOptim, etc.) * Consider WebP format for modern browsers (if theme supports) * Avoid extremely large files that slow page load </Accordion> <Accordion title="Responsive Behavior"> **Desktop:** * Image and product grid displayed side-by-side (or reversed) * Dots appear on image with hover states * Product cards in scrollable grid **Mobile:** * Image stacked above product grid * Dots use tap interaction (no hover) * Product cards in vertical scroll * Mobile image used if provided, otherwise desktop image **Dot Positions:** * Same percentage positions apply to both desktop and mobile * May need adjustment if using different image compositions * Test thoroughly on actual mobile devices </Accordion> <Accordion title="Interaction Behavior"> **Desktop:** * Hover over dot: Pulse animation or highlight effect * Click dot: Scrolls or highlights corresponding product card * Hover product card: May highlight corresponding dot **Mobile:** * Tap dot: Opens product quick view or scrolls to product card * Tap product card: Opens product page * No hover states (tap-only interaction) **Accessibility:** * Dots are keyboard-accessible (tab navigation) * Screen reader support for dot labels and products * Sufficient color contrast for dot visibility </Accordion> </AccordionGroup> ## Common Questions <AccordionGroup> <Accordion title="How many products can I tag?"> **Technically unlimited**, but practical limits apply: * 3-8 products is ideal for most images * More than 10 products can feel crowded * Consider image size and product spacing * Too many dots = confusing user experience **Best practice**: Tag only the most important or distinctive products in the scene. Less is often more. </Accordion> <Accordion title="Do dot positions work on both desktop and mobile?"> **Yes**, dot positions (%) are applied to both desktop and mobile images. **However**: If you use different desktop and mobile images with different compositions, dots may not align correctly. **Solution**: Either use the same image for both (cropped/scaled), or ensure products are in similar positions in both images. </Accordion> <Accordion title="Can I change dot colors or styling?"> Yes, via the **Color Scheme for Dots** setting. This applies a theme color scheme to dot styling. For further customization (size, shape, animation), you would need to edit the theme's CSS code. </Accordion> <Accordion title="What happens if a product becomes unavailable?"> Depends on your product card configuration: * Product may show as "Sold Out" * Dot may remain visible but product card disabled * Or dot may be hidden entirely **Best practice**: Regularly update Shop the Look sections to feature in-stock products, or use products that are consistently available. </Accordion> <Accordion title="Can customers add products to cart directly?"> Depends on your product card settings and theme configuration. Typically: * Clicking dot scrolls to or highlights product card * Customer can then add to cart from product card * Or customer clicks to open full product page Check your theme's product card component settings for quick add or cart button options. </Accordion> </AccordionGroup> ## Preset Configuration Default preset includes: * 3 Product slide blocks * First slide: Dot at 25% horizontal, 25% vertical (top-left) * Second slide: Dot at 50% horizontal, 50% vertical (center) * Third slide: Dot at 75% horizontal, 75% vertical (bottom-right) * Category: Products This creates a balanced starting point with dots distributed across the image. ## Related Sections * **Featured Products**: Traditional product grid without lifestyle imagery * **Product Recommendations**: AI-powered related product suggestions * **Shoppable Section**: Similar concept with different implementation * **Image with Text**: Alternative for single-product feature with lifestyle image # Shoppable Source: https://docs.digifist.com/themes/sahara/sections/shoppable Social media-inspired shoppable image gallery with interactive product hotspots in the Sahara Shopify theme The Shoppable section creates Instagram/TikTok-style social media feeds with interactive product hotspots, transforming social content into a direct shopping experience. Display lifestyle images or videos where customers can click on tagged products to see details and add to cart. This section improves engagement and conversion rates by helping customers discover products naturally through aspirational imagery, perfect for social commerce, influencer content, and shop-the-look experiences. ## What this section controls This section controls social commerce displays with the following capabilities: * Five layout styles (list, grid, carousel, tags, slider) * Interactive product hotspots (up to 4 per post) * Social media profile integration (avatar, username, follow button) * Video support with story-style tags * Instant product quick-view drawers * Metaobject support for dynamic content management * Caption customization with character limits * Responsive column controls for grid layouts * Autoplay settings for carousel and slider modes *** ## Section Settings ### Layout Configuration <AccordionGroup> <Accordion title="Layout Style"> **Setting ID:** `layout`\ **Type:** Select\ **Options:** * `list` - Vertical feed (Instagram-style) ⭐ Default * `grid` - Multi-column grid (Pinterest-style) * `carousel` - Horizontal slider with navigation * `tags` - Story-style tags with video support * `slider` - Full-width slider presentation Choose how shoppable posts are displayed. **Layout Comparison:** | Layout | Best For | Visual Style | Mobile | | ------------ | --------------------- | -------------------- | --------------- | | **List** | Social feed aesthetic | Single column | Scrollable feed | | **Grid** | Gallery presentation | 3-4 columns | 2 columns | | **Carousel** | Featured content | Horizontal slider | Swipeable | | **Tags** | Story highlights | Circular tag bubbles | Compact | | **Slider** | Hero-style showcase | Full-width slides | Full-width | <Note> Each layout has its own preset with recommended settings. You can customize any layout after selection. </Note> </Accordion> <Accordion title="Content Source"> **Setting ID:** `source_of_slide`\ **Type:** Select\ **Options:** * `manual` - Manually add blocks in theme customizer ⭐ Default * `metaobject` - Pull content from metaobjects Choose whether to manually create posts or dynamically pull from metaobjects. **Manual Source:** * Add each post as a block in Theme Customizer * Full control over content and order * Best for curated, stable content * No technical setup required **Metaobject Source:** * Define posts as metaobjects * Update content without touching theme * Programmatic content management * Requires metaobject setup <Tip> Start with manual mode to understand the section, then migrate to metaobjects for easier content management at scale. </Tip> </Accordion> <Accordion title="Aspect Ratio (Layout)"> **Setting ID:** `aspect_ratio_for_layout`\ **Type:** Select\ **Default:** `1/1` (Square) Controls the aspect ratio of post images in the layout. **Available Ratios:** **Auto:** * `auto` - Original image dimensions **Square:** * `1/1` - Perfect square (Instagram classic) ⭐ Default **Landscape:** * `4/3` - Standard photo (1.33:1) * `3/2` - Classic 35mm (1.5:1) * `5/4` - Slightly wide (1.25:1) * `16/9` - Widescreen (1.78:1) * `2/1` - Panoramic (2:1) * `4/1` - Ultra-wide banner (4:1) * `8/1` - Extreme panorama (8:1) **Portrait:** * `3/4` - Vertical photo (0.75:1) * `2/3` - Portrait orientation (0.67:1) * `4/5` - Instagram portrait (0.8:1) * `9/16` - Vertical video (0.56:1) * `1/2` - Tall portrait (0.5:1) **Recommendations by Layout:** * **List:** 1/1 or 4/5 (Instagram aesthetic) * **Grid:** 1/1 (uniform grid) * **Carousel:** 4/3 or 16/9 (wider view) * **Tags:** 1/1 (circular cropping) * **Slider:** 16/9 or 2/1 (cinematic) </Accordion> <Accordion title="Grid Items per Row"> **Setting ID:** `grid_items`\ **Type:** Select\ **Options:** * `3` - 3 columns * `4` - 4 columns ⭐ Default **Applies to:** Grid layout only Number of posts displayed per row in grid layout. **Desktop View:** * **3 columns:** Larger images, more prominent * **4 columns:** Compact grid, more content visible **Mobile View:** * Always displays 2 columns regardless of this setting * Optimized for mobile screen width </Accordion> <Accordion title="Tag Items Slides Per View"> **Setting ID:** `tag_items_slides_perview`\ **Type:** Range\ **Range:** 5 - 8\ **Default:** 7 **Applies to:** Tags layout only Number of circular tag items visible at once in the tags layout. **Recommendations:** * **5-6:** Larger tag bubbles, easier to tap * **7:** Default balanced view ⭐ * **8:** Compact, more tags visible <Note> On mobile, this number automatically reduces to fit screen width while maintaining readability. </Note> </Accordion> <Accordion title="Show Dots Navigation"> **Setting ID:** `show_dots`\ **Type:** Checkbox\ **Default:** Enabled **Applies to:** Carousel and Slider layouts Display dot navigation indicators below carousel/slider. **When to Disable:** * Minimalist design preference * Very few posts (navigation obvious) * Custom navigation styling **When to Enable:** * Multiple posts (helps users track position) * Clear navigation indicators needed * Improves accessibility </Accordion> </AccordionGroup> *** ### Header Configuration <AccordionGroup> <Accordion title="Header Layout Style"> **Setting ID:** `header_layout`\ **Type:** Select\ **Options:** * `compact` - Minimal header ⭐ Default * `extended` - Larger header with more spacing Controls the size and spacing of the section header area. **Compact:** * Minimal vertical space * Title and social info close together * Modern, efficient use of space **Extended:** * More generous spacing * Prominent section title * Better for hero-style sections </Accordion> <Accordion title="Header Title"> **Setting ID:** `header_title`\ **Type:** Inline Rich Text\ **Default:** "Shoppable" Main heading for the section. **Common Titles:** * "Shop The Look" * "Get The Look" * "Shop Our Feed" * "As Seen On Instagram" * "Trending Now" * "#\[YourBrandHashtag]" * "Style Inspiration" <Tip> Use hashtags or branded phrases to reinforce social media connection and encourage user-generated content. </Tip> </Accordion> <Accordion title="Heading Size"> **Setting ID:** `heading_size`\ **Type:** Select\ **Options:** * `h6` - Extra Small (XS) * `h5` - Small (S) * `h4` - Medium (M) * `h3` - Large (L) * `h2` - Extra Large (XL) ⭐ Default Size of the section title heading. **Size Recommendations:** * **h2 (XL):** Homepage hero sections, main focal point * **h3 (L):** Standard section headers * **h4 (M):** Secondary sections, lower on page * **h5-h6 (S-XS):** Subtle headers, minimal emphasis </Accordion> </AccordionGroup> *** ### Social Profile Integration <AccordionGroup> <Accordion title="Social Avatar (Section-Level)"> **Setting ID:** `social_avatar`\ **Type:** Image Picker Default profile picture displayed for the section's social account. **Image Specs:** * **Dimensions:** 200x200px minimum * **Aspect Ratio:** 1:1 (square) * **Format:** JPG, PNG, WebP * **Content:** Brand logo or profile photo **Use Cases:** * Your brand's Instagram profile photo * Influencer headshot * Brand logo in circular format <Note> This is the section-level default. Each individual post can override with its own avatar. </Note> </Accordion> <Accordion title="Social Username"> **Setting ID:** `social_username`\ **Type:** Text\ **Default:** "Sahara" Social media username or handle displayed in posts. **Format Examples:** * `@yourbrand` (with @) * `yourbrand` (without @) * `Your Brand Name` **Common Uses:** * Instagram handle: `@fashionbrand` * TikTok username: `@styleinspo` * Brand name: `Fashion Brand Co.` </Accordion> <Accordion title="Follow Button Label"> **Setting ID:** `follow_button_label`\ **Type:** Text\ **Default:** "Follow Us" Text for the social profile follow button. **Button Label Ideas:** * "Follow Us" * "Follow on Instagram" * "Follow @username" * "Get More Inspiration" * "Join Our Community" </Accordion> <Accordion title="Social Profile URL"> **Setting ID:** `social_url`\ **Type:** URL Link to your social media profile. **URL Examples:** * Instagram: `https://instagram.com/yourbrand` * TikTok: `https://tiktok.com/@yourbrand` * Pinterest: `https://pinterest.com/yourbrand` <Tip> Use your actual social profile URL. When customers click "Follow," they'll be taken directly to follow you on that platform. </Tip> </Accordion> <Accordion title="Follow Button Style"> **Setting ID:** `button_style`\ **Type:** Select\ **Options:** * `button--filled` - Solid filled button * `button--outlined` - Outlined border style ⭐ Default * `link` - Simple link style Visual style for the follow button. **Style Guide:** * **Filled:** High contrast, primary CTA * **Outlined:** Subtle, secondary action * **Link:** Minimal, non-intrusive </Accordion> </AccordionGroup> *** ### Product Display Settings <AccordionGroup> <Accordion title="Product Image Aspect Ratio"> **Setting ID:** `aspect_ratio`\ **Type:** Select\ **Default:** `auto` (Original dimensions) Aspect ratio for product images in the quick-view drawer. **Available Options:** * `auto` - Original image dimensions ⭐ Default * `1/1` - Square * `1/2` - Tall portrait * `2/3` - Standard portrait * `3/4` - Classic portrait * `4/5` - Instagram portrait * `9/16` - Vertical (phone screen) <Note> This setting only affects product images in the drawer, not the main shoppable post images. </Note> </Accordion> <Accordion title="Shop Button Label"> **Setting ID:** `button_label`\ **Type:** Text\ **Default:** "Shop The Look" Label for the main call-to-action button on each post. **CTA Ideas:** * "Shop The Look" * "Shop This Post" * "Get The Look" * "View Products" * "Tap to Shop" * "See Products" </Accordion> <Accordion title="Shop Button Style"> **Setting ID:** `button_label_style`\ **Type:** Select\ **Options:** * `button--filled` - Solid filled button ⭐ Default * `button--outlined` - Outlined border style * `link` - Simple link style Visual style for the "Shop The Look" button. </Accordion> </AccordionGroup> *** ### Color Schemes <AccordionGroup> <Accordion title="Section Color Scheme"> **Setting ID:** `color_scheme`\ **Type:** Color Scheme\ **Default:** `scheme-1` Main background color scheme for the entire section. </Accordion> <Accordion title="Drawer Color Scheme"> **Setting ID:** `color_scheme_drawer`\ **Type:** Color Scheme\ **Default:** `scheme-1` Color scheme for the product quick-view drawer that opens when clicking hotspots. <Tip> Use a contrasting color scheme for the drawer to make it visually distinct from the background and draw attention to products. </Tip> </Accordion> <Accordion title="Items Color Scheme"> **Setting ID:** `color_scheme_for_items`\ **Type:** Color Scheme\ **Default:** `scheme-1` Color scheme for individual shoppable post items/cards. **Design Strategy:** * Match section scheme for seamless integration * Contrast with section for card-style appearance * Coordinate with drawer for visual consistency </Accordion> </AccordionGroup> *** ### Section Width & Spacing <AccordionGroup> <Accordion title="Section Width"> **Setting ID:** `section_width`\ **Type:** Select\ **Options:** * `page` - Page width (contained) ⭐ Default * `fluid` - Fluid width (wider) Maximum width of the section container. **Recommendations by Layout:** * **List:** Page width (focused feed) * **Grid:** Fluid (more gallery space) * **Carousel:** Fluid or Page * **Tags:** Page (compact works well) * **Slider:** Fluid (cinematic width) </Accordion> <Accordion title="Spacing Top"> **Setting ID:** `spacing_top`\ **Type:** Select\ **Options:** 0, 1 (S), 2 (M), 4 (L), 6 (XL)\ **Default:** 2 (M) </Accordion> <Accordion title="Spacing Bottom"> **Setting ID:** `spacing_bottom`\ **Type:** Select\ **Options:** 0, 1 (S), 2 (M), 4 (L), 6 (XL)\ **Default:** 2 (M) </Accordion> <Accordion title="Section Border"> **Setting ID:** `section_border`\ **Type:** Select\ **Options:** none, top, bottom, both\ **Default:** none </Accordion> </AccordionGroup> *** ## Shoppable Social Item Blocks Each block represents one shoppable post with an image/video and up to 4 product hotspots. ### Post Content <AccordionGroup> <Accordion title="Social Post Image"> **Block Setting ID:** `social_post_image`\ **Type:** Image Picker\ **Required:** Yes Main lifestyle image for the shoppable post. **Image Guidelines:** * **Minimum:** 1080x1080px (for square posts) * **Recommended:** 1200x1200px or higher * **Aspect Ratio:** Match your layout aspect ratio setting * **Format:** JPG, PNG, WebP * **File Size:** Optimize to 200-500KB **Content Best Practices:** * High-quality, professional photography * Products clearly visible and well-lit * Aspirational lifestyle context * On-brand aesthetic and styling * Clean composition for hotspot placement **Avoid:** * Overly cluttered scenes (hard to spot products) * Poor lighting or blurry images * Heavy filters obscuring product colors * Too many products (max 4 works best) </Accordion> <Accordion title="Social Post Content"> **Block Setting ID:** `social_post_content`\ **Type:** Rich Text\ **Default:** Sample text with hashtags Caption/description for the post (Instagram caption style). **Example:** ```html theme={null} <p>Embrace the summer with our curated looks. Discover the styles we love, inspired by you. Shine in the season's favorite outfits.</p> <p>#summerstyle #ootd #shopthelook</p> ``` **Caption Writing Tips:** * Start with engaging first line * Describe the look or mood * Include relevant hashtags * Keep under 150 words for readability * Use line breaks (`<p>` tags) for structure * Add emojis sparingly (copy/paste into editor) **Hashtag Strategy:** * Brand hashtags (#yourbrand) * Campaign hashtags (#summercollection2024) * Discoverable hashtags (#ootd, #styleinspo) * 3-5 hashtags per post (avoid spam) </Accordion> <Accordion title="Social Post URL"> **Block Setting ID:** `social_post_url`\ **Type:** URL Optional link to the original social media post. **Use Cases:** * Link to original Instagram post * Link to TikTok video * Link to Pinterest pin * Attribution for UGC (user-generated content) **When to Use:** * Reposting influencer content (give credit) * Driving traffic back to social profiles * Encouraging social engagement **When to Skip:** * Original content created for your site * Focus on product sales, not social traffic </Accordion> </AccordionGroup> *** ### Social Stories (Video) <AccordionGroup> <Accordion title="Story Tag"> **Block Setting ID:** `tag_story`\ **Type:** Text\ **Default:** "hashtag" **Applies to:** Tags layout only Tag label displayed on the circular story bubble. **Examples:** * `#newin` * `#sale` * `summer` * `trending` * `bestseller` **Best Practices:** * Keep very short (1-2 words) * Use hashtag or keyword * Should fit in small circular space * Descriptive of content theme </Accordion> <Accordion title="Story Video"> **Block Setting ID:** `social_story_video`\ **Type:** Video **Applies to:** Tags layout only Upload a vertical video for Instagram/TikTok-style story presentation. **Video Specifications:** * **Aspect Ratio:** 9:16 (vertical/portrait) * **Resolution:** 1080x1920px recommended * **Duration:** 15-60 seconds * **Format:** MP4, WebM * **File Size:** Under 10MB (optimize for web) **Video Content Tips:** * Show products in use/context * Quick styling demonstrations * Product reveals or unboxing * Behind-the-scenes content * User testimonials or reviews <Note> Videos are displayed in a story-style full-screen overlay when users tap the story tag. Include product hotspots to make videos shoppable. </Note> </Accordion> </AccordionGroup> *** ### Block-Level Social Profile <AccordionGroup> <Accordion title="Avatar (Block-Level)"> **Block Setting ID:** `social_avatar`\ **Type:** Image Picker Profile picture for this specific post (overrides section-level avatar). **When to Use Block-Level Avatar:** * Featuring influencer/partner content (use their photo) * User-generated content (customer's profile pic) * Multiple brand accounts (different brand avatars) * Campaign-specific branding **When to Use Section-Level:** * All posts from your brand account * Consistent brand identity * Simpler management </Accordion> <Accordion title="Avatar Object Fit"> **Block Setting ID:** `social_avatar_object_fit`\ **Type:** Select\ **Options:** * `cover` - Fill circle, may crop ⭐ Default * `contain` - Fit entire image, may show background How the avatar image fits within the circular frame. **Cover:** * Image fills entire circle * May crop edges to fill space * Best for photos/headshots **Contain:** * Entire image visible * May show background if not square * Best for logos with padding </Accordion> <Accordion title="Username (Block-Level)"> **Block Setting ID:** `social_username`\ **Type:** Text\ **Default:** "Sahara" Username for this specific post (overrides section-level username). **Use Cases:** * Influencer collaborations: `@influencername` * Customer features: `@customername` * Partner brands: `@partnerbrand` * Default to section username for your content </Accordion> </AccordionGroup> *** ## Product Hotspots (4 Products Max) Each shoppable post can tag up to **4 products** with interactive hotspots. ### Product Selection & Positioning The section supports **4 product slots**: Product 01, Product 02, Product 03, Product 04. Each product has identical settings: <AccordionGroup> <Accordion title="Product Selection"> **Block Setting IDs:** `product_01`, `product_02`, `product_03`, `product_04`\ **Type:** Product Picker Select a product from your Shopify store to tag in this post. **Strategic Product Selection:** * Choose visually distinct products (different colors/shapes) * Select products actually shown in the image * Prioritize high-margin or bestselling items * Consider color coordination with image * Limit to 2-3 products for clarity (4 max) <Tip> Don't feel obligated to use all 4 hotspot slots. Often 2-3 well-placed hotspots are more effective than 4 crowded ones. </Tip> </Accordion> <Accordion title="Hotspot X Position"> **Block Setting IDs:** `product_01_dot_x`, `product_02_dot_x`, `product_03_dot_x`, `product_04_dot_x`\ **Type:** Range\ **Range:** 1% - 100%\ **Default:** 50% Horizontal position of the product hotspot dot on the image. **Positioning Guide:** * **0-20%:** Left edge of image * **20-40%:** Left-center area * **40-60%:** Center area (⭐ Default 50%) * **60-80%:** Right-center area * **80-100%:** Right edge of image **Best Practices:** * Place hotspot directly on or near the product * Avoid extreme edges (10-90% safe zone) * Consider mobile tap targets (not too close together) * Test on actual image to verify placement </Accordion> <Accordion title="Hotspot Y Position"> **Block Setting IDs:** `product_01_dot_y`, `product_02_dot_y`, `product_03_dot_y`, `product_04_dot_y`\ **Type:** Range\ **Range:** 1% - 100%\ **Default:** 50% Vertical position of the product hotspot dot on the image. **Positioning Guide:** * **0-20%:** Top of image * **20-40%:** Upper area * **40-60%:** Middle area (⭐ Default 50%) * **60-80%:** Lower area * **80-100%:** Bottom of image **Placement Strategy:** * Place on focal point of product * Avoid overlapping text/faces * Distribute hotspots across image (not clustered) * Consider visual balance <Note> X and Y coordinates work like a grid: X is left-to-right, Y is top-to-bottom. (50%, 50%) places the hotspot at the exact center of the image. </Note> </Accordion> </AccordionGroup> *** ### Example Product Hotspot Setup **Scenario:** Instagram post featuring summer outfit **Image:** Model wearing hat, sunglasses, dress, and shoes **Product Configuration:** **Product 01 - Wide Brim Hat** * Product: "Summer Straw Hat - Natural" * X Position: 50% (centered on head) * Y Position: 15% (top of image, on hat) **Product 02 - Sunglasses** * Product: "Aviator Sunglasses - Gold" * X Position: 55% (slightly right of face) * Y Position: 25% (face level, on sunglasses) **Product 03 - Linen Dress** * Product: "Breezy Linen Dress - White" * X Position: 50% (center of dress) * Y Position: 55% (mid-torso area) **Product 04 - Leave Empty** * Only using 3 hotspots for clarity **Result:** Clean, easy-to-tap hotspots on each featured product without clutter. *** ## Layout Presets The Shoppable section includes 5 pre-configured presets optimized for different use cases. ### 1. List Layout Preset **Preset Name:** "Shoppable - List"\ **Category:** Features **Default Settings:** * Layout: `list` * Aspect Ratio: `1/1` (square) * Section Width: `page` * 1 sample block included **Best For:** * Classic Instagram feed aesthetic * Scrollable social media-style presentation * Mobile-first designs * Long-form content browsing **Appearance:** ``` ┌────────────────────────┐ │ @username [Follow] │ │ ┌──────────────────┐ │ │ │ │ │ │ │ Post Image │ │ │ │ [Hotspots] │ │ │ │ │ │ │ └──────────────────┘ │ │ Caption text... │ │ [Shop The Look] │ ├────────────────────────┤ │ Next Post... │ └────────────────────────┘ ``` *** ### 2. Grid Layout Preset **Preset Name:** "Shoppable - Grid"\ **Category:** Features **Default Settings:** * Layout: `grid` * Grid Items: `4` (4 columns) * Aspect Ratio: `1/1` (square) * 4 sample blocks included **Best For:** * Gallery-style product discovery * Showcasing multiple looks at once * Pinterest-style inspiration boards * Visual product catalogs **Appearance:** ``` Header Title ┌─────┬─────┬─────┬─────┐ │ IMG │ IMG │ IMG │ IMG │ │ [•] │ [•] │ [•] │ [•] │ ├─────┼─────┼─────┼─────┤ │ IMG │ IMG │ IMG │ IMG │ │ [•] │ [•] │ [•] │ [•] │ └─────┴─────┴─────┴─────┘ ``` **Mobile:** * Automatically adjusts to 2 columns * Maintains square aspect ratio * Swipe scroll *** ### 3. Carousel Layout Preset **Preset Name:** "Shoppable - Carousel"\ **Category:** Features **Default Settings:** * Layout: `carousel` * Show Dots: `true` * Aspect Ratio: `1/1` * 5 sample blocks included **Best For:** * Featured content slider * Curated seasonal collections * Homepage hero sections * Storytelling sequences **Appearance:** ``` Header Title ┌──────────────────────────────┐ │ ◀ [Post Image w/ Hotspots] ▶ │ │ [Shop The Look] │ └──────────────────────────────┘ ● ○ ○ ○ ○ ``` **Features:** * Arrow navigation * Swipe/drag functionality * Dot indicators * Auto-play optional (theme dependent) *** ### 4. Tags Layout Preset **Preset Name:** "Shoppable - Tags"\ **Category:** Features **Default Settings:** * Layout: `tags` * Tag Slides Per View: `7` * 5 sample blocks with tag stories * Different hashtag tags: #hashtag, #shop, #product, #new, #sale **Best For:** * Instagram/TikTok stories aesthetic * Category browsing by hashtag * Video content with product tags * Campaign-specific content hubs **Appearance:** ``` Header Title ┌─────────────────────────────┐ │ Story Tags (Horizontal): │ │ ○ ○ ○ ○ │ │ #hash #shop #new #sale │ └─────────────────────────────┘ Click tag → Full-screen story with video + hotspots ``` **Features:** * Circular tag bubbles * Hashtag labels * Story-style video overlays * Shoppable video support *** ### 5. Slider Layout Preset **Preset Name:** "Shoppable - Slider"\ **Category:** Features **Default Settings:** * Layout: `slider` * Show Dots: `true` * Section Width: `fluid` (recommended: switch to `fluid`) * 5 sample blocks included **Best For:** * Full-width hero sections * Cinematic product showcases * Landing page features * Campaign announcements **Appearance:** ``` ┌───────────────────────────────────┐ │ │ │ Full-Width Post Image │ │ [Product Hotspots] │ │ │ │ [Shop The Look] │ │ │ └───────────────────────────────────┘ ● ○ ○ ○ ○ ``` **Features:** * Edge-to-edge images * Bold, impactful presentation * Navigation controls * Slide transition effects *** ## Common Use Cases ### 1. Instagram Feed Integration **Goal:** Replicate your Instagram aesthetic with shoppable products **Configuration:** * **Layout:** List * **Aspect Ratio:** 1/1 (square) or 4/5 (portrait) * **Header Title:** "Shop Our Instagram" * **Social Username:** Your Instagram handle * **Social URL:** Your Instagram profile * **Follow Button:** "Follow on Instagram" **Block Setup:** * Pull recent Instagram posts * Upload same images to theme * Copy captions to post content * Tag products shown in each image * Link social\_post\_url to original Instagram post **Result:** Seamless integration that drives social engagement while converting followers to customers. *** ### 2. Influencer Collaboration Gallery **Goal:** Feature multiple influencer partnership posts **Configuration:** * **Layout:** Grid (4 columns) * **Header Title:** "As Seen On..." * **Section Width:** Fluid **Per-Block Configuration:** * Different avatar for each influencer (their photo) * Different username for each influencer * Social\_post\_url linking to their original post * Attribution in caption **Example:** ``` Post 1: @fashioninfluencer1 Post 2: @styleexpert Post 3: @beautyb blogger Post 4: @lifestyleguru ``` **Benefits:** * Social proof from trusted voices * Diverse styling inspiration * Proper attribution/credit * Drives influencer collaboration ROI *** ### 3. Seasonal Campaign: "Summer Essentials" **Goal:** Showcase summer collection with lifestyle imagery **Configuration:** * **Layout:** Carousel * **Header Title:** "Summer Essentials" * **Heading Size:** h2 (XL) * **Aspect Ratio:** 4/3 (landscape) * **Button Label:** "Get The Look" **5 Carousel Posts:** 1. **Beach Day:** Swimwear, sunglasses, beach bag 2. **Brunch Outfit:** Sundress, sandals, sunhat 3. **Vacation Packing:** Luggage with folded clothes 4. **Poolside Glam:** Resort wear, accessories 5. **Sunset Drinks:** Evening outfit, bag, jewelry **Each Post:** * 2-3 product hotspots * Aspirational lifestyle setting * Cohesive color palette * Descriptive caption with #summerstyle **Result:** Immersive campaign experience that tells a story while showcasing products in context. *** ### 4. Shop the Look: Outfit Styling **Goal:** Help customers visualize complete outfits **Configuration:** * **Layout:** List or Grid * **Header Title:** "Complete the Look" * **Button Label:** "Shop This Outfit" **Post Strategy:** * Full outfit on model (head to toe) * Tag ALL items (top, bottom, shoes, accessories) * Use 4 product hotspots maximum * Caption with styling tips **Example Post:** ``` Image: Model in casual weekend look Products Tagged: 1. Oversized Sweater (chest area) 2. High-Waist Jeans (waist/legs) 3. Ankle Boots (feet) 4. Leather Tote Bag (shoulder/side) Caption: "Weekend vibes Keep it cozy but chic with our new fall essentials. Tap to shop each piece! #weekendstyle #fallfashion" ``` **Result:** Customers can instantly shop entire styled looks, increasing average order value. *** ### 5. Product Launch: Story-Style Reveal **Goal:** Create buzz for new product with story-style video **Configuration:** * **Layout:** Tags * **Header Title:** "NEW ARRIVALS" * **Tag Slides Per View:** 5 **Story Tags Setup:** * Tag 1: `#sneakpeek` (Teaser video) * Tag 2: `#reveal` (Product reveal video) * Tag 3: `#details` (Close-up features) * Tag 4: `#styling` (How to wear) * Tag 5: `#shopnow` (Final CTA with hotspots) **Each Story:** * 15-30 second vertical video * Product hotspots on final frame * Countdown/urgency messaging * Swipe-through narrative **Result:** Engaging, TikTok/Instagram-style product launch that drives excitement and sales. *** ## Best practices <CardGroup> <Card title="Quality Imagery" icon="camera"> Use high-resolution, professional photos. Lifestyle context sells better than plain product shots. </Card> <Card title="Strategic Hotspot Placement" icon="bullseye"> Place hotspots directly on products, not randomly. Test on mobile for tap accuracy. </Card> <Card title="Limit Products Per Post" icon="hashtag"> 2-3 products per post is ideal. 4 maximum. More creates clutter and decision paralysis. </Card> <Card title="Compelling Captions" icon="pen"> Write engaging captions with storytelling, hashtags, and clear CTAs. Copy successful social media formats. </Card> <Card title="Maintain Visual Consistency" icon="palette"> Keep consistent aesthetic across all posts - color grading, style, composition. Builds brand identity. </Card> <Card title="Test on Mobile" icon="mobile"> Majority of social shoppers use mobile. Verify hotspots are tappable and layout looks good on small screens. </Card> <Card title="Update Regularly" icon="rotate"> Refresh content frequently to match current inventory, seasons, and trending styles. </Card> <Card title="Track Performance" icon="chart-line"> Monitor which posts drive clicks and sales. Double down on successful content styles. </Card> </CardGroup> *** ## Design Tips ### Hotspot Placement Strategy **The Rule of Thirds:** * Divide image into 3x3 grid * Place hotspots at intersection points * Creates balanced, professional layout **Avoid:** * Clustering all hotspots in one area * Placing on faces or important composition elements * Too close to image edges (tap difficulty) * Overlapping hotspots (confusing) **Best Practices:** * Spread hotspots across image * Place on actual products shown * Leave breathing room between dots * Consider mobile finger size (\~44px tap target) *** ### Creating Shoppable Content **Photo Shoot Tips:** 1. **Plan Product Placement:** * Know which products you'll tag before shooting * Arrange products with clear sight lines * Avoid overlapping items 2. **Lighting:** * Even, natural lighting shows products accurately * Avoid heavy shadows obscuring products * Consider color accuracy for clothing/accessories 3. **Composition:** * Leave clean space around tagged products * Use shallow depth of field to focus on featured items * Include lifestyle context (model, setting) 4. **Styling:** * On-brand aesthetic * Season-appropriate * Target audience alignment * Multiple styling angles (flat lay, on model, close-up) *** ### Caption Writing Formula **Effective Caption Structure:** 1. **Hook (First Line):** * Grab attention immediately * Pose question or bold statement * Example: "Weekend plans? We've got you covered" 2. **Context (Middle):** * Describe the look/products * Share styling tips * Example: "This breezy linen set is perfect for warm days..." 3. **Call to Action (End):** * Direct instruction * Example: "Tap to shop each piece!" 4. **Hashtags (Separate Line):** * 3-5 relevant hashtags * Mix brand, campaign, and discoverable tags * Example: "#summerstyle #linenset #shopnow" **Length:** * Aim for 50-150 words * Front-load important info * Use line breaks for readability *** ## Accessibility Considerations <Warning> Ensure shoppable content is accessible to all users, including those using assistive technologies. </Warning> ### Accessibility Checklist **Image Alt Text:** * Provide descriptive alt text for all images * Describe products and scene * Example: "Woman in white linen dress and straw hat on beach" **Keyboard Navigation:** * All hotspots accessible via Tab key * Enter/Space to activate hotspot * Escape to close product drawer * Logical tab order (left-to-right, top-to-bottom) **Screen Reader Support:** * Hotspots announce product names * Captions readable by screen readers * Drawer content properly labeled * Navigation controls have aria-labels **Color Contrast:** * Hotspot dots have sufficient contrast with images * Text meets WCAG AA standards (4.5:1 ratio) * Don't rely on color alone to convey information **Touch Target Size:** * Hotspots at least 44x44px (mobile) * Adequate spacing between hotspots (avoid accidental taps) * Buttons large enough for easy tapping **Video Accessibility:** * Captions for video content * Audio descriptions where needed * Pause/play controls visible * No autoplay with sound *** ## Troubleshooting <AccordionGroup> <Accordion title="Hotspots not appearing on images"> **Problem:** Product hotspot dots don't show on posts **Solutions:** 1. **Verify Product Selected:** * Check that product is actually selected in block settings * Empty product field = no hotspot 2. **Check Hotspot Position:** * Hotspots at 0% or 100% may be off-screen * Verify X and Y positions are in 10-90% range 3. **Image Upload:** * Ensure post image is uploaded and visible * Hotspots won't render without base image 4. **Browser Cache:** * Hard refresh (Ctrl+Shift+R) * Clear browser cache * Check in incognito mode 5. **Theme Updates:** * Verify you're running latest theme version * Check for JavaScript console errors </Accordion> <Accordion title="Product drawer not opening when clicking hotspot"> **Problem:** Clicking hotspot dot does nothing **Solutions:** 1. **JavaScript Errors:** * Open browser Developer Tools (F12) * Check Console tab for errors * May indicate theme conflict 2. **Product Availability:** * Verify product exists and is published * Check product isn't deleted or archived 3. **Theme Conflicts:** * Disable other apps temporarily * Test with default theme settings * Check for custom code interfering 4. **Mobile Testing:** * Test on actual device vs. browser resize * Some mobile browsers have different behavior 5. **Clickable Element:** * Ensure hotspot isn't covered by another element * Check CSS z-index values </Accordion> <Accordion title="Images cropping incorrectly"> **Problem:** Post images cutting off important areas **Solutions:** 1. **Aspect Ratio Mismatch:** * Check `aspect_ratio_for_layout` setting * If set to 1/1 but image is 16/9, it will crop * Use `auto` to preserve original dimensions 2. **Image Positioning:** * Images crop from center by default * Ensure focal point of image is centered * Consider theme's object-fit settings 3. **Upload Correct Aspect Ratio:** * Match upload aspect ratio to layout setting * Example: 1/1 layout = upload square images * Prevents cropping entirely 4. **Object Fit Setting:** * Check if theme uses object-fit: cover vs contain * Cover fills space (may crop), contain shows full image </Accordion> <Accordion title="Layout not displaying as expected"> **Problem:** Grid/carousel/tags not rendering correctly **Solutions:** 1. **Verify Layout Setting:** * Double-check `layout` setting value * Re-save section after changing 2. **Block Count:** * Grid looks best with 4+ blocks * Carousel needs 2+ blocks * Tags needs 3+ for effect 3. **Browser Compatibility:** * Test in different browsers (Chrome, Safari, Firefox) * Check for browser-specific CSS issues 4. **Section Width:** * Some layouts work better with fluid width * Try changing section\_width setting 5. **Clear Cache:** * Browser cache may show old layout * Theme cache may need refresh * Hard reload page </Accordion> <Accordion title="Videos not playing in story tags"> **Problem:** Story videos don't load or play **Solutions:** 1. **Video Format:** * Use MP4 format (best compatibility) * Convert other formats to MP4 * Check codec is H.264 2. **File Size:** * Videos over 10MB may fail to load * Compress video for web * Optimize resolution (1080x1920 max) 3. **Upload Confirmation:** * Verify video fully uploaded (check file size) * Re-upload if incomplete 4. **Browser Support:** * Test in different browsers * Mobile browsers may have restrictions * Check video plays in browser's video player 5. **Hosting:** * Shopify has file size limits * Consider external video hosting (YouTube, Vimeo) if needed * Check Shopify file upload limits </Accordion> <Accordion title="Social profile link not working"> **Problem:** Follow button doesn't redirect to social profile **Solutions:** 1. **URL Format:** * Use full URL: `https://instagram.com/username` * Not just `@username` or partial URL 2. **HTTPS vs HTTP:** * Use HTTPS (secure) * HTTP may be blocked 3. **Verify Social URL Field:** * Check `social_url` setting has value * Empty field = broken link 4. **Test Link:** * Copy URL and paste in new browser tab * Verify it actually goes to your profile * Check for typos in username 5. **Link Target:** * Should open in new tab * Check if popup blockers interfering </Accordion> <Accordion title="Hotspot positions wrong on mobile"> **Problem:** Hotspots in correct place on desktop but wrong on mobile **Solutions:** 1. **Percentage-Based Positioning:** * Hotspots use percentage (%), should be responsive * If using old version of theme, may be pixel-based 2. **Image Aspect Ratio:** * If aspect ratio changes mobile vs desktop, positions shift * Use same aspect ratio on all devices 3. **Browser Zoom:** * Reset browser zoom to 100% * Test on actual mobile device, not browser resize 4. **Test on Real Device:** * Browser responsive mode isn't perfect * Always verify on actual phone/tablet 5. **Adjust for Mobile:** * May need to fine-tune X/Y positions * Consider mobile-first design approach </Accordion> </AccordionGroup> *** ## Technical Details ### Section Limits **No Limit:** Add multiple instances of this section per page if desired. ### Block Types **shoppable-social-item:** * Single block type for posts * Add unlimited blocks * Each block = one shoppable post ### Schema Structure ```json theme={null} { "name": "t:sections.shoppable.name", "tag": "section", "class": "section-shoppable", "settings": [ // Layout, header, social, color, spacing settings ], "blocks": [ { "type": "shoppable-social-item", "settings": [ // Image, caption, video, avatar, 4 products with X/Y positions ] } ], "presets": [5 layout-specific presets] } ``` ### JavaScript Functionality The section relies on JavaScript for: * Interactive hotspot clicks * Product drawer slide-ins * Carousel/slider navigation * Story video overlays * Add-to-cart functionality **Dependencies:** * Theme's main JavaScript bundle * Product quick-view functionality * Carousel library (if using carousel/slider) *** ## Performance Optimization ### Image Optimization **File Size:** * Target 150-300KB per image * Use tools like TinyPNG, ImageOptim * Shopify auto-optimizes but pre-optimize for best results **Format:** * WebP for modern browsers (best compression) * JPEG fallback for compatibility * Avoid PNG for photos (larger files) **Lazy Loading:** * Theme should implement lazy loading * Images load as user scrolls * Improves initial page load time *** ### Video Optimization **Compression:** * Use H.264 codec * 30fps max for web video * Bitrate: 2-5 Mbps for 1080p **Duration:** * Keep under 60 seconds * Shorter = smaller file size * Attention span optimization **Consider External Hosting:** * For many videos, use YouTube/Vimeo * Embed instead of upload * Saves Shopify file storage * Better streaming infrastructure *** ## SEO Considerations ### Image SEO **Alt Text:** * Descriptive, keyword-rich * Mention products in image * Example: "Woman wearing blue summer dress and straw hat on beach" **File Names:** * Descriptive before upload * `summer-dress-beach-outfit.jpg` not `IMG_1234.jpg` * Hyphens, not underscores ### Product Discovery **Rich Snippets:** * Shoppable sections can enhance product schema * Products get additional exposure * Consider structured data markup **Internal Linking:** * Each hotspot links to product page * Improves site crawlability * Distributes page authority *** ## Integration with Other Features ### Combine with Other Sections **Before Shoppable:** * **Hero Banner** - Campaign intro * **Rich Text** - "Shop our latest Instagram posts" **After Shoppable:** * **Testimonials** - Social proof * **Newsletter** - Stay connected CTA * **Featured Products** - More shopping options ### Page Templates **Homepage:** * Place below hero, above featured products * Showcase trending/new content * 4-6 posts in grid or carousel **Collection Pages:** * Show styled looks featuring collection items * List or grid layout * 3-5 posts max (avoid overwhelming) **Dedicated Pages:** * Create `/pages/shop-the-feed` * Full Instagram gallery experience * 12+ posts in grid layout *** ## Related Sections * **Shop the Look** - Similar functionality, different visual style * **Featured Products** - Standard product grid * **Carousel** - Image carousel without product tagging * **Instagram Feed** - Static feed without shopping (if theme has this) *** ## Quick Reference ### Layout Quick Comparison | Layout | Columns | Best Use | Mobile | Navigation | | -------- | ------- | ----------- | ---------- | ------------- | | List | 1 | Social feed | Scroll | Scroll | | Grid | 3-4 | Gallery | 2 col | Scroll | | Carousel | 1 | Featured | Swipe | Arrows + Dots | | Tags | Varies | Stories | Compact | Tap tags | | Slider | 1 | Hero | Full-width | Arrows + Dots | ### Hotspot Setup Checklist * [ ] High-quality lifestyle image uploaded * [ ] Product 1 selected and positioned * [ ] Product 2 selected and positioned (optional) * [ ] Product 3 selected and positioned (optional) * [ ] Product 4 selected and positioned (optional) * [ ] Caption written with hashtags * [ ] Social username set * [ ] "Shop The Look" button label set * [ ] Test hotspots clickable on mobile *** ## Summary The **Shoppable** section transforms social media content into interactive shopping experiences: **5 Layout Options:** List, Grid, Carousel, Tags, Slider\ **Interactive Hotspots:** Up to 4 tagged products per post\ **Social Integration:** Profile, username, follow button\ **Video Support:** Story-style shoppable videos\ **Flexible Content:** Manual blocks or metaobject-driven\ **Mobile-Optimized:** Responsive layouts and touch-friendly\ **Quick-View Drawers:** Instant product details and add-to-cart\ **Brand Consistency:** Color schemes and styling controls <Tip> **Pro Strategy:** Combine with your actual Instagram content. Create posts on Instagram for organic reach, then replicate the same content in this Shoppable section with product tags to convert that social engagement into sales. </Tip> **Perfect For:** * Fashion and apparel brands * Home decor and lifestyle products * Beauty and cosmetics * Influencer collaborations * User-generated content campaigns * Social commerce strategies The Shoppable section bridges the gap between social media inspiration and e-commerce conversion, meeting customers where they already spend time while making purchase decisions frictionless. # Spacing Source: https://docs.digifist.com/themes/sahara/sections/spacing Utility section for adding vertical spacing and borders between sections in the Sahara Shopify theme The Spacing section is a utility component designed to control vertical spacing and visual separation between other sections. Use it to add breathing room, create visual hierarchy, or insert decorative borders without adding content. This minimal, layout-focused utility helps you perfect the spacing between sections without cluttering your page with unnecessary content blocks. ## What this section controls This section controls vertical spacing with the following capabilities: * Adjustable vertical spacing (None, S, M, L, XL) * Separate top and bottom spacing controls for desktop * Independent mobile spacing settings * Section borders (None, Top, Bottom, Both) * Color scheme selection for background * Full-width or standard width options * No content blocks - purely for layout control *** ## Section Settings ### Color & Design <AccordionGroup> <Accordion title="Color Scheme"> **Setting ID:** `color_scheme`\ **Type:** Color Scheme\ **Default:** `scheme-1` Choose the color scheme for the spacing section background. This determines the background color of the spacing area. **Use Cases:** * Match the surrounding sections for seamless transitions * Use contrasting colors to create clear visual breaks * Coordinate with your overall page design theme </Accordion> <Accordion title="Section Border"> **Setting ID:** `section_border`\ **Type:** Select\ **Options:** * `none` - No border * `top` - Border at top * `bottom` - Border at bottom * `both` - Borders at top and bottom **Default:** `none` Add decorative borders to the top, bottom, or both edges of the spacing section. **Use Cases:** * Create horizontal dividers between content sections * Add subtle visual separation without additional elements * Frame specific page areas with border pairs </Accordion> </AccordionGroup> *** ### Spacing Controls <AccordionGroup> <Accordion title="Top Spacing"> **Setting ID:** `spacing_top`\ **Type:** Select\ **Options:** * `0` - None * `1` - Small (S) * `2` - Medium (M) ⭐ Default * `4` - Large (L) * `6` - Extra Large (XL) Controls the amount of padding/margin above the section. **Spacing Scale Guide:** * **None (0):** No top spacing - section sits flush with content above * **Small (1):** Minimal breathing room (\~20-30px equivalent) * **Medium (2):** Standard spacing for general use (\~40-50px) * **Large (4):** Significant separation (\~80-100px) * **Extra Large (6):** Maximum spacing for dramatic breaks (\~120-150px) </Accordion> <Accordion title="Bottom Spacing"> **Setting ID:** `spacing_bottom`\ **Type:** Select\ **Options:** * `0` - None * `1` - Small (S) * `2` - Medium (M) ⭐ Default * `4` - Large (L) * `6` - Extra Large (XL) Controls the amount of padding/margin below the section. Works identically to Top Spacing but applies to the bottom edge. </Accordion> </AccordionGroup> *** ## Common Use Cases ### 1. Visual Breaks Between Content Add breathing room between dense content sections: ``` [Product Grid Section] ↓ [Spacing Section - Medium top/bottom, no border] ↓ [Testimonials Section] ``` **Configuration:** * Spacing Top: Medium (2) * Spacing Bottom: Medium (2) * Section Border: None * Color Scheme: Same as surrounding sections *** ### 2. Page Dividers with Borders Create clear visual separators between page areas: ``` [Hero Banner] ↓ [Spacing Section - Large spacing, bottom border] ↓ [Featured Collections] ``` **Configuration:** * Spacing Top: Large (4) * Spacing Bottom: Large (4) * Section Border: Bottom * Color Scheme: Contrasting scheme for visibility *** ### 3. Whitespace-Only Separation Add clean, minimal spacing without any borders: ``` [Content Section 1] ↓ [Spacing Section - XL spacing, no borders] ↓ [Content Section 2] ``` **Configuration:** * Spacing Top: Extra Large (6) * Spacing Bottom: Extra Large (6) * Section Border: None * Color Scheme: Match background *** ### 4. Framed Content Areas Use dual borders to frame specific sections: ``` [Spacing Section - Top border] ↓ [Important Announcement] ↓ [Spacing Section - Bottom border] ``` **Configuration:** * Spacing Top: Small (1) * Spacing Bottom: Small (1) * Section Border: Both * Color Scheme: Highlight scheme *** ## Layout & Positioning ### Section Class * **Class:** `section-spacing` * **Tag:** `<section>` This section uses semantic HTML5 `<section>` tag and applies the `.section-spacing` class for styling. *** ## Best practices <CardGroup> <Card title="Consistent Spacing Scale" icon="ruler"> Use the same spacing values (S, M, L, XL) consistently throughout your site to create visual rhythm and hierarchy. </Card> <Card title="Strategic Border Use" icon="border-top-left"> Don't overuse borders - reserve them for major page divisions or important content separators. </Card> <Card title="Color Coordination" icon="palette"> Match spacing section color schemes with adjacent sections for seamless flow, or use contrast for dramatic breaks. </Card> <Card title="Mobile Consideration" icon="mobile"> Remember that spacing values may adjust on mobile - test your layouts on multiple screen sizes. </Card> </CardGroup> *** ## Design Tips ### Creating Visual Hierarchy **Light Spacing (S):** Use between closely related content sections ``` Product Description [Spacing: Small] Product Specifications ``` **Medium Spacing (M):** Standard separation for general content ``` Featured Products [Spacing: Medium] Testimonials ``` **Heavy Spacing (L/XL):** Major page divisions or emphasis ``` Hero Section [Spacing: Extra Large] Main Content Area ``` *** ### Border Strategies <Note> Borders inherit styling from your theme's border settings. They typically use subtle colors that complement your color schemes. </Note> **Single Border Usage:** * **Top border:** Starts a new content area * **Bottom border:** Closes/ends a content area **Dual Border Usage:** * **Both borders:** Frames/isolates important content * Often paired with contrasting color schemes *** ## Technical Details ### Schema Structure ```json theme={null} { "name": "t:sections.spacing.name", "tag": "section", "class": "section-spacing", "settings": [ // Color scheme setting // Spacing top/bottom selects // Section border select ] } ``` ### Section Limits * **No limit:** Add as many spacing sections as needed * **No blocks:** This section contains no child blocks * **Pure utility:** No content, text, or media settings *** ## Accessibility Considerations <Warning> The Spacing section is primarily decorative. Ensure it doesn't create confusing gaps that disrupt screen reader navigation or keyboard focus flow. </Warning> **Accessibility Best Practices:** * Use sparingly to avoid creating disorienting empty spaces * Don't rely on spacing alone to convey meaning or structure * Ensure spacing doesn't break logical content relationships * Test with screen readers to verify smooth navigation flow *** ## Preset Configuration The section comes with one preset: **Default Spacing Preset:** * Category: Basic * Spacing Top: Medium (2) * Spacing Bottom: Medium (2) * Section Border: None * Color Scheme: Scheme 1 **To Add:** Click **Add section** → **Basic** → **Spacing** *** ## Example Implementations ### 1. Homepage Content Separator **Goal:** Separate hero from product grid with clean whitespace ``` Settings: - Spacing Top: 4 (Large) - Spacing Bottom: 4 (Large) - Section Border: none - Color Scheme: scheme-1 (match page background) ``` **Result:** 80-100px of clean whitespace between sections *** ### 2. Bordered Content Divider **Goal:** Create visible separation with horizontal line ``` Settings: - Spacing Top: 2 (Medium) - Spacing Bottom: 2 (Medium) - Section Border: bottom - Color Scheme: scheme-4 (subtle contrast) ``` **Result:** Medium spacing with decorative bottom border *** ### 3. Dramatic Section Break **Goal:** Maximum visual separation for page transitions ``` Settings: - Spacing Top: 6 (Extra Large) - Spacing Bottom: 6 (Extra Large) - Section Border: both - Color Scheme: scheme-3 (contrasting background) ``` **Result:** Large gap with dual borders, creates strong visual break *** ## Troubleshooting <AccordionGroup> <Accordion title="Spacing appears too large/small"> **Problem:** The spacing doesn't match your expectations **Solutions:** * Check theme's CSS custom properties - spacing multipliers may vary * Remember mobile viewports may use different spacing scales * Test on actual devices, not just browser resize * Consider cumulative effect with adjacent section spacing </Accordion> <Accordion title="Borders not visible"> **Problem:** Selected borders don't appear **Solutions:** * Verify border color isn't matching background color * Check theme customizer for global border settings * Ensure color scheme supports visible borders * Try different color scheme combinations </Accordion> <Accordion title="Section creates unwanted gaps"> **Problem:** Spacing section disrupts page flow **Solutions:** * Reduce spacing values (use S instead of L) * Check if adjacent sections already have spacing * Remove the section and use built-in section spacing settings instead * Verify section is placed in correct position </Accordion> <Accordion title="Color scheme doesn't apply"> **Problem:** Background color not showing **Solutions:** * Increase spacing values - color only visible when section has height * Check if transparent backgrounds are intended * Verify color scheme is properly configured in theme settings * Test with contrasting color scheme to confirm </Accordion> </AccordionGroup> *** ## Related Sections * **All Sections:** The Spacing section can be used between any other sections * Works particularly well with content-heavy sections like: * Featured Products * Testimonials * Rich Text * Full Width Banner * Featured Collections *** ## Quick Reference | Setting | Purpose | Default | | -------------- | ------------------------ | ---------- | | Color Scheme | Section background color | scheme-1 | | Spacing Top | Padding/margin above | 2 (Medium) | | Spacing Bottom | Padding/margin below | 2 (Medium) | | Section Border | Decorative borders | none | **Spacing Scale:** 0 (none) → 1 (S) → 2 (M) → 4 (L) → 6 (XL) **Border Options:** none → top → bottom → both *** ## Summary The **Spacing** section is a simple but powerful utility for controlling vertical rhythm and visual hierarchy on your pages. Use it strategically to: Add breathing room between content sections\ Create visual breaks with optional borders\ Control page flow and reader attention\ Maintain consistent spacing throughout your site <Tip> **Pro Tip:** Create a consistent spacing rhythm by using the same spacing values (e.g., always use Medium for standard breaks, Large for major sections) throughout your entire site. </Tip> # Store Locator Source: https://docs.digifist.com/themes/sahara/sections/store-locator Interactive store location finder with Google Maps integration and store directory in the Sahara Shopify theme The Store Locator section displays your physical store locations with an interactive map, store details sidebar, and search functionality. Perfect for businesses with brick-and-mortar locations, this section integrates with Google Maps API to help customers find the nearest store with contact information, hours, and directions - all in one seamless interface. Use this section to drive foot traffic and provide a complete omnichannel experience connecting digital browsing to physical store visits. ## What this section controls This section controls store location displays with the following capabilities: * Interactive Google Maps integration with location markers * Three layout modes (Map & Sidebar, Image & Sidebar, Map Only) * Store detail sidebar with contact information and hours * Store search and filtering by name or address * Configurable section height (25vh to 100vh) * Multiple store location blocks * Custom zoom levels and map styling * Store metaobject integration for dynamic data * Color scheme and section width controls *** ## Section Settings ### Section Layout <AccordionGroup> <Accordion title="Section Height"> **Setting ID:** `section_height`\ **Type:** Range\ **Range:** 25vh - 100vh\ **Step:** 5vh\ **Default:** 60vh Controls the vertical height of the store locator section as a percentage of the viewport height. **Height Guidelines:** * **25-40vh:** Compact layout for pages with multiple sections * **50-70vh:** Standard height for balanced content (⭐ Recommended) * **80-100vh:** Full-screen or hero-style store locator <Note> Viewport height (vh) is responsive - 60vh means the section takes up 60% of the browser window height on any device. </Note> </Accordion> <Accordion title="Map Layout"> **Setting ID:** `layout`\ **Type:** Select\ **Options:** * `map_and_sidebar` - Interactive map + store list sidebar * `image_and_sidebar` - Static image + store list sidebar ⭐ Default * `map` - Map only (no sidebar) Choose between interactive map, static image, or map-only layouts. **Layout Comparison:** | Layout | Map | Sidebar | Best For | | --------------- | ------------ | ---------- | --------------------------- | | Map & Sidebar | Interactive | Store list | Full functionality | | Image & Sidebar | Static image | Store list | No API key/design focus | | Map Only | Interactive | Hidden | Minimal, map-focused design | **Use Cases:** * **Map & Sidebar:** Full-featured store locator with search * **Image & Sidebar:** When you want control over map appearance without API * **Map Only:** Minimalist design letting map fill entire section </Accordion> <Accordion title="Section Width"> **Setting ID:** `section_width`\ **Type:** Select\ **Options:** * `page` - Page width (contained) ⭐ Default * `fluid` - Fluid width (wider container) * `full` - Full width (edge-to-edge) Controls the maximum width of the section container. **Width Recommendations:** * **Page:** Standard layout aligned with other page sections * **Fluid:** Wider map for better geographic visibility * **Full:** Edge-to-edge map for maximum impact </Accordion> </AccordionGroup> *** ### Color Schemes <AccordionGroup> <Accordion title="Color Scheme (Primary)"> **Setting ID:** `color_scheme`\ **Type:** Color Scheme\ **Default:** `scheme-1` Main color scheme for the overall section background and container. </Accordion> <Accordion title="Find Store Color Scheme"> **Setting ID:** `color_scheme_find_store`\ **Type:** Color Scheme\ **Default:** `scheme-4` Color scheme specifically for the "Find Store" search/filter area. <Tip> Use a contrasting color scheme here to make the search functionality stand out and encourage interaction. </Tip> </Accordion> <Accordion title="Store Container Color Scheme"> **Setting ID:** `color_scheme_store_container`\ **Type:** Color Scheme\ **Default:** `scheme-1` Color scheme for individual store information cards in the sidebar. **Design Strategy:** * Match with primary scheme for cohesive design * Use subtle contrast to differentiate store cards * Ensure readability of store details </Accordion> </AccordionGroup> *** ### Google Maps Configuration <AccordionGroup> <Accordion title="API Key"> **Setting ID:** `api_key`\ **Type:** Textarea\ **Required:** Yes (for map layouts) Your Google Maps API key for displaying interactive maps. **How to Get API Key:** 1. Visit [Google Cloud Console](https://console.cloud.google.com/) 2. Create a new project or select existing 3. Enable **Maps JavaScript API** 4. Go to **Credentials** → **Create Credentials** → **API Key** 5. Copy the API key 6. (Recommended) Restrict key to your domain 7. Paste key in this setting <Warning> **Important:** Restrict your API key to your Shopify domain to prevent unauthorized use and unexpected charges. </Warning> **API Key Security:** * Set HTTP referrer restrictions in Google Cloud Console * Add your domain: `yourstore.myshopify.com/*` * Monitor usage in Google Cloud billing dashboard </Accordion> <Accordion title="Zoom Level"> **Setting ID:** `zoom_level`\ **Type:** Range\ **Range:** 0 - 21\ **Step:** 1\ **Default:** 4 Controls the default zoom level of the map. **Zoom Level Guide:** * **0-3:** World/continental view (multiple countries) * **4-6:** Country/regional view ⭐ Default range * **7-10:** State/province view * **11-14:** City view * **15-18:** Neighborhood/district view * **19-21:** Street-level view <Note> Choose zoom level based on your store distribution. If stores are in one city, use 11-14. If nationwide, use 4-6. </Note> </Accordion> </AccordionGroup> *** ### Spacing & Borders <AccordionGroup> <Accordion title="Spacing Top"> **Setting ID:** `spacing_top`\ **Type:** Select\ **Options:** 0 (None), 1 (S), 2 (M), 4 (L), 6 (XL)\ **Default:** 2 (M) Vertical spacing above the section. </Accordion> <Accordion title="Spacing Bottom"> **Setting ID:** `spacing_bottom`\ **Type:** Select\ **Options:** 0 (None), 1 (S), 2 (M), 4 (L), 6 (XL)\ **Default:** 2 (M) Vertical spacing below the section. </Accordion> <Accordion title="Section Border"> **Setting ID:** `section_border`\ **Type:** Select\ **Options:** none, top, bottom, both\ **Default:** none Add decorative borders to section edges. </Accordion> </AccordionGroup> *** ## Pin Blocks (Store Locations) Each pin block represents a physical store location on the map and in the sidebar. ### Store Information <AccordionGroup> <Accordion title="Store Title"> **Block Setting ID:** `title`\ **Type:** Text Name of the store location. **Examples:** * "Downtown Flagship Store" * "New York - SoHo" * "Los Angeles Westfield Mall" * "Chicago Michigan Avenue" <Tip> Include location identifier in the title to help customers quickly identify the nearest store. </Tip> </Accordion> <Accordion title="Store Address"> **Block Setting ID:** `store_address`\ **Type:** Textarea Full address of the store. **Format Example:** ``` 123 Main Street Suite 200 New York, NY 10001 United States ``` **Best Practices:** * Include full street address * Add suite/unit numbers if applicable * Include city, state/province, postal code * Add country for international stores </Accordion> <Accordion title="Store Phone"> **Block Setting ID:** `store_tel`\ **Type:** Text Store phone number. **Format Examples:** * `+1 (555) 123-4567` - US format with country code * `+44 20 1234 5678` - UK format * `(555) 123-4567` - Without country code <Note> Including country code (+1, +44, etc.) helps with international customers and enables click-to-call on mobile devices. </Note> </Accordion> <Accordion title="Store Opening Hours"> **Block Setting ID:** `store_opening_hours`\ **Type:** Rich Text Store operating hours and schedule. **Example:** ```html theme={null} <p>Monday - Friday: 10am - 8pm<br/> Saturday: 10am - 9pm<br/> Sunday: 11am - 6pm</p> <p>Holiday hours may vary</p> ``` **Formatting Tips:** * Use `<br/>` tags for line breaks * Group similar days together * Include special notes (holidays, seasonal hours) * Consider adding timezone for clarity </Accordion> <Accordion title="Store Image"> **Block Setting ID:** `store_image`\ **Type:** Image Picker Photo of the store location. **Image Recommendations:** * **Dimensions:** 800x600px minimum * **Aspect Ratio:** 4:3 or 16:9 works well * **Content:** Storefront exterior, interior, or recognizable landmark * **Quality:** High-resolution, good lighting **What to Show:** * Store exterior/facade (helps customers recognize) * Interior shots (sets expectations) * Nearby landmarks (aids navigation) * Team photos (adds personal touch) </Accordion> <Accordion title="Color Scheme (Per Store)"> **Block Setting ID:** `color_scheme`\ **Type:** Color Scheme\ **Default:** `scheme-1` Individual color scheme for this specific store card. <Tip> You can use different color schemes for different stores to create visual variety or highlight flagship locations. </Tip> </Accordion> </AccordionGroup> *** ### Geographic Coordinates <AccordionGroup> <Accordion title="Store Latitude"> **Block Setting ID:** `store_latitude`\ **Type:** Text\ **Required:** Yes (for map pins) Latitude coordinate for map pin placement. **Example:** `40.7580` (New York City) **How to Find Coordinates:** **Method 1 - Google Maps:** 1. Go to [Google Maps](https://maps.google.com) 2. Search for your store address 3. Right-click on the exact location 4. Click the coordinates at the top (they'll copy automatically) 5. Paste into settings - first number is latitude **Method 2 - GPS Coordinates:** 1. Visit [GPS Coordinates](https://www.gps-coordinates.net/) 2. Enter your address 3. Copy the latitude value <Warning> Ensure coordinates are accurate - incorrect values will place pins in wrong locations or cause map errors. </Warning> </Accordion> <Accordion title="Store Longitude"> **Block Setting ID:** `store_longitude`\ **Type:** Text\ **Required:** Yes (for map pins) Longitude coordinate for map pin placement. **Example:** `-73.9855` (New York City) **Coordinate Format:** * Positive values: East of Prime Meridian * Negative values: West of Prime Meridian * Typical format: `-122.4194` (6-7 digits with decimals) <Note> When copying from Google Maps, the format is: `latitude, longitude`. The second number is longitude. </Note> </Accordion> <Accordion title="Coordinate Title"> **Block Setting ID:** `coordinate_title`\ **Type:** Textarea Alternative title displayed when clicking the map pin. **Use Cases:** * Show a different name on map vs. sidebar * Add additional context (e.g., "Available for pickup") * Include neighborhood or district name * Add special notes (e.g., "Temporarily closed for renovation") **Example:** ``` Downtown Flagship Now offering same-day pickup! ``` <Tip> Leave blank to use the main store title. Use this only when you need different information on the map. </Tip> </Accordion> </AccordionGroup> *** ### Action Button <AccordionGroup> <Accordion title="Button Label"> **Block Setting ID:** `store_pin`\ **Type:** Text Text for the action button displayed on each store card. **Common Labels:** * "Get Directions" * "View on Map" * "Navigate" * "Directions" * "Find Us" </Accordion> <Accordion title="Button Link"> **Block Setting ID:** `store_pin_link`\ **Type:** URL URL for the button action - typically a Google Maps directions link. **Google Maps Directions Link Format:** ``` https://www.google.com/maps/dir/?api=1&destination=LATITUDE,LONGITUDE ``` **Example:** ``` https://www.google.com/maps/dir/?api=1&destination=40.7580,-73.9855 ``` **What Happens:** * Opens Google Maps in new tab * Shows directions from user's current location * Works on desktop and mobile * Mobile opens native Google Maps app <Tip> Use the store's latitude and longitude in the destination parameter for accurate directions. </Tip> </Accordion> <Accordion title="Button Style"> **Block Setting ID:** `button_style`\ **Type:** Select\ **Options:** * `button--filled` - Solid filled button * `button--outlined` - Outlined border style ⭐ Default * `default` - Link style (no button styling) Visual style for the directions/action button. </Accordion> </AccordionGroup> *** ## Preset Configuration The Store Locator comes with one complete preset including two sample stores: ### Default Preset **Settings:** * Layout: `image_and_sidebar` * Section Height: 60vh * Zoom Level: 4 * Two pre-configured pin blocks **Sample Store 1 (Paris):** * Title: "Your store name" * Address: "Your store address" * Phone: "+01 234 567 8900" * Hours: "Mon-Sat: 10am-8pm, Sunday" * Latitude: `48.85850418716008` * Longitude: `2.294803163425021` * Button: "Directions" **Sample Store 2 (Rome):** * Title: "Your store name" * Address: "Your store address" * Phone: "+01 234 567 8900" * Hours: "Mon-Sat: 10am-8pm, Sunday" * Latitude: `41.902331905731444` * Longitude: `12.45445667605574` * Button: "Directions" <Note> Replace these sample values with your actual store information and coordinates. </Note> *** ## Common Use Cases ### 1. Multi-Location Retail Chain **Scenario:** Fashion brand with 10+ stores across multiple cities **Configuration:** * Layout: `map_and_sidebar` * Section Height: 70vh (larger for better map visibility) * Zoom Level: 6 (country/regional view) * Section Width: `fluid` (wider map area) * Add pin block for each store location **Pin Block Setup (per store):** * Title: Include city name (e.g., "New York - Manhattan") * Full address with landmarks if helpful * Store-specific phone number * Accurate hours (may vary by location) * Store photo showing exterior * Google Maps directions link *** ### 2. Single Flagship Store **Scenario:** One main store with detailed information **Configuration:** * Layout: `map_and_sidebar` * Section Height: 60vh * Zoom Level: 15 (street-level detail) * Section Width: `page` * Single pin block with comprehensive details **Pin Block Setup:** * Detailed title with brand name * Full address including suite/floor * Multiple contact methods (phone, email) * Detailed hours including special events * Multiple photos (exterior, interior, team) * Parking/transit information in opening hours field *** ### 3. Regional Store Networks **Scenario:** Stores clustered in specific regions **Configuration:** * Layout: `map_and_sidebar` * Section Height: 65vh * Zoom Level: 8-10 (city/metro view) * Color-coded by region using different color schemes per pin **Example:** * California stores: `scheme-2` (blue) * Texas stores: `scheme-3` (green) * New York stores: `scheme-4` (purple) *** ### 4. Appointment-Only Showrooms **Scenario:** By-appointment locations, not traditional retail **Configuration:** * Layout: `image_and_sidebar` * Section Height: 50vh (less emphasis on map) * Button Label: "Book Appointment" * Button Link: Link to booking page instead of directions **Pin Block Setup:** * Title: "Private Showroom - \[City]" * Address: General area only (street address via appointment) * Phone: Appointment line * Hours: "By Appointment Only - Call to Schedule" * Professional showroom photos *** ## Layout Configurations ### Map & Sidebar Layout **Best For:** Full-featured store locator with search and filtering **Features:** * Interactive Google Maps on left/right * Scrollable store list in sidebar * Click pins to view store details * Search/filter functionality **Visual Structure:** ``` ┌──────────────────┬─────────────┐ │ │ Find Store │ │ Interactive │ (Search) │ │ Google Map ├─────────────┤ │ with Pins │ Store #1 │ │ │ Details │ │ ├─────────────┤ │ │ Store #2 │ │ │ Details │ └──────────────────┴─────────────┘ ``` *** ### Image & Sidebar Layout **Best For:** Design-focused presentation without API configuration **Features:** * Static image or styled map graphic * Store directory in sidebar * No API key required * Full design control over "map" area **Use Cases:** * Testing layout before API setup * Artistic/illustrated map preference * Limited store count (list is primary) * Budget constraints (no Google Maps charges) **Visual Structure:** ``` ┌──────────────────┬─────────────┐ │ │ Store List │ │ Static Map ├─────────────┤ │ Image or │ Store #1 │ │ Graphic │ Details │ │ ├─────────────┤ │ │ Store #2 │ │ │ Details │ └──────────────────┴─────────────┘ ``` *** ### Map Only Layout **Best For:** Minimalist, map-focused design **Features:** * Full-width interactive map * No sidebar (stores accessed via pins) * Maximum map visibility * Clean, uncluttered interface **Use Cases:** * Few stores (3-5) - no need for list * Map as hero element * Modern, minimal aesthetic * Mobile-first design (pins → details) **Visual Structure:** ``` ┌─────────────────────────────┐ │ │ │ Full Width Interactive │ │ Google Map │ │ with Pins │ │ │ │ (Click pins for details) │ │ │ └─────────────────────────────┘ ``` *** ## Best practices <CardGroup> <Card title="Accurate Coordinates" icon="location-dot"> Double-check latitude/longitude values. Incorrect coordinates will break the map or show pins in wrong locations. </Card> <Card title="Complete Information" icon="circle-info"> Fill out all fields for each store - address, phone, hours, image. Incomplete listings frustrate customers. </Card> <Card title="Mobile-Friendly Hours" icon="clock"> Format opening hours clearly with line breaks. Mobile users need scannable information quickly. </Card> <Card title="High-Quality Images" icon="image"> Use clear, well-lit photos. Storefront exteriors help customers recognize the location when arriving. </Card> <Card title="Secure Your API Key" icon="key"> Restrict your Google Maps API key to your domain. Monitor usage to avoid unexpected charges. </Card> <Card title="Test Directions Links" icon="route"> Verify that Google Maps directions links work correctly on both desktop and mobile devices. </Card> <Card title="Update Hours Regularly" icon="calendar"> Keep holiday hours and special closures current. Nothing frustrates customers more than arriving to closed doors. </Card> <Card title="Consider Zoom Level" icon="magnifying-glass"> Set default zoom based on store distribution. Clustered stores need higher zoom than spread-out locations. </Card> </CardGroup> *** ## Design Tips ### Creating Effective Store Cards **Essential Information Hierarchy:** 1. **Store Title** (most prominent) * Include location identifier * Keep concise but descriptive 2. **Address** (clearly formatted) * Full street address * City, state, postal code * Country (if applicable) 3. **Contact** (clickable if possible) * Phone number with country code * Email (if available) 4. **Hours** (easy to scan) * Use line breaks between days * Highlight current day (if dynamic) * Note special hours 5. **Store Image** (visual recognition) * Storefront or entrance * Interior ambiance * Nearby landmarks 6. **Action Button** (strong CTA) * Clear label ("Get Directions") * Links to navigation * Stands out visually *** ### Color Scheme Strategy **Option 1 - Unified Design:** * Same color scheme for all stores * Creates cohesive, professional look * Recommended: `scheme_store_container = scheme-1` **Option 2 - Regional Differentiation:** * Different schemes by region/city * Helps customers quickly identify location groups * Example: Blue for East Coast, Green for West Coast **Option 3 - Flagship Highlighting:** * Standard scheme for regular stores * Contrasting scheme for flagship/featured locations * Draws attention to primary locations *** ### Map Optimization <Tip> **Performance Tip:** If you have many stores (20+), consider using a higher default zoom level (8-10) to avoid overwhelming the map with pins on first load. </Tip> **Zoom Level by Store Count:** | Store Count | Recommended Zoom | Coverage | | ------------ | ---------------- | -------------------- | | 1-3 stores | 12-15 | Street/neighborhood | | 4-10 stores | 8-11 | City/metro area | | 11-25 stores | 5-7 | State/region | | 26+ stores | 3-5 | National/continental | *** ## Accessibility Considerations <Warning> Ensure the store locator is fully accessible to screen reader users and keyboard navigation. </Warning> ### Accessibility Checklist **Keyboard Navigation:** * All store cards focusable via Tab key * Map controls accessible without mouse * Buttons have clear focus indicators **Screen Reader Support:** * Store information in logical reading order * Map has descriptive aria-labels * Coordinate values hidden from screen readers (visual only) **Color Contrast:** * Store card text meets WCAG AA standards (4.5:1) * Button labels clearly visible * Map pins distinguishable **Alternative Text:** * Store images have descriptive alt text * Example: "Storefront of Downtown Manhattan location" **Semantic HTML:** * Use proper heading hierarchy (H2 for store names) * Lists for multiple stores * Landmarks for map and sidebar regions *** ## Troubleshooting <AccordionGroup> <Accordion title="Map not displaying"> **Problem:** Map area is blank or shows error **Solutions:** 1. **Check API Key:** * Verify key is entered correctly (no extra spaces) * Ensure Maps JavaScript API is enabled in Google Cloud * Check API key restrictions aren't blocking your domain 2. **Verify Billing:** * Google Maps requires billing account (even for free tier) * Check Google Cloud Console billing status 3. **Check Browser Console:** * Open Developer Tools (F12) * Look for Maps API error messages * Common errors indicate API key or billing issues 4. **Test Layout:** * Switch to `image_and_sidebar` temporarily * Confirms if issue is map-specific or section-wide </Accordion> <Accordion title="Store pins in wrong locations"> **Problem:** Pins appear in incorrect places on map **Solutions:** 1. **Verify Coordinates:** * Double-check latitude/longitude values * Ensure no typos or decimal point errors * Confirm order is correct (latitude first, longitude second) 2. **Test Coordinates:** * Paste into Google Maps search: `latitude,longitude` * Verify it shows your intended location 3. **Check Coordinate Format:** * Should be decimal format: `40.7580,-73.9855` * NOT degrees/minutes/seconds format * Negative values for West longitude, South latitude 4. **Re-obtain Coordinates:** * Use Google Maps to get fresh coordinates * Right-click exact location → Copy coordinates </Accordion> <Accordion title="Directions link not working"> **Problem:** "Get Directions" button doesn't open maps **Solutions:** 1. **Check URL Format:** ``` Correct: https://www.google.com/maps/dir/?api=1&destination=40.7580,-73.9855 Incorrect: https://maps.google.com/?q=address (old format) ``` 2. **Verify Coordinates in URL:** * Ensure latitude,longitude in destination parameter * No spaces in URL * HTTPS (not HTTP) 3. **Test on Multiple Devices:** * Desktop should open new tab * Mobile should prompt for Google Maps app * Incognito mode (rules out extensions) 4. **Alternative Format:** ``` https://www.google.com/maps/search/?api=1&query=LATITUDE,LONGITUDE ``` </Accordion> <Accordion title="Store images not displaying"> **Problem:** Store photos missing or broken **Solutions:** 1. **Check Image Upload:** * Verify image was successfully uploaded * Not just selected but saved in Theme Customizer 2. **Image Format:** * Use JPEG, PNG, or WebP * Avoid TIFF or other unsupported formats 3. **File Size:** * Keep images under 5MB * Optimize for web before uploading 4. **Browser Cache:** * Hard refresh (Ctrl+Shift+R / Cmd+Shift+R) * Clear browser cache * Test in incognito mode </Accordion> <Accordion title="Sidebar not scrolling"> **Problem:** Can't scroll through store list **Solutions:** 1. **Check Section Height:** * If section\_height is too large, sidebar may not overflow * Try reducing to 60vh or lower 2. **Browser Zoom:** * Reset browser zoom to 100% * Some zoom levels affect scrolling behavior 3. **CSS Conflicts:** * Check for custom CSS affecting overflow * Test with theme defaults (remove customizations temporarily) 4. **Store Count:** * With only 1-2 stores, sidebar won't need scrolling * Add more stores to test scroll functionality </Accordion> <Accordion title="Map zoom too close/far"> **Problem:** Default zoom level doesn't show relevant area **Solutions:** 1. **Adjust Zoom Setting:** * Lower zoom = see more area (country/region) * Higher zoom = closer detail (street level) 2. **Consider Store Distribution:** * Stores in one city: Use zoom 11-14 * Stores nationwide: Use zoom 4-6 * International stores: Use zoom 2-4 3. **Test User Experience:** * Ensure at least 2-3 stores visible on load * Users can zoom in/out as needed * Balance overview vs. detail </Accordion> </AccordionGroup> *** ## Technical Details ### Section Limits **Limit:** 1 section per page This section is limited to one instance per page. If you need multiple store locator sections, create separate pages for different regions. ### Block Types **Pin Block (`pin`):** * Single block type for store locations * Add multiple pin blocks (one per store) * No limit on number of pins * Each pin represents one physical location ### Schema Structure ```json theme={null} { "name": "t:sections.store-locator.name", "tag": "section", "class": "section-store-locator", "limit": 1, "blocks": [ { "type": "pin", "name": "Store Pin" } ] } ``` *** ## SEO Considerations ### Local SEO Benefits The Store Locator section can improve local search rankings: 1. **Structured Data:** Consider adding LocalBusiness schema markup 2. **NAP Consistency:** Ensure Name, Address, Phone match across web 3. **Unique Content:** Write unique descriptions for each store 4. **Local Keywords:** Include city/neighborhood names in titles ### NAP Best Practices **Name, Address, Phone (NAP) Consistency:** * Use exact same business name across all listings * Identical address formatting on all platforms * Consistent phone number format * Match with Google My Business listings *** ## Integration Tips ### Combine with Other Sections **Before Store Locator:** * **Page Banner** - "Visit Our Stores" headline * **Rich Text** - Introduction to retail experience **After Store Locator:** * **FAQ** - Store policies, parking, accessibility * **Newsletter** - Stay updated on new locations ### Dedicated Store Page Create a `/pages/stores` template with: 1. Page Banner - Hero image of flagship store 2. Rich Text - Brand story and retail philosophy 3. **Store Locator** - Interactive map with all locations 4. Testimonials - Customer reviews of in-store experience 5. FAQ - Store-specific questions *** ## Related Sections * **Map** - Similar single-location map section * **Page Banner** - Hero for store locator pages * **Rich Text** - Store policy information * **Contact Form** - For store-specific inquiries *** ## Quick Reference ### Essential Settings | Setting | Recommended Value | Purpose | | -------------- | ----------------------------------- | ---------------------- | | Layout | map\_and\_sidebar | Full functionality | | Section Height | 60-70vh | Balanced visibility | | Zoom Level | 4-6 (nationwide)<br />11-14 (local) | Appropriate coverage | | API Key | Your Google Maps key | Enable interactive map | ### Per-Store Checklist * [ ] Store title (with location) * [ ] Complete address * [ ] Phone number (with country code) * [ ] Opening hours (formatted with line breaks) * [ ] Store photo (800x600px minimum) * [ ] Accurate latitude coordinate * [ ] Accurate longitude coordinate * [ ] Directions button link * [ ] Color scheme (if using regional coding) *** ## Summary The **Store Locator** section is a comprehensive solution for showcasing physical retail locations with: Interactive Google Maps integration\ Detailed store information cards\ Responsive layouts (map & sidebar, image & sidebar, map-only)\ Click-to-call phone numbers\ Direct navigation links\ Customizable color schemes per store\ Flexible zoom and height controls\ Mobile-optimized design <Tip> **Pro Tip:** Set up your Store Locator on a dedicated `/pages/stores` page, then link to it from your main navigation and footer. This creates a central hub for all store information and improves local SEO. </Tip> *** ## Example Complete Configuration **Scenario:** Fashion brand with 5 stores across 3 cities **Section Settings:** ``` Layout: map_and_sidebar Section Height: 65vh Section Width: fluid Zoom Level: 7 (metro region view) Color Scheme: scheme-1 Find Store Color Scheme: scheme-4 (contrast) Store Container Color Scheme: scheme-2 API Key: [Your Google Maps API Key] ``` **Pin Block 1 - Flagship:** ``` Title: New York - Fifth Avenue Flagship Address: 123 Fifth Avenue, New York, NY 10001 Phone: +1 (212) 555-0100 Hours: Mon-Sat: 10am-9pm | Sun: 11am-7pm Image: [Storefront photo] Latitude: 40.7580 Longitude: -73.9855 Button Label: Get Directions Button Link: https://www.google.com/maps/dir/?api=1&destination=40.7580,-73.9855 Button Style: button--filled (flagship emphasis) Color Scheme: scheme-3 (flagship highlight) ``` **Pin Blocks 2-5:** Similar format for other locations with accurate coordinates and details. **Result:** Professional, functional store locator helping customers find and visit your physical locations with all information readily accessible. # Testimonials Source: https://docs.digifist.com/themes/sahara/sections/testimonials Display customer reviews and feedback with images, flexible layouts, and autoplay carousel functionality. The Testimonials section showcases customer feedback and reviews in a visually engaging slideshow format. It features customizable layouts with optional images, autoplay functionality, and flexible content width options to build trust and social proof. <img alt="Testimonials section overview" /> ## What this section controls This section controls customer testimonial displays with the following capabilities: * Multiple testimonial slides with quotes and attribution * Image positioning (left, right, or no image) * Narrow or full-width content layouts * Autoplay carousel functionality * Optional clickable links on testimonials * Section-level heading and styling ## How the Testimonials section works The section uses testimonial blocks where each block represents one customer review. When multiple testimonials are added, they automatically form a carousel that can rotate manually or automatically. The image position setting determines whether a featured image appears alongside the testimonials. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Testimonials section"> Add the Testimonials section to your page or template. </Step> <Step title="Add testimonial blocks"> Click "Add block" and select "Testimonial" to add customer reviews. </Step> <Step title="Configure content"> Add quotes, author names, and optional images for each testimonial. </Step> </Steps> <img alt="Testimonials section in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Layout"> ### Layout Controls the position of the featured image relative to testimonial content. <AccordionGroup> <Accordion title="Image left" icon="arrow-left"> Featured image appears on the left side, testimonials on the right. **When to use:** * When image is equally important as testimonials * Left-to-right reading flow emphasis * Desktop-friendly balanced layouts </Accordion> <Accordion title="Image right" icon="arrow-right"> Featured image appears on the right side, testimonials on the left (default). **When to use:** * Standard testimonial layouts * When content should be read first * Maintaining left-aligned text focus </Accordion> <Accordion title="No image" icon="align-center"> No featured image displayed, testimonials use full width. **When to use:** * Text-focused testimonial sections * When individual testimonial images are sufficient * Minimal, clean designs * Mobile-optimized displays </Accordion> </AccordionGroup> <img alt="Layout options comparison" /> ### Content width Controls the maximum width of testimonial text content. <AccordionGroup> <Accordion title="Narrow" icon="compress"> Content constrained to a narrow column for better readability (default). **When to use:** * Longer testimonial quotes * Improving text readability * Creating visual focus on content </Accordion> <Accordion title="Full" icon="expand"> Content uses the full available width. **When to use:** * Short, concise testimonials * Maximizing screen space * When using "No image" layout </Accordion> </AccordionGroup> <Tip> Narrow content width typically provides better readability for testimonials, especially on large screens. </Tip> </Tab> <Tab title="Carousel"> ### Autoplay interval Controls automatic slide rotation timing. **Range:** 0 – 10 seconds (in 0.5 second increments)\ **Default:** 3 seconds <AccordionGroup> <Accordion title="Autoplay behavior" icon="play"> **Setting to 0 seconds:** * Disables autoplay completely * Users must manually navigate between testimonials * Best for detailed reviews that need reading time **Setting to 3-5 seconds:** * Recommended for short testimonials * Balanced between visibility and user control * Keeps content dynamic without rushing **Setting to 6-10 seconds:** * Best for longer quotes * Gives users time to read thoroughly * Less frequent changes reduce distraction </Accordion> </AccordionGroup> <Warning> Intervals under 3 seconds can frustrate users who are reading testimonials. Allow sufficient time for comprehension. </Warning> <img alt="Autoplay interval setting" /> </Tab> <Tab title="Content"> ### Title (Heading) Main section heading displayed above testimonials. **Default:** "From the people" Supports rich text formatting (bold, italic, links). ### Heading size Controls the visual size of the section heading. **Available options:** XS (default), S, M, L, XL <Tip> Use XS or S for testimonials to maintain focus on customer quotes rather than the heading. </Tip> </Tab> <Tab title="Styling"> ### Section width Controls the maximum width of the entire section container. <AccordionGroup> <Accordion title="Page width" icon="window-restore"> Content limited to theme's page width (default). **When to use:** Standard sections that align with other page content. </Accordion> <Accordion title="Fluid" icon="arrows-left-right"> Content extends wider but with some padding. **When to use:** Emphasizing testimonials without full edge-to-edge. </Accordion> <Accordion title="Full width" icon="expand"> Content extends to full browser width with no side padding. **When to use:** Edge-to-edge designs, maximizing visual impact. </Accordion> </AccordionGroup> ### Color scheme Select the background and text color scheme for the section. ### Spacing Control vertical spacing around the section: * **Spacing top** - Margin above the section (None, S, M, L, XL) * **Spacing bottom** - Margin below the section (None, S, M, L, XL) Both default to M (medium spacing). ### Section border Add decorative borders to the section. **Available options:** None (default), Top, Bottom, Both <img alt="Styling and spacing options" /> </Tab> </Tabs> ## Block settings Each testimonial block represents one customer review or quote. <Tabs> <Tab title="Media"> ### Image Upload an image for this specific testimonial. <AccordionGroup> <Accordion title="Testimonial images" icon="image"> **Common image uses:** * Product photos related to the review * Customer photos (with permission) * Lifestyle imagery matching testimonial context * Brand or logo images for B2B testimonials **Image recommendations:** * Square or portrait orientations work best * High resolution (at least 500px) * Consistent styling across all testimonials * Properly optimized for web <Note> This is the image shown in the carousel slide, separate from the section's featured image. </Note> </Accordion> </AccordionGroup> <img alt="Testimonial image option" /> </Tab> <Tab title="Text"> ### Quote The main testimonial text or customer review. <AccordionGroup> <Accordion title="Writing effective quotes" icon="quote-right"> **Best practices:** * Keep testimonials authentic and unedited (or minimally edited) * Aim for 20-50 words for optimal readability * Include specific details (product names, features, benefits) * Avoid generic praise ("Great product!") in favor of specific feedback * Use rich text sparingly (emphasize key phrases only) **Example:** Good: "The Leo Bikini Bottoms fit perfectly and the fabric quality exceeded my expectations. I've worn them all summer!" Too generic: "Great quality, highly recommend!" </Accordion> </AccordionGroup> **Default:** "I absolutely love the quality of my Leo Bikini Bottoms." Supports rich text formatting. ### Author Name of the person providing the testimonial, optionally with date or location. **Format examples:** * "Jane Doe" * "Jane Doe, 2022" * "Jane D., New York" * "J.D., Verified Customer" **Default:** "Jane Doe, 2022" <Tip> Adding dates or "Verified Customer" labels increases credibility and trustworthiness. </Tip> </Tab> <Tab title="Link"> ### Link title Optional button or link text displayed with the testimonial. <AccordionGroup> <Accordion title="When to use links" icon="link"> **Use links to:** * Direct to the reviewed product page * Link to full review or case study * Connect to customer's social profile (if permitted) * Drive traffic to related collection **Link text examples:** * "Buy Leo Bikini Bottoms" * "Read full review" * "Shop this collection" * "See more reviews" Leave empty if testimonial doesn't need a call-to-action. </Accordion> </AccordionGroup> **Default:** "Buy Leo Bikini Bottoms" ### Link URL Destination URL for the testimonial link. <AccordionGroup> <Accordion title="Link URL options" icon="arrow-up-right-from-square"> **Common destinations:** * Product page: `/products/product-handle` * Collection page: `/collections/collection-handle` * Full review page: `/pages/reviews` * External review platform (Trustpilot, Google, etc.) <Note> If link URL is empty, no link or button will display even if link title is set. </Note> </Accordion> </AccordionGroup> **Default:** "/" <img alt="Testimonial link settings" /> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Authentic content" icon="certificate"> Use real customer testimonials with permission. Authenticity builds trust more than polished marketing copy. </Card> <Card title="Optimal count" icon="list-ol"> Display 3-6 testimonials for best results. Too few lacks credibility, too many reduces impact. </Card> <Card title="Specific feedback" icon="bullseye"> Choose testimonials that mention specific products, features, or benefits rather than generic praise. </Card> <Card title="Timing matters" icon="clock"> Set autoplay to at least 4-5 seconds for testimonials with 30+ words to ensure readability. </Card> <Card title="Strategic placement" icon="location-dot"> Place testimonials near conversion points: product pages, checkout, or below hero sections. </Card> <Card title="Consistent attribution" icon="user-check"> Use consistent author format across all testimonials (Name + Year, Name + Location, etc.). </Card> <Card title="Visual consistency" icon="images"> If using testimonial images, maintain consistent styling, sizing, and quality across all slides. </Card> <Card title="Mobile optimization" icon="mobile"> Consider using "No image" layout for mobile-heavy sites to maximize testimonial readability. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Homepage social proof" icon="house"> Use 4-5 strong testimonials with "Image right" layout and narrow content width. Set autoplay to 5 seconds. Include product links to drive conversions. Place below hero section or featured products. </Accordion> <Accordion title="Product page validation" icon="box"> Display 2-3 testimonials specific to the product with "No image" layout. Use product photos as testimonial images. Link testimonials to full review page. Disable autoplay for reading control. </Accordion> <Accordion title="Landing page trust builder" icon="shield-check"> Show 3 testimonials with "Image left" layout and full section width. Use customer photos (with permission) or lifestyle imagery. Add verified customer labels to author names. </Accordion> <Accordion title="About page credibility" icon="users"> Use "No image" layout with narrow content width focusing entirely on quotes. Display 4-6 testimonials with longer, detailed feedback. Remove product links for cleaner presentation. </Accordion> <Accordion title="Campaign-specific reviews" icon="megaphone"> Select 3-4 testimonials related to specific campaign or collection. Use custom featured image matching campaign theme. Set autoplay to 4 seconds with product links. </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Trust indicators" icon="badge-check" href="/themes/sahara/sections/trust-indicators"> Display trust badges and guarantees </Card> <Card title="Product recommendations" icon="star" href="/themes/sahara/sections/product-recommendations"> Show recommended products based on behavior </Card> </CardGroup> # Trust indicators Source: https://docs.digifist.com/themes/sahara/sections/trust-indicators Build customer confidence with trust badges, guarantees, and service highlights in customizable layouts. The Trust indicators section displays key brand promises, service highlights, or trust-building messages with icons and text in a flexible layout. It helps reduce purchase anxiety and build credibility by showcasing guarantees like free shipping, secure checkout, or quality certifications. <img alt="Trust indicators section overview" /> ## What this section controls This section controls trust indicator displays with the following capabilities: * Up to 3 customizable indicator blocks * Icon or image support for each indicator * Horizontal or vertical layout options * Mobile carousel functionality * Individual color schemes per indicator * Adjustable spacing and separators ## How the Trust indicators section works The section uses indicator blocks where each block represents one trust message (like "Free Shipping" or "Money-Back Guarantee"). You can add custom icons, headings, and optional links. On desktop, indicators display side by side, while on mobile they can optionally transform into a carousel slideshow. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin, access the Theme Customizer. </Step> <Step title="Add Trust indicators section"> Add the Trust indicators section to your page or template. </Step> <Step title="Add indicator blocks"> Click "Add block" and select "Indicator" to create trust messages. </Step> <Step title="Configure content"> Add icon, heading, and optional link for each indicator. </Step> </Steps> <img alt="Trust indicators section in Theme Customizer" /> ## Section settings <Tabs> <Tab title="Layout"> ### Layout Controls the orientation of icon and text within each indicator. <AccordionGroup> <Accordion title="Horizontal" icon="arrows-left-right"> Icon and text appear side by side in a row. **When to use:** * When you have brief, concise text * Compact horizontal layouts * Desktop-optimized displays * Professional, streamlined appearance </Accordion> <Accordion title="Vertical" icon="arrows-up-down"> Icon appears above the text in a column (default). **When to use:** * Centered, symmetrical designs * When icons are primary focus * Better mobile presentation * More prominent indicator display </Accordion> </AccordionGroup> <img alt="Layout orientation comparison" /> </Tab> <Tab title="Spacing"> ### Inner spacing Controls padding inside each indicator block. **Available options:** No, S, M (default), L, XL <Tip> Use M or L inner spacing to give indicators breathing room and improve readability. </Tip> ### Spacing between blocks Controls the gap between indicator blocks on desktop. **Available options:** No, S, M, L (default), XL ### Spacing between blocks (Mobile) Controls the gap between indicators on mobile devices. **Available options:** No, S, M, L (default), XL <AccordionGroup> <Accordion title="Spacing guidelines" icon="ruler"> **Tight spacing (No, S):** * Compact designs * Many indicators (3+) * When screen space is limited **Medium spacing (M, L - recommended):** * Balanced, professional appearance * Standard 2-3 indicators * Better visual separation **Loose spacing (XL):** * Emphasis on each indicator * Limited indicators (2) * Full-width sections </Accordion> </AccordionGroup> ### Separator for blocks Displays visual dividing lines between indicators. **Default:** Enabled <img alt="Spacing and separator options" /> </Tab> <Tab title="Mobile"> ### Enable mobile slider Converts indicators into a carousel on mobile devices (default: enabled). <AccordionGroup> <Accordion title="Mobile slider behavior" icon="mobile"> When enabled, indicators become swipeable slides on mobile instead of stacking vertically. **Benefits of mobile slider:** * Saves vertical screen space * Creates interactive experience * Better for 3+ indicators * Reduces mobile scroll length **When to disable:** * Only 1-2 indicators present * Text content is very brief * Prefer showing all indicators simultaneously </Accordion> </AccordionGroup> ### Autoplay interval Controls automatic slide advancement on mobile carousel. **Range:** 0 – 10 seconds (default: 3) * **0 seconds** - Disables autoplay (manual swipe only) * **3-5 seconds** - Recommended for brief text * **6-10 seconds** - Better for detailed content <Warning> Autoplay only works when mobile slider is enabled. </Warning> <img alt="Mobile carousel settings" /> </Tab> <Tab title="Styling"> ### Color scheme (Section) Select the background and text color scheme for the entire section container. ### Section width Controls the maximum width of the section. <AccordionGroup> <Accordion title="Page width" icon="window-restore"> Content limited to theme's page width (default). **When to use:** Standard sections aligned with other content. </Accordion> <Accordion title="Fluid" icon="arrows-left-right"> Content extends wider with some padding. **When to use:** Emphasizing trust indicators with more space. </Accordion> <Accordion title="Full width" icon="expand"> Content extends to full browser width. **When to use:** Edge-to-edge designs, banner-style indicator bars. </Accordion> </AccordionGroup> ### Spacing Control vertical spacing around the section: * **Spacing top** - Margin above the section (None, S, M, L, XL) * **Spacing bottom** - Margin below the section (None, S, M, L, XL) Both default to M (medium spacing). ### Section border Add decorative borders to the section. **Available options:** None (default), Top, Bottom, Both <img alt="Styling and spacing options" /> </Tab> </Tabs> ## Block settings Each indicator block represents one trust message or guarantee. Maximum of 3 blocks allowed. <Tabs> <Tab title="Content"> ### Heading Main text for the trust indicator. <AccordionGroup> <Accordion title="Effective indicator headings" icon="heading"> **Best practices:** * Keep it brief (2-5 words) * Be specific and clear * Focus on customer benefit * Use active, confident language **Good examples:** * "Free Shipping Over \$50" * "30-Day Money Back" * "Secure Checkout" * "24/7 Customer Support" **Avoid:** * Vague promises ("Great Service") * Too much detail ("We ship your order using...") * All caps (unless part of brand) </Accordion> </AccordionGroup> **Default:** "Heading goes here" Supports rich text formatting (bold, italic, links). ### Heading size Controls the visual size of the indicator heading. **Available options:** XS, S, M, L (default), XL <Tip> Use consistent heading sizes across all indicators for visual harmony. L or M work best for most trust indicators. </Tip> ### Link label Optional button or link text displayed with the indicator. <AccordionGroup> <Accordion title="When to use links" icon="link"> **Use links to:** * Explain guarantee or policy details * Link to shipping information page * Connect to return policy * Show security certifications **Link text examples:** * "Learn more" * "View details" * "See policy" * "Read more" **Leave empty if:** * Indicator is self-explanatory * No supporting page exists * Keeping design minimal </Accordion> </AccordionGroup> **Default:** "Learn more" ### Link URL Destination URL for the link. **Default:** "/" <Note> If link URL is set but link label is empty, no link will display. </Note> </Tab> <Tab title="Icon"> ### Icon (Custom image) Upload a custom icon or badge image. <AccordionGroup> <Accordion title="Icon guidelines" icon="image"> **Custom icon recommendations:** * Square or circular shapes work best * Minimum 100x100px, recommended 200x200px * PNG format with transparent background * Simple, recognizable designs * Consistent style across all indicators **Common icon types:** * Shipping truck for delivery * Shield for security/guarantee * Credit card for payment options * Return/refresh for money-back * Lock for secure checkout * Star for quality guarantee <Tip> Use SVG icons when possible for crisp display at any size. </Tip> </Accordion> </AccordionGroup> ### Icon color scheme Select a color scheme specifically for the icon area. This allows the icon to have a different background/color than the rest of the indicator block. <img alt="Icon and color scheme settings" /> </Tab> <Tab title="Styling"> ### Color scheme (Block) Select an individual color scheme for this specific indicator block. <AccordionGroup> <Accordion title="Individual color schemes" icon="palette"> Each indicator can have its own color scheme separate from the section. **When to use different colors:** * Creating visual variety * Emphasizing specific indicators * Matching brand colors to message type * Differentiating indicator categories **When to use uniform colors:** * Professional, cohesive design * Minimalist aesthetics * When icons provide enough visual variety </Accordion> </AccordionGroup> <img alt="Individual block color schemes" /> </Tab> </Tabs> ## Best practices <CardGroup> <Card title="Limit indicators" icon="list-check"> Use 2-3 indicators maximum. Too many dilute impact and reduce credibility. </Card> <Card title="Be specific" icon="bullseye"> Use concrete details ("Free shipping over \$50") instead of vague promises ("Great service"). </Card> <Card title="Consistent icons" icon="icons"> Use similar icon styles (all line art or all filled) for cohesive appearance. </Card> <Card title="Strategic placement" icon="location-dot"> Place near conversion points: below product descriptions, above add-to-cart, or in footer. </Card> <Card title="Deliver on promises" icon="circle-check"> Only display guarantees you actually honor. False promises damage trust severely. </Card> <Card title="Mobile optimization" icon="mobile"> Enable mobile slider for 3 indicators to save screen space and improve navigation. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="E-commerce essentials bar" icon="shopping-cart"> Display 3 core value props: "Free Shipping \$50+", "Easy Returns", "Secure Checkout". Use horizontal layout with shipping/return/lock icons. Place below header or above footer on all pages. </Accordion> <Accordion title="Product page confidence builders" icon="box"> Show 2-3 product-specific guarantees: "Quality Guaranteed", "30-Day Returns", "Lifetime Warranty". Use vertical layout below product description. Link to detailed policy pages. </Accordion> <Accordion title="Checkout page reassurance" icon="credit-card"> Display security indicators: "Secure Checkout", "Encrypted Payment", "Money-Back Guarantee". Horizontal layout, minimal spacing. Place above payment form to reduce cart abandonment. </Accordion> <Accordion title="Homepage trust building" icon="house"> Showcase brand promises: "Est. 2010", "50k+ Happy Customers", "24/7 Support". Vertical layout with custom badge icons. Place after hero section or before testimonials. </Accordion> <Accordion title="Footer service highlights" icon="bars"> Display operational details: "Free Shipping", "Call Us: XXX", "Chat Support". Horizontal layout, full-width section. Enable separators between blocks for clear division. </Accordion> </AccordionGroup> ## Related sections <CardGroup> <Card title="Testimonials" icon="quote-right" href="/themes/sahara/sections/testimonials"> Display customer reviews for social proof </Card> <Card title="Rich text" icon="align-left" href="/themes/sahara/sections/rich-text"> Add detailed policy or guarantee explanations </Card> </CardGroup> # Buttons Source: https://docs.digifist.com/themes/sahara/theme-settings/buttons Configure button styles, shapes, and text formatting that define your store's call-to-action appearance Button settings define the visual style of all buttons throughout your store, controlling filled vs outlined styles, corner shapes, and text formatting for consistent call-to-action appearance. Well-designed button styling creates instant brand recognition and can improve conversion rates by 15-25% through clear visual hierarchy. Configure these button settings when establishing your store's base visual design to ensure consistent user experience across all customer touchpoints. ## What this controls Button settings define the visual style of all buttons throughout your store - from "Add to Cart" to "Checkout" to "Subscribe". These global settings ensure consistent button appearance while allowing flexibility for primary vs secondary actions. <Tip>Button style creates instant brand recognition. Consistent button styling across your store improves user experience and conversion rates.</Tip> ## How it works Sahara's button system has three components: 1. **Button Styles:** Choose filled or outlined for primary and secondary buttons 2. **Button Shape:** Squared (sharp corners) or rounded (pill shape) 3. **Text Formatting:** Control letter case (uppercase, normal, etc.) 4. **Input Styling:** Match form inputs to button aesthetic Button **colors** are defined separately in Color Schemes - these settings control **style and shape only**. <Note>Sahara's default pairing is unconventional: Primary buttons are outlined, secondary are filled. Most stores reverse this - consider swapping for a more standard approach.</Note> ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access button settings"> Click **Theme settings** (gear icon in sidebar) → Select **Buttons** </Step> <Step title="Set button styles"> Choose filled or outlined for primary and secondary buttons </Step> <Step title="Choose button shape"> Select squared (sharp) or rounded (pill) corners </Step> <Step title="Configure text transform"> Set button text capitalization (uppercase, normal, etc.) </Step> </Steps> ## Location **Path:** Theme settings → Buttons <img alt="Button settings location" /> ## Settings <Tabs> <Tab title="Button Styles"> ### Primary Button Style Style for primary action buttons - the most important actions on each page. **Options:** * **Filled:** Solid background color, high visibility * **Outlined:** Transparent background with border **Default:** Outlined <Warning>Sahara defaults to Outlined primary buttons, which is unconventional. Most e-commerce stores use Filled for primary buttons. Consider changing to Filled for clearer call-to-action hierarchy.</Warning> <AccordionGroup> <Accordion title="When to use filled vs outlined primary"> **Use Filled Primary (Recommended for Most Stores):** * Maximum visibility for Add to Cart, Checkout * Clear call-to-action hierarchy * Standard e-commerce pattern users expect * Better conversion rates typically **Use Outlined Primary:** * Minimal/subtle aesthetic * When primary actions shouldn't dominate * Consistent with minimal brand identity * Sahara's default (consider if intentional) **Visual Impact:** * **Filled:** Button "pops" from page, draws eye * **Outlined:** Blends more with page, subtle **Conversion Focus:** * High-priority stores: Use Filled * Content/editorial sites: Outlined acceptable </Accordion> <Accordion title="Primary button examples by page"> **Homepage:** * "Shop Now" - Primary * "View Collection" - Primary * "Subscribe" - Primary (newsletter) **Product Page:** * "Add to Cart" - Primary (most important) * "Buy Now" - Primary (alternative checkout) * "View Size Guide" - Secondary **Collection Page:** * "Quick Add" - Primary (per product) * "View Product" - Secondary * "Filter Results" - Secondary **Cart Page:** * "Checkout" - Primary (conversion goal) * "Continue Shopping" - Secondary * "Update Cart" - Secondary **Account Pages:** * "Save Changes" - Primary * "Cancel" - Secondary * "Delete" - Secondary (destructive) </Accordion> </AccordionGroup> ### Secondary Button Style Style for secondary action buttons - supporting actions that are less critical than primary. **Options:** * **Filled:** Solid background color * **Outlined:** Transparent background with border **Default:** Filled <Tip>Standard pattern: Primary = Filled, Secondary = Outlined. Sahara reverses this. For conventional hierarchy, set Primary to Filled and Secondary to Outlined.</Tip> <AccordionGroup> <Accordion title="Primary + Secondary pairing strategies"> **Standard Pattern (Recommended):** * Primary: **Filled** * Secondary: **Outlined** * **Why:** Clear visual hierarchy, industry standard * **Use:** Most e-commerce stores, conversion focus **Sahara Default (Reversed):** * Primary: **Outlined** * Secondary: **Filled** * **Why:** Minimal aesthetic, subtle CTAs * **Use:** Editorial sites, less aggressive conversion **High Contrast:** * Primary: **Filled** (brand color) * Secondary: **Filled** (neutral color) * **Why:** Both stand out, different colors distinguish * **Use:** Complex interfaces, many actions **Minimal:** * Primary: **Outlined** * Secondary: **Outlined** * **Why:** Extremely subtle, text-focused * **Use:** Content-heavy sites, minimal design **Testing:** Try standard pattern first, adjust based on conversion data. </Accordion> </AccordionGroup> </Tab> <Tab title="Button Shape"> ### Button Border Radius Controls corner rounding for all buttons throughout the store. **Options:** * **Squared:** Sharp corners (0px radius) * **Rounded:** Full pill shape (5rem radius) **Default:** Squared <AccordionGroup> <Accordion title="Squared vs Rounded button psychology"> **Squared Buttons (Sharp Corners):** * **Feel:** Modern, professional, formal * **Brands:** Tech, corporate, luxury * **Associations:** Precision, clarity, seriousness * **Sahara Default:** Matches sharp aesthetic **Rounded Buttons (Pill Shape):** * **Feel:** Friendly, approachable, casual * **Brands:** Lifestyle, children, wellness * **Associations:** Softness, warmth, playfulness * **Impact:** More inviting, less intimidating **Industry Examples:** * **Fashion (Sharp):** Zara, COS, Uniqlo - squared * **Fashion (Friendly):** ASOS, H\&M - rounded * **Tech:** Apple - rounded, Microsoft - squared * **Luxury:** Squared almost always **Accessibility:** Both shapes work equally well for readability and touch targets. </Accordion> <Accordion title="Matching button shape to brand personality"> **Choose Squared If:** * Professional/corporate brand * Luxury positioning * Modern/minimal aesthetic * Tech products * Formal tone * Sharp typography (sans-serif headings) **Choose Rounded If:** * Friendly/approachable brand * Casual positioning * Playful aesthetic * Consumer lifestyle products * Warm tone * Rounded typography **Mixed Approach:** * Some brands use squared for desktop, rounded for mobile * Not recommended (inconsistent experience) * Choose one and stick with it **Testing Your Choice:** * Preview on actual product pages * Check "Add to Cart" button feel * Ask: Does this match our brand voice? </Accordion> </AccordionGroup> ### Input Border Radius Controls corner rounding for form input fields (search, email, quantity, etc.). **Options:** * **Squared:** Sharp corners (0px radius) * **Rounded:** Rounded corners (6rem radius) **Default:** Squared <Warning>Input shape should match button shape for visual consistency. If buttons are rounded, inputs should be rounded too.</Warning> <AccordionGroup> <Accordion title="Coordinating buttons and inputs"> **Matched Styling (Recommended):** * Buttons: Squared → Inputs: Squared * Buttons: Rounded → Inputs: Rounded * **Why:** Visual consistency, cohesive design **Mixed Styling (Not Recommended):** * Buttons: Squared → Inputs: Rounded * Buttons: Rounded → Inputs: Squared * **Why:** Feels disjointed, inconsistent **Form Examples:** * **Newsletter signup:** Input + Button side-by-side (must match) * **Search bar:** Input + Button inline (must match) * **Product quantity:** Input + Add to Cart (coordination important) **Exception:** Some brands use squared buttons with slightly rounded inputs (subtle difference). Generally avoid this. </Accordion> </AccordionGroup> </Tab> <Tab title="Text Formatting"> ### Button Text Transform Controls capitalization of button text globally. **Options:** * **Normal:** Text appears as entered (Mixed Case) * **Capitalize:** First Letter Of Each Word Capitalized * **Uppercase:** ALL LETTERS CAPITALIZED * **Lowercase:** all letters lowercase **Default:** Uppercase <AccordionGroup> <Accordion title="Text transform impact on tone"> **Uppercase (Sahara Default):** * **Feel:** Bold, attention-grabbing, formal * **Readability:** Slower to read (less shape recognition) * **Use for:** CTAs that need emphasis, formal brands * **Pair with:** Wide letter spacing for better readability * **Examples:** "ADD TO CART", "CHECKOUT NOW" **Normal (Mixed Case):** * **Feel:** Neutral, readable, standard * **Readability:** Best (natural reading pattern) * **Use for:** Casual brands, text-heavy buttons * **Pair with:** Standard letter spacing * **Examples:** "Add to Cart", "Learn More" **Capitalize (Title Case):** * **Feel:** Polished, professional, formal * **Readability:** Good, slightly formal * **Use for:** Professional services, formal contexts * **Pair with:** Standard letter spacing * **Examples:** "Add To Cart", "View Details" **Lowercase:** * **Feel:** Ultra-casual, modern, playful * **Readability:** Can feel informal or unprofessional * **Use for:** Very casual brands, artistic sites * **Pair with:** Careful - can look like error * **Examples:** "add to cart", "shop now" </Accordion> <Accordion title="Text transform best practices"> **For E-Commerce Stores:** * **Uppercase:** If brand is formal, luxury, or bold * **Normal:** If brand is casual, friendly, accessible * **Capitalize:** If brand is professional services * **Lowercase:** Rarely (risk looking unprofessional) **Readability Considerations:** * **Uppercase:** Add wide letter spacing (0.2rem+) * **Uppercase:** Keep button text short (2-4 words) * **Normal:** Works for any length text * **Lowercase:** Ensure intentional (test with users) **Coordination with Typography:** * Match heading text transform (Sahara defaults both to uppercase) * If headings are uppercase, buttons uppercase makes sense * If headings are normal, buttons normal maintains consistency **Accessibility:** * Screen readers read all caps correctly * All caps SLIGHTLY slower visual reading * Normal case fastest for readability **A/B Testing:** * Test conversion impact of text transform * Uppercase can improve CTR for bold brands * Normal often performs better for long button text </Accordion> <Accordion title="Letter spacing coordination"> **Typography Theme Setting:** * Heading letter spacing: Normal / Wide / Tight * Located in: Theme Settings → Typography **Coordination Strategy:** **If Uppercase Buttons:** * Set heading letter spacing to "Wide" * Improves readability of all-caps text * Sahara defaults to uppercase buttons AND uppercase headings **If Normal Case Buttons:** * Heading letter spacing can be "Normal" * Standard spacing works fine **Technical Note:** * Letter spacing applies to headings, not buttons directly * But visual consistency matters * If headings have wide spacing, uppercase buttons match better </Accordion> </AccordionGroup> </Tab> <Tab title="Color Interaction"> ### How Button Colors Work Button **styles and shapes** are set here. Button **colors** are defined in Color Schemes. <Note>These settings control style only. To change button colors, go to Theme Settings → Colors → Color Schemes.</Note> <AccordionGroup> <Accordion title="Button color settings in Color Schemes"> **Color Scheme Settings:** **Filled Button Background:** * Color ID: `filled_button` * Controls: Background color of filled buttons * Default: Dark blue-gray (#132D40) **Filled Button Label:** * Color ID: `filled_button_label` * Controls: Text color on filled buttons * Default: White (#FFFFFF) * **Requirement:** 4.5:1 contrast minimum **Outlined Button Label:** * Color ID: `outlined_button_label` * Controls: Text and border color for outlined buttons * Default: Dark blue-gray (#132D40) * **Requirement:** 3.0:1 contrast against background **Testing:** Ensure buttons visible on all color schemes (light and dark backgrounds). </Accordion> <Accordion title="Button visibility across color schemes"> **Testing Checklist:** **Filled Buttons:** Text contrast (4.5:1 minimum) Stands out against section background Hover state visible and different Works on images (with overlay if needed) **Outlined Buttons:** Border visible (3.0:1 minimum) Text readable against background Border thickness sufficient (2px recommended) Hover state distinct **Common Issues:** * Light outlined buttons on light backgrounds (low contrast) * Dark outlined buttons on dark backgrounds (invisible) * Similar button color to section background (blends in) **Solution:** Test buttons on all color schemes before publishing. </Accordion> <Accordion title="Creating button hierarchy with color"> **Standard Hierarchy:** * **Primary Filled:** Brand color background, high contrast * **Secondary Outlined:** Neutral color border, subtle * **Result:** Clear visual priority **Color Strategy:** * **Primary:** Use brand color (blue, red, green) * **Secondary:** Use neutral (black, gray) * **Tertiary (if needed):** Very subtle color **Example Configurations:** **Bold Brand:** * Primary Filled: Bright brand color (#FF6B6B) * Secondary Outlined: Black (#111111) **Minimal Brand:** * Primary Filled: Black (#000000) * Secondary Outlined: Dark gray (#333333) **Colorful Brand:** * Primary Filled: Brand primary (#367CAC) * Secondary Outlined: Brand secondary (#132D40) </Accordion> </AccordionGroup> </Tab> </Tabs> <img alt="Button settings overview" /> ## Best practices <CardGroup> <Card title="Use standard button hierarchy" icon="layer-group"> Primary = Filled, Secondary = Outlined (opposite of Sahara default). This pattern has highest conversion rates. </Card> <Card title="Match button shape to brand" icon="shapes"> Squared = professional/modern, Rounded = friendly/casual. Choose one and be consistent. </Card> <Card title="Coordinate buttons and inputs" icon="square-check"> If buttons are squared, inputs should be squared. If rounded, inputs rounded too. </Card> <Card title="Choose text transform intentionally" icon="text"> Uppercase = bold/formal (add letter spacing), Normal = readable/casual, Capitalize = professional. </Card> <Card title="Test button visibility" icon="eye"> Ensure buttons work on light schemes, dark schemes, and over images. </Card> <Card title="Keep button text short" icon="text-size"> 2-4 words maximum, especially with uppercase (harder to read). </Card> <Card title="Use brand color for primary" icon="palette"> Primary buttons should use brand color for recognition and emphasis. </Card> <Card title="Ensure sufficient contrast" icon="circle-half-stroke"> Button text needs 4.5:1 contrast ratio against button background. </Card> <Card title="Make hover states obvious" icon="hand-pointer"> Users need visual feedback when hovering over buttons. </Card> <Card title="Test on mobile devices" icon="mobile"> Buttons should be minimum 44×44px touch targets on mobile. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Standard e-commerce (high conversion focus)"> **Goal:** Clear CTAs that drive sales with maximum visibility **Settings:** * Primary style: **Filled** (change from default) * Secondary style: **Outlined** (change from default) * Button shape: **Squared** * Text transform: **Uppercase** * Input shape: **Squared** **Why it works:** Filled primary buttons have highest visibility, uppercase creates urgency, squared matches professional aesthetic. **Best for:** Product-focused stores, conversion optimization </Accordion> <Accordion title="Modern/friendly brand"> **Goal:** Approachable, casual aesthetic with soft visual language **Settings:** * Primary style: **Filled** * Secondary style: **Outlined** * Button shape: **Rounded** * Text transform: **Normal** (change from default) * Input shape: **Rounded** **Why it works:** Rounded buttons feel friendly, normal case is readable and casual. **Best for:** Lifestyle brands, wellness products, children's stores </Accordion> <Accordion title="Luxury/minimal brand"> **Goal:** Sophisticated, understated elegance with subtle CTAs **Settings:** * Primary style: **Outlined** (keep default) * Secondary style: **Outlined** (change from default) * Button shape: **Squared** * Text transform: **Normal** (change from default) * Input shape: **Squared** **Why it works:** All outlined creates minimal aesthetic, normal case is refined, squared is sophisticated. **Best for:** High-end fashion, luxury goods, art galleries </Accordion> <Accordion title="Bold/creative brand"> **Goal:** Strong visual impact with dramatic button presence **Settings:** * Primary style: **Filled** * Secondary style: **Filled** (same as primary, different colors) * Button shape: **Rounded** * Text transform: **Uppercase** (keep default) * Input shape: **Rounded** **Why it works:** Both filled creates bold presence, rounded softens uppercase, high contrast. **Best for:** Fashion-forward brands, creative industries, youth market </Accordion> </AccordionGroup> ## Related settings * [Colors](/themes/sahara/theme-settings/colors) - Define button colors in color schemes * [Typography](/themes/sahara/theme-settings/typography) - Button text uses button font setting * [Products](/themes/sahara/theme-settings/products) - Mobile Add to Cart style configured separately * [Common Settings](/themes/sahara/common-settings) - Sections can override button styles *** **Need help?** See [Shopify's button best practices](https://help.shopify.com/manual/online-store/themes/customize/buttons) or test button changes in preview mode before publishing. # Cart Source: https://docs.digifist.com/themes/sahara/theme-settings/cart Configure cart functionality including shipping notifications, checkout options, upsells, and order notes Cart settings control global cart functionality across both cart page and cart drawer, including free shipping progress notifications, dynamic checkout buttons, AI-powered product upsells, and customer order notes. Optimized cart features can increase conversion rates by 20-30% and boost average order value through strategic upsells and motivational shipping thresholds. Configure these cart settings to reduce cart abandonment and maximize revenue from customers already engaged in the purchase process. ## What this controls Cart settings control global cart functionality across both cart page and cart drawer, including free shipping progress notifications, terms and conditions acceptance, dynamic checkout buttons (Shop Pay, Apple Pay, Google Pay), AI-powered product upsells, and customer order notes. <Tip>Cart features directly impact conversion rates and average order value. Enable shipping notifications and upsells to increase revenue by 20-30%.</Tip> ## How it works Cart settings are organized into four functional areas: 1. **Shipping Progress:** Motivate customers toward free shipping threshold 2. **Checkout Options:** Dynamic payment buttons and terms acceptance 3. **Product Upsells:** AI-powered recommendations to increase order value 4. **Customer Notes:** Special instructions and gift messages These features work together to optimize cart conversion while improving customer experience. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access cart settings"> Click **Theme settings** → Select **Cart** </Step> <Step title="Configure shipping notification"> Enable free shipping progress bar and set threshold amount </Step> <Step title="Enable checkout features"> Keep dynamic checkout enabled, configure terms if required </Step> <Step title="Customize upsells"> Edit upsell heading to match your brand voice </Step> </Steps> ## Location **Path:** Theme settings → Cart <img alt="Cart settings location" /> ## Settings <Tabs> <Tab title="Shipping Progress"> ### Enable Shipping Notification Display progress bar showing how much more to spend for free shipping. **Default:** Disabled **Effect:** * Shows: "Spend \$12 more for free shipping!" with progress bar * When threshold reached: "You've unlocked free shipping!" * Updates dynamically as cart value changes <Tip>Shipping notifications increase average order value by 10-15% by motivating customers to add items to reach free shipping.</Tip> ### Threshold Cart Price Minimum cart value required for free shipping. **Format:** Numeric value without currency symbol (e.g., "50" not "\$50") **Behavior:** * Enter amount like "50" for \$50 threshold * Leave empty or "0" for always free shipping * Works with your store's currency * Calculates: threshold - cart\_subtotal = amount remaining **Default:** Empty (always free shipping if notification enabled) <AccordionGroup> <Accordion title="Setting the right threshold"> **Strategic Threshold Calculation:** **Formula:** Free Shipping Threshold = Average Order Value × 1.5 **Example Calculations:** * AOV $35 → Set threshold at $50-60 * AOV $50 → Set threshold at $75-80 * AOV $75 → Set threshold at $100-110 **Why 1.5x AOV:** * Achievable goal (customers believe they can reach it) * Significant increase (20-50% AOV boost) * Covers shipping cost (typically 10-15% of order) * Psychological motivation (visible progress) **Finding Your AOV:** 1. Shopify Admin → **Analytics** → **Reports** 2. View "Average Order Value" report 3. Use last 30 days average 4. Multiply by 1.5 for threshold **Threshold by Store Type:** * **Fashion/Apparel:** \$75-100 (medium items, multiple pieces) * **Beauty/Cosmetics:** \$50-75 (smaller items, bundle easily) * **Home Goods:** \$100-150 (larger items, higher value) * **Jewelry:** \$150-200 (high value, premium positioning) * **Books/Media:** \$35-50 (lower value, volume sales) </Accordion> <Accordion title="Shipping notification messaging"> **Progress Messages (Automatic):** **Below Threshold:** **Threshold Reached:** **Always Free (Threshold = 0):** **Customization:** * Theme automatically generates messages * Progress bar fills based on cart/threshold ratio * Celebration message when goal achieved * Updates in real-time as items added/removed **Best Practices:** * Keep threshold visible and achievable * Ensure free shipping actually offered at threshold * Configure in Shopify: **Settings** → **Shipping** → Add free shipping rate * Test cart at various amounts </Accordion> <Accordion title="Shipping notification performance impact"> **Revenue Impact:** * **10-15% AOV increase:** Typical for well-set thresholds * **20-30% add-to-cart rate increase:** Customers add more items * **5-8% conversion rate increase:** Clear shipping expectation **Customer Psychology:** * **Goal-gradient effect:** Closer to goal = more motivated * **Loss aversion:** Don't want to "lose" free shipping * **Progress visualization:** Bar makes goal tangible * **Immediate feedback:** Sees progress with each addition **When It Works Best:** * Stores with multiple low-price items * Fashion/beauty (customers buy multiple pieces) * Gift stores (add wrapping, cards to reach threshold) * Impulse-purchase categories **When to Skip:** * Single high-value products (jewelry over \$500) * Custom/made-to-order (shipping complexity) * Local pickup only * International only (shipping varies widely) </Accordion> </AccordionGroup> </Tab> <Tab title="Checkout Options"> ### Show Dynamic Checkout Buttons Display accelerated checkout buttons (Shop Pay, Apple Pay, Google Pay, PayPal). **Default:** Enabled **Buttons Shown:** * **Shop Pay:** Shopify's one-click checkout * **Apple Pay:** iPhone/Safari users * **Google Pay:** Android/Chrome users * **PayPal:** PayPal account holders * **Amazon Pay:** If configured in Shopify Payments <Warning>Third-party apps may conflict with dynamic checkout. If buttons don't appear, check app compatibility in Shopify settings.</Warning> <AccordionGroup> <Accordion title="Dynamic checkout benefits"> **Conversion Impact:** * **15-25% increase in conversion:** One-click checkout reduces friction * **30-40% faster checkout:** Saved payment info, no form filling * **50% better mobile conversion:** Native mobile payments (Apple/Google Pay) **How Dynamic Checkout Works:** 1. Customer has payment method saved (Shop Pay, Apple Wallet, etc.) 2. Sees familiar button in cart 3. Clicks button → Authenticates (Face ID, Touch ID, password) 4. Order completed in seconds **Which Buttons Appear:** * **Device-specific:** iPhone shows Apple Pay, Android shows Google Pay * **Browser-specific:** Safari prioritizes Apple Pay * **Account-based:** PayPal if customer logged in * **Availability-based:** Shop Pay if customer used it before **Requirements:** * Shopify Payments must be enabled (for most buttons) * Customer must have payment method set up * Browser/device must support the payment method </Accordion> <Accordion title="When to disable dynamic checkout"> **Disable Dynamic Checkout If:** **Custom Checkout Requirements:** * Required custom fields before checkout * Mandatory gift message or personalization * Age verification needed * Prescription upload required **Legal/Compliance:** * Must collect specific information * License agreement must be shown * Regional regulations require extra steps **Business Model:** * B2B store with quote process * Pre-order with complex terms * Subscription-only (custom flow) **Technical Issues:** * Third-party app conflicts * Custom checkout modifications * Testing custom integrations **Keep Enabled For:** * Standard e-commerce (99% of stores) * Mobile-optimized experience * Returning customer convenience * Maximum conversion rates </Accordion> </AccordionGroup> ### Terms Checkbox Text Display terms and conditions text that customers must accept before checkout. **Format:** Rich text (supports links and basic formatting) **Example:** ### Show Terms Checkbox Enable/disable the terms acceptance checkbox. **Default:** Disabled **Behavior:** * Enabled + text provided: Checkbox appears, must be checked * Disabled: No checkbox, checkout unrestricted * Enforced: Cannot proceed to checkout without accepting <Note>Terms checkboxes are legally required in some jurisdictions (EU/GDPR, Australia, etc.). Check local regulations.</Note> <AccordionGroup> <Accordion title="Terms checkbox legal compliance"> **When Terms Are Required:** **EU/EEA (GDPR):** * Must obtain explicit consent for data processing * Terms must be clear and accessible * Cannot use pre-checked boxes * Required for all EU customers **California (CCPA):** * Must disclose data collection * Terms must include privacy rights * Link to privacy policy required **Australia (ACL):** * Consumer guarantees must be stated * Refund policy must be clear * Terms cannot remove statutory rights **General Best Practices:** * Always link to full terms (don't embed long text) * Use clear language: "I agree to..." not "I acknowledge..." * Include both Terms & Conditions and Privacy Policy links * Open links in new tab (don't interrupt checkout) **Example Terms Text:** </Accordion> <Accordion title="Configuring terms pages"> **Creating Terms Pages:** **1. Terms & Conditions:** * Location: Shopify Admin → **Settings** → **Legal** * Or: Create page manually at **Online Store** → **Pages** * Include: Payment terms, shipping policy, product guarantees **2. Privacy Policy:** * Location: Shopify Admin → **Settings** → **Legal** * Shopify provides template * Include: Data collection, usage, third-party sharing **3. Refund Policy:** * Location: Shopify Admin → **Settings** → **Legal** * Include: Return window, refund process, exceptions **Linking in Checkbox:** **Link Format:** * Full URL: `https://yourstore.com/policies/terms` * Relative URL: `/policies/terms` (recommended) * Ensures links work on custom domains </Accordion> </AccordionGroup> </Tab> <Tab title="Product Upsells"> ### Enable Cart Upsell Products Show AI-powered product recommendations in cart to increase order value. **Default:** Enabled **How It Works:** * Uses Shopify's Recommendations API * Based on first product in cart * Shows complementary/frequently-bought-together items * Machine learning improves recommendations over time **Requires:** * Shopify Search & Discovery app (free, included) * Sufficient sales data for AI training * Compatible theme (Sahara supports this) <Tip>Cart upsells can increase average order value by 20-30% with zero manual work. The AI learns from your store's sales patterns.</Tip> ### Heading Customize the heading text above upsell product recommendations. **Default:** "Complete with..." **Examples:** * "Complete with..." (default, versatile) * "You may also like" * "Frequently bought together" * "Pair it with" * "Add these to your order" * "Customers also purchased" <AccordionGroup> <Accordion title="Upsell recommendation strategy"> **How Shopify Recommendations Work:** **Data Sources:** * **Frequently bought together:** Products purchased in same order * **Similar products:** Same category, tags, vendor * **Complementary items:** Cross-category pairings * **Trending products:** Popular items in your store **Recommendation Logic:** 1. Customer adds Product A to cart 2. AI analyzes: What do customers who buy A also buy? 3. Shows 4-6 top recommendations 4. Updates if customer adds more products **Machine Learning:** * Learns from every order placed * Improves accuracy over time * Adapts to seasonal trends * Personalizes based on cart contents **Requirements for Good Recommendations:** * **Minimum sales:** 50+ orders for accurate AI * **Product variety:** Multiple products to recommend * **Clear relationships:** Related products sell together * **Good data:** Accurate product categories and tags </Accordion> <Accordion title="Upsell heading by brand voice"> **Heading Selection Guide:** **Professional/B2B:** * "Recommended products" * "Complete your order" * "Add to your selection" **Friendly/Casual:** * "You'll love these too!" * "Don't forget these" * "Perfect pairs" **Luxury/Premium:** * "Complete the collection" * "Curated for you" * "Enhance your purchase" **Action-Oriented:** * "Add these now" * "Get these too" * "Upgrade your order" **Social Proof:** * "Customers also purchased" * "Frequently bought together" * "Popular additions" **Gift/Seasonal:** * "Complete the gift" (holidays) * "Bundle and save" (if discounts offered) * "Make it a set" </Accordion> <Accordion title="Optimizing upsell performance"> **Upsell Best Practices:** **Product Selection:** * Show 4-6 products (not too many, not too few) * Price range: 20-50% of cart value * Complementary, not competitive (don't show alternatives) * Available stock only **Presentation:** * Clear product images * Price visible * One-click add to cart * No navigation away from cart **Timing:** * Show immediately when cart opens * Update when new products added * Don't overwhelm with too many recommendations **Performance Monitoring:** * Track upsell click-through rate * Measure AOV with/without upsells * Test different heading text * Monitor which products convert best **When Upsells Work Best:** * Fashion: Accessories with clothing * Beauty: Full routine products * Electronics: Cables, cases, accessories * Food: Complementary items (chips + salsa) * Home: Sets, matching items </Accordion> </AccordionGroup> </Tab> <Tab title="Customer Notes"> ### Enable Order Notes Allow customers to add special instructions or messages to their order. **Default:** Enabled **Behavior:** * Text area appears in cart * Customer can enter free-form text * Note passed to Shopify order * Visible in order details for fulfillment * Character limit: 500 characters (Shopify standard) <AccordionGroup> <Accordion title="Order notes use cases"> **Common Uses for Order Notes:** **Gift Messages:** * "Please include: Happy Birthday Sarah! Love, Mom" * Most common use case (50%+ of notes) * Gift stores should always enable * Consider adding "Is this a gift?" checkbox elsewhere **Delivery Instructions:** * "Leave package at side door" * "Ring doorbell, dog-friendly" * "Apartment 3B, buzzer broken" * Reduces delivery issues and redelivery costs **Customization Requests:** * "Please use blue thread instead of red" * "Engrave: JM + SK" * "Extra spicy, please!" * Product-specific modifications **Special Handling:** * "This is a surprise, please use plain packaging" * "Rush order if possible" * "Include invoice for business expense" **Timing Requests:** * "Deliver after 5pm" * "Hold for pickup Friday" * "Send by Saturday for birthday" </Accordion> <Accordion title="When to disable order notes"> **Disable Order Notes If:** **Automated Fulfillment:** * Fully automated dropshipping (no human review) * Third-party fulfillment can't handle notes * Warehouse system doesn't support notes **Standardized Products:** * No customization offered * No gift services * Digital products only (no shipping) **Scale/Volume:** * Very high order volume (notes slow fulfillment) * Cannot review notes for every order * Automated systems handle everything **Keep Enabled For:** * Gift stores (most important!) * Custom/personalized products * Small-medium volume stores * Stores with human fulfillment * Premium/personal service brands **Alternative Solutions:** * Custom product options for specific requests * Gift message app for dedicated gift notes * Contact form for complex requests </Accordion> <Accordion title="Managing order notes in fulfillment"> **Processing Order Notes:** **In Shopify Admin:** 1. Open order 2. Notes appear in **Notes** section 3. Review before fulfillment 4. Add to packing slip if needed **Best Practices:** * Check notes before packing every order * Flag orders with special requests * Respond if request cannot be fulfilled * Track common note types for process improvement **Common Note Categories:** * **Gift:** Include message card * **Delivery:** Follow special instructions * **Customization:** Apply requested changes * **Timing:** Prioritize or hold as requested **Communication:** * Email customer if note unclear * Confirm if request cannot be met * Set expectations ("We'll do our best...") **System Integration:** * Most shipping apps show notes * ERP systems can import notes field * Packing slip apps include notes * Fulfillment services may support notes </Accordion> </AccordionGroup> </Tab> </Tabs> <img alt="Cart settings overview" /> ## Best practices 1. **Set strategic shipping threshold**\ Calculate 1.5x your average order value for optimal results. Too high = unreachable, too low = no motivation. 2. **Always enable dynamic checkout**\ Increases mobile conversion by 30-40%. Disable only if you have specific requirements. 3. **Use terms checkbox for legal compliance**\ Required in EU/GDPR regions. Link to actual terms pages, don't embed long text. 4. **Keep upsells enabled**\ AI-powered recommendations increase AOV by 20-30% with zero manual work. Customize heading to match brand voice. 5. **Customize upsell heading**\ "Complete with..." is generic. Use brand-specific language: "Perfect pairs", "Don't forget", etc. 6. **Enable order notes for gift stores**\ 50%+ of notes are gift messages. Critical for gift-oriented businesses. 7. **Test shipping notification at various cart values**\ Ensure messages display correctly and free shipping actually applies at threshold. 8. **Monitor upsell performance**\ Track which products are recommended and convert. AI improves over time with more data. 9. **Keep order notes enabled unless automated**\ Disable only if fulfillment is fully automated. Human-reviewed orders benefit from notes. 10. **Link to real terms pages**\ Don't fake compliance. Create actual terms/privacy pages in Shopify Legal settings. ## Common use cases <AccordionGroup> <Accordion title="Revenue optimization store"> **Settings:** * Shipping notification: **Enabled** * Threshold: **1.5x AOV** (e.g., $75 for $50 AOV) * Dynamic checkout: **Enabled** * Terms checkbox: **Disabled** (unless legally required) * Cart upsells: **Enabled** * Upsell heading: **"Complete with..."** or **"Frequently bought together"** * Order notes: **Enabled** **Why:** * Shipping threshold drives additional purchases (+10-15% AOV) * Dynamic checkout maximizes mobile conversion (+30% mobile) * Upsells add complementary items (+20-30% AOV) * Order notes allow gift messages (increases gift purchases) * No terms checkbox friction unless legally required **Best for:** Most e-commerce stores, fashion, beauty, home goods </Accordion> <Accordion title="Legal compliance (EU/GDPR) store"> **Settings:** * Shipping notification: **Enabled** * Threshold: **Set based on AOV** * Dynamic checkout: **Enabled** * Terms checkbox: **Enabled** * Terms text: **"I agree to the [Terms](link) and [Privacy Policy](link)"** * Cart upsells: **Enabled** * Upsell heading: **Customized** * Order notes: **Enabled** **Why:** * GDPR requires explicit consent for data processing * Terms checkbox provides documented consent * Links to actual terms/privacy pages (transparency) * Dynamic checkout and upsells still optimize revenue * Order notes support customer service **Best for:** EU-based stores, international stores selling to EU, privacy-focused brands </Accordion> <Accordion title="Gift-focused store"> **Settings:** * Shipping notification: **Enabled or Disabled** (depends on strategy) * Threshold: **Lower than usual** (gifts are impulse, easier threshold) * Dynamic checkout: **Enabled** * Terms checkbox: **Disabled** (unless required) * Cart upsells: **Enabled** * Upsell heading: **"Complete the gift"** or **"Perfect additions"** * Order notes: **ENABLED (critical!)** **Why:** * Order notes essential for gift messages * Lower shipping threshold (gift buyers less price-sensitive) * Upsell heading references gifting * Dynamic checkout for busy gift shoppers * Cart note for "Is this a gift?" confirmation **Best for:** Gift shops, flower delivery, holiday stores, personalized products </Accordion> <Accordion title="High-volume automated fulfillment"> **Settings:** * Shipping notification: **Enabled** * Threshold: **Moderate** (balance volume and value) * Dynamic checkout: **Enabled** * Terms checkbox: **Enabled if required** * Cart upsells: **Enabled** * Upsell heading: **Social proof** ("Customers also purchased") * Order notes: **Disabled** **Why:** * Fully automated fulfillment can't process notes * Social proof heading validates purchase decisions * Dynamic checkout speeds high-volume processing * Shipping threshold optimizes per-order revenue * Upsells automated through AI **Best for:** Dropshipping, print-on-demand, high-volume warehouse fulfillment </Accordion> <Accordion title="Luxury/premium positioning"> **Settings:** * Shipping notification: **Disabled** (always free shipping implied) * Threshold: N/A * Dynamic checkout: **Enabled** (convenience for premium customers) * Terms checkbox: **Disabled** (unless required) * Cart upsells: **Enabled** * Upsell heading: **"Complete the collection"** or **"Curated for you"** * Order notes: **Enabled** (personalized service) **Why:** * Premium brands offer free shipping (no threshold needed) * Luxury language in upsell heading * Order notes support white-glove service * Dynamic checkout for convenience * No friction (terms) unless legally necessary **Best for:** Luxury goods, high-end fashion, jewelry, premium electronics </Accordion> </AccordionGroup> ## Related settings * [Products](/themes/sahara/theme-settings/products) - Product card appearance affects upsells * [Buttons](/themes/sahara/theme-settings/buttons) - Checkout button styling * [Colors](/themes/sahara/theme-settings/colors) - Cart UI color schemes * [Features](/themes/sahara/theme-settings/features) - Currency codes shown in cart *** **Need help?** Test cart features with real products at various price points. Add items, watch shipping notification update, try dynamic checkout buttons, review upsell recommendations. # Colors Source: https://docs.digifist.com/themes/sahara/theme-settings/colors Create and manage color schemes that define your store's visual identity Color settings define the visual identity of your entire store through reusable color schemes containing coordinated colors for backgrounds, text, buttons, and UI elements. Color schemes are powerful - changing a single scheme's colors instantly updates all sections using it throughout your store. Create and configure color schemes at the start of theme setup to establish your brand's visual foundation and ensure consistent design across all pages and sections. ## What this controls Color settings define the visual identity of your entire store through reusable color schemes. Each scheme contains coordinated colors for backgrounds, text, buttons, and UI elements that sections can inherit and apply consistently. <Tip>Color schemes are powerful - changing a scheme's colors updates all sections using it simultaneously.</Tip> ## How it works Sahara uses Shopify's **color scheme system**: 1. **Define color schemes:** Create multiple schemes (light, dark, accent, etc.) 2. **Sections inherit schemes:** Each section chooses which scheme to use 3. **Global updates:** Changing a scheme's colors updates all sections using it 4. **Section overrides:** Individual sections can override specific colors when needed This system ensures visual consistency while maintaining flexibility. <Note>Most stores use 2-4 color schemes: a light scheme for main content, a dark scheme for hero sections, and 1-2 accent schemes for emphasis.</Note> ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access color settings"> Click **Theme settings** (gear icon in sidebar) → Select **Colors** </Step> <Step title="Choose a scheme to edit"> Click on "Scheme 1", "Scheme 2", etc. to expand color options </Step> <Step title="Customize colors"> Adjust background, text, button, and element colors within the scheme </Step> <Step title="Test accessibility"> Ensure text has sufficient contrast against backgrounds (4.5:1 minimum) </Step> </Steps> ## Location **Path:** Theme settings → Colors <img alt="Color settings location" /> ## Settings <Tabs> <Tab title="Color Schemes"> ### Understanding Color Schemes Color schemes are collections of coordinated colors that work together harmoniously. Sahara includes multiple pre-configured schemes that you can customize. **Available Schemes:** * **Scheme 1:** Primary color scheme for main content * **Scheme 2:** Alternative scheme for visual variety * **Scheme 3:** Additional variation for special sections * **Inverse:** High-contrast scheme (typically dark) <AccordionGroup> <Accordion title="How color scheme inheritance works"> **Global Definition:** * Define color schemes in Theme Settings → Colors * Each scheme contains all necessary colors * Schemes are reusable across sections **Section Application:** * Sections choose which scheme to use * Changing section's scheme changes all its colors * Sections inherit scheme colors automatically **Update Behavior:** * Editing a scheme updates ALL sections using it * Provides instant visual consistency * Test changes across multiple sections before saving **Example:** If 10 sections use "Scheme 1" and you change its background from white to cream, all 10 sections update automatically. </Accordion> <Accordion title="Recommended color scheme strategy"> **Minimal Approach (2 schemes):** * **Scheme 1 (Light):** White/light background, dark text * **Scheme 2 (Dark):** Dark background, light text * Use: Simple, consistent stores **Standard Approach (3 schemes):** * **Scheme 1 (Light):** Primary content scheme * **Scheme 2 (Accent):** Brand color emphasis * **Scheme 3 (Inverse):** Dark sections/footer * Use: Most e-commerce stores **Advanced Approach (4+ schemes):** * **Scheme 1:** Main content (white) * **Scheme 2:** Light accent (cream/beige) * **Scheme 3:** Brand color emphasis * **Scheme 4:** Dark/inverse * Use: Complex stores with varied visual sections **Best Practice:** Start with 2-3 schemes. Add more only if needed for specific design requirements. </Accordion> </AccordionGroup> </Tab> <Tab title="Background"> ### Background Color The foundation color for sections using this scheme. **Default (Scheme 1):** #FFFFFF (white) <Tip>Choose background colors that provide sufficient contrast with text. Light backgrounds need dark text, dark backgrounds need light text.</Tip> <AccordionGroup> <Accordion title="Background color best practices"> **Light Backgrounds:** * White (#FFFFFF) - Clean, minimal * Off-white (#F9F9F9) - Softer than pure white * Cream (#FFF8F0) - Warm, inviting * Light gray (#F5F5F5) - Neutral, professional **Dark Backgrounds:** * Near-black (#1A1A1A) - Modern, sleek * Dark gray (#2D2D2D) - Less harsh than pure black * Dark blue (#132D40) - Sahara default, professional * Charcoal (#333333) - Versatile neutral **Colored Backgrounds:** * Use sparingly (accent sections only) * Keep saturation low (10-20%) * Ensure text contrast remains WCAG compliant * Test on multiple devices **Never use:** * Pure black (#000000) - Too harsh, poor readability * High saturation colors - Strain eyes * Similar colors for adjacent sections - Creates confusion </Accordion> <Accordion title="Contrast ratio requirements"> **WCAG 2.1 Standards:** **Level AA (Minimum - Required):** * Body text (14-18px): **4.5:1** contrast ratio * Large text (18px+ or 14px+ bold): **3.0:1** contrast ratio * UI elements: **3.0:1** minimum **Level AAA (Enhanced - Recommended):** * Body text: **7.0:1** contrast ratio * Large text: **4.5:1** contrast ratio **Testing Tools:** * WebAIM Contrast Checker: [https://webaim.org/resources/contrastchecker/](https://webaim.org/resources/contrastchecker/) * Chrome DevTools: Lighthouse accessibility audit * Shopify Theme Customizer: Built-in contrast warnings **Common Failures:** * Light gray text on white: Often fails (2:1 ratio) * Medium gray on light gray: Insufficient contrast * Colored text on colored background: Needs careful testing </Accordion> </AccordionGroup> ### Background Gradient Optional gradient overlay on top of the solid background color. **Default:** None <Warning>Use gradients sparingly. Subtle gradients (5-10% opacity) work best. Strong gradients can reduce text readability.</Warning> <AccordionGroup> <Accordion title="When to use gradients"> **Good Use Cases:** * Subtle depth on hero sections (5-10% opacity) * Directional emphasis (dark to light, top to bottom) * Brand differentiation (using brand colors subtly) * Image overlays (darken bottom for text readability) **Avoid Gradients:** * Text-heavy sections (reduces readability) * Product grids (distracting) * Navigation areas (needs clarity) * Forms and inputs (functional areas) **Gradient Best Practices:** * Keep opacity low (5-15% maximum) * Use gradual transitions (avoid harsh stops) * Match gradient direction to content flow * Test on mobile (gradients affect small screens differently) * Ensure text remains readable over entire gradient </Accordion> </AccordionGroup> </Tab> <Tab title="Typography"> ### Primary Text Main body text color - used for paragraphs, product descriptions, and general content. **Default (Scheme 1):** #132D40 (dark blue-gray) **Requirement:** Must have **4.5:1** contrast against background for body text. ### Secondary Text Supporting text color - used for metadata, captions, less prominent information. **Default (Scheme 1):** #367CAC (medium blue) <Note>Secondary text should be visually distinct from primary text but still maintain adequate contrast (3.0:1 minimum).</Note> ### Heading Text Color for all heading elements (H1 through H6). **Default (Scheme 1):** #132D40 (same as primary text) <AccordionGroup> <Accordion title="Typography color strategies"> **Monochromatic (Recommended):** * Primary text: Dark (#132D40) * Secondary text: Medium gray (#65706E) * Headings: Same as primary or slightly darker * Links: Same as primary with underline **Why it works:** Maximum readability, professional appearance, easy to maintain. **Brand Color Emphasis:** * Primary text: Neutral dark (#111111) * Secondary text: Medium gray * Headings: Brand color (#367CAC) * Links: Brand color **Why it works:** Brand personality while maintaining readability for body content. **Contrast Variation:** * Primary text: Near-black (#1A1A1A) * Secondary text: Medium gray (#666666) * Headings: Pure black (#000000) * Links: Brand accent **Why it works:** Strong hierarchy, clear visual distinction between content types. </Accordion> <Accordion title="Link color best practices"> **Link Requirements:** 1. **Contrast:** 4.5:1 minimum against background 2. **Distinction:** Visually different from body text 3. **Consistency:** Same color throughout section 4. **States:** Clear hover/focus/visited states **Good Link Colors:** * **Brand color** - Reinforces identity * **Blue shades** - Universal link convention * **Underlined text** - Clearest indicator **Avoid:** * Red links (looks like errors) * Same color as body text without underline * Low contrast colors * Colors that clash with brand **Link States:** * Default: Brand color or blue * Hover: Slightly darker or underlined * Visited: Slightly muted (optional) * Focus: Outlined for keyboard navigation </Accordion> </AccordionGroup> </Tab> <Tab title="Buttons"> ### Filled Button Background Background color for primary action buttons. **Default (Scheme 1):** #132D40 (dark blue-gray) ### Filled Button Label Text color on filled buttons. **Default (Scheme 1):** #FFFFFF (white) **Requirement:** Must have **4.5:1** contrast against button background. <Tip>Filled buttons should be your primary call-to-action. Use brand colors here for maximum impact.</Tip> ### Outlined Button Label Text and border color for outlined (secondary) buttons. **Default (Scheme 1):** #132D40 (dark blue-gray) <AccordionGroup> <Accordion title="Button color strategies"> **Primary/Secondary Pattern (Recommended):** * **Filled (Primary):** Brand color background, white text * **Outlined (Secondary):** Transparent background, brand color text/border * **Usage:** Clear visual hierarchy between actions **Example:** * Primary: "Add to Cart" (brand color, bold) * Secondary: "View Details" (outlined, subtle) **High Contrast Pattern:** * **Filled:** Dark background (#132D40), white text * **Outlined:** White background, dark border/text * **Usage:** Maximum visibility, accessibility focus **Monochromatic Pattern:** * **Filled:** Dark gray, white text * **Outlined:** Light gray, dark text * **Usage:** Minimal, professional aesthetic **Multi-Color Pattern:** * **Filled:** Brand primary color * **Outlined:** Brand secondary color * **Usage:** Multiple CTAs with different emphasis </Accordion> <Accordion title="Button accessibility requirements"> **Contrast Requirements:** * Button text vs button background: **4.5:1** minimum * Button vs section background: **3.0:1** minimum (for outlined buttons) * Focus indicator: **3.0:1** minimum **Size Requirements:** * Minimum touch target: 44×44px (mobile) * Minimum spacing between buttons: 8px * Clear focus states for keyboard navigation **State Indicators:** * **Default:** Base colors * **Hover:** Slightly darker or lighter (10-15%) * **Active/Pressed:** Even more contrast (20-30%) * **Disabled:** Reduced opacity (40-60%) * **Focus:** Visible outline (3px minimum) **Testing Checklist:** Test on light and dark backgrounds Verify hover states are visible Check keyboard focus indicators Test with screen readers Validate on mobile devices </Accordion> <Accordion title="When to use filled vs outlined buttons"> **Use Filled Buttons For:** * Primary actions (Add to Cart, Checkout, Subscribe) * Single most important action on screen * Final step in a process * Conversion-focused CTAs **Use Outlined Buttons For:** * Secondary actions (View Details, Learn More) * Multiple buttons in same area * Less critical actions * Navigation to supporting content **Button Hierarchy Example:** **Product Page:** * Filled: "Add to Cart" (primary conversion) * Outlined: "View Size Guide" (supporting info) **Cart Page:** * Filled: "Checkout" (primary goal) * Outlined: "Continue Shopping" (secondary) **Homepage Hero:** * Filled: "Shop Now" (main CTA) * Outlined: "Learn More" (exploratory) </Accordion> </AccordionGroup> </Tab> <Tab title="UI Elements"> ### Borders and Elements Color for borders, dividers, card outlines, and decorative lines. **Default (Scheme 1):** #EBEBEB (light gray) <Note>Borders should be subtle. Use 10-20% opacity or light grays to avoid overwhelming content.</Note> ### Badges Background Background color for product badges and tags (Sale, New, Limited, etc.). **Default (Scheme 1):** #111111 (near black) ### Badges Text Text color on product badges. **Default (Scheme 1):** #FFFFFF (white) <Tip>Use high-contrast badge colors for maximum visibility. Black badges with white text or brand color badges work well.</Tip> ### Progress Bar Color for progress indicators (cart goals, quantity limits, etc.). **Default (Scheme 1):** #65706E (medium gray) ### Image Placeholder Background Background color shown when product images are missing or loading. **Default (Scheme 1):** #F2F3F7 (very light gray) ### Shadows Color used for box shadows and drop shadows (typically used with opacity). **Default (Scheme 1):** #000000 (black) <AccordionGroup> <Accordion title="Border color best practices"> **Subtle Borders (Recommended):** * Light backgrounds: #EBEBEB to #F0F0F0 (5-10% opacity) * Dark backgrounds: #333333 to #444444 (10-15% opacity) * Purpose: Define areas without dominating **Strong Borders:** * Light backgrounds: #CCCCCC (20-30% opacity) * Dark backgrounds: #666666 (30-40% opacity) * Purpose: Clear separation, formal appearance **Colored Borders:** * Use brand color at low opacity (5-10%) * Only for emphasis sections * Ensure doesn't clash with content **When to Use Borders:** * Card separation in grids * Form input fields * Section dividers * Header/footer separation **When to Avoid Borders:** * Already using box shadows * Sufficient whitespace exists * Minimal/clean design aesthetic * Dark mode (use subtle lines instead) </Accordion> <Accordion title="Badge color strategies"> **High Impact (Recommended):** * Background: Black (#111111) or brand color * Text: White (#FFFFFF) * Purpose: Maximum visibility, urgency **Subtle Accent:** * Background: Light gray (#F5F5F5) * Text: Dark gray (#333333) * Purpose: Informative without dominating **Status-Based Colors:** * **Sale:** Red background, white text * **New:** Blue/brand color, white text * **Limited:** Orange/yellow, dark text * **Sold Out:** Gray, white text **Badge Placement:** * Top-left corner (standard) * Top-right corner (alternative) * Avoid bottom (less visible) **Badge Size:** * Small: Subtle, non-intrusive * Medium: Standard visibility (recommended) * Large: High emphasis (use sparingly) </Accordion> <Accordion title="Shadow usage guidelines"> **Shadow Types:** **Subtle Elevation (Recommended):** * Opacity: 5-10% * Blur: 8-16px * Y-offset: 2-4px * Purpose: Card separation, hover states **Medium Elevation:** * Opacity: 10-20% * Blur: 16-32px * Y-offset: 4-8px * Purpose: Modals, dropdowns, important cards **Strong Elevation:** * Opacity: 20-30% * Blur: 32-48px * Y-offset: 8-16px * Purpose: Overlays, critical modals **When to Use Shadows:** * Card elevation in grids * Button hover states * Dropdown menus * Modal overlays * Floating elements **When to Avoid Shadows:** * Flat/minimal design * Dark mode (use borders instead) * High-performance needs * Text elements **Shadow Performance:** * Use sparingly (CSS performance) * Prefer on hover, not permanent * Consider box-shadow alternatives * Test on mobile devices </Accordion> </AccordionGroup> </Tab> </Tabs> <img alt="Color settings overview" /> ## Best practices <CardGroup> <Card title="Limit to 2-4 color schemes" icon="palette"> More schemes create inconsistency and confusion. Most stores need only light, dark, and 1-2 accent schemes. </Card> <Card title="Test contrast ratios rigorously" icon="eye"> Body text needs 4.5:1 minimum, large text needs 3.0:1. Use WebAIM Contrast Checker or browser DevTools. </Card> <Card title="Start with accessibility first" icon="universal-access"> Ensure WCAG compliance first, then refine colors for brand expression. </Card> <Card title="Brand colors as accents" icon="swatchbook"> Apply brand colors to buttons, headings, or backgrounds. Keep body text neutral for readability. </Card> <Card title="Test on multiple backgrounds" icon="images"> Buttons and text should work on all scheme backgrounds. Test light schemes with images. </Card> <Card title="Keep gradients subtle" icon="droplet"> 5-10% opacity maximum. Strong gradients reduce readability and look dated. </Card> <Card title="Preview across entire store" icon="store"> Color scheme changes affect multiple sections. Preview homepage, product pages, cart before saving. </Card> <Card title="Consider dark mode needs" icon="moon"> Create an inverse/dark scheme for night mode or high-contrast sections. </Card> <Card title="Document your decisions" icon="file-lines"> Note accessibility tests, brand color hex values, and scheme purposes for future reference. </Card> <Card title="Test on actual devices" icon="mobile-screen"> Colors appear differently on phones, tablets, and monitors. Test on real hardware, not just browser preview. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Standard e-commerce store (2 schemes)"> **Goal:** Clean, professional appearance with good readability **Scheme 1 (Light - Primary):** * Background: White (#FFFFFF) * Primary text: Dark gray (#1A1A1A) * Headings: Near-black (#111111) * Filled button: Brand color or dark (#132D40) * Filled button text: White (#FFFFFF) * Outlined button: Dark (#132D40) * Border: Light gray (#EBEBEB) **Scheme 2 (Dark - Accent):** * Background: Dark blue-gray (#132D40) * Primary text: White (#FFFFFF) * Headings: White (#FFFFFF) * Filled button: White (#FFFFFF) * Filled button text: Dark (#132D40) * Outlined button: White (#FFFFFF) * Border: Medium gray (#444444) **Usage:** * Scheme 1: Product grids, product pages, most sections * Scheme 2: Hero sections, footer, announcement bar </Accordion> <Accordion title="Brand-forward store (3 schemes)"> **Goal:** Strong brand identity with color-rich experience **Scheme 1 (Light - Default):** * Background: Off-white (#F9F9F9) * Primary text: Charcoal (#333333) * Headings: Brand primary (#132D40) * Filled button: Brand primary (#132D40) * Buttons text: White (#FFFFFF) * Links: Brand secondary (#367CAC) **Scheme 2 (Accent - Brand):** * Background: Brand light tint (#F0F7FB) * Primary text: Dark (#1A1A1A) * Headings: Brand primary (#132D40) * Filled button: Brand accent (#367CAC) * Button text: White (#FFFFFF) **Scheme 3 (Dark - Contrast):** * Background: Near-black (#1A1A1A) * Primary text: Off-white (#F9F9F9) * Headings: White (#FFFFFF) * Filled button: Brand accent (#367CAC) * Button text: White (#FFFFFF) **Usage:** * Scheme 1: Product pages, collections, blog * Scheme 2: Featured collections, promotions, highlights * Scheme 3: Hero, footer, special announcements </Accordion> <Accordion title="Minimal/luxury store (2 schemes, high contrast)"> **Goal:** Sophisticated, minimal aesthetic with maximum readability **Scheme 1 (Light - Ultra Minimal):** * Background: Pure white (#FFFFFF) * Primary text: Pure black (#000000) * Headings: Black (#000000) * Filled button: Black (#000000) * Filled button text: White (#FFFFFF) * Outlined button: Black (#000000) * Border: Light gray (#E5E5E5) * Gradient: None **Scheme 2 (Inverse):** * Background: Pure black (#000000) * Primary text: White (#FFFFFF) * Headings: White (#FFFFFF) * Filled button: White (#FFFFFF) * Filled button text: Black (#000000) * Outlined button: White (#FFFFFF) * Border: Dark gray (#333333) **Usage:** * Scheme 1: All content sections, product pages * Scheme 2: Hero only, footer **Style Notes:** * No gradients, no shadows * Maximum whitespace * Large typography * Minimal color variation </Accordion> <Accordion title="Vibrant/fashion store (4 schemes)"> **Goal:** Dynamic, colorful experience with strong visual variety **Scheme 1 (White - Clean):** * Background: White (#FFFFFF) * Primary text: Black (#111111) * Filled button: Brand primary (e.g., #FF6B6B) * Button text: White (#FFFFFF) **Scheme 2 (Cream - Warm):** * Background: Warm cream (#FFF8F0) * Primary text: Dark brown (#2D2520) * Filled button: Terracotta (#E07856) * Button text: White (#FFFFFF) **Scheme 3 (Colored - Bold):** * Background: Light brand tint (#FFF0F5) * Primary text: Dark (#1A1A1A) * Filled button: Bold brand color (#FF1493) * Button text: White (#FFFFFF) **Scheme 4 (Dark - Drama):** * Background: Navy (#0A1128) * Primary text: Off-white (#F5F5F5) * Filled button: Bright accent (#FFD700) * Button text: Dark (#0A1128) **Usage:** * Rotate schemes across sections * Create visual rhythm * High energy, fashion-forward </Accordion> </AccordionGroup> ## Related settings * [Typography](/themes/sahara/theme-settings/typography) - Text colors work with typography settings * [Buttons](/themes/sahara/theme-settings/buttons) - Button shapes complement button colors * [Layout](/themes/sahara/theme-settings/layout) - Section widths affect color application * [Common Settings](/themes/sahara/common-settings) - Apply color schemes to individual sections *** **Need help?** See [Shopify's color accessibility guide](https://help.shopify.com/manual/online-store/themes/customize/color) or use [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/). # Country Drawer Source: https://docs.digifist.com/themes/sahara/theme-settings/country-drawer Configure country/language selector drawer display and content Country drawer settings control how the country and language selector appears when customers change their region or currency. For international stores, a well-configured selector can increase conversion by 30-40% by showing prices in local currency and preferred language. These settings let you customize the drawer's content visibility and display format to match your store's needs. ## What this controls Country drawer settings control how the country and language selector appears when customers click to change their region or language. These settings affect the drawer's content visibility and how countries/currencies are displayed within the selector. <Tip>For international stores, a well-configured country selector can increase conversion by 30-40% by allowing customers to see prices in their local currency and preferred language.</Tip> ## How it works When customers click the country/language selector (typically in header or footer), a drawer slides out displaying available regions and languages. These settings control: 1. **Title visibility** - Whether the drawer shows a heading 2. **Description content** - Helper text explaining the selector 3. **Display format** - How countries and currencies are shown (names, codes, flags, etc.) The drawer automatically pulls available markets from your Shopify Markets settings. You control only how that information is presented. <Note>You must configure Shopify Markets in your admin for the country selector to appear. These settings only control the drawer's appearance, not which countries are available.</Note> ## Getting started <Steps> <Step title="Enable Shopify Markets"> From Shopify admin → **Settings** → **Markets** → Add at least 2 markets </Step> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access country drawer settings"> Click **Theme settings** → Select **Country drawer** </Step> <Step title="Configure visibility"> Toggle title and content display options </Step> <Step title="Choose display format"> Select how countries/currencies appear in the selector </Step> <Step title="Test the selector"> Preview and click the country selector to see your drawer configuration </Step> </Steps> ## Location **Path:** Theme settings → Country drawer ## Settings <Tabs> <Tab title="Content Display"> **Show country drawer title**: Controls whether the drawer displays a heading at the top. **Default:** Enabled When enabled, the drawer shows a title like "Change country/region" to clearly indicate the drawer's purpose. **Recommendation:** Keep enabled for clarity, especially for customers unfamiliar with your store. *** **Show country drawer content**: Controls whether descriptive content appears in the drawer. **Default:** Enabled When enabled, the drawer can show helper text explaining that prices, shipping, and availability change based on selected region. **Recommendation:** Enable for stores with significant regional differences (pricing, shipping, inventory). </Tab> <Tab title="Display Format"> **Country drawer display option**: Choose how countries and languages are displayed in the selector. **Options:** **1. Country name + ISO code + Currency symbol**\ Example: `United States (US) - $` * Most comprehensive, shows all information * Best for stores with many similar country names * Helps customers understand currency implications * Recommended for international stores with currency variations **2. Country name + ISO code**\ Example: `United States (US)` * Clean display with country identification * Good balance of clarity and brevity * Works well when currencies are obvious from country * Recommended for stores with standard currency zones **3. Country name only**\ Example: `United States` * Simplest, most readable format * Best for stores targeting specific, easily recognized countries * Less clutter but may lack clarity on currency * Recommended for domestic stores with limited international reach **4. ISO code + Currency symbol** ⭐ Default\ Example: `US - $` * Compact format, saves space * Good for mobile where screen space is limited * Assumes customers recognize ISO codes * Recommended for tech-savvy audiences, compact layouts **5. Flag only**\ Example: 🇺🇸 * Visual recognition, language-independent * Works across all languages without translation * Some flags are similar and hard to distinguish * Recommended for highly visual brands, limited country sets **6. Flag + Country name**\ Example: 🇺🇸 `United States` * Combines visual and text recognition * Quick scanning with clear identification * Largest display footprint * Recommended for premium experiences, ample drawer space <Warning>If using flags, ensure you have adequate country coverage. Missing flags appear as country codes, creating inconsistent experience.</Warning> </Tab> </Tabs> ## Use cases <CardGroup> <Card title="Global E-commerce" icon="earth-americas"> Selling to 50+ countries with varying currencies and languages. **Recommended:** Country name + ISO + Currency (Option 1)\ Customers need full information to make informed choice. </Card> <Card title="Regional Store" icon="map"> Serving 3-5 nearby countries with similar currencies (e.g., EU countries). **Recommended:** Country name only (Option 3)\ Customers familiar with their country, currencies are obvious. </Card> <Card title="Mobile-First Store" icon="mobile"> High mobile traffic requiring compact UI elements. **Recommended:** ISO code + Currency (Option 4)\ Saves valuable screen space while providing essential info. </Card> <Card title="Fashion/Lifestyle Brand" icon="shirt"> Visual brand identity with design-focused customer base. **Recommended:** Flag + Country name (Option 6)\ Aligns with visual aesthetic while maintaining clarity. </Card> </CardGroup> ## Best practices <CardGroup> <Card title="Match display to audience" icon="users"> Consider customers' familiarity with geography and currencies. International shoppers need full information (Option 1 or 2), domestic + nearby regions benefit from names only (Option 3), tech-savvy audience can use codes (Option 4), visual learners prefer flags (Options 5 or 6). Test with actual customers. </Card> <Card title="Consider mobile screen space" icon="mobile-screen"> Country selectors often appear on mobile with limited space. Longer formats (Options 1, 6) may wrap on small screens, compact formats (Options 4, 5) work better on mobile. Test drawer on actual devices, not just browser emulation, ensure touch targets are adequate (minimum 44px height). </Card> <Card title="Show title for clarity" icon="heading"> Keep "Show country drawer title" enabled unless you have strong design reasons. Customers immediately understand drawer purpose, reduces confusion about what they're selecting, accessibility improvement for screen readers. Only disable if drawer purpose is obvious from context. </Card> <Card title="Use content for complex markets" icon="circle-info"> Enable "Show country drawer content" when prices vary significantly by region, shipping availability differs between markets, inventory is region-specific, or payment methods change by country. Use content to set expectations about regional differences. </Card> <Card title="Align with currency display" icon="dollar-sign"> If showing currency in country selector, ensure consistency. Show currency codes in prices if using them in selector, match currency symbol usage (before/after price), keep currency visibility consistent across site. Inconsistent currency display creates confusion and distrust. </Card> <Card title="Test with actual markets" icon="flask"> Configure real markets in Shopify and test the selector. Add at least 3-5 countries to see how list looks, include countries with similar names (Korea/South Korea), test countries with different currency symbols, verify flags display correctly. Settings that work with 2 markets may not scale to 20. </Card> </CardGroup> ## Common issues <Warning> **Country selector not appearing?** Check these requirements: 1. **Markets configured:** You must have 2+ markets in Shopify Settings → Markets 2. **Theme support enabled:** Verify Markets is enabled in your theme 3. **Selector positioned:** Add country selector to header or footer section 4. **Browser cache:** Clear cache or test in incognito mode The drawer settings only affect appearance, not visibility. Configure Markets first. </Warning> <Tip> **Pro tip:** For stores with many markets (20+), use search functionality in the drawer. Enable for 10+ countries and use compact display format (Option 4 or 5) to reduce scrolling. </Tip> ## Accessibility considerations * **Screen readers:** Drawer title helps announce drawer purpose * **Keyboard navigation:** Ensure selector is keyboard-accessible * **Focus management:** Drawer should trap focus when open * **Labels:** All options should have clear labels (not just flags) * **Language:** Drawer title/content should translate based on selected language <Note>Sahara handles most accessibility automatically, but test with screen reader to verify experience.</Note> ## Performance notes * Drawer content loads on-demand (not on initial page load) * Flag images are optimized SVGs for small file size * Changing country triggers page reload to update prices/content * Selection is saved in cookie/session for subsequent visits ## SEO considerations Country/language selectors help with international SEO: * Proper `hreflang` tags are generated for each market * Search engines recognize multi-market setup * Users from different regions see appropriate language/currency * Helps prevent duplicate content issues across markets Ensure your Markets are configured correctly in Shopify for best SEO results. ## Related guides <CardGroup> <Card title="Layout" icon="table-columns" href="/themes/sahara/theme-settings/layout"> Configure overall site layout including header/footer </Card> <Card title="Features" icon="sliders" href="/themes/sahara/theme-settings/features"> Enable/disable global theme features </Card> <Card title="Social Media" icon="share-nodes" href="/themes/sahara/theme-settings/social-media"> Set up social links and regional social accounts </Card> </CardGroup> ## Additional resources * [Shopify Markets Documentation](https://help.shopify.com/en/manual/markets) * [Currency Conversion Best Practices](https://help.shopify.com/en/manual/payments/currency-conversion) * [International Shipping Setup](https://help.shopify.com/en/manual/shipping/international) * [Multi-Language Stores](https://help.shopify.com/en/manual/markets/languages) # Favicon Source: https://docs.digifist.com/themes/sahara/theme-settings/favicon Configure your site favicon (browser tab icon) The favicon is the small icon appearing in browser tabs, bookmarks, and mobile home screens that represents your brand. A professional, recognizable favicon increases brand recall by 15-20% and helps customers quickly identify your store among dozens of open tabs. Upload one image and Sahara automatically generates all required sizes and formats. ## What this controls The favicon is the small icon that appears in browser tabs, bookmarks, and browser history. This setting allows you to upload a custom favicon that represents your brand and improves recognition when customers have multiple tabs open. <Tip>A professional favicon increases brand recall by 15-20% and helps customers quickly identify your store among multiple browser tabs.</Tip> ## How it works Sahara's favicon system automatically generates all required favicon sizes and formats from a single uploaded image. The theme creates: 1. **Browser tab icons** - Small icon visible in browser tabs 2. **Bookmark icons** - Icon shown in browser bookmarks/favorites 3. **Mobile home screen icons** - Icon when site is saved to mobile home screen 4. **Touch bar icons** - For devices with touch bars You upload one image, and the theme handles all technical requirements automatically. <Note>The favicon appears site-wide and is independent of your logo. While they can match, they serve different purposes and display at different sizes.</Note> ## Getting started <Steps> <Step title="Prepare favicon image"> Create or prepare an image (recommended: 512x512px, square, PNG format) </Step> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access favicon settings"> Click **Theme settings** → Select **Favicon** </Step> <Step title="Upload favicon"> Click the image picker and upload your favicon image </Step> <Step title="Preview"> Check the browser tab to see your new favicon (may require page refresh) </Step> </Steps> ## Location **Path:** Theme settings → Favicon ## Settings <Tabs> <Tab title="Favicon Image"> **Favicon**: Upload your site's favicon image. The theme automatically generates all required sizes and formats from your uploaded image. No separate files needed. **Image requirements:** * **Format:** PNG recommended (supports transparency), JPG/JPEG also supported * **Size:** Minimum 512x512px (larger is better for quality) * **Aspect ratio:** Square (1:1) - non-square images will be cropped * **File size:** Under 100KB recommended for fast loading * **Background:** Transparent or solid color <Warning>Images smaller than 512x512px may appear blurry when scaled for larger displays or high-DPI screens.</Warning> </Tab> <Tab title="Design Guidelines"> **Icon style recommendations:** **Simplified design:** * Use simple, recognizable symbols or lettermarks * Avoid complex details that disappear at small sizes * Ensure icon is distinguishable at 16x16px (actual browser tab size) **Color approach:** * Use solid, high-contrast colors for visibility * Avoid gradients (may not render well at small sizes) * Consider how icon looks on light and dark browser themes **Brand consistency:** * Match your logo's style and colors * Use same icon across all platforms (website, app, social media) * Keep favicon timeless - changing frequently confuses customers <Tip>Test your favicon by zooming out in your browser. If you can't recognize it at very small size, simplify the design.</Tip> </Tab> <Tab title="Technical Details"> **What the theme generates:** From your uploaded image, Sahara automatically creates: * `favicon.ico` (16x16, 32x32, 48x48) - Classic browser favicon * `apple-touch-icon.png` (180x180) - iOS home screen icon * `favicon-32x32.png` - Standard desktop browsers * `favicon-16x16.png` - Minimum size for older browsers * `android-chrome-192x192.png` - Android home screen * `android-chrome-512x512.png` - Android splash screen **Browser support:** All modern browsers including Chrome, Firefox, Safari, Edge, and mobile browsers. **Caching:** Browsers aggressively cache favicons. Changes may take 24-48 hours to appear for returning visitors. Clear browser cache to see updates immediately. <Note>The theme handles all technical implementation automatically. You only need to upload one image.</Note> </Tab> </Tabs> ## Use cases <CardGroup> <Card title="Logo Lettermark" icon="a"> Use your brand's first initial as the favicon. Clean, professional, and instantly recognizable. **Example:** "Sahara Store" → "S" lettermark in brand colors </Card> <Card title="Simplified Logo" icon="star"> Create a simplified version of your full logo optimized for tiny display size. **Example:** Full logo with text → Icon symbol only </Card> <Card title="Product Icon" icon="shopping-bag"> Use an icon representing your primary product category or industry. **Example:** Coffee shop → Coffee cup icon, Jewelry store → Diamond icon </Card> <Card title="Abstract Symbol" icon="shapes"> Create a unique geometric or abstract symbol that represents your brand. **Example:** Minimalist geometric pattern in brand colors </Card> </CardGroup> ## Best practices <CardGroup> <Card title="Design for tiny display" icon="magnifying-glass-minus"> Favicon appears as small as 16x16 pixels. Use bold, simple shapes, avoid text under 2-3 characters, remove fine details and thin lines. What works at 512px may be unrecognizable at 16px. </Card> <Card title="Use transparent background" icon="layer-group"> PNG with transparent background works across all browser themes. It adapts to light/dark browser modes, looks professional in all contexts, and prevents white box around icon in dark themes. </Card> <Card title="Maintain brand consistency" icon="palette"> Favicon should visually connect to your brand. Use brand colors, match logo style and aesthetic, keep consistent with other icons (social media, app). Consistency builds recognition and professionalism. </Card> <Card title="Test across browsers" icon="browsers"> Verify favicon appears correctly in Chrome, Firefox, Safari, Edge (desktop), mobile browsers (iOS Safari, Chrome, Firefox), private/incognito mode, and light/dark browser themes. What works in one browser may render differently in another. </Card> <Card title="Keep it timeless" icon="clock"> Avoid trendy designs that quickly date. Skip seasonal or promotional graphics, avoid year numbers or dates, use classic design approaches. Changing favicon frequently confuses customers and weakens brand recognition. </Card> <Card title="Optimize file size" icon="file"> Keep uploaded image under 100KB for fast loading. Compress PNG files using tools like TinyPNG, remove unnecessary metadata, balance quality with file size. Large favicon files delay initial page load unnecessarily. </Card> </CardGroup> ## Common issues <Warning> **Favicon not updating?** Browsers cache favicons aggressively. Try: 1. **Hard refresh:** Ctrl+Shift+R (Windows) or Cmd+Shift+R (Mac) 2. **Clear browser cache:** Settings → Privacy → Clear browsing data 3. **Incognito mode:** Open site in incognito/private window 4. **Different browser:** Test in browser you haven't used for the site 5. **Wait 24-48 hours:** Some browsers cache for extended periods Changes are saved immediately but may not be visible due to caching. </Warning> <Tip> **Pro tip:** Generate multiple favicon variations and test them at small sizes before finalizing. Create 3-5 options, save them at 16x16px, and see which one is most recognizable. The one that works at tiny size is your winner. </Tip> ## Design tools **Recommended tools for creating favicons:** * **Figma/Sketch:** Professional design with precise control * **Canva:** User-friendly templates for non-designers * **Favicon.io:** Online generator for simple text/icon favicons * **Adobe Illustrator:** Vector-based for scalability * **RealFaviconGenerator:** Test how favicon looks across platforms **Optimization tools:** * **TinyPNG:** Compress PNG files without quality loss * **ImageOptim:** Mac app for image optimization * **SVGOMG:** If working with SVG source files ## Technical notes * Favicon upload is global and affects entire site immediately (after browser cache clears) * The theme outputs proper `<link>` tags in `<head>` for all favicon variants * Supports transparent PNGs for overlay on browser UI colors * No coding required - fully managed through Shopify admin * Replaces Shopify's default favicon (Shopify bag icon) * Changes persist across theme updates ## Related guides <CardGroup> <Card title="Social Media" icon="share-nodes" href="/themes/sahara/theme-settings/social-media"> Configure social media links and Open Graph images </Card> <Card title="Icons" icon="icons" href="/themes/sahara/theme-settings/icons"> Customize icon styles used throughout the theme </Card> <Card title="Layout" icon="table-columns" href="/themes/sahara/theme-settings/layout"> Set up overall site layout and structure </Card> </CardGroup> # Features Source: https://docs.digifist.com/themes/sahara/theme-settings/features Configure UX enhancements including breadcrumbs, back-to-top button, currency codes, and timezone settings Features settings enable optional UX enhancements throughout your store: breadcrumb navigation for wayfinding, back-to-top button for long pages, currency code display for international clarity, and timezone configuration for accurate countdown timers. These opt-in features improve usability without cluttering your design. Enable features that benefit your specific customer base and store requirements - breadcrumbs for complex catalogs, back-to-top for content-heavy pages, currency codes for international stores. ## What this controls Features settings enable optional UX enhancements throughout your Sahara store: breadcrumb navigation for wayfinding, back-to-top button for long pages, currency code display for international clarity, and timezone configuration for accurate countdown timers. <Tip>These are opt-in/opt-out features. Enable what benefits your customers, disable what doesn't fit your store.</Tip> ## How it works Four independent feature groups: 1. **Breadcrumbs:** Navigation trails showing page hierarchy (Home > Collection > Product) 2. **Back to Top Button:** Floating button to quickly scroll to page top 3. **Currency Codes:** Display currency symbols with codes (e.g., "\$49 USD") 4. **Timezone:** Set GMT offset for countdown timer accuracy Each can be configured independently based on your store's needs. ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access features settings"> Click **Theme settings** → Select **Features** </Step> <Step title="Configure breadcrumbs"> Choose where to display navigation breadcrumbs </Step> <Step title="Enable optional features"> Turn on back-to-top button if needed, configure currency display </Step> <Step title="Set timezone"> Select your store's GMT offset for accurate countdown timers </Step> </Steps> ## Location **Path:** Theme settings → Features <img alt="features settings location" /> ## Settings <Tabs> <Tab title="Breadcrumbs"> ### Show on Product Page Display breadcrumb navigation on product pages. **Default:** Enabled **Breadcrumb Path:** Home > Collection Name > Product Name <Note>Breadcrumbs improve SEO by adding structured data to your pages and help customers understand where they are in your store.</Note> ### Show on All Other Pages Display breadcrumb navigation on collection pages, blog posts, static pages, and other pages. **Default:** Enabled **Examples:** * Collections: Home > Collections > Category Name * Blog: Home > Blog > Article Title * Pages: Home > About Us ### Breadcrumbs Alignment Controls horizontal alignment of breadcrumb navigation. **Options:** * **Start:** Left-aligned (default) * **Center:** Centered **Default:** Start <AccordionGroup> <Accordion title="When to use breadcrumbs"> **Enable Breadcrumbs If:** * Store has deep category hierarchy (3+ levels) * Large product catalog (100+ products) * Multiple collections/categories * Blog content with categories * SEO is a priority * Users need clear navigation path **Disable Breadcrumbs If:** * Single-category store (all products in one place) * Very simple site structure * Minimal design is critical * Homepage-to-product-only navigation **SEO Benefits:** * Structured data markup (JSON-LD) * Enhanced search result display (breadcrumb trail in Google) * Better site crawlability * Improved page hierarchy understanding **UX Benefits:** * Shows current location in site * One-click navigation to parent pages * Reduces "back button" spam * Lower bounce rate on deep pages </Accordion> <Accordion title="Breadcrumb alignment strategy"> **Start (Left-Aligned) - Recommended:** * **Standard web pattern:** Users expect breadcrumbs top-left * **Best for:** Most stores, traditional layouts * **Coordinates with:** Left-aligned page titles, standard navigation * **Reading flow:** Natural left-to-right reading **Center-Aligned:** * **Editorial feel:** Fashion-forward, magazine-style * **Best for:** Minimal designs, centered layouts, fashion/luxury * **Coordinates with:** Centered page titles, centered hero sections * **Caution:** Less conventional, may be less discoverable **Decision Guide:** * If page titles are left-aligned → Use Start * If page titles are centered → Use Center * If unsure → Use Start (safer default) </Accordion> <Accordion title="Breadcrumb navigation patterns"> **Product Page Breadcrumbs:** * Shows full category path * Each element is clickable * Current page (product name) not clickable **Collection Page Breadcrumbs:** * Simpler path * Helps return to all collections **Blog Post Breadcrumbs:** * Shows blog hierarchy * Can link to blog category **Static Page Breadcrumbs:** * Simple two-level path * Direct navigation to homepage </Accordion> </AccordionGroup> </Tab> <Tab title="Navigation Aids"> ### Back to Top Button Display a floating button that scrolls the page back to the top when clicked. **Default:** Disabled **Behavior:** * Appears after scrolling down the page * Fixed position (typically bottom-right corner) * Smooth scroll animation to top * Visible on all pages when enabled <Tip>Particularly useful for product pages with many reviews, long blog posts, or collection pages with hundreds of products.</Tip> <AccordionGroup> <Accordion title="When to enable back-to-top"> **Enable Back-to-Top If:** **Long Product Pages:** * Product descriptions over 500 words * 20+ customer reviews * Multiple product videos * Large image galleries (10+ images) * Extensive size charts or specifications **Content-Heavy Pages:** * Blog posts over 1000 words * FAQ pages with many questions * About Us pages with team sections **Infinite Scroll Collections:** * Collection pages that load more products on scroll * 50+ products visible without pagination **Use Case Examples:** * Mattress store: Long product specs, many reviews * Fashion blog: Long-form content articles * Electronics: Detailed technical specifications **Disable Back-to-Top If:** * Short pages (everything above the fold) * Minimal content strategy * Mobile-first design (users expect to scroll) * Prefer clean, uncluttered interface </Accordion> <Accordion title="Back-to-top button best practices"> **Positioning:** * Bottom-right corner (most common, expected location) * Fixed position (follows as user scrolls) * Doesn't obstruct content or CTAs **Visibility:** * Only appears after scrolling down (not visible at top) * Threshold usually 200-300px scroll depth * Fade in/out animation for smooth UX **Accessibility:** * Keyboard accessible (Tab to focus, Enter to activate) * Screen reader friendly label ("Back to top") * Sufficient color contrast for visibility **Mobile Considerations:** * Button size: Large enough for thumb (44×44px minimum) * Not too close to screen edge * Doesn't cover mobile navigation or CTAs **When It's Overkill:** * Pages under 2 screens of content * Already using sticky navigation * Disrupts minimalist design </Accordion> </AccordionGroup> </Tab> <Tab title="Currency Display"> ### Show Currency Codes Display currency codes alongside prices throughout the store. **Default:** Enabled **Effect:** * Enabled: "\$49.99 USD", "€39.99 EUR", "£29.99 GBP" * Disabled: "\$49.99", "€39.99", "£29.99" <AccordionGroup> <Accordion title="When to show currency codes"> **Enable Currency Codes If:** **International Selling:** * Selling to multiple countries * Using Shopify Markets * Multi-currency enabled * Customers from different regions **Ambiguous Currency Symbols:** * \$ symbol (could be USD, CAD, AUD, SGD, etc.) * £ symbol (could be GBP, EGP, SYP, etc.) * \$ especially ambiguous - 20+ countries use it **Clarity Needed:** * Running international ads * Social media followers from multiple countries * International shipping offered **Example Scenarios:** * US store selling to Canada: "\$49 USD" clarifies vs CAD * UK store with EU customers: "£29 GBP" vs "€35 EUR" * Australian store: "\$99 AUD" clarifies it's not USD **Disable Currency Codes If:** **Single Market:** * Only sell in one country * All customers use same currency * Currency symbol is unambiguous (€ for EU-only store) **Cleaner Design Preference:** * Minimal aesthetic priority * Currency is obvious from context * Already display "All prices in USD" notice </Accordion> <Accordion title="Currency codes and Shopify Markets"> **Shopify Markets Integration:** Shopify Markets automatically handles: * Currency conversion * Currency selector * Localized pricing **When to Show Codes with Markets:** * **Show:** If selling to countries with same symbol (US + Canada, UK + EU) * **Show:** During currency conversion to avoid confusion * **Hide:** If each market sees only one currency **Currency Display Patterns:** **With Currency Codes:** **Without Currency Codes:** **Best Practice:** If using multi-currency, show codes. If single currency, consider hiding for cleaner look. </Accordion> <Accordion title="Currency code formatting"> **Standard Format:** * Price before code: "\$49.99 USD" * Space between: Always included * Code after: ISO 4217 three-letter code **Where Codes Appear:** * Product cards in collections * Product page prices * Cart subtotal and total * Checkout (if theme controls) * Sale prices and compare-at prices **Localization Notes:** * Currency codes always in English (USD, EUR, GBP) * Not translated (universal standard) * Position may vary by theme implementation </Accordion> </AccordionGroup> </Tab> <Tab title="Timing"> ### Timezone (GMT) Set your store's timezone offset for accurate countdown timers. **Range:** -12 to +12 (GMT offset in hours) **Default:** 0 (GMT/UTC) **Affects:** * Countdown timers in announcement bar * Sale countdown sections * Limited-time offer timers * Flash sale displays <Warning>Incorrect timezone settings cause countdown timers to end at wrong times. Set this to match your store's business timezone.</Warning> <AccordionGroup> <Accordion title="Setting the correct timezone"> **Common Timezone Offsets:** **North America:** * **-8:** PST (Los Angeles, Seattle, Vancouver) * **-7:** MST (Denver, Phoenix, Calgary) * **-6:** CST (Chicago, Mexico City, Dallas) * **-5:** EST (New York, Toronto, Miami) **Europe:** * **0:** GMT (London, Lisbon) * **+1:** CET (Paris, Berlin, Madrid, Rome) * **+2:** EET (Athens, Helsinki, Istanbul) **Asia:** * **+5.5:** IST (India) - *Note: Sahara uses integer only, use +6* * **+8:** CST (China, Singapore, Hong Kong, Perth) * **+9:** JST (Japan, Seoul) **Oceania:** * **+10:** AEST (Sydney, Melbourne) * **+12:** NZST (Auckland) **How to Find Your Offset:** 1. Google "what is my timezone GMT offset" 2. Or: Check your city on worldtimebuddy.com 3. Count hours difference from London (GMT) </Accordion> <Accordion title="Why timezone matters"> **Use Cases for Countdown Timers:** **Flash Sales:** * "Sale ends in 3 hours" * Must end at correct local time * Example: End sale at 11:59pm store local time **Product Launches:** * "Available in 2 days" * Launch simultaneously across store * Example: Release at 9am EST **Limited Offers:** * "Offer ends tonight" * Clear deadline in store timezone **Shipping Deadlines:** * "Order in next 4 hours for same-day shipping" * Based on warehouse timezone **What Happens With Wrong Timezone:** * Timer says "3 hours left" but actually 6 hours left * Sale ends too early or too late * Customer confusion and complaints * Lost sales from unclear deadlines </Accordion> <Accordion title="Countdown timer best practices"> **Setting Timers:** 1. Set timezone BEFORE creating countdown timers 2. Test countdown by checking end time 3. Verify across different user timezones **Where Timers Appear:** * Announcement bar: "Sale ends in 2:34:15" * Product pages: "Limited time offer" * Countdown sections: Visual timer displays **Technical Details:** * JavaScript Date object uses local timezone * Your timezone setting offsets to store time * User sees countdown in their local time * But counts down to YOUR timezone's deadline **Example:** * Store timezone: EST (-5) * Sale ends: 11:59pm EST * User in PST sees: "Ends in 3 hours" (8:59pm PST) * User in GMT sees: "Ends in 5 hours" (4:59am GMT next day) **Recommendation:** Always display timezone in countdown text: "Sale ends 11:59pm EST" </Accordion> </AccordionGroup> </Tab> </Tabs> <img alt="features settings overview" /> ## Best practices 1. **Enable breadcrumbs for SEO**\ Breadcrumbs improve site structure understanding for search engines and users. Keep enabled unless minimal design is critical. 2. **Use back-to-top on long pages**\ If product pages exceed 2 screens of content or reviews, enable back-to-top button for better UX. 3. **Show currency codes for international stores**\ If selling to multiple countries or using Shopify Markets, display currency codes to avoid confusion. 4. **Set accurate timezone**\ Countdown timers depend on correct timezone. Set to your store's business hours location. 5. **Align breadcrumbs with page titles**\ If page titles are left-aligned, use start alignment. If centered, use center. 6. **Test countdown timers**\ After setting timezone, test a countdown to verify it ends at the correct time. 7. **Consider mobile for back-to-top**\ On mobile, users expect to scroll. Back-to-top is less critical but still helpful on very long pages. 8. **Coordinate with Markets strategy**\ If using Shopify Markets, showing currency codes reduces support questions about pricing. 9. **Breadcrumbs help large catalogs**\ Stores with 100+ products across multiple categories benefit most from breadcrumbs. 10. **Keep defaults for most stores**\ Sahara's defaults (breadcrumbs on, currency codes on, back-to-top off) work for most stores. ## Common use cases <AccordionGroup> <Accordion title="International e-commerce store"> **Settings:** * Breadcrumbs: **Enabled** on all pages * Breadcrumb alignment: **Start** * Back-to-top button: **Enabled** (if long product pages) * Currency codes: **Enabled** * Timezone: **Set to warehouse/HQ location** (e.g., -5 for EST) **Why:** * Breadcrumbs for navigation and SEO * Currency codes prevent confusion (USD vs CAD vs AUD) * Timezone ensures flash sales end at correct time * Back-to-top if product pages have many reviews **Best for:** Shopify Markets stores, international shipping, multi-currency </Accordion> <Accordion title="Content-heavy store (blog + products)"> **Settings:** * Breadcrumbs: **Enabled** on all pages * Breadcrumb alignment: **Center** (editorial feel) * Back-to-top button: **Enabled** * Currency codes: **Enabled or Disabled** (depends on market) * Timezone: **Set to content team location** **Why:** * Breadcrumbs help navigate blog categories * Center alignment for magazine-style aesthetic * Back-to-top essential for long blog posts * Countdown timers for content releases **Best for:** Fashion blogs, lifestyle brands, content marketing focus </Accordion> <Accordion title="Minimal/simple store"> **Settings:** * Breadcrumbs: **Disabled** * Breadcrumb alignment: N/A * Back-to-top button: **Disabled** * Currency codes: **Disabled** * Timezone: **0 (GMT)** if no countdown timers used **Why:** * Clean, uncluttered design * Simple navigation structure doesn't need breadcrumbs * Short pages don't need back-to-top * Single-market store, currency is obvious **Best for:** Small catalogs (under 50 products), single-category stores, minimal aesthetic brands </Accordion> <Accordion title="Flash sale / limited-time offer store"> **Settings:** * Breadcrumbs: **Enabled** (SEO benefit) * Breadcrumb alignment: **Start** * Back-to-top button: **Enabled** (collections with many products) * Currency codes: **Enabled** (international urgency marketing) * Timezone: **CRITICAL - set exactly to store timezone** **Why:** * Countdown timers are main feature * Timezone accuracy is business-critical * Currency codes for international flash sale ads * Back-to-top for long sale collection pages **Best for:** Daily deal sites, seasonal sales, product launch stores </Accordion> </AccordionGroup> ## Related settings * [Layout](/themes/sahara/theme-settings/layout) - Page structure affects breadcrumb placement * [Typography](/themes/sahara/theme-settings/typography) - Breadcrumb and button text styling * [Buttons](/themes/sahara/theme-settings/buttons) - Back-to-top button appearance * [Social Media](/themes/sahara/theme-settings/social-media) - Another "features" type setting *** **Need help?** Test features with your actual content. Enable breadcrumbs and browse your site, enable back-to-top and scroll long pages, verify countdown timers end at correct times. # Icons Source: https://docs.digifist.com/themes/sahara/theme-settings/icons Configure icon appearance with stroke width and corner shape settings Icon settings control the visual appearance of ALL icon elements throughout your Sahara theme with global stroke width and corner shape settings. These settings apply universally to navigation icons, cart icons, wishlist, social media, and UI indicators, creating a cohesive visual language across your entire store. Configure icon styling to coordinate with your typography weight and button styling for a harmonious, professional design system. ## What this controls Icon settings control the visual appearance of ALL icon elements throughout your Sahara theme, including navigation icons, cart icons, wishlist, social media, and UI indicators. These global settings ensure consistent icon styling across your entire store. <Note>Despite appearing in theme settings, these controls affect icons everywhere - not just buttons. Every icon in your theme follows these settings.</Note> ## How it works Sahara uses SVG stroke-based icons that adapt to two key properties: 1. **Stroke Width:** Controls icon thickness (Light/Medium/Bold) 2. **Corner Shape:** Controls whether icon corners are rounded or sharp These settings apply universally to all icons, creating a cohesive visual language. <Tip>Coordinate icon settings with your typography weight and button styling for a harmonious design.</Tip> ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access button settings"> Click **Theme settings** → Select **Buttons** (icons settings are here) </Step> <Step title="Scroll to icon settings"> Find **Icon stroke width** and **Icon corner shape** near bottom </Step> <Step title="Adjust stroke width"> Choose Light (minimal), Medium (balanced), or Bold (prominent) </Step> <Step title="Set corner shape"> Choose Rounded (soft) or Sharp (modern) </Step> </Steps> ## Location **Path:** Theme settings → Buttons → Icon settings (bottom section) <img alt="icons settings location" /> ## Settings <Tabs> <Tab title="Stroke Width"> ### Icon Stroke Width Controls the thickness of icon strokes throughout your theme. **Options:** * **Light:** Thin strokes (1px) - minimal, delicate * **Medium:** Balanced strokes (1.5px) - default, versatile * **Bold:** Thick strokes (2.5px) - prominent, accessible **Default:** Light <Warning>Stroke width affects ALL icons: navigation menu, cart, search, wishlist, arrows, social media, and UI indicators. Changing this setting updates your entire icon system.</Warning> <AccordionGroup> <Accordion title="Choosing the right stroke weight"> **Light Stroke (1px):** * **Aesthetic:** Minimal, elegant, refined * **Best for:** Luxury brands, minimal designs, spacious layouts * **Pairs with:** Light typography (font-weight 300-400), generous white space * **Visibility:** Lower contrast, subtle presence * **Caution:** May be hard to see on small screens or for users with visual impairments **Medium Stroke (1.5px):** * **Aesthetic:** Balanced, versatile, professional * **Best for:** Most stores, general e-commerce, balanced designs * **Pairs with:** Medium typography (font-weight 400-500), standard layouts * **Visibility:** Good balance of subtlety and clarity * **Recommended:** Safe default for most brands **Bold Stroke (2.5px):** * **Aesthetic:** Strong, dynamic, high-impact * **Best for:** Energetic brands, accessibility-focused sites, bold designs * **Pairs with:** Bold typography (font-weight 600-700), high-contrast designs * **Visibility:** Maximum clarity, excellent accessibility * **Accessibility:** Better for users with low vision </Accordion> <Accordion title="Stroke width by brand type"> **Luxury/Premium Brands:** * Recommended: **Light** * Examples: Jewelry, high-end fashion, luxury goods * Goal: Refined, understated elegance **Lifestyle/Fashion:** * Recommended: **Light** or **Medium** * Examples: Apparel, accessories, beauty * Goal: Modern, approachable style **General E-commerce:** * Recommended: **Medium** * Examples: Multi-category stores, marketplace sites * Goal: Clear, professional, versatile **Sports/Active:** * Recommended: **Medium** or **Bold** * Examples: Sportswear, outdoor gear, fitness * Goal: Dynamic, energetic presence **Accessibility-First:** * Recommended: **Bold** * Any store prioritizing maximum visibility * Goal: Clear, easy-to-see icons for all users </Accordion> <Accordion title="Coordinating with typography"> **Match Icon Weight to Font Weight:** **Light Typography (300-400):** * Use: **Light** icon stroke * Creates cohesive minimal aesthetic * Example: "Garamond 300" font → Light icons **Medium Typography (400-500):** * Use: **Medium** icon stroke * Balanced, professional appearance * Example: "Figtree 400" font → Medium icons **Bold Typography (600-700):** * Use: **Bold** icon stroke * Strong, impactful design * Example: "Montserrat 700" headings → Bold icons **Mixed Typography:** If using light body + bold headings: * Use **Medium** icons (compromise) * Or match icons to your primary content font weight </Accordion> </AccordionGroup> </Tab> <Tab title="Corner Shape"> ### Icon Corner Shape Controls whether icon corners and line endings are rounded or sharp. **Options:** * **Rounded:** Soft, friendly corners * **Sharp:** Angular, modern corners **Default:** Rounded <Note>This setting only affects icons with corner elements (menu bars, close X, arrows, cart). Circular icons (search, some social media) aren't affected.</Note> <AccordionGroup> <Accordion title="Rounded vs Sharp corners"> **Rounded Corners:** * **Visual effect:** Softer, friendlier, more approachable * **Technical:** Uses `stroke-linecap: round` and `stroke-linejoin: round` * **Best for:** Friendly brands, lifestyle stores, approachable aesthetic * **Coordinates with:** Rounded buttons (border-radius: 5rem) * **Examples:** Fashion, beauty, home goods, family brands **Sharp Corners:** * **Visual effect:** Modern, minimal, geometric, professional * **Technical:** Uses `stroke-linecap: square` and `stroke-linejoin: miter` * **Best for:** Tech, professional services, minimal designs * **Coordinates with:** Square buttons (border-radius: 0) * **Examples:** Tech products, B2B, corporate, modern minimal </Accordion> <Accordion title="Which icons are affected"> **Icons with Corners (Affected):** * **Menu icon:** Hamburger bars (3 lines) * **Close icon:** X shape * **Arrow icons:** Right arrow, left arrow, up arrow, down arrow * **Shopping bag:** Cart/bag icon with handles and base * **Accordion indicators:** Expand/collapse icons * **Plus/Minus icons:** Add to cart, quantity selectors **Icons WITHOUT Corners (Not Affected):** * **Search icon:** Circular magnifying glass * **Heart icon:** Wishlist (curved lines only) * **User/Profile icon:** Usually circular * **Some social icons:** Circular platforms **How to Test:** Change setting and check menu icon, cart icon, and arrow icons - these show the difference most clearly. </Accordion> <Accordion title="Coordinating with button shape"> **Match Icons to Buttons for Cohesion:** **Rounded Buttons (border-radius: 5rem):** * Use: **Rounded** icon corners * Creates consistent soft aesthetic * Everything flows together **Square Buttons (border-radius: 0):** * Use: **Sharp** icon corners * Geometric consistency * Modern, angular feel throughout **Why This Matters:** Mixing sharp icons with rounded buttons (or vice versa) creates visual dissonance. Consistent geometry throughout your design creates a more professional, intentional appearance. **Quick Check:** * Sahara default buttons: border-radius 0 (square) * Sahara default icons: Rounded * Consider: Changing icons to Sharp for full geometric consistency </Accordion> </AccordionGroup> </Tab> </Tabs> <img alt="icons settings location" /> ## Best practices 1. **Coordinate with typography weight**\ Light fonts → Light icons. Bold fonts → Bold icons. Medium is safe default. 2. **Match button corner radius**\ Rounded buttons → Rounded icons. Square buttons → Sharp icons. Consistency matters. 3. **Consider accessibility**\ Bold stroke width improves visibility for users with visual impairments. Consider for inclusive design. 4. **Test across all locations**\ Check icons in navigation, cart, product cards, footer. Ensure they work everywhere. 5. **Mobile visibility check**\ Light icons may be hard to see on mobile. Test on actual devices. 6. **Don't mix icon styles arbitrarily**\ Choose one stroke width and stick to it. Consistency creates professional appearance. 7. **Brand alignment**\ Luxury = Light + Rounded. Modern = Medium + Sharp. Bold = Bold + Sharp. 8. **Color contrast matters**\ Light stroke icons need good color contrast. Test with your color schemes. 9. **Coordinate with Sahara defaults**\ Sahara defaults: Light stroke + Rounded. If changing buttons to rounded, keep rounded icons. 10. **Preview before committing**\ Change settings in Theme Customizer, browse several pages, check all icon locations before saving. ## Common use cases <AccordionGroup> <Accordion title="Minimal luxury brand"> **Settings:** * Stroke width: **Light** * Corner shape: **Rounded** **Typography pairing:** * Heading: Garamond, weight 300-400 * Body: Thin sans-serif, weight 300-400 **Button settings:** * Primary: Outlined * Border radius: 5rem (rounded) * Text transform: None (sentence case) **Why:** Creates refined, elegant, understated aesthetic. Soft rounded corners feel approachable yet premium. Light strokes don't overwhelm minimal design. **Brand examples:** Jewelry stores, high-end fashion, luxury goods </Accordion> <Accordion title="Modern tech/minimalist"> **Settings:** * Stroke width: **Medium** * Corner shape: **Sharp** **Typography pairing:** * Heading: Sans-serif, weight 500-600 * Body: Sans-serif, weight 400 **Button settings:** * Primary: Filled or Outlined * Border radius: 0 (square) * Text transform: Uppercase **Why:** Geometric consistency. Sharp angles throughout create cohesive modern aesthetic. Medium stroke provides clarity without being heavy. **Brand examples:** Tech products, software, electronics, B2B stores </Accordion> <Accordion title="Bold dynamic brand"> **Settings:** * Stroke width: **Bold** * Corner shape: **Sharp** **Typography pairing:** * Heading: Bold sans-serif, weight 700-800 * Body: Medium sans-serif, weight 500 **Button settings:** * Primary: Filled * Border radius: 0 or 5rem * Text transform: Uppercase **Why:** Maximum impact and visibility. Bold strokes command attention. Sharp corners add energy. Strong visual hierarchy. **Brand examples:** Sports gear, streetwear, energy drinks, youth-focused brands </Accordion> <Accordion title="Friendly lifestyle brand"> **Settings:** * Stroke width: **Medium** * Corner shape: **Rounded** **Typography pairing:** * Heading: Friendly sans-serif, weight 500 * Body: Readable sans-serif, weight 400 **Button settings:** * Primary: Filled * Border radius: 5rem (rounded) * Text transform: Capitalize or None **Why:** Balanced and approachable. Rounded corners feel friendly. Medium stroke provides good visibility without aggression. Works for broad audiences. **Brand examples:** Home goods, family products, wellness, general lifestyle </Accordion> <Accordion title="Accessibility-focused"> **Settings:** * Stroke width: **Bold** * Corner shape: **Rounded** (softer for dyslexia) **Typography pairing:** * Heading: Clear sans-serif, weight 600 * Body: Readable sans-serif, weight 500 (heavier than normal) **Button settings:** * Primary: Filled (high contrast) * Border radius: 5rem * Large button size **Why:** Prioritizes visibility and clarity. Bold icons easier to see for low vision users. Rounded shapes easier to process. High contrast throughout. **Compliance:** Helps meet WCAG AA standards for visual clarity </Accordion> </AccordionGroup> ## Related settings * [Buttons](/themes/sahara/theme-settings/buttons) - Icon settings located within button settings * [Typography](/themes/sahara/theme-settings/typography) - Coordinate icon weight with font weight * [Colors](/themes/sahara/theme-settings/colors) - Icon colors come from color schemes * [Layout](/themes/sahara/theme-settings/layout) - Icon visibility affected by spacing *** **Need help?** Change icon settings and browse your entire site to see the effect. Icons appear everywhere - navigation, cart, product cards, footer - so check all locations before finalizing. # Theme Settings Source: https://docs.digifist.com/themes/sahara/theme-settings/index Global configuration options that control your Sahara theme appearance and functionality Theme Settings provide global controls that affect your entire store - from typography and colors to cart features and performance optimization. Changes made here cascade across all pages, sections, and templates, ensuring consistent design and functionality. Master these settings first to establish your store's foundation, then customize individual sections with confidence. Theme Settings provide global controls that affect your entire store. Changes made here cascade across all pages, sections, and templates, ensuring consistent design and functionality. <Tip>Think of Theme Settings as your store's foundation - configure these first before customizing individual sections.</Tip> ## Available Settings <CardGroup> <Card title="Typography" icon="text" href="/themes/sahara/theme-settings/typography"> Fonts, sizing, spacing, and text styling for headings and body text </Card> <Card title="Colors" icon="palette" href="/themes/sahara/theme-settings/colors"> Color schemes with backgrounds, text, buttons, and UI element colors </Card> <Card title="Layout" icon="grid" href="/themes/sahara/theme-settings/layout"> Page width, section spacing, grid spacing, and media overlays </Card> <Card title="Buttons" icon="square" href="/themes/sahara/theme-settings/buttons"> Button styles, shapes, text formatting, and input field styling </Card> <Card title="Social Media" icon="share-nodes" href="/themes/sahara/theme-settings/social-media"> Social profile links and product sharing options </Card> <Card title="Common Settings" icon="sliders" href="/themes/sahara/common-settings"> Shared settings used across all sections (width, spacing, borders) </Card> </CardGroup> ## Configuration Order For best results, configure theme settings in this order: <Steps> <Step title="Typography"> Start with fonts and text sizing - affects all content </Step> <Step title="Colors"> Define color schemes that sections will inherit </Step> <Step title="Layout"> Set page width and spacing that frames all sections </Step> <Step title="Buttons"> Configure button styles that appear throughout </Step> <Step title="Social Media"> Add profile links and enable sharing features </Step> </Steps> ## How Theme Settings Work <AccordionGroup> <Accordion title="Global vs Section Settings"> **Theme Settings (Global):** * Apply to entire store * Set once, affect everywhere * Examples: Fonts, page width, color schemes * Changed in: Theme Settings panel **Section Settings (Local):** * Apply to individual sections * Can override theme settings * Examples: Section color scheme, heading text * Changed in: Individual section editors **Inheritance Model:** 1. Theme Settings define defaults 2. Sections inherit these defaults 3. Sections can override when needed </Accordion> <Accordion title="Preview Before Publishing"> **Testing Process:** 1. Make changes in Theme Settings 2. Preview across multiple pages: * Homepage * Collection page * Product page * Cart page 3. Check both desktop and mobile 4. Verify changes work with images 5. Test on actual devices if possible 6. Publish when confident **Common Issues to Check:** * Color contrast (text readable on all backgrounds?) * Button visibility (clear on all schemes?) * Layout on mobile (content fits well?) * Typography readability (comfortable at all sizes?) </Accordion> <Accordion title="Resetting to Defaults"> **Individual Settings:** * No built-in reset button per setting * Refer to documentation for default values * Manually restore original values **Entire Theme:** * Use "Actions" → "Duplicate theme" * Restore from backup if available * Or reinstall theme (loses all customizations) **Best Practice:** * Duplicate theme before major changes * Document your custom values * Test changes thoroughly before publishing </Accordion> </AccordionGroup> ## Best practices 1. **Start with defaults** - Sahara's defaults are well-balanced for most stores 2. **Change one setting at a time** - Test impact before making multiple changes 3. **Maintain consistency** - Keep typography, colors, and spacing coordinated 4. **Consider mobile** - Preview all changes on small screens 5. **Test accessibility** - Ensure text contrast meets WCAG standards 6. **Document changes** - Note custom values for future reference 7. **Duplicate before major changes** - Keep backup of working configuration ## Related Documentation * [Common Settings](/themes/sahara/common-settings) - Section-level shared settings * [Sections Overview](/themes/sahara/sections/) - Individual section documentation * [Shopify Theme Customization](https://help.shopify.com/manual/online-store/themes/customize) - Official Shopify guide *** **Need help?** Changes in Theme Settings affect your entire store. Preview thoroughly before publishing, and consider duplicating your theme before making major modifications. # Layout Source: https://docs.digifist.com/themes/sahara/theme-settings/layout Configure page width, spacing, and structural settings that define your store layout Layout settings establish the foundational structure of your store, controlling how wide content displays, vertical space between sections, spacing in product grids, and overlay effects on images. These global settings create the overall visual rhythm and proportions of your site, affecting every page and section. Configure layout settings at the start of theme setup to establish consistent spacing and proportions that cascade throughout your entire storefront. ## What this controls Layout settings establish the foundational structure of your store - how wide content displays, how much space appears between sections, spacing in product grids, and overlay effects on images. These settings create the overall visual rhythm and proportions of your site. <Tip>Layout settings are global and affect your entire store. Changes here cascade to all pages and sections.</Tip> ## How it works Sahara's layout system has four main components: 1. **Page Width:** Maximum content width (never exceeds this) 2. **Spacing System:** Vertical space between sections (uses multiplier system) 3. **Grid Spacing:** Space between items in product/collection grids 4. **Media Overlays:** Gradient overlays on images to improve text readability These work together to create a cohesive, well-proportioned design. <Note>Section spacing uses a multiplier system: unit size × section level. Example: 1.6rem unit × level 4 = 6.4rem total spacing.</Note> ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access layout settings"> Click **Theme settings** (gear icon in sidebar) → Select **Layout** </Step> <Step title="Set page width"> Start with 1440px (default) - works for most modern screens </Step> <Step title="Configure spacing"> Keep section spacing unit at 1.6rem unless specific design needs </Step> <Step title="Adjust grid spacing"> 0.8rem works well for 3-4 column product grids </Step> </Steps> ## Location **Path:** Theme settings → Layout <img alt="Layout settings location" /> ## Settings <Tabs> <Tab title="Page Structure"> ### Page Width Sets the maximum width for your site's content container. Content never exceeds this width even on ultra-wide screens. **Range:** 720px – 1920px\ **Step:** 120px\ **Default:** 1440px <AccordionGroup> <Accordion title="Choosing the right page width"> **Standard Widths:** * **1200-1320px:** Compact, text-focused (blogs, documentation) * **1440px:** Default, balanced for most stores (recommended) * **1560-1680px:** Wide, visual-heavy (fashion, photography) * **1800-1920px:** Ultra-wide, requires excellent images **Consider:** * **Monitor sizes:** 1440px matches 1440p monitors (increasingly common) * **Image quality:** Wider widths need higher resolution images (2000px+ product photos) * **Content type:** Text-heavy sites benefit from narrower widths (easier reading) * **Product photography:** If you have stunning large images, go wider **Testing:** * Preview on actual large monitors (27"+) * Check if images look sharp at chosen width * Verify text line length remains comfortable (60-80 characters) </Accordion> <Accordion title="Image requirements by page width"> **1200px Page Width:** * Product images: 1600px minimum (1.33× page width) * Hero images: 2000px minimum * Grid thumbnails: 800px **1440px Page Width (Default):** * Product images: 2000px minimum (1.4× page width) * Hero images: 2400px minimum * Grid thumbnails: 1000px **1680px Page Width:** * Product images: 2400px minimum (1.43× page width) * Hero images: 2800px minimum * Grid thumbnails: 1200px **1920px Page Width:** * Product images: 2800px minimum (1.46× page width) * Hero images: 3200px minimum * Grid thumbnails: 1400px **Retina Displays:** Multiply by 2× for perfect sharpness on retina/4K screens. </Accordion> </AccordionGroup> ### Page Gutter Horizontal spacing on left and right edges of the page. Creates breathing room at screen edges. **Range:** 0 – 4.8rem\ **Step:** 0.4rem\ **Default:** 1.6rem (≈26px) <Tip>Page gutter ensures content doesn't touch screen edges. 1.6-2.4rem provides comfortable spacing without wasting screen space.</Tip> <AccordionGroup> <Accordion title="When to adjust page gutter"> **Increase to 2.4-3.2rem:** * Luxury/premium brands (creates exclusivity) * Text-heavy content (improves reading comfort) * Ultra-wide layouts (balances large width) * Minimal design aesthetic **Keep at 1.6-2.0rem (Recommended):** * Standard e-commerce * Balanced design * Most use cases **Decrease to 0.8-1.2rem:** * Maximize product grid space * Mobile-first design priority * Dense information displays **Set to 0rem:** * Full-bleed hero images * Edge-to-edge design * **Caution:** Can cause text to touch edges on mobile </Accordion> </AccordionGroup> </Tab> <Tab title="Section Spacing"> ### Section Spacing Unit Size Base unit for vertical spacing between sections. This value is multiplied by section-level spacing settings (0, 1, 2, 4, 6) to calculate final spacing. **Range:** 0.2rem – 2.4rem\ **Step:** 0.2rem\ **Default:** 1.6rem <Note>This is a **unit** setting, not the actual spacing. Actual spacing = unit × section level from individual section settings.</Note> <AccordionGroup> <Accordion title="Understanding the spacing multiplier system"> **How it Works:** **Step 1:** Set unit size here (e.g., 1.6rem)\ **Step 2:** Each section chooses spacing level (0, 1, 2, 4, 6)\ **Step 3:** Final spacing = unit × level **Example with 1.6rem unit:** * Level 0: 1.6rem × 0 = 0rem (no spacing) * Level 1: 1.6rem × 1 = 1.6rem (26px) * Level 2: 1.6rem × 2 = 3.2rem (51px) * Level 4: 1.6rem × 4 = 6.4rem (102px) * Level 6: 1.6rem × 6 = 9.6rem (154px) **Example with 2.0rem unit:** * Level 0: 0rem * Level 1: 2.0rem (32px) * Level 2: 4.0rem (64px) * Level 4: 8.0rem (128px) * Level 6: 12.0rem (192px) **Benefits:** * **Consistency:** All sections use same spacing scale * **Flexibility:** Change unit to adjust all spacing proportionally * **Visual rhythm:** Spacing levels create predictable patterns </Accordion> <Accordion title="Choosing unit size by store type"> **Compact (1.0-1.2rem):** * Dense information displays * Many short sections * News/blog sites * More content visible per screen **Standard (1.4-1.8rem) - Recommended:** * Balanced spacing * Most e-commerce stores * Clear section separation * Default 1.6rem works for 90% of stores **Spacious (2.0-2.4rem):** * Luxury/premium positioning * Fewer, larger sections * Minimal design aesthetic * Photography-focused stores **Testing:** Change unit size and preview homepage - all section spacing adjusts proportionally. </Accordion> </AccordionGroup> ### Spacing Desktop Additional spacing control for desktop devices. Works together with section spacing unit. **Range:** 0 – 4.0rem\ **Default:** 1.6rem ### Spacing Mobile Additional spacing control for mobile devices. Can be reduced to show more content on small screens. **Range:** 0 – 4.0rem\ **Default:** 1.6rem <Tip>Most stores keep desktop and mobile spacing the same (1.6rem). Reduce mobile spacing only if you need more content visible on phones.</Tip> <AccordionGroup> <Accordion title="Desktop vs mobile spacing strategies"> **Same Spacing (Recommended):** * Desktop: 1.6rem * Mobile: 1.6rem * **Why:** Consistency, simpler management, good user experience **Reduced Mobile Spacing:** * Desktop: 1.6rem * Mobile: 1.2rem * **Why:** More content visible on phones, tighter vertical space * **Use for:** Content-heavy stores, long homepages **Increased Desktop Spacing:** * Desktop: 2.0rem * Mobile: 1.6rem * **Why:** Luxury feel on large screens, standard comfort on mobile * **Use for:** Premium brands, photography stores **Caution:** Large differences (desktop 2.4rem, mobile 0.8rem) create inconsistent experience. </Accordion> </AccordionGroup> </Tab> <Tab title="Grid Spacing"> ### Grid Horizontal Space Space between columns in product grids, collection grids, and multi-column layouts. **Range:** 0.4rem – 4.0rem\ **Step:** 0.2rem\ **Default:** 0.8rem (≈13px) ### Grid Vertical Space Space between rows in product grids, collection grids, and multi-column layouts. **Range:** 0.4rem – 4.0rem\ **Step:** 0.2rem\ **Default:** 0.8rem (≈13px) <Note>Grid spacing is independent from section spacing. This only affects space between items within grids, not between sections.</Note> <AccordionGroup> <Accordion title="Grid spacing by column count"> **2 Columns (Large Product Cards):** * Horizontal: 1.2-1.6rem (more breathing room) * Vertical: 1.6-2.0rem (generous vertical space) * **Use for:** Featured products, large images **3 Columns (Standard Layout):** * Horizontal: 0.8-1.2rem (balanced) * Vertical: 0.8-1.2rem (proportional) * **Use for:** Most collection pages (default) **4 Columns (Compact Grid):** * Horizontal: 0.6-0.8rem (tighter) * Vertical: 0.8-1.0rem (readable) * **Use for:** Large catalogs, many products **5+ Columns (Dense Display):** * Horizontal: 0.4-0.6rem (minimal) * Vertical: 0.6-0.8rem (compact) * **Use for:** Swatch displays, small thumbnails </Accordion> <Accordion title="Matching grid spacing to design style"> **Tight Grid (0.4-0.6rem):** * Modern, magazine-like * Maximizes products visible * Works for small cards * Can feel crowded if overdone **Standard Grid (0.8-1.0rem) - Default:** * Balanced, professional * Clear product separation * Works for most stores * Recommended starting point **Loose Grid (1.2-1.6rem):** * Spacious, premium feel * Fewer products per screen * Each product gets more focus * Good for luxury brands **Very Loose (2.0+rem):** * Ultra-minimal aesthetic * Very few products visible * Maximum focus per item * Use sparingly </Accordion> <Accordion title="Different horizontal vs vertical spacing"> **Equal Spacing (Recommended):** * Horizontal: 0.8rem * Vertical: 0.8rem * **Effect:** Square grid cells, balanced * **Use:** Most stores **Taller Spacing:** * Horizontal: 0.8rem * Vertical: 1.6rem * **Effect:** Rows clearly separated * **Use:** Products with text-heavy cards **Wider Spacing:** * Horizontal: 1.6rem * Vertical: 0.8rem * **Effect:** Columns clearly separated * **Use:** Distinct product categories in columns **Why adjust:** Can improve readability based on card content and layout. </Accordion> </AccordionGroup> </Tab> <Tab title="Media Overlays"> ### Media Overlay Desktop Gradient overlay applied to images and videos on desktop devices. Darkens bottom of media to improve text readability. **Options:** * **No overlay:** No gradient (0% opacity) * **Normal:** Subtle darkening (25% opacity at bottom) - Default * **Semi dark:** Medium darkening (50% opacity) * **Dark:** Strong darkening (75% opacity) * **Full dark:** Complete darkening (100% opacity) **Default:** Normal (25%) ### Media Overlay Mobile Gradient overlay applied to images and videos on mobile devices. Often set darker than desktop due to smaller screens. **Options:** Same as desktop\ **Default:** Normal (25%) <Tip>Media overlays improve text readability when text appears over images. Use Normal (25%) as starting point, increase if text is hard to read.</Tip> <AccordionGroup> <Accordion title="When to use each overlay intensity"> **No Overlay (0%):** * No text over images * Dark text on light images * Image quality priority over readability * Background images without content **Normal (25%) - Default:** * Light text over mixed images * Hero sections with CTAs * Balanced readability and image visibility * **Recommended starting point** **Semi Dark (50%):** * Light text over bright images * Important text content over media * Outdoor/high-contrast photography **Dark (75%):** * Light text always clear * Small text over images * Critical information (prices, CTAs) * Very bright photography **Full Dark (100%):** * Complete text priority * Image serves as texture only * Maximum readability required * Rarely needed (often too dark) </Accordion> <Accordion title="Desktop vs mobile overlay strategies"> **Same Overlay (Most Common):** * Desktop: Normal (25%) * Mobile: Normal (25%) * **Why:** Consistency, similar readability needs **Darker Mobile:** * Desktop: Normal (25%) * Mobile: Semi dark (50%) * **Why:** Smaller screens, outdoor mobile usage * **Use:** If mobile users report readability issues **Lighter Desktop:** * Desktop: No overlay (0%) * Mobile: Normal (25%) * **Why:** Large screens show images better * **Use:** Image-focused stores, art/photography **Testing:** View hero sections on actual phones outdoors - mobile often needs darker overlays. </Accordion> <Accordion title="Overlay technical details"> **How Overlays Work:** * CSS `linear-gradient` from transparent to black * Direction: Top to bottom (180deg) * Applied as pseudo-element over media * Doesn't affect actual image file **Gradient Values:** * Normal: `rgba(0, 0, 0, 0)` → `rgba(0, 0, 0, 0.25)` * Semi: `rgba(0, 0, 0, 0)` → `rgba(0, 0, 0, 0.5)` * Dark: `rgba(0, 0, 0, 0)` → `rgba(0, 0, 0, 0.75)` * Full: `rgba(0, 0, 0, 0)` → `rgba(0, 0, 0, 1)` **Performance:** Minimal impact - CSS gradients are hardware-accelerated. **Accessibility:** Improves contrast for screen readability (WCAG benefit). </Accordion> </AccordionGroup> </Tab> </Tabs> <img alt="Layout settings overview" /> ## Best practices 1. **Start with 1440px page width**\ Works for 95% of modern monitors. Only adjust if you have specific needs (wider for photography, narrower for text). 2. **Keep page gutter at 1.6-2.4rem**\ Provides comfortable edge spacing without wasting screen space. 1.6rem (default) works for most stores. 3. **Use 1.6rem section spacing unit**\ Balanced spacing that works with all section levels (0, 1, 2, 4, 6). Only adjust if going for compact or spacious aesthetic. 4. **Match desktop and mobile spacing**\ Keep both at 1.6rem unless you have specific mobile optimization needs. 5. **0.8rem grid spacing is safe default**\ Works well for 3-4 column product grids. Adjust based on card size and column count. 6. **Use Normal (25%) media overlay**\ Improves text readability while preserving image visibility. Increase only if text is hard to read. 7. **Test on actual large monitors**\ If using wide page widths (1680px+), preview on 27"+ monitors to verify image quality. 8. **Ensure image quality matches width**\ Wider page widths require higher resolution images. See "Image requirements by page width" accordion. 9. **Maintain consistent spacing rhythm**\ Don't mix spacing strategies - choose compact, standard, or spacious and stick with it. 10. **Preview across entire store**\ Layout changes affect every page. Check homepage, collection pages, product pages, and cart before saving. ## Common use cases <AccordionGroup> <Accordion title="Standard e-commerce store (default settings)"> **Goal:** Balanced, professional layout that works for most products **Settings:** * Page width: 1440px (default) * Page gutter: 1.6rem * Section spacing unit: 1.6rem * Desktop spacing: 1.6rem * Mobile spacing: 1.6rem * Grid horizontal: 0.8rem * Grid vertical: 0.8rem * Media overlay desktop: Normal (25%) * Media overlay mobile: Normal (25%) **Image Requirements:** * Product photos: 2000px minimum * Hero images: 2400px minimum **Why it works:** Balanced proportions, comfortable spacing, works on all screens, minimal image requirements. </Accordion> <Accordion title="Fashion/photography store (wide, spacious)"> **Goal:** Showcase large, high-quality images with generous spacing **Settings:** * Page width: 1680px (wide) * Page gutter: 2.4rem (generous edges) * Section spacing unit: 2.0rem (spacious) * Desktop spacing: 2.0rem * Mobile spacing: 1.6rem (reduced for phones) * Grid horizontal: 1.2rem (room between products) * Grid vertical: 1.2rem * Media overlay desktop: No overlay (0%) - show full images * Media overlay mobile: Normal (25%) **Image Requirements:** * Product photos: 2400px minimum * Hero images: 2800px minimum **Why it works:** Images take center stage, spacious feel matches premium positioning, mobile optimized separately. </Accordion> <Accordion title="Blog/content site (narrow, readable)"> **Goal:** Maximum readability for text-heavy content **Settings:** * Page width: 1200px (narrow for comfortable reading) * Page gutter: 2.4rem (focus content) * Section spacing unit: 2.0rem (clear article separation) * Desktop spacing: 2.0rem * Mobile spacing: 1.6rem * Grid horizontal: 1.6rem (generous for featured posts) * Grid vertical: 2.0rem (vertical hierarchy) * Media overlay desktop: Semi dark (50%) - text always readable * Media overlay mobile: Semi dark (50%) **Image Requirements:** * Article images: 1600px sufficient * Hero images: 2000px **Why it works:** Narrow width keeps line length comfortable (60-80 characters), generous spacing aids scanning, overlays ensure text readability. </Accordion> <Accordion title="Large catalog store (compact, efficient)"> **Goal:** Show maximum products per screen while maintaining usability **Settings:** * Page width: 1560px (wide but not extreme) * Page gutter: 1.2rem (minimize edge waste) * Section spacing unit: 1.2rem (compact sections) * Desktop spacing: 1.2rem * Mobile spacing: 1.2rem * Grid horizontal: 0.6rem (tight grid) * Grid vertical: 0.8rem (slightly more vertical space) * Media overlay desktop: Normal (25%) * Media overlay mobile: Normal (25%) **Image Requirements:** * Product photos: 1200px (smaller cards) * Hero images: 2400px **Why it works:** Compact spacing shows more products, tight grid maximizes catalog visibility, still maintains readability. </Accordion> </AccordionGroup> ## Related settings * [Colors](/themes/sahara/theme-settings/colors) - Layout works with color schemes for visual consistency * [Typography](/themes/sahara/theme-settings/typography) - Text sizing should match page width choices * [Common Settings](/themes/sahara/common-settings) - Section widths and spacing levels apply within layout structure * [Products](/themes/sahara/theme-settings/products) - Product grid settings work with grid spacing *** **Need help?** See [Shopify's theme customization guide](https://help.shopify.com/manual/online-store/themes/customize) or test layout changes in preview mode before publishing. # Performance Source: https://docs.digifist.com/themes/sahara/theme-settings/performance Optimize site speed with image compression, animation control, and fine-tuning settings Performance settings optimize your store's loading speed and rendering behavior through image compression, mobile animation control, and layout fine-tuning for custom header configurations. Better performance directly impacts conversion rates - a 1-second improvement in page load time can increase conversions by 7% and improve Core Web Vitals scores for SEO rankings. Configure these performance settings early to balance speed, quality, and user experience across all devices and connection speeds. ## What this controls Performance settings optimize your store's loading speed and rendering behavior. Control image compression for faster loads, disable animations on mobile for better compatibility, and fine-tune layout calculations for custom header configurations. <Tip>Better performance = higher conversion rates. A 1-second improvement in page load time can increase conversions by 7%.</Tip> ## How it works Three optimization layers: 1. **Image Optimization:** Compress images for faster loading vs preserve maximum quality 2. **Animation Control:** Disable motion effects on mobile for older device support 3. **Fine Tuning:** Adjust header height for accurate full-height section calculations Each setting balances speed, quality, and user experience. <Note>These settings affect Core Web Vitals scores, which impact SEO rankings and user experience.</Note> ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access performance settings"> Click **Theme settings** → Select **Performance** </Step> <Step title="Choose image optimization"> Select Optimized (faster) or Best detailed (higher quality) </Step> <Step title="Configure mobile animations"> Enable/disable animations on mobile devices </Step> <Step title="Test and measure"> Use Google PageSpeed Insights to verify improvements </Step> </Steps> ## Location **Path:** Theme settings → Performance <img alt="Performance settings location" /> ## Settings <Tabs> <Tab title="Image Optimization"> ### Image Optimization Choose between image compression for speed or original quality for detail. **Options:** * **Optimized:** Compressed images, faster loading (recommended) * **Best detailed:** Original quality, larger files **Default:** Optimized <Warning>This affects ALL images in your store: products, collections, sections, blog posts. Changing this setting impacts every page.</Warning> <AccordionGroup> <Accordion title="Optimized vs Best detailed"> **Optimized (Recommended for Most Stores):** **Benefits:** * **30-50% smaller file sizes** (e.g., 500KB → 200KB) * **20-30% faster page loads** * Better Core Web Vitals scores (LCP, FID) * Lower bandwidth costs * Better mobile experience * Improved SEO (page speed is ranking factor) **Trade-offs:** * Slight quality reduction (usually imperceptible) * Fine details may be softer * Heavy compression artifacts if source images are already compressed **Best for:** * Most e-commerce stores * Mobile-first audiences * International traffic (slower connections) * Large product catalogs (100+ products) * Performance-focused brands **Best Detailed:** **Benefits:** * **Maximum image quality** (original uploaded quality) * Fine details preserved * No compression artifacts * Best for high-resolution product photography **Trade-offs:** * **2-3x larger file sizes** (e.g., 200KB → 600KB) * 20-30% slower page loads * Poor mobile performance on slow connections * Higher bandwidth costs * Lower Core Web Vitals scores **Best for:** * Luxury brands where image quality is critical * Jewelry stores (fine detail matters) * Art/photography sales (quality is product) * Textile/fabric stores (texture detail important) * Audiences with fast connections only </Accordion> <Accordion title="Performance impact analysis"> **Page Load Time Impact:** **Example Product Page (10 images):** **Optimized:** * Total image size: \~2MB * LCP (Largest Contentful Paint): 1.5s * Full page load: 3.0s * Mobile 4G load: 5.0s **Best Detailed:** * Total image size: \~6MB * LCP: 3.0s * Full page load: 6.0s * Mobile 4G load: 12.0s **Conversion Impact:** Research shows: * 1s delay = 7% reduction in conversions * Best detailed adds 3s = \~20% conversion drop * Only use if image quality truly increases sales **Core Web Vitals Scores:** **Optimized:** * LCP: Good (under 2.5s) * CLS: Good (proper dimensions) * FID: Good (faster image processing) **Best Detailed:** * LCP: Needs improvement (over 2.5s) * May affect mobile usability score * Lower PageSpeed Insights score </Accordion> <Accordion title="Decision framework"> **Use Optimized If:** **Performance Priority:** * Page speed is top concern * Targeting mobile users (60%+ of traffic) * International audience with varied connection speeds * Want better SEO (Core Web Vitals matter) **Product Type:** * Apparel/fashion (general) * Electronics * Home goods * Beauty products (bottles/packaging) * Books, media **Business Model:** * High-volume sales * Impulse purchases * Browse-heavy stores **Use Best Detailed If:** **Quality Priority:** * Image quality directly impacts purchase decision * Product details are complex and intricate * Photography is primary sales tool * Luxury brand positioning **Product Type:** * Fine jewelry (details matter) * Art prints/photography (quality is product) * High-end watches (intricate details) * Luxury textiles (fabric texture visible) * Custom/handmade items (craftsmanship details) **Audience:** * Desktop-primarily audience * Fast connection markets only * Users who zoom in on images **Quick Test:** Try Optimized first. If customers complain about image quality, switch to Best detailed. Most stores won't notice quality difference but will see speed improvement. </Accordion> <Accordion title="Image optimization best practices"> **Regardless of Setting, Upload Properly:** **Image Requirements:** * Minimum 2000px wide for product images * JPG for photos, PNG for graphics/transparency * sRGB color space * Don't pre-compress before uploading **Photography Tips:** * Shoot in good lighting * Use consistent white balance * Avoid over-sharpening (compression amplifies artifacts) * Center important details (compression affects edges more) **Testing:** 1. Enable Optimized 2. Test on mobile device (4G connection) 3. Check PageSpeed Insights score 4. Visually inspect product images (zoom in) 5. If quality is unacceptable, switch to Best detailed 6. Re-test performance **Alternative Solutions:** * Use fewer images per page (if speed is critical) * Lazy load images below the fold * Use progressive JPEGs (loads blurry then sharp) </Accordion> </AccordionGroup> </Tab> <Tab title="Animations"> ### Disable Animations on Mobile Turn off animation effects on mobile devices for better performance on older phones. **Default:** Disabled (animations work on mobile) **Effect:** * **Unchecked (default):** Animations work on mobile (smooth transitions, fade-ins, parallax) * **Checked:** Animations removed on mobile (instant transitions, no motion) <Note>Desktop animations always work regardless of this setting. Only mobile is affected.</Note> <AccordionGroup> <Accordion title="What animations are affected"> **Animations That Get Disabled:** **Scroll Animations:** * Fade-in on scroll effects * Slide-in from side/bottom * Elements appearing as you scroll **Parallax Effects:** * Background images moving at different speeds * Layered scroll depth effects **Entrance Animations:** * Section fade-ins on page load * Staggered element appearances **Transition Effects:** * Smooth transitions between states * Hover effects (on mobile tap) * Image lazy-load animations **Animations NOT Affected:** * Essential UI animations (cart drawer opening) * Loading spinners * Product image zoom * Required interactions * Desktop animations (still work) </Accordion> <Accordion title="When to disable animations"> **Enable Disabling (Check Box) If:** **Performance Issues:** * Targeting older mobile devices * Emerging markets (older Android phones) * Performance complaints from mobile users * PageSpeed Insights shows mobile performance issues **Audience Demographics:** * Lower-income markets (older devices) * International audience (varied device quality) * Budget-conscious customers **Accessibility:** * Users with motion sensitivity * Vestibular disorders (animations cause nausea) * WCAG compliance focus (reduced motion) **Business Model:** * Fast checkout is critical (no distractions) * Older demographic (prefer simple interfaces) **Keep Animations (Uncheck Box) If:** **Modern Audience:** * Targeting newer devices (iPhone 12+, modern Android) * Premium/luxury market (expect polished UX) * Tech-savvy audience **Brand Identity:** * Animations are part of brand experience * Premium/modern positioning * Interactive product demonstrations **Most Stores:** * Modern mobile devices handle animations well * Animations improve perceived quality * Smooth UX is expected today </Accordion> <Accordion title="Performance impact of animations"> **Animation Performance Cost:** **With Animations (Default):** * Smooth, polished feel * 10-15% CPU usage increase on scroll * Slightly higher battery consumption * May lag on phones 3+ years old * 60fps on modern devices, 30-45fps on older **Without Animations:** * Instant, snappy transitions * Minimal CPU usage * Better battery life * No lag on any device * Perceived as "fast" but "plain" **Real-World Impact:** * iPhone 13/14/15: No noticeable difference (animations run smoothly) * iPhone X/11/12: Slight performance gain without animations * iPhone 8 and older: Significant improvement without animations * Modern Android (2022+): Smooth with animations * Budget Android (2020 or older): Much better without animations **User Experience Trade-off:** * Modern users expect animations (feels premium) * Older device users prefer speed over polish * Consider your audience's device upgrade cycle </Accordion> <Accordion title="Accessibility and reduced motion"> **Accessibility Benefits of Disabling:** **Motion Sensitivity:** * \~35% of users prefer reduced motion * Vestibular disorders triggered by parallax/scrolling effects * Motion sickness from animations **WCAG Guidelines:** * Success Criterion 2.3.3: Animation from Interactions (Level AAA) * Recommends respecting `prefers-reduced-motion` media query * Disabling animations helps meet this **How Sahara Handles It:** * When disabled: Instant transitions (no motion) * Users with motion sensitivity get better experience * Still functional, just not animated **Best Practice:** * If targeting accessibility-conscious audience, disable animations * Or test if theme respects `prefers-reduced-motion` (ask developer) * Provide option for users to disable in UI (advanced) </Accordion> </AccordionGroup> </Tab> <Tab title="Fine Tuning"> ### Default Header Height Set expected header height for accurate full-height section calculations. **Default:** 94 pixels **Input type:** Number (pixels) <Warning>This is an advanced setting for developers. Only adjust if you've customized header height via CSS or code. Incorrect values cause full-height sections to miscalculate.</Warning> <AccordionGroup> <Accordion title="What header height controls"> **Purpose:** Full-height sections (hero sections set to "Full height") need to know header height to calculate visible area correctly. **Calculation:** **Example:** * Viewport height: 800px * Header height: 94px * Section displays at: 800 - 94 = 706px **Without Correct Value:** * Section too tall: Content hidden behind header * Section too short: White space below section **Where This Matters:** * Full-height hero sections * Video sections set to full viewport * Landing page sections * Sections with "Full height" option enabled </Accordion> <Accordion title="When to adjust header height"> **Default Works If:** * Using standard Sahara header (no modifications) * Default logo size * No custom CSS affecting header **Adjust If:** **Larger Logo:** * Logo increases header from 94px to 120px * Set value to 120 **Custom Header CSS:** * Developer modified header height * Measure actual header height in browser inspector * Set to measured value **Announcement Bar Confusion:** * Note: Announcement bar is SEPARATE from header * Header height is just header, not including announcement bar * Theme handles announcement bar separately **Sticky Header Mode:** * Sticky header may be shorter than default header * Set to sticky header height if always sticky * Or leave at default (full header height) **How to Measure:** 1. Open your store in browser 2. Right-click header → Inspect 3. Find header element height in computed styles 4. Enter that pixel value here </Accordion> <Accordion title="Troubleshooting full-height sections"> **Problem: Content Hidden Behind Header** **Symptoms:** * Hero section title cut off at top * Button hidden behind fixed header * Content starts too high **Solution:** * Header height set too low * Increase value by 10-20px at a time * Test until content visible **Problem: White Space Below Section** **Symptoms:** * Gap between hero section and next section * Section doesn't reach bottom of viewport * Looks incomplete **Solution:** * Header height set too high * Decrease value by 10-20px at a time * Test until section fills viewport **Problem: Mobile vs Desktop Height Different** **Issue:** * Header height changes between mobile and desktop * One value doesn't work for both **Solution:** * Set to desktop header height (mobile usually same) * Or use CSS custom property override (developer task) * Sahara typically has same header height on both **Testing:** 1. Change header height value 2. Navigate to page with full-height hero section 3. Check if content aligns properly 4. Test on both desktop and mobile 5. Adjust as needed </Accordion> </AccordionGroup> </Tab> </Tabs> <img alt="Performance settings overview" /> ## Best practices 1. **Use Optimized images for most stores**\ 30-50% file size reduction with minimal quality loss. Better performance = higher conversions. 2. **Test with PageSpeed Insights**\ Measure impact before/after changes. Target 90+ on mobile for best SEO. 3. **Keep animations enabled for modern audiences**\ Most users (60%+) have devices that handle animations smoothly. Disable only if targeting older devices. 4. **Don't touch header height unless customizing**\ Default 94px works for standard Sahara. Only adjust if you've modified header CSS. 5. **Prioritize mobile performance**\ 60-70% of traffic is mobile. Optimize for mobile-first, desktop will follow. 6. **Consider your product type**\ Jewelry/art needs Best detailed. Fashion/electronics can use Optimized. 7. **Monitor Core Web Vitals**\ Google Search Console shows real-world performance. Aim for "Good" ratings. 8. **Test image quality after optimization**\ Visually inspect product images on mobile. If quality is unacceptable, switch to Best detailed. 9. **Balance quality and speed**\ Conversion rate drops 7% per second of load time. Weigh quality vs speed for your market. 10. **Use optimized images + disable animations for maximum speed**\ If targeting emerging markets or older devices, combine both for best performance. ## Common use cases <AccordionGroup> <Accordion title="Standard e-commerce store"> **Settings:** * Image optimization: **Optimized** * Disable animations on mobile: **Unchecked** (animations work) * Default header height: **94px** (default) **Why:** * Optimized images for fast loading without sacrificing quality * Animations for modern polished UX * Default header height works without customization **PageSpeed Target:** 85-95 mobile, 95-100 desktop **Best for:** Fashion, electronics, home goods, beauty, general retail </Accordion> <Accordion title="Luxury/high-end store"> **Settings:** * Image optimization: **Best detailed** * Disable animations on mobile: **Unchecked** (animations work) * Default header height: **94px** (default) **Why:** * Maximum image quality for fine details and premium presentation * Smooth animations reinforce luxury positioning * Accept slower load times for quality **Trade-off:** PageSpeed 60-75 mobile, 85-95 desktop (still acceptable) **Best for:** Fine jewelry, luxury watches, art/photography sales, high-end fashion, custom/handmade </Accordion> <Accordion title="Mobile-first / emerging markets"> **Settings:** * Image optimization: **Optimized** * Disable animations on mobile: **Checked** (animations off) * Default header height: **94px** (default) **Why:** * Maximum performance for slower connections * No animations for older devices (common in emerging markets) * Fast, functional experience prioritized **PageSpeed Target:** 90-100 mobile, 95-100 desktop **Best for:** International stores, budget-focused audiences, older demographics, accessibility-first brands </Accordion> <Accordion title="Custom-designed store"> **Settings:** * Image optimization: **Optimized** * Disable animations on mobile: **Unchecked** (animations work) * Default header height: **Custom value** (measure actual header) **Why:** * Custom header CSS requires adjusted height value * Optimized images unless custom photography demands quality * Animations match custom design intent **Setup:** * Measure header height with browser inspector * Set exact pixel value * Test full-height sections **Best for:** Stores with custom header designs, unique layouts, developer-customized themes </Accordion> </AccordionGroup> ## Related settings * [Products](/themes/sahara/theme-settings/products) - Product images affected by optimization * [Layout](/themes/sahara/theme-settings/layout) - Header height interacts with layout calculations * [Features](/themes/sahara/theme-settings/features) - Back-to-top button animation affected by mobile animation setting *** **Need help?** Test your store with Google PageSpeed Insights before and after changes. Measure real impact on Core Web Vitals and adjust accordingly. Most stores should use Optimized images and keep animations enabled. # Predictive Search Source: https://docs.digifist.com/themes/sahara/theme-settings/predictive-search Configure instant search results as customers type Predictive search displays instant results as customers type their query, eliminating the need to submit forms or wait for full page loads. This real-time feedback helps customers find products faster with fewer keystrokes, increasing search-to-purchase conversion by 40-60%. Enable it to match the search experience customers expect from major e-commerce platforms. ## What this controls Predictive search enables instant search results that appear as customers type their query, without requiring them to submit the search form. This creates a faster, more engaging search experience by showing relevant products, collections, and pages in real-time. <Tip>Enabling predictive search can increase search-to-purchase conversion by 40-60% by helping customers find products faster with fewer keystrokes.</Tip> ## How it works When predictive search is enabled: 1. **Customer starts typing** in the search box (e.g., "blue sh...") 2. **Results appear instantly** below the search input as they type 3. **Results update live** with each additional character 4. **Customer clicks result** to go directly to product/page (or presses Enter to see all results) The system searches across: * **Product titles** and descriptions * **Collection names** * **Page content** (about, FAQ, etc.) * **Article titles** (blog posts) Results are ranked by relevance, showing the most likely matches first. <Note>Predictive search requires a working internet connection and modern browser. On slow connections, it may delay slightly as results load.</Note> ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access predictive search settings"> Click **Theme settings** → Select **Predictive search** </Step> <Step title="Enable predictive search"> Check the box to enable predictive search functionality </Step> <Step title="Test the feature"> Open your store preview and try typing in the search box </Step> <Step title="Monitor performance"> Test on various devices and connection speeds to ensure responsive performance </Step> </Steps> ## Location **Path:** Theme settings → Predictive search ## Settings <Tabs> <Tab title="Enable/Disable"> **Enable predictive search**: Turn instant search results on or off. **Default:** Enabled **When enabled:** * Search results appear as customers type (after 2-3 characters) * Results update in real-time with each keystroke * Shows products, collections, pages, and articles * Customers can click results directly without submitting search * "View all results" link appears to see full search page **When disabled:** * Search works traditionally - customer types and presses Enter * Results only show after submitting the search form * Navigates to dedicated search results page * Simpler implementation, works without JavaScript <Warning>Disabling predictive search may reduce search engagement and conversion rates. Most modern e-commerce sites use predictive search as standard.</Warning> </Tab> <Tab title="How It Displays"> **Search dropdown appearance:** * **Products:** Shows product image, title, price, and variants * **Collections:** Collection name with product count * **Pages:** Page title (About, FAQ, Policies, etc.) * **Articles:** Blog post titles with date **Result limits:** * Typically shows 4-6 products per search * 2-3 collections, pages, or articles * "View all X results" button to see complete results * Grouped by content type for easy scanning **Visual design:** * Dropdown appears directly below search input * Semi-transparent overlay dims background * Clicking outside dropdown closes it * Keyboard navigation supported (arrow keys, Enter) <Note>Search dropdown styling inherits from your color scheme settings. Adjust in Theme settings → Colors if needed.</Note> </Tab> <Tab title="Performance"> **How predictive search works technically:** **Search triggering:** * Waits until customer types 2+ characters (prevents too many searches) * Debounces by 300ms (waits until customer pauses typing) * Cancels previous search if customer keeps typing * Reduces server load while maintaining responsiveness **Result caching:** * Recent searches are cached temporarily * Repeat searches load instantly from cache * Cache clears when customer navigates away * Improves performance for common searches **Network optimization:** * Results are fetched asynchronously (doesn't block page) * Uses AJAX for fast, page-load-free results * Compressed JSON response for smaller data transfer * Loading indicator shows while fetching results <Tip>For stores with 1000+ products, predictive search is especially valuable - helps customers narrow down to relevant products quickly.</Tip> </Tab> </Tabs> ## Use cases <CardGroup> <Card title="Large Catalog Stores" icon="boxes-stacked"> Stores with 100+ products where browsing is overwhelming. **Benefit:** Customers find specific products instantly without browsing collections.\ **Example:** Electronics store with 500 SKUs </Card> <Card title="Specific Intent Shopping" icon="bullseye"> When customers know exactly what they want and search by name. **Benefit:** Fastest path from search to product page, skipping intermediary steps.\ **Example:** "Nike Air Max" search shows exact shoe models </Card> <Card title="Return Customers" icon="rotate"> Customers returning to purchase previously viewed items. **Benefit:** Quick re-finding of products by name or SKU.\ **Example:** "Blue ceramic mug" to find specific item from last visit </Card> <Card title="Mobile Shoppers" icon="mobile"> Mobile customers preferring search over navigation menu. **Benefit:** Faster than browsing on small screens.\ **Example:** tapping search and typing beats opening menus and scrolling </Card> </CardGroup> ## Best practices <CardGroup> <Card title="Keep predictive search enabled" icon="toggle-on"> Unless you have specific technical constraints, enable predictive search. Modern shopping expectation - customers expect instant results, reduces friction in product discovery, increases search usage and engagement. Only disable for very small catalogs (\<20 products) where browsing is easier. </Card> <Card title="Optimize product titles" icon="text"> Predictive search matches against product titles primarily. Include brand names ("Nike Air Max" not just "Air Max"), use common terms customers search for, add relevant keywords naturally, include color/size/variant if frequently searched. Well-optimized titles = better predictive search results. </Card> <Card title="Test search on mobile devices" icon="mobile-screen"> Predictive search experience differs significantly on mobile. Dropdown should cover most of screen, touch targets large enough for fingers (min 44px), keyboard doesn't obscure results, easy to dismiss and return to browsing. Mobile is where predictive search provides most value. </Card> <Card title="Monitor search analytics" icon="chart-line"> Track what customers search for to improve product discovery. Use Shopify's search analytics to see top queries, identify searches returning no results to add those products, look for misspellings and add product tags, track click-through to optimize relevance. Search data reveals gaps. </Card> <Card title="Use product tags strategically" icon="tags"> Predictive search includes product tags in results. Add common search terms as tags ("vegan", "organic", "waterproof"), include brand names if not in title, add category/use-case tags ("running shoes", "gift ideas"), use tags for synonyms (both "sofa" and "couch"). Tags expand searchability beyond title/description. </Card> <Card title="Combine with search filters" icon="filter"> Predictive search gets customers started, filters refine results. Predictive narrows from 1000 products to 50, filters narrow from 50 to exactly what customer wants. Design search and filter to work together seamlessly. They're complementary features, not alternatives. </Card> </CardGroup> ## Common issues <Warning> **Predictive search not working?** Checklist: 1. **Setting enabled:** Verify "Enable predictive search" is checked in Theme settings 2. **JavaScript enabled:** Predictive search requires JavaScript in browser 3. **Minimum characters:** Type at least 2-3 characters before results appear 4. **Cache issues:** Clear browser cache or test in incognito mode 5. **Products published:** Ensure products are published to online store channel 6. **Search app conflicts:** Disable third-party search apps if testing theme search If still not working, check browser console for JavaScript errors. </Warning> <Tip> **Pro tip:** Use Shopify's search analytics to see which searches return no results. These are opportunities to add new products or adjust product titles/tags to match customer language. </Tip> ## Performance considerations **Impact on site speed:** * Minimal impact when optimally configured * Searches are asynchronous (don't block page rendering) * Results are lazy-loaded only when search is used * Debouncing prevents excessive server requests **For large catalogs:** * Shopify limits results to maintain performance * Only most relevant results are returned * Full catalog search happens only on search results page * Recommend products have clear, unique titles for best matching **Network dependency:** * Requires internet connection (doesn't work offline) * Slow connections may delay results slightly * Loading indicator shows while waiting for results * Gracefully degrades - if fails, standard search still works ## Accessibility features Sahara's predictive search includes built-in accessibility: * **Keyboard navigation:** Arrow keys navigate results, Enter selects, Esc closes * **Screen reader support:** Results announced as they update * **Focus management:** Focus moves to results when they appear * **ARIA labels:** Proper labels for search landmarks and regions * **High contrast:** Results readable in all color modes <Note>Predictive search meets WCAG 2.1 Level AA accessibility standards automatically.</Note> ## Technical notes * Predictive search uses Shopify's native Search & Discovery app backend * Results update after 300ms typing pause (debounced) * Searches trigger at 2+ characters minimum * Results include up to 10 products, 5 collections, 5 pages by default * Search works across all published content (products, collections, pages, blog) * No-results state shows helpful message and suggestions ## Regional considerations For international stores: * Search results respect customer's selected market/language * Translated product titles are searched in customer's language * Currency in results matches customer's region * Predictive search works with Shopify Markets automatically ## Related guides <CardGroup> <Card title="Features" icon="sliders" href="/themes/sahara/theme-settings/features"> Configure other global theme features </Card> <Card title="Products" icon="box" href="/themes/sahara/theme-settings/products"> Optimize product display in search results </Card> <Card title="Performance" icon="gauge-high" href="/themes/sahara/theme-settings/performance"> Monitor and optimize overall theme performance </Card> </CardGroup> ## Additional resources * [Shopify Search & Discovery App](https://help.shopify.com/en/manual/online-store/search-and-discovery) * [Search SEO Best Practices](https://help.shopify.com/en/manual/promoting-marketing/seo/search-engine-optimization) * [Product Organization](https://help.shopify.com/en/manual/products/organize) * [Analytics & Reports](https://help.shopify.com/en/manual/reports-and-analytics) # Products Source: https://docs.digifist.com/themes/sahara/theme-settings/products Configure product card display, swatches, quick add functionality, and badge styling Product settings determine how products appear on collection pages, search results, and product grids throughout your store with global controls for card layout, swatches, quick add functionality, and badge styling. Optimized product card design significantly impacts browse-to-purchase conversion and can increase add-to-cart rates by 20-30% through better visual presentation and reduced friction. Configure these product settings to create an effective, consistent browsing experience across your entire catalog. ## What this controls Product settings determine how products appear on collection pages, search results, and product grids throughout your store. These global settings ensure consistent presentation while allowing flexibility for different product types. <Tip>Product card design significantly impacts browse-to-purchase conversion. Optimized settings can increase add-to-cart rates by 20-30%.</Tip> ## How it works Sahara's product system has four main components: 1. **Product Cards:** Layout and image display settings 2. **Swatches:** Color/variant visualization on cards 3. **Quick Add:** Add to cart directly from collection pages 4. **Badges:** Visual indicators (Sale, New, etc.) These work together to create an effective product browsing experience. <Note>Settings here apply to product cards globally. Individual sections may have additional card-specific options.</Note> ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access product settings"> Click **Theme settings** → Select **Products** </Step> <Step title="Configure card layout"> Choose image ratio and layout density </Step> <Step title="Enable swatches"> Turn on color swatches for variant visualization </Step> <Step title="Set quick add behavior"> Choose how customers add products from collections </Step> </Steps> ## Location **Path:** Theme settings → Products <img alt="Product settings location" /> ## Settings <Tabs> <Tab title="Card Layout"> ### Card Product Layout Controls spacing and density of content within product cards. **Options:** * **Standard:** Comfortable spacing, full product information * **Compact:** Tighter spacing, shows more products per screen **Default:** Standard <AccordionGroup> <Accordion title="Standard vs Compact comparison"> **Standard Layout:** * Generous padding around content * Larger product titles * More breathing room * Better for premium/luxury positioning * Shows 3-4 products per row (desktop) **Compact Layout:** * Reduced padding * Smaller text elements * Maximizes products visible * Better for large catalogs * Shows 4-5 products per row (desktop) **Choose Standard If:** * Premium or luxury brand * Detailed product information needed * Products have long titles * Want spacious, uncluttered feel **Choose Compact If:** * Large product catalog (100+ products) * Need to show many products per screen * Minimal product information * Fashion/fast-fashion store </Accordion> </AccordionGroup> ### Card Product Image Ratio Forces consistent aspect ratio across all product card images. **Options:** * **Adapt to image:** Uses original image proportions (auto height) * **Square:** 1:1 ratio (100%) * **Portrait:** 3:4 ratio (136.54%) - Default **Default:** Portrait <Tip>Consistent image ratios create cleaner grids. Portrait (3:4) works well for most fashion, accessories, and packaged products.</Tip> <AccordionGroup> <Accordion title="Choosing the right image ratio"> **Adapt to Image (Auto):** * **Pros:** Shows entire image, no cropping * **Cons:** Inconsistent grid, ragged bottom edges * **Best for:** Mixed product types, editorial stores * **Requires:** Consistent photography across products **Square (1:1):** * **Pros:** Clean, modern grid; works on Instagram-style feeds * **Cons:** May crop tall products * **Best for:** Products that photograph well from above * **Examples:** Jewelry, watches, shoes (top-down), food **Portrait (3:4) - Default:** * **Pros:** Fits most product photography; vertical space for tall items * **Cons:** May crop very wide products * **Best for:** Apparel, accessories, bottles, packaged goods * **Examples:** Clothing, cosmetics, electronics, books **Image Requirements:** * Square: Minimum 1000×1000px * Portrait: Minimum 1000×1365px * Always upload 2× resolution for retina displays </Accordion> <Accordion title="Image ratio by product type"> **Fashion/Apparel:** * Recommended: Portrait (3:4) * Shows full garment * Allows model shots **Jewelry/Accessories:** * Recommended: Square (1:1) * Clean, Instagram-ready * Product centered **Home Goods:** * Recommended: Adapt to image * Mixed product sizes * Lifestyle photography varies **Electronics:** * Recommended: Square (1:1) * Product-focused shots * Consistent sizing **Beauty/Cosmetics:** * Recommended: Portrait (3:4) * Bottle/package oriented * Vertical emphasis </Accordion> </AccordionGroup> ### Card Product Media Object Fit Controls how images fill the aspect ratio container. **Options:** * **Cover:** Fills entire space, may crop edges * **Contain:** Shows entire image, may have empty space **Default:** Cover <Warning>Cover crops images to fill space. Ensure important product details (faces, logos) are centered in photos.</Warning> <AccordionGroup> <Accordion title="Cover vs Contain behavior"> **Cover (Default):** * **Behavior:** Image fills entire container, crops overflow * **Effect:** No white space, full-bleed images * **Best when:** Images slightly taller/wider than ratio * **Caution:** May cut off text or important details **Contain:** * **Behavior:** Shows entire image, adds space if needed * **Effect:** White/background-color bars (letterboxing) * **Best when:** Exact image ratio match is critical * **Caution:** Creates empty space on cards **Photography Tips:** * For Cover: Center important elements, leave crop margin * For Contain: Ensure consistent aspect ratios in photography * Test both settings with your actual product photos </Accordion> </AccordionGroup> ### Card Product Image Hover Shows secondary product image on hover. **Default:** Disabled (false) <Tip>Hover images increase engagement and reduce product page visits for quick browsing. Use meaningful second images (back view, alternate angle, in-use shot).</Tip> <AccordionGroup> <Accordion title="Hover image best practices"> **Effective Second Images:** * **Back view:** If first is front (apparel) * **Alternate angle:** Side or detail shot * **In-use shot:** Product being worn/used * **Color variant:** Show different colorway * **Close-up:** Detail of texture/material **Avoid:** * Random unrelated image * Same image from slightly different angle * Lower quality than primary image * Different product entirely **Technical Requirements:** * Upload as 2nd image in product media * Same aspect ratio as primary * Consistent across all products (or disable feature) **When to Enable:** * Apparel stores (front/back views) * Products with interesting details * Multiple angles add value **When to Disable:** * Single-angle products * Inconsistent photography * Mobile-first audience (hover doesn't work) </Accordion> </AccordionGroup> </Tab> <Tab title="Swatches & Variants"> ### Enable Product Swatches Displays color/variant swatches on product cards. **Default:** Enabled (true) <Note>Swatches only appear for products with color variants. Variant option name must include "color" or "colour" (case-insensitive).</Note> ### Show Product Swatches Always Controls swatch visibility behavior. **Options:** * **No:** Swatches appear on hover only (default) * **Only mobile:** Always visible on mobile, hover on desktop * **Desktop and mobile:** Always visible on all devices **Default:** No (hover only) <AccordionGroup> <Accordion title="Swatch visibility strategy"> **Hover Only (Default):** * **Pros:** Cleaner cards, less visual clutter * **Cons:** Discoverability lower, requires interaction * **Best for:** Minimal design, few color options per product **Always Visible (Mobile Only):** * **Pros:** Touch-friendly, no hover on mobile * **Cons:** Inconsistent between devices * **Best for:** Mobile-first stores **Always Visible (All Devices):** * **Pros:** Maximum discoverability, immediate color selection * **Cons:** Can clutter cards, distracting if many colors * **Best for:** Fashion stores, products where color is primary decision factor **Recommendation:** * **1-3 colors per product:** Hover only (clean) * **4-6 colors:** Always visible mobile, hover desktop * **7+ colors:** Always visible all devices (or redesign - too many options) </Accordion> <Accordion title="Setting up color swatches"> **Requirements:** 1. Product must have variant option named "Color" or "Colour" 2. Variant values become swatch names 3. Sahara uses automatic color matching **Color Name Matching:** * **Standard names work automatically:** Black, White, Red, Blue, Green, Yellow, etc. * **Common shades recognized:** Navy, Burgundy, Forest Green, Sky Blue * **Custom colors:** Add swatch images in theme settings (advanced) **Best Practices:** * Use consistent color names across products * Capitalize color names ("Navy Blue" not "navy blue") * Avoid ambiguous names ("Color 1", "Option A") * Test swatches after setup **Swatch Configuration:** * Location: Theme settings → Swatches * Define custom color mappings if needed * Upload custom swatch images (16×16px minimum) </Accordion> </AccordionGroup> ### Swatch Shape Visual style of color swatches. **Options:** * **Square:** Sharp corners (default) * **Circle:** Round swatches **Default:** Square <Tip>Match swatch shape to your overall design aesthetic. Square for modern/minimal, Circle for soft/friendly brands.</Tip> ### Sizes Option Defines which variant option represents product size. **Default:** "Size" <Note>This setting helps the theme identify size variants for special handling (e.g., size guides, sorting). Change if your size option has a different name (e.g., "Taille" for French stores).</Note> </Tab> <Tab title="Quick Add"> ### Quick Add to Cart Allows customers to add products to cart directly from collection pages without visiting product page. **Options:** * **With variant selector:** Opens popup with variant options (default) * **Simple button:** Adds default variant directly * **Disable:** No quick add functionality **Default:** With variant selector <AccordionGroup> <Accordion title="Quick add strategies"> **With Variant Selector (Recommended):** * **How it works:** Clicking button opens popup with size/color options * **Pros:** Handles multi-variant products properly, reduces errors * **Cons:** Extra click required, popup can be dismissed * **Best for:** Products with variants (size, color) * **Conversion impact:** +15-25% vs visiting product page **Simple Button:** * **How it works:** Adds default variant instantly (usually first variant) * **Pros:** Fastest path to cart, one-click add * **Cons:** May add wrong size/color, confusing for multi-variant * **Best for:** Single-variant products, pre-orders, simple items * **Conversion impact:** +30-40% for simple products, -10% for multi-variant (wrong selection) **Disable Quick Add:** * **How it works:** Customer must visit product page to add * **Pros:** Forces product page view, more information consumed * **Cons:** Extra friction, slower purchase path * **Best for:** Complex products, customizable items, high-consideration purchases * **Conversion impact:** Baseline (100%) </Accordion> <Accordion title="When to use each option"> **Use "With Variant Selector" If:** * Most products have 2+ variants * Size/color selection is important * Want balance of speed and accuracy * Fashion, apparel, accessories stores **Use "Simple Button" If:** * Mostly single-variant products * Default variant is usually correct * Speed is critical (impulse purchases) * Digital products, subscriptions, simple items **Use "Disable" If:** * Products need detailed explanation * Customization required before purchase * Long descriptions are important * High-value or complex products **A/B Testing:** Test "With Variant Selector" vs "Simple Button" for 2 weeks each Measure: Add-to-cart rate, cart size, return rate </Accordion> </AccordionGroup> ### Mobile Add to Cart Button Style Separate button style control for mobile devices. **Options:** * **Filled:** Solid background button * **Outlined:** Border-only button **Default:** Outlined <Tip>Mobile conversion rates are sensitive to button visibility. Consider using Filled for higher contrast and better tap targets.</Tip> </Tab> <Tab title="Badges"> ### Product Badge Style Visual style of badges on product cards (Sale, New, Limited, etc.). **Options:** * **Transparent:** No background, text only (default) * **Square:** Solid background with sharp corners * **Round:** Solid background with rounded corners **Default:** Transparent <AccordionGroup> <Accordion title="Badge style impact"> **Transparent (Default):** * **Look:** Subtle, minimal, text-only * **Visibility:** Low to medium * **Best for:** Minimal/luxury brands, when badges are supplementary * **Caution:** May be hard to read over busy images **Square:** * **Look:** Bold, attention-grabbing, modern * **Visibility:** High * **Best for:** Sale emphasis, promotional stores, clear hierarchy * **Effect:** Badges stand out strongly **Round:** * **Look:** Friendly, soft, casual * **Visibility:** High * **Best for:** Lifestyle brands, approachable aesthetic * **Effect:** Less harsh than square, still prominent </Accordion> <Accordion title="Badge types and configuration"> **Automatic Badges:** Sahara generates these automatically: **Sale Badge:** * Appears when compare\_at\_price > price * Shows "Sale" or discount percentage * Configured in: Theme settings → Products **Sold Out Badge:** * Appears when inventory = 0 * Shows "Sold out" text * Automatic, cannot disable **Custom Badges:** Create using product tags: **Tag Format:** `badge:Badge Text` **Examples:** * `badge:New` → "New" badge * `badge:Best Seller` → "Best Seller" badge * `badge:Limited` → "Limited" badge * `badge:Eco-Friendly` → "Eco-Friendly" badge **Best Practices:** * Maximum 1-2 badge types per product * Keep badge text short (1-2 words) * Use consistent badge tags across products * Test badge visibility on your product images **Badge Colors:** * Controlled by color schemes * Badge background: `tag` color * Badge text: `tag_label` color * Configure in: Theme settings → Colors </Accordion> </AccordionGroup> </Tab> <Tab title="Advanced"> ### Product Groups (Advanced) Advanced feature for grouping related products using Shopify metaobjects. **Requirements:** * Shopify Plus plan * Custom metaobject definitions created * Products linked via metaobjects **Metaobject for Product Groups:** Enter metaobject definition handle to enable product grouping. **Show Product Groups:** * **None:** Don't display groups * **Product:** Show on product pages only * **Card:** Show on product cards only * **Both:** Show on cards and product pages <Note>Product groups are an advanced feature requiring custom development. Most stores don't need this.</Note> <AccordionGroup> <Accordion title="Product groups use cases"> **What Are Product Groups:** Group related products together (e.g., "Complete the Look", "Bundle Items", "Also Available In"). **Common Use Cases:** * **Fashion:** Complete the outfit (shirt + pants + shoes) * **Electronics:** Compatible accessories * **Beauty:** Skincare routine sets * **Home:** Room collections **Setup Requirements:** 1. Create metaobject definition in Shopify admin 2. Add metaobject field to products 3. Link products through metaobject entries 4. Enter metaobject handle in theme settings **Alternative Solutions:** If you don't have Shopify Plus: * Use product recommendations (built-in Shopify) * Manually curate related products sections * Use product tags for grouping </Accordion> </AccordionGroup> </Tab> </Tabs> <img alt="Product settings overview" /> ## Best practices 1. **Choose portrait image ratio for most stores**\ Portrait (3:4) works for 80% of product types. Square for jewelry/accessories, Auto for mixed catalogs. 2. **Enable hover images for apparel**\ Front/back views significantly reduce product page visits and increase conversion for fashion. 3. **Use "With variant selector" quick add**\ Best balance of speed and accuracy for multi-variant products. Increases add-to-cart by 15-25%. 4. **Keep swatches on hover for clean cards**\ Unless you have many color options (7+), hover-only swatches keep cards uncluttered. 5. **Match swatch shape to button shape**\ If buttons are squared, use square swatches. If rounded, use circle swatches. 6. **Limit badges to 1-2 types**\ Too many badges create visual noise. Prioritize Sale and Sold Out badges. 7. **Use transparent badges for minimal aesthetic**\ Square/Round badges for promotional emphasis. Test visibility on your product photography. 8. **Ensure consistent photography**\ Forced image ratios (Square/Portrait) require consistent product photography. Budget for reshoot if needed. 9. **Test on actual products**\ Preview settings with real product images, not placeholders. Images impact how settings look. 10. **Consider mobile-first**\ Quick add and swatches should work well on mobile - that's where most browsing happens. ## Common use cases <AccordionGroup> <Accordion title="Fashion/apparel store"> **Settings:** * Card layout: **Standard** * Image ratio: **Portrait** (3:4) * Media fit: **Cover** * Hover image: **Enabled** * Swatches: **Enabled**, always visible on mobile * Quick add: **With variant selector** * Badge style: **Transparent** or **Round** * Swatch shape: **Circle** **Why:** Portrait shows full garments, hover images show back view, swatches highlight color options, variant selector handles size/color combinations. </Accordion> <Accordion title="Jewelry/accessories store"> **Settings:** * Card layout: **Standard** * Image ratio: **Square** (1:1) * Media fit: **Cover** * Hover image: **Enabled** (close-up detail) * Swatches: **Enabled**, hover only * Quick add: **Simple button** (single-variant often) * Badge style: **Square** (New, Limited) * Swatch shape: **Square** **Why:** Square ratio for jewelry photography, clean grid, hover shows detail, simple products often single-variant. </Accordion> <Accordion title="Large catalog store"> **Settings:** * Card layout: **Compact** * Image ratio: **Square** (1:1) * Media fit: **Cover** * Hover image: **Disabled** * Swatches: **Enabled**, always visible * Quick add: **With variant selector** * Badge style: **Square** (Sale emphasis) * Swatch shape: **Square** **Why:** Compact layout shows more products, square for consistency, always-visible swatches for quick scanning, bold sale badges drive urgency. </Accordion> <Accordion title="Luxury/minimal store"> **Settings:** * Card layout: **Standard** * Image ratio: **Adapt to image** * Media fit: **Contain** * Hover image: **Enabled** (subtle alternate view) * Swatches: **Disabled** * Quick add: **Disabled** * Badge style: **Transparent** * Swatch shape: N/A **Why:** Maximum image quality (Adapt + Contain), no quick add forces product page visit, subtle badges, no swatches for clean aesthetic. </Accordion> </AccordionGroup> ## Related settings * [Colors](/themes/sahara/theme-settings/colors) - Badge colors defined in color schemes * [Buttons](/themes/sahara/theme-settings/buttons) - Quick add button styling * [Layout](/themes/sahara/theme-settings/layout) - Grid spacing affects product cards * [Common Settings](/themes/sahara/common-settings) - Section-level product grid options *** **Need help?** Test product card settings with real products and images. What looks good with placeholders may need adjustment with actual photography. # Social Media Source: https://docs.digifist.com/themes/sahara/theme-settings/social-media Connect your social media profiles and enable product sharing features Social media settings allow you to add links to your brand's social profiles and enable customers to share products across their social networks. Profile links appear as icons (typically in footer), while sharing buttons let visitors post products to their feeds, extending your reach organically. Connect your active social platforms to build credibility, encourage engagement, and leverage word-of-mouth marketing through customer sharing. ## What this controls Social media settings allow you to add links to your brand's social profiles and enable customers to share products. Profile links appear as icons (typically in footer), while sharing buttons let visitors post products to their social feeds. ## How it works 1. **Profile Links:** Add your social media URLs - icons appear automatically for filled-in platforms 2. **Sharing Buttons:** Enable/disable platforms where customers can share products 3. **Automatic Display:** Only platforms with links or sharing enabled will show <Tip>Focus on platforms where your audience is most active. Having 3-4 active profiles is better than 10 inactive ones.</Tip> ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access social media settings"> Click **Theme settings** → Select **Social media** </Step> <Step title="Add profile URLs"> Enter full URLs for your active social media accounts </Step> <Step title="Configure sharing"> Enable platforms where customers should share products </Step> </Steps> ## Settings <Tabs> <Tab title="Profile Links"> Add URLs to your brand's social media profiles. Icons automatically display for platforms with URLs. ### Supported Platforms * **Instagram** - Visual content, product photos * **Facebook** - Community engagement, ads * **Pinterest** - Product discovery, visual inspiration * **TikTok** - Video content, trends * **Twitter** - Updates, customer service * **YouTube** - Product videos, tutorials * **LinkedIn** - B2B, professional services * **Vimeo** - High-quality video content * **Snapchat** - Youth market, behind-the-scenes * **Tumblr** - Blog content, creative communities <Note>Enter complete URLs including https\://. Example: [https://instagram.com/yourstore](https://instagram.com/yourstore)</Note> </Tab> <Tab title="Product Sharing"> Enable customers to share products on their social media accounts. ### Sharing Options * **Twitter** - Quick sharing with short text * **Pinterest** - Save products to boards * **LinkedIn** - Professional recommendations * **Instagram** - Share to stories (mobile) * **Facebook** - Share to timeline **Default:** All enabled <Tip>Pinterest sharing is especially valuable for visual products - drives significant traffic.</Tip> </Tab> </Tabs> ## Best practices 1. **Only link active profiles** - Inactive accounts hurt credibility 2. **Maintain consistent branding** - Use same handle across platforms when possible 3. **Enable all sharing options** - More channels = more organic reach 4. **Update regularly** - Keep social links current if handles change 5. **Monitor shared content** - Track which products get shared most ## Related settings * [Common Settings](/themes/sahara/common-settings) - Social icons can appear in footers * [Typography](/themes/sahara/theme-settings/typography) - Icon sizing inherits from layout *** **Need help?** See [Shopify's social media guide](https://help.shopify.com/manual/online-store/themes/customize/social-media). # Swatches Source: https://docs.digifist.com/themes/sahara/theme-settings/swatches Configure color swatch display for product variants Swatch settings transform product variant options from text dropdowns into visual color swatches, creating a more engaging shopping experience. Instead of reading "Navy Blue" in a list, customers see actual color circles they can click. Well-configured swatches increase variant product engagement by 25-40% and reduce decision fatigue. ## What this controls Swatch settings determine how product variant options are displayed as visual color swatches instead of dropdown menus. This creates a more engaging shopping experience by allowing customers to see color options at a glance. <Tip>Color swatches increase engagement with variant products by 25-40% compared to text-based dropdowns, especially in fashion and home decor categories.</Tip> ## How it works Sahara's swatch system automatically converts specified variant options into clickable visual swatches. Instead of a dropdown menu showing "Red", "Blue", "Green", customers see actual colored circles or squares they can click. The system works by: 1. **Option Name Matching:** You specify which option name (e.g., "Color") should display as swatches 2. **Automatic Color Detection:** The theme matches variant values to built-in color definitions 3. **Visual Display:** Swatches appear on product cards and product pages 4. **Custom Swatch Support:** Upload custom swatch images for unique colors or patterns <Note>Swatches work best with standardized color names. Use "Navy Blue" consistently rather than mixing "Navy", "Navy Blue", and "Dark Blue".</Note> ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access swatch settings"> Click **Theme settings** → Select **Swatches** </Step> <Step title="Specify option name"> Enter the exact variant option name to display as swatches (e.g., "Color" or "Colour") </Step> <Step title="Test with products"> Preview products with color variants to verify swatch display </Step> <Step title="Optional: Add custom swatches"> Upload custom swatch images in theme files for unique colors/patterns </Step> </Steps> ## Location **Path:** Theme settings → Swatches ## Settings <Tabs> <Tab title="Swatch Option"> **Swatches option name**: Enter the exact name of the product option that should display as color swatches. **Default:** `Color` **Common values:** * `Color` (English) * `Colour` (British English) * `Renk` (Turkish) * `Farbe` (German) * `Couleur` (French) <Warning>The option name is case-sensitive and must match exactly how it appears in your product variants. If some products use "color" and others use "Color", swatches will only work for one variant.</Warning> **How it works:** * The theme searches your products for this exact option name * When found, it converts that option's values into visual swatches * Other variant options continue displaying as dropdowns or buttons </Tab> <Tab title="Color Recognition"> **Built-in colors:** Sahara includes automatic color recognition for common color names: * Basic colors (Red, Blue, Green, Yellow, etc.) * Extended palette (Navy, Burgundy, Teal, Coral, etc.) * Neutrals (Black, White, Gray, Beige, Cream, etc.) * Variants (Light Blue, Dark Green, etc.) **Pattern matching:** * "Navy Blue" → Blue swatch with darker shade * "Light Gray" → Gray swatch with lighter shade * "Forest Green" → Green swatch with darker shade <Tip>Use standard color names when possible for automatic swatch generation. Reserve custom swatches for unique colors, patterns, or textures.</Tip> </Tab> <Tab title="Custom Swatches"> For colors not recognized automatically or for pattern/texture variants, you can add custom swatch images. **How to add custom swatches:** 1. Create a swatch image (minimum 50x50px, square format) 2. Name it exactly as your variant value (e.g., `burgundy.png`, `striped.jpg`) 3. Upload to your theme's `assets` folder or Files section 4. The theme automatically uses custom swatches when available **Best practices:** * Use consistent image dimensions (recommended: 50x50px or 100x100px) * Keep file sizes small (\<10KB per swatch) * Use PNG for solid colors, JPG for patterns/textures * Name files in lowercase with hyphens for spaces (e.g., `navy-blue.png`) <Note>Custom swatches override automatic color detection. If you upload "red.png", the theme uses your image instead of the built-in red color.</Note> </Tab> </Tabs> ## Use cases <CardGroup> <Card title="Fashion & Apparel" icon="shirt"> Display clothing colors as swatches on product cards. Customers see all color options without opening product pages. **Example:** T-shirt available in Black, White, Navy, Red → 4 circular swatches </Card> <Card title="Home Decor" icon="couch"> Show furniture and home goods in different fabric colors or finishes. **Example:** Sofa in Beige, Gray, Navy → 3 swatches showing fabric colors </Card> <Card title="Beauty & Cosmetics" icon="paintbrush"> Display makeup colors or product shades visually for easier selection. **Example:** Lipstick in nude, pink, red → Color-accurate swatches </Card> <Card title="Pattern Variants" icon="pattern"> Use custom swatch images for patterns, textures, or complex materials. **Example:** Rug in Striped, Geometric, Floral → Custom pattern images </Card> </CardGroup> ## Best practices <CardGroup> <Card title="Use consistent color naming" icon="tags"> Standardize color names across all products. Always use "Navy Blue" instead of mixing "Navy", "Navy Blue", "Dark Blue" for same color. Create a color naming guide. This ensures swatches work reliably and customers can filter by color accurately. </Card> <Card title="Limit swatch count" icon="circle-dot"> Keep visible swatches to 5-8 colors on product cards for clarity. Show most popular colors first, use "+3 more" indicator for additional colors, full color range appears on product page. Too many swatches on cards creates visual clutter and decision paralysis. </Card> <Card title="Test swatch visibility" icon="eye"> Ensure swatches are large enough to distinguish colors (minimum 32px diameter), have adequate spacing (8-12px gap), include border for white/light swatches on light backgrounds, and work on mobile devices (minimum 44px touch target). </Card> <Card title="Combine with variant images" icon="images"> For best results, pair swatches with variant-specific images. Each color variant has its own product image, clicking swatch shows that color's image, creates "try before you buy" experience. This combination reduces returns and increases customer confidence. </Card> <Card title="Match swatch colors accurately" icon="droplet"> Swatch colors should accurately represent actual products. Use custom swatches for precise color matching, test swatches against product photos, consider color calibration across devices. Mismatched swatches lead to customer disappointment and returns. </Card> <Card title="Keep option name simple" icon="input-text"> Use single-word option names when possible. "Color" is simple and clear, "Product Color" works but is verbose, "Choose Color" is unnecessarily wordy. Short names work better in theme templates and reduce layout issues. </Card> </CardGroup> ## Common issues <Warning> **Swatches not appearing?** Check these common issues: 1. **Option name mismatch:** Verify the exact option name in your products matches the setting (case-sensitive) 2. **Unrecognized color names:** Use standard color names or add custom swatch images 3. **Cache issues:** Clear browser cache or use incognito mode to see changes 4. **Product has no variants:** Swatches only appear for products with the specified option </Warning> <Tip> **Pro tip:** Create a product template specifically for swatched products. This ensures consistent display and allows custom layouts optimized for color-focused shopping. </Tip> ## Technical notes * Swatch setting applies globally to all product displays (cards, pages, quick view) * Multiple option names can be styled as swatches by entering comma-separated values * Swatch images are loaded lazily for performance optimization * The theme respects inventory levels - out-of-stock swatches appear grayed/crossed out * Swatches support accessibility with proper ARIA labels and keyboard navigation ## Related guides <CardGroup> <Card title="Products" icon="box" href="/themes/sahara/theme-settings/products"> Configure overall product display and card settings </Card> <Card title="Colors" icon="palette" href="/themes/sahara/theme-settings/colors"> Set up theme-wide color schemes </Card> <Card title="Product Page" icon="file" href="/themes/sahara/products/product-page"> Customize product page layout and features </Card> </CardGroup> # Typography Source: https://docs.digifist.com/themes/sahara/theme-settings/typography Control fonts, sizing, spacing, and text styling throughout your store Typography settings define how text appears across your entire store - from headings and product descriptions to buttons and navigation menus. These choices affect readability, brand personality, and visual hierarchy. Well-chosen typography creates a cohesive brand experience and can improve content readability by up to 50%, making it one of the most impactful design decisions you'll make. ## What this controls Typography settings determine how text appears across your entire store - from headings and product descriptions to buttons and navigation. These settings affect readability, brand personality, and visual hierarchy. <Tip>Typography is one of the most impactful design decisions. Well-chosen fonts and sizing create a cohesive brand experience and improve readability.</Tip> ## How it works Sahara's typography system has three key components: 1. **Type Scale:** Controls the size relationship between heading levels (H1, H2, H3, etc.) 2. **Font Choices:** Select fonts for headings, body text, and buttons 3. **Styling Controls:** Adjust sizing, letter spacing, and text transform Changes apply globally - updating heading font changes all headings site-wide. <Warning>Custom fonts can impact store speed. System fonts load instantly while custom fonts add 20-50KB per font family.</Warning> ## Getting started <Steps> <Step title="Open Theme Customizer"> From Shopify admin → **Online Store** → **Themes** → **Customize** </Step> <Step title="Access typography settings"> Click **Theme settings** (gear icon in sidebar) → Select **Typography** </Step> <Step title="Choose your fonts"> Start with heading font - this defines your brand personality </Step> <Step title="Adjust sizing"> Set type scale first, then fine-tune with font scale percentages </Step> <Step title="Apply styling"> Configure letter spacing and text transform to match your brand </Step> </Steps> ## Location **Path:** Theme settings → Typography <img alt="Typography settings location" /> ## Settings <Tabs> <Tab title="Font Selection"> ### Heading Font Choose the primary font for all headings (H1 through H6) throughout your store. **Default:** Garamond (serif) <AccordionGroup> <Accordion title="Font recommendations by brand style"> **Traditional/Elegant:** * Garamond (default) - Classic, timeless serif * Playfair Display - Sophisticated editorial * Lora - Warm, readable serif **Modern/Clean:** * Poppins - Geometric sans-serif * Inter - Highly readable, professional * Work Sans - Contemporary sans-serif **Bold/Creative:** * Bebas Neue - Strong display font * Montserrat - Bold, attention-grabbing * Archivo Black - Ultra-bold impact **Artisanal/Handmade:** * Shadows Into Light - Handwritten feel * Dancing Script - Elegant script * Amatic SC - Casual hand-drawn </Accordion> <Accordion title="System fonts vs custom fonts"> **System Fonts (Faster):** * Load instantly (already on user's device) * No download required * Better performance * Examples: Arial, Georgia, Times New Roman **Custom Fonts (Brand-specific):** * Unique brand personality * Adds 20-50KB per font family * Slight performance impact * Hundreds of options available **Best Practice:** Use maximum 2-3 font families total across heading, body, and buttons. </Accordion> </AccordionGroup> ### Body Font Choose the font for body text - product descriptions, paragraphs, and general content. **Default:** Figtree (sans-serif) <Tip>Body text should prioritize readability. Choose a clean, neutral font that works well at smaller sizes.</Tip> <AccordionGroup> <Accordion title="Heading + Body font pairing guide"> **Serif + Sans-Serif (Sahara Default):** * Garamond headings + Figtree body * Classic, elegant combination * High contrast creates hierarchy * Best for: Traditional, upscale stores **Sans-Serif + Sans-Serif:** * Poppins headings + Inter body * Modern, clean aesthetic * Maintains consistency * Best for: Tech, minimalist stores **Display + Sans-Serif:** * Bebas Neue headings + Work Sans body * Bold, attention-grabbing * Strong visual hierarchy * Best for: Fashion, creative stores **Serif + Serif:** * Playfair Display headings + Lora body * Editorial, sophisticated * Cohesive typography system * Best for: Publishing, lifestyle stores </Accordion> </AccordionGroup> ### Button Font Choose the font used for button text throughout your store. **Default:** Figtree (same as body) <Note>Most stores use the same font for buttons and body text. Consider a different font only if buttons need extra emphasis.</Note> </Tab> <Tab title="Font Styling"> ### Type Scale Controls the size relationship between heading levels. This multiplier determines how much larger each heading level is compared to the next smaller level. **Options:** * **Small (1.200):** Subtle hierarchy, less dramatic size differences * **Medium (1.250):** Balanced hierarchy (default) * **Large (1.333):** Strong hierarchy, dramatic size differences **Default:** Medium (1.250) <AccordionGroup> <Accordion title="Understanding type scale"> Type scale is a multiplier applied successively to create heading sizes. **Example with Medium (1.250):** * Body text: 16px * H6: 16px × 1.25 = 20px * H5: 20px × 1.25 = 25px * H4: 25px × 1.25 = 31px * H3: 31px × 1.25 = 39px * H2: 39px × 1.25 = 49px * H1: 49px × 1.25 = 61px Larger scales create more dramatic size differences between heading levels. </Accordion> <Accordion title="When to use each type scale"> **Small (1.200):** * Text-heavy pages (blogs, product descriptions) * More headings fit on screen * Subtle, refined hierarchy * Good for professional/corporate sites **Medium (1.250) - Default:** * Balanced for most stores * Standard typographic scale * Works well with mixed content * Recommended starting point **Large (1.333):** * Visual-heavy pages (images, products) * Headings need strong emphasis * Dramatic visual hierarchy * Good for fashion/lifestyle sites </Accordion> </AccordionGroup> ### Heading Letter Spacing Controls the space between letters in headings. **Options:** * **Normal:** Default spacing (0) * **Wide:** Increased breathing room (+0.2rem) * **Tight:** Compact spacing (-0.2rem) **Default:** Normal <Tip>Uppercase headings (Sahara's default) often look better with wide letter spacing. Try "Wide" if using uppercase text transform.</Tip> ### Heading Text Transform Changes the capitalization of heading text. **Options:** * **Normal:** Text appears as entered * **Uppercase:** ALL LETTERS CAPITALIZED * **Lowercase:** all letters lowercase * **Capitalize:** First Letter Of Each Word Capitalized **Default:** Uppercase <AccordionGroup> <Accordion title="Text transform best practices"> **Uppercase:** * Bold, attention-grabbing * Pair with wide letter spacing * Works well for short headings * Sahara's default style **Normal:** * Most readable for long headings * Natural, conversational tone * Good for detailed product names **Capitalize:** * Professional, formal appearance * Good for titles and headers * Maintains readability **Lowercase:** * Modern, minimalist aesthetic * Casual, approachable tone * Use sparingly </Accordion> </AccordionGroup> </Tab> <Tab title="Text Sizing"> ### Heading Font Size Scale Adjust the overall size of all heading text as a percentage. **Range:** 50% – 150%\ **Default:** 100% * **50%:** Half the default size (very compact) * **100%:** Default size (recommended) * **150%:** 1.5× larger (very prominent) <Warning>Heading font scale works together with Type Scale. Adjust Type Scale first, then use font size scale for fine-tuning.</Warning> <AccordionGroup> <Accordion title="When to adjust heading size"> **Increase to 110-130%:** * Headers feel too small * Need stronger visual hierarchy * Large images require bigger titles * Fashion/lifestyle stores **Keep at 100%:** * Default sizing works well * Balanced with body text * Most stores (recommended) **Decrease to 80-90%:** * Headers feel too large * Text-heavy content * Many headings per page * Professional/corporate sites Avoid extreme values (50% or 150%) unless intentional design choice. </Accordion> </AccordionGroup> ### Body Font Size Scale Adjust the overall size of body text as a percentage. **Range:** 50% – 150%\ **Default:** 100% * **50%:** Half the default size * **100%:** Default size (typically 16px) * **150%:** 1.5× larger <Note>Body text at 100% typically renders at 16px, which is the web standard for readability. Adjust cautiously.</Note> <AccordionGroup> <Accordion title="Body text sizing guidelines"> **Increase to 105-115%:** * Target audience: older demographics * Long-form content (blog posts) * Improve readability * Accessibility considerations **Keep at 100%:** * Standard web readability * Works for most audiences * Balanced with headings **Decrease to 90-95%:** * Fit more content on screen * Technical/data-heavy pages * Younger, tech-savvy audience **Never go below 85%:** Hurts readability and accessibility. </Accordion> </AccordionGroup> </Tab> <Tab title="Performance"> ### Font Loading Impact Understanding how font choices affect store speed. <AccordionGroup> <Accordion title="Font performance metrics"> **System Fonts:** * Load time: 0ms (instant) * File size: 0KB (no download) * Examples: Arial, Georgia, Helvetica, Times New Roman **Custom Web Fonts:** * Load time: 100-500ms (network dependent) * File size: 20-50KB per font family * Adds to initial page load **Impact on Speed:** * 1 custom font: Minimal impact (\~30KB) * 2 custom fonts: Noticeable (\~60KB) * 3+ custom fonts: Significant impact (>90KB) Each font variant (regular, bold, italic) adds additional file size. </Accordion> <Accordion title="Optimizing font performance"> **Best Practices:** 1. **Limit font families:** Use maximum 2-3 total 2. **Share fonts:** Use same font for body and buttons 3. **Reduce variants:** Load only needed weights 4. **Consider system fonts:** For extremely fast loads 5. **Test performance:** Use Google PageSpeed Insights **Recommended Setup:** * 1 custom font for headings (brand personality) * 1 system font for body (performance) * Share body font for buttons **Total:** \~30KB added, minimal impact </Accordion> <Accordion title="Font loading best practices"> Shopify automatically optimizes font loading, but you can help: **What Shopify Does:** * Preloads critical fonts * Uses font-display: swap * Compresses font files * CDN delivery **What You Can Do:** * Choose fonts wisely (2-3 max) * Test load times regularly * Monitor Core Web Vitals * Consider system fonts for body text **Performance Monitoring:** * Use Shopify's speed report * Check Google PageSpeed Insights * Monitor Largest Contentful Paint (LCP) </Accordion> </AccordionGroup> </Tab> </Tabs> <img alt="Typography settings overview" /> ## Best practices <CardGroup> <Card title="Choose 2-3 font families maximum" icon="font"> More fonts slow your site and create visual confusion. Use one for headings, one for body, optionally one for buttons. </Card> <Card title="Prioritize readability for body" icon="book-open"> Body text is read most - choose a clear, neutral font. Save personality for headings. </Card> <Card title="Test type scale first" icon="ranking-star"> Type scale affects hierarchy between headings. Adjust this first, then fine-tune with percentage scales. </Card> <Card title="Use wide letter spacing with uppercase" icon="text-width"> Sahara defaults to uppercase headings. Set letter spacing to "Wide" for better readability. </Card> <Card title="Consider your audience" icon="users"> Older demographics benefit from larger text (110% body scale). Younger audiences tolerate smaller sizes. </Card> <Card title="Match fonts to brand personality" icon="wand-magic-sparkles"> Traditional: Serif headings (Garamond, Playfair). Modern: Sans-serif (Poppins, Inter). Creative: Display fonts (Bebas Neue). </Card> <Card title="Test on mobile devices" icon="mobile-screen-button"> Typography looks different on phones. Preview all changes on mobile before publishing. </Card> <Card title="Use consistent font pairing" icon="link"> Follow established patterns: Serif + Sans, Sans + Sans, or Display + Sans. Avoid Serif + Serif unless editorial. </Card> <Card title="Avoid extreme size adjustments" icon="chart-line"> Keep font size scales between 85-125% for most stores. Extreme values hurt readability. </Card> <Card title="Monitor performance impact" icon="gauge-high"> Use Shopify's speed report or Google PageSpeed Insights. Keep Largest Contentful Paint (LCP) under 2.5s. </Card> </CardGroup> ## Common use cases <AccordionGroup> <Accordion title="Traditional/elegant store (default Sahara style)"> **Goal:** Classic, upscale aesthetic with refined typography **Settings:** * Type scale: Medium (1.250) * Heading font: Garamond (default) or Playfair Display * Heading size scale: 100-110% * Heading letter spacing: Wide (with uppercase) * Heading text transform: Uppercase (default) * Body font: Figtree (default) or Lora * Body size scale: 100-105% **Why this works:** Serif headings create elegance, uppercase adds formality, sans-serif body maintains readability. </Accordion> <Accordion title="Modern/minimalist store"> **Goal:** Clean, contemporary look with excellent readability **Settings:** * Type scale: Medium (1.250) * Heading font: Poppins or Inter * Heading size scale: 100% * Heading letter spacing: Normal * Heading text transform: Normal (change from default) * Body font: Inter or Work Sans * Body size scale: 100% * Button font: Same as body **Why this works:** Sans-serif throughout creates cohesion, normal case improves readability, minimal styling keeps focus on content. </Accordion> <Accordion title="Bold/fashion-forward store"> **Goal:** Strong visual impact with dramatic hierarchy **Settings:** * Type scale: Large (1.333) * Heading font: Bebas Neue or Montserrat Bold * Heading size scale: 120-130% * Heading letter spacing: Wide * Heading text transform: Uppercase * Body font: Work Sans or Inter * Body size scale: 95-100% **Why this works:** Large type scale + bold font + increased size creates drama, uppercase with wide spacing adds impact, smaller body text emphasizes headings. </Accordion> <Accordion title="Text-heavy blog or editorial"> **Goal:** Maximum readability for long-form content **Settings:** * Type scale: Small (1.200) * Heading font: Playfair Display or Lora * Heading size scale: 95-100% * Heading letter spacing: Normal * Heading text transform: Normal (change from default) * Body font: Lora or Georgia (system font) * Body size scale: 105-110% **Why this works:** Small type scale reduces heading dominance, larger body text improves reading experience, serif fonts create editorial feel, normal case aids comprehension. </Accordion> </AccordionGroup> ## Related settings * [Colors](/themes/sahara/theme-settings/colors) - Match typography style with color palette * [Layout](/themes/sahara/theme-settings/layout) - Typography works with layout widths * [Buttons](/themes/sahara/theme-settings/buttons) - Button typography connects with overall type system * [Common Settings](/themes/sahara/common-settings) - Typography applies within section containers *** **Need help?** See [Shopify's typography guide](https://help.shopify.com/manual/online-store/themes/customize/typography) or [font performance tips](https://help.shopify.com/manual/online-store/os/store-speed/improving-speed#fonts).