Ingredient atlas

A library of every ingredient your brand uses, written once. Each product then shows only the ingredients it actually declares, matched by name, while a home page shows the whole library.

Merchant-addable
Yes
Settings
39
Block types
1
Max blocks
30
File
sections/ingredient-atlas.liquid

Used by default on: Home , Product , Product (stage)

Screenshots pending

Captures for Ingredient atlas at desktop and mobile widths are generated from a live store by npm run shots. They appear here automatically once that has run.

When to use it

Any product whose value depends on what is inside it — skincare, supplements, food, cosmetics. It answers "what is actually in this" without forcing the customer through a paragraph.

Setting it up

  1. Assign a product category in Shopify admin and fill in Active ingredient on each product. That is where the per-product list comes from.
  2. Add one Ingredient block per ingredient your catalog uses — this is a library, not one product's contents. The Ingredient name must match the value on the product.
  3. On a product template, set Ingredient source to Product data. On a home page or ingredients page leave it on Ingredient blocks to show everything.
  4. Group related ingredients with the same Filter group spelling to build the filter row.
  5. Preview on a phone. The rail scrolls horizontally, so check that the first card hints at a second one being there.

Where the content comes from

Blocks own the ingredient stories — image, purpose, source — written once and reused. Shopify product data owns which ingredients each product contains, read from the category attribute you choose.

Notes and cautions

  • Up to 30 blocks. That is the library size, not a per-product limit — a product shows only what it declares.
  • Matching is exact once capitalization is ignored, so "Vitamin C" will not find "Vitamin C (Ascorbic Acid)". Most missing cards are a spelling mismatch.
  • Two blocks with the same name is a mistake: only the first renders, and the second silently never appears.
  • A product that declares no ingredients hides the section entirely rather than borrowing the library's. That is deliberate — it will not claim contents a formula may not have.
  • Leave concentration blank rather than guessing. An empty field renders nothing; a wrong number is a compliance problem.

Building the ingredient library

The ingredient atlas is not a list of one product’s contents. It is a library of every ingredient your brand uses, written once, that each product draws from automatically.

That distinction is the whole design. Write hyaluronic acid once — its story, image, source, and type — and every product containing it shows that same card, without you retyping anything.

The two modes

One section setting, Ingredient source, decides where the section gets its list.

ModeWhat rendersWhere to use it
Ingredient blocks (default)Every block, alwaysHome page, an ingredients page, brand storytelling
Product dataOnly the ingredients that product declaresProduct templates

Product data applies on product pages only. Placed anywhere else — a home page, a regular page — there is no product to read from, so the section shows the entire library instead. That is deliberate, not a fault: the home page is exactly where you want every ingredient on display.

The full walkthrough

Step 1 — tell Shopify what is in each product

Ingredient names come from a category attribute, so the product needs a category.

  1. In Shopify admin, open a product.
  2. Set Product category in the product organization card. Pick the most specific match.
  3. Fill in Active ingredient on the product, one entry per ingredient.
  4. Save.

By default the section reads Active ingredient. You can point it at Constitutive ingredients, Skin care features, or Ingredient origin instead using the Value source setting.

Step 2 — build the library

In the theme editor, add one Ingredient block per ingredient your catalog uses — not per ingredient in one product.

The Ingredient name on the block must match the name on the product. Matching ignores capitalization and punctuation differences, so Hyaluronic Acid on the block finds hyaluronic acid on the product. It does not match partially: Vitamin C will not find Vitamin C (Ascorbic Acid). Use the same wording Shopify offers on the product.

Fill in the rest of the block — type, image, story, source — once. Every product containing that ingredient inherits it.

Step 3 — switch the product template to product data

On your product template, open the section and set Ingredient source to Product data.

Each product now shows only its own ingredients, as full cards, drawn from the library.

What renders in each situation

Product mode has four outcomes, and all four are intentional:

The product…What a customer sees
lists ingredients, all in the libraryA full card for each one
lists ingredients, some not in the libraryCards for the matches, plus the remaining names as a plain list
lists ingredients, none in the libraryThe names as a plain list, no cards
lists no ingredients at allNothing — the section is hidden

That last row matters. A product that declares no ingredients does not borrow the library’s, because that would claim contents the formula may not have. The section stands down instead.

Every one of these states explains itself in the theme editor. If a section looks empty or shorter than you expected while editing, read the note — it names the exact products or ingredients causing it.

Ingredients the library has no entry for still appear as names. The list stays truthful rather than quietly dropping them, and the editor tells you which blocks to add.

The 30-ingredient cap

The section holds 30 Ingredient blocks. That is the library size, not a per-product limit — a product can only ever show as many as it declares.

Thirty covers a focused skincare range comfortably. If you are pressing against it:

  • Build the library around actives, not every excipient. Nobody reads the twenty-eighth card, and the ingredients that carry your claim get buried.
  • Split by range. Use a second atlas section on a different template rather than one library serving unrelated product lines.
  • Drop ingredients no product declares. They render on the home page and never on a product.

Filter groups

Each block has a Filter group. Ingredients sharing the same spelling group under one filter automatically, and the filter row appears once at least one block has a group set.

Use a handful of broad groups — Hydration, Barrier, Brightening — rather than one per ingredient. A filter row where every filter shows a single card is not a filter.

Leave the field blank and the ingredient still shows under All.

Using it well

  • Write the library once, properly. This is the section with the best effort-to-payoff ratio in the theme, because every entry is reused across every product containing it. Time spent on a card is spent once.
  • Keep the intro short. One or two sentences. The ingredients are the content.
  • Match Shopify’s wording exactly when naming blocks. Most gaps come from a block named slightly differently from the attribute value.
  • Check a phone. The rail scrolls horizontally, so confirm the first card hints that a second one exists.
  • Two blocks with the same name is a mistake. Only the first is used, and the second silently never renders.

When an ingredient does not appear

Work down this list:

  1. The name does not match. The most common cause by far. Compare the block’s Ingredient name with the value on the product, character for character.
  2. The product has no category, or Active ingredient is empty. No data, nothing to match.
  3. Ingredient source is still on Ingredient blocks. The section is showing the whole library, not the product’s.
  4. You are pointed at the wrong attribute. Check Value source matches the field you filled.
  5. A duplicate block. Two entries with the same name mean only the first ever renders.

Section settings

Every setting on the section itself, in the order it appears in the theme editor. Group headings match the editor's own grouping.

Section content

Add one block per ingredient. Reorder blocks to change the numbered tabs. Enter the same filter group name on multiple blocks to group them under one top filter.

EyebrowText
ID
eyebrow
Default
The formula library
HeadingText
ID
heading
Default
Ingredient atlas
Heading sizeDropdown
ID
heading_size
Default
Medium
  • Smallsmall
  • Mediummedium
  • Largelarge
Body textRich text
ID
description
Default
<p>Explore the origins, purpose, and place of every ingredient in your ritual.</p>

Ingredients

Ingredient sourceDropdown

Applies on product pages only.

ID
content_source
Default
Ingredient blocks
  • Ingredient blocksblocks
  • Product data (product pages)product

Shows only the ingredients each product lists, so the atlas varies per product with no setup. Ingredient blocks supply the image and story: an ingredient appears in full when a block shares its title, and by name alone when none does.

Value sourceDropdown
ID
atlas_attribute
Default
Active ingredients
Shown when
content_source is 'product'
  • Active ingredientsactive-ingredient
  • Constitutive ingredientsconstitutive-ingredients
  • Skin care featuresskin-care-features
  • Ingredient originingredient-origin
Show filter groupsCheckbox
ID
show_filters
Default
On
Show ingredient numbersCheckbox
ID
show_index_numbers
Default
On

Style

Image shapeDropdown
ID
image_shape
Default
Arch
  • Archarch
  • Portraitportrait
  • Organicorganic
Ingredient image widthSlider

Adjusts the image and details balance on tablet and desktop.

ID
image_width
Default
58
Range
44% to 66%, in steps of 2%
Index illustrationDropdown
ID
index_illustration_style
Default
Botanical branch
  • Nonenone
  • Botanical branchbotanical
  • Leaf studyleaf
  • Mushroom studymushroom
  • Water dropletsdroplets
  • Sunburstsun
  • Custom imagecustom
Custom index illustrationImage

Use a transparent SVG or PNG. Backgrounds embedded in an uploaded image cannot be removed.

ID
index_illustration
Shown when
index_illustration_style is 'custom'
Index illustration rotationSlider
ID
index_illustration_rotation
Default
0
Range
-180° to 180°, in steps of 5°
Index illustration horizontal shiftSlider
ID
index_illustration_shift
Default
-10
Range
-50% to 50%, in steps of 5%
Color schemeColor scheme
ID
color_scheme
Default
scheme-1
Note and product colorsDropdown
ID
card_color_mode
Default
Use section color scheme
  • Use section color schemeinherit
  • Use custom color schemecustom
Note and product color schemeColor scheme
ID
card_color_scheme
Default
scheme-2
Shown when
card_color_mode is 'custom'
Show entrance animationCheckbox

Fades the section in on scroll. Respects the theme animation setting and reduced motion.

ID
enable_entrance_animation
Default
On
Top spacingSlider
ID
padding_top
Default
80
Range
0px to 120px, in steps of 4px
Bottom spacingSlider
ID
padding_bottom
Default
80
Range
0px to 120px, in steps of 4px

Blocks

Blocks are added, reordered, duplicated, and removed inside the section. Each type has its own settings.

Ingredient ingredient

Ingredient

Ingredient nameRich text (inline)
ID
title
Default
Sea buckthorn
Ingredient typeText
ID
kicker
Default
Botanical
Filter groupText

Creates a top filter automatically. Use the same spelling on ingredients that belong together. Leave blank to show this ingredient under All only.

ID
benefit
Default
Protect

Story

Ingredient imageImage

4:5 aspect ratio recommended

ID
image
Image captionText
ID
caption
Benefit summaryRich text
ID
summary
Default
<p>Nourishes · Supports the moisture barrier</p>
First detail labelText
ID
purpose_label
Default
Purpose
First detail textMulti-line text
ID
purpose
Default
A vitamin-rich oil chosen to comfort dry, depleted skin.
Second detail labelText
ID
source_label
Default
Source
Second detail textMulti-line text
ID
source
Default
High-altitude berries · Himalayan region
Supporting noteMulti-line text
ID
supporting_note
Default
Naturally rich in lipids that help replenish the feel of softness.
Supporting note iconDropdown
ID
note_icon
Default
Botanical
  • Nonenone
  • Botanicalbotanical
  • Leafleaf
  • Dropletdroplet
  • Sparklesparkle
  • Lipsticklipstick
  • Makeup compactcompact
  • Makeup brushbrush
  • Heartheart
  • Capsulecapsule
  • Custom imagecustom
Tilt supporting note imageSlider
ID
note_icon_rotation
Default
0
Range
-30° to 30°, in steps of 1°
Shown when
note_icon is not 'none'
Custom note iconImage

Use a square transparent PNG or SVG for best results.

ID
note_icon_image
Shown when
note_icon is 'custom'

Reference

Reference textText
ID
reference_text
Default
Merchant-supplied ingredient note
Reference linkLink
ID
reference_url

Related products

First productProduct
ID
product_1
Second productProduct
ID
product_2
Third productProduct
ID
product_3