Welcome to Aprelux, a sophisticated and highly customizable Hugo theme designed for modern e-commerce. Aprelux (Version: 1.0.0) combines elegant design with robust functionality, providing a seamless and professional online shopping experience for a wide range of products.
This theme is built with a distinctive dark/light design mode and features luxurious gold accents, ensuring your store stands out with an aesthetic polish. It offers a versatile foundation adaptable for various niches, as demonstrated by the included demo content featuring diverse product examples.
Aprelux is built on Hugo, a fast and flexible static site generator. Follow the steps below to install and run the theme:
Place the extracted aprelux
folder inside your Hugo site's themes/
directory.
Your site's config.yaml
should include:
theme: "aprelux"
Option 1: Clean Installation
Start with a minimal configuration:
themes/aprelux/exampleSite/config-clean.yaml
into your site's root directory and rename it to config.yaml
.Option 2: Demo Content Installation
To replicate the demo site with sample content and images:
themes/aprelux/exampleSite/config.yaml
into your site's root directory.themes/aprelux/exampleSite/content/
into your site's content/
folder.themes/aprelux/exampleSite/static/images/
into your site's static/images/
folder.hugo server
in your terminal.Understanding the core file structure of your Aprelux Hugo E-commerce Theme is essential before diving into configuration. This theme is built with modular clarity and premium maintainability. The theme should be placed in your Hugo site's themes/aprelux/
directory.
Theme location: themes/aprelux/
This documentation aims to be a comprehensive guide for customizing and managing your Aprelux website, with detailed, line-by-line explanations for each setting and its implications.
config.yaml
)This foundational chapter will cover the primary configuration file that governs your entire Hugo site. We will explore each setting to understand its role in setting up the basic site structure and functionality.
The config.yaml
file is located at the root of your Hugo project: your-website/config.yaml
.
This section defines the fundamental settings that establish your website's identity and its core operational parameters. These settings are crucial for ensuring your Hugo site functions correctly and is displayed as intended.
baseURL
to correctly generate all internal links, sitemap entries, and paths to your site's assets (like images, CSS, and JavaScript). It ensures resources are found whether your site is accessed locally or deployed online.baseURL
is found directly under the BASIC SITE CONFIGURATION
section within your config.yaml
file.config.yaml
.config.yaml
: baseURL: "/"
baseURL
to "/"
is common. This tells Hugo to generate relative URLs, meaning links are based on the current page's position. However, for your actual website it is absolutely critical to change this to your site's full, absolute domain name (e.g., https://www.yourdomain.com/
). If baseURL
is not set to an absolute URL on a live site, internal links will likely break, and assets like images or stylesheets may fail to load correctly.languageCode
is located under the BASIC SITE CONFIGURATION
section in your config.yaml
.config.yaml
.config.yaml
: languageCode: "en-us"
title
parameter is found under BASIC SITE CONFIGURATION
in your config.yaml
.config.yaml
.config.yaml
: title: "Aprelux"
layouts/partials/head.html
): The <title>
tag in your site's HTML head section dynamically pulls this value. The relevant code is {{ if .Title }}{{ .Title }} - {{ end }}{{ .Site.Title }}
. This means that for individual content pages, if a specific page title is defined (e.g., in its front matter), it will appear before the main site title. Otherwise, only the site title from config.yaml
is used.layouts/partials/footer.html
): Your theme's footer also uses this value for the copyright notice, displaying © {{ now.Year }} {{ .Site.Title }}. All rights reserved.
theme
parameter is found under BASIC SITE CONFIGURATION
in your config.yaml
.config.yaml
.config.yaml
: theme: "aprelux"
config.yaml
, the theme parameter is set to "aprelux"
. This indicates that Hugo will look for the theme inside the standard themes/
directory structure, specifically at themes/aprelux/
. This is the recommended setup for modular theme development, as it keeps theme files isolated from the root project and ensures compatibility with Hugo’s theme lookup logic.layouts
, static
, archetypes
alongside config.yaml
), you may leave the theme parameter empty:
theme: ""
Hugo will treat the root directory as the active theme. However, this approach is less modular and not recommended for distribution or collaborative workflows. If you choose this method, ensure that all theme-related folders are located in the root of your project — not inside themes/
. Otherwise, Hugo will not detect them correctly.
This section controls how content is divided and displayed across multiple pages, particularly for list views such as product category pages or search results.
pagerSize
is located within the pagination
section of config.yaml
.config.yaml
.config.yaml
: pagerSize: 9
pagerSize
is set to 9, Hugo will automatically generate three pages for your product listings: the first two pages will display 9 products each, and the third page will display the remaining 2 products. While a global pagerSize
is defined here, your theme also has a products_per_page
setting under params.product which overrides this for product listings specifically. This allows for more granular control.path
is also found within the pagination
section of config.yaml
.config.yaml
.config.yaml
: path: "page"
path: "page"
, Hugo will generate pagination URLs in the format of /section/page/2/
, /section/page/3/
, etc. For example, if you have a product category at /categories/aurea/
, the second page of that category's products would be /categories/aurea/page/2/
. This is a clean and widely recognized URL structure for paginated content.This section allows you to define custom ways to classify and organize your website's content, beyond the default sections. Taxonomies are crucial for improving content discoverability and site navigation.
category
) and plural ("categories"
) terms for your website's category taxonomy. Categories are typically broad groupings for your content.taxonomies
section in config.yaml
. It directly influences:
categories
(e.g., content/categories/aurea/_index.md
for "Aurea Forms")./categories/lux/
).config.yaml
.config.yaml
: category: "categories"
content/products/ignis-thunderbolt-gelifier.md
) uses the categories
field in its front matter (e.g., categories: ["Ignis"]
) to assign products to a category.content/categories/
and have _index.md
files (e.g., content/categories/ignis/_index.md
). These _index.md
files contain front matter relevant to the category itself, such as title
and description
.layouts/_default/taxonomy.html
): The layouts/_default/taxonomy.html
template is designed to display content based on the taxonomy term. It uses .Data.Term
to retrieve the current category name and filter related products.tag
) and plural ("tags"
) terms for your website's tag taxonomy. Tags are typically more granular keywords used to describe content.taxonomies
section in config.yaml
. It operates similarly to the category setting, defining the expected folder structure for tag pages (e.g., layouts/tags/
) and how tag links are generated.config.yaml
.config.yaml
: tag: "tags"
tags:
field commented out or empty in their front matter, your theme includes dedicated layout templates for tags in layouts/tags/list.html
and layouts/tags/terms.html
. This means your theme is fully prepared to utilize tags for additional content organization and filtering if you choose to implement them on your products or other content types.This section defines the various formats (beyond the default HTML) that Hugo will generate for different types of content on your website.
outputs
configuration is located within your config.yaml
.config.yaml
.config.yaml
:
outputs:
home:
- HTML
- JSON
page:
- HTML
section:
- HTML
taxonomy:
- HTML
home: - HTML - JSON
: This critical setting instructs Hugo to generate two versions of your homepage (content/_index.md
):
index.json
). This JSON file contains a structured list of your products, which is then loaded by your theme's real-time search functionality (static/js/search.js
). This allows users to search your products without requiring a server-side database.page: - HTML
: Standard individual content pages (like "About Us" at content/about-us.md
) will only be rendered as HTML.section: - HTML
: Section landing pages (e.g., content/products/_index.md
for all products, or content/categories/_index.md
for categories) will only be rendered as HTML.taxonomy: - HTML
: Individual taxonomy term pages (e.g., the page listing all products in the "Aurea Forms" category, located at /categories/aurea/
) will only be rendered as HTML.layouts/index.json
file is the specific Hugo template that defines the structure and content of the JSON output for your homepage, providing the data necessary for the static/js/search.js
script to perform its client-side search.This section of your config.yaml
file is crucial for how your website communicates with search engines regarding its structure and content updates. Configuring your sitemap correctly helps search engines like Google efficiently crawl and index your site, ultimately impacting your search visibility.
Here's a detailed breakdown of the settings under Sitemap Configuration in your config.yaml
:
config.yaml
, the default changefreq
is set to "daily"
."daily"
implies that the content of your site changes very frequently, encouraging search engines to crawl your site more often for fresh content. Other common values could include "always," "hourly," "weekly," "monthly," "yearly," or "never," depending on how often your content is actually updated.config.yaml
sets the default priority to 0.5
.yourdomain.com/sitemap.xml
).filename
is set to "sitemap.xml"
.sitemap.xml
. Using this conventional name ensures that search engines can easily locate and process your sitemap.These settings are located under the sitemap
parameter within your main Hugo config.yaml
file. Proper sitemap configuration is a fundamental aspect of SEO (Search Engine Optimization) and plays a vital role in ensuring your Aprelux theme is discoverable and ranks well.
menu.main
)This section within your config.yaml
file is crucial for defining the primary navigation structure of your Aprelux website. It controls what links appear in your main menu, their display text, and their order. Correctly configuring your navigation is key for user experience, ensuring visitors can easily find important sections of your site.
This is the top-level parameter under which all your main navigation menu items are defined. Each item within this list represents a link in your website's main navigation bar.
For each menu item, you will configure the following parameters:
menu:
main:
- name: "Home"
url: "/"
weight: 1
- name: "Shop"
url: "/products/"
weight: 2
- name: "Aurea"
url: "/categories/aurea/"
weight: 3
- name: "Nova"
url: "/categories/nova/"
weight: 4
- name: "Umbra"
url: "/categories/umbra/"
weight: 5
- name: "Lux"
url: "/categories/lux/"
weight: 6
- name: "Ignis"
url: "/categories/ignis/"
weight: 7
- name: "Reviews"
url: "/reviews/"
weight: 8
This structure allows you to have a flexible and organized navigation system for your Aprelux theme, directly impacting how users explore your product categories and essential pages.
markup.goldmark.renderer
)This section of your config.yaml
file controls how Hugo processes Markdown content, specifically regarding the rendering of raw HTML within your Markdown files. It directly impacts the flexibility and potential security of your content.
true
, instructs Hugo's Goldmark Markdown renderer to render raw or "unsafe" HTML directly within your Markdown content.config.yaml
: In your config.yaml
, unsafe
is explicitly set to true
.unsafe: true
is particularly important for themes like Aprelux that might embed custom HTML structures, shortcodes, or advanced partials directly within Markdown files. For instance, if you need to embed complex components like contact forms ({{< contactusform >}}
) that contain raw HTML, this setting ensures they are rendered correctly by the browser rather than being escaped or stripped out.unsafe: true
provides greater flexibility, it also carries a security consideration. If you allow external or untrusted users to submit content directly to your site (e.g., via comments or user-generated content that is then rendered as Markdown), there's a potential risk of Cross-Site Scripting (XSS) vulnerabilities. This is because malicious HTML or JavaScript could be injected into your pages. For a controlled e-commerce site like Aprelux, where content is managed by site administrators, this risk is generally mitigated, but it's important to be aware of.Here's how this setting is structured in your config.yaml
:
markup:
goldmark:
renderer:
unsafe: true
This configuration ensures that all the rich, custom HTML elements used throughout your Aprelux theme's content are displayed as intended.
mediaTypes, outputFormats
)This section of your config.yaml
file defines how Hugo handles different content types and the various output formats it generates for your website. This is crucial for controlling how your site's content is served, particularly for standard HTML pages and API endpoints (like a JSON feed for search functionality).
text/html
for web pages, image/jpeg
for JPEG images).config.yaml
:
mediaTypes:
text/html:
suffixes: ["html"]
.html
suffix as text/html
. While text/html
is a standard media type, explicitly defining it ensures consistent behavior and can be a precursor to defining other custom types if your theme required them (e.g., application/rss+xml
for RSS feeds).config.yaml
:
outputFormats:
HTML:
mediaType: "text/html"
baseName: "index"
HTML
: This is a named output format.mediaType: "text/html"
: This links the HTML output format to the previously defined text/html
media type. This tells Hugo to generate this output as standard HTML.baseName: "index"
: This specifies that the primary HTML output for pages (like your homepage or _index.md
files) should be named index.html
. This is the conventional filename for default pages in web servers.index.json
file for product data, crucial for the real-time search feature.These settings ensure that Hugo correctly builds the different file types necessary for your Aprelux site to function as expected, especially for serving web pages and providing data for interactive elements like search.
languages
)This section of your config.yaml
file is where you configure multilingual support for your Hugo website. By default, Hugo assumes a single language, but the languages
parameter allows you to define and customize settings for multiple languages, enabling your Aprelux site to serve content in different linguistic versions.
en, es, fr
), and its value contains specific configurations for that language.config.yaml
: In your provided config.yaml
, the languages
section is commented out. This means that multilingual support is currently disabled.en
):
en
: This is the language code for English. If you were to enable multilingual support, you would uncomment this block.title: "Aprelux"
: This parameter allows you to define a site title specific to this language. While it's "Aprelux" in this example, in a truly multilingual site, you might have title: "Aprelux.de"
for German and title: "Aprelux.es"
for Spanish, for instance. This ensures that the main site title dynamically changes based on the user's selected language.languages
block and define each language you want to support. Hugo then processes content files for each enabled language. This is a powerful feature for reaching a wider audience for your Aprelux e-commerce site.Here's how this setting is structured in your config.yaml
:
#languages:
# en:
# title: "Aprelux"
params
Section in config.yaml
)This chapter will delve into the params
section, which contains the most frequently modified settings for theme customization. Each parameter will be explained in detail, including its purpose and how to adjust it.
This section covers fundamental options for customizing the overall look and feel of your Aprelux theme.
config.yaml
, it is set to "dark"
."dark"
or "light"
to immediately change the site's primary color scheme. The theme includes CSS overrides for a light mode, defined in static/css/style.css
.config.yaml
, it is set to true
.true
, a visible toggle button will be displayed on your Aprelux site, providing a user-friendly way for visitors to adjust the theme to their preference.config.yaml
:
logo:
logo_header_light_theme: "/images/logo_header_light_theme.webp"
logo_header_dark_theme: "/images/logo_header_dark_theme.webp"
logo_footer_light_theme: "/images/logo_footer_light_theme.webp"
logo_footer_dark_theme: "/images/logo_footer_dark_theme.webp"
logo_header_light_theme
: Path to the logo displayed in the header when the light theme is active.logo_header_dark_theme
: Path to the logo displayed in the header when the dark theme is active.logo_footer_light_theme
: Path to the logo displayed in the footer when the light theme is active.logo_footer_dark_theme
: Path to the logo displayed in the footer when the dark theme is active..webp
format, which is recommended for modern web performance.static/images/
directory.site.webmanifest
.config.yaml
, the favicon is typically set as:
favicon: "/favicon.ico"
This is the fallback icon used by most desktop browsers.
static/
directory includes additional icons for platform-specific rendering:
favicon-16x16.png
and favicon-32x32.png
: Used by modern browsers for tab and bookmark icons.apple-touch-icon.png
: Displayed when users add your site to their iOS home screen.android-chrome-192x192.png
and android-chrome-512x512.png
: Used for Android home screen icons and PWA support.site.webmanifest
file defines your app-like behavior and icon set for PWA compatibility. It includes:
standalone
for app-like experience./
.<meta name="theme-color">
tags in your head.html
. These use media queries to match the user's system preference for light or dark mode:
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)">
This affects mobile browser chrome and PWA UI, but not your site's actual background color, which is controlled via CSS.
This section defines crucial metadata about your website, affecting its appearance in search results and overall attribution.
config.yaml
, it is set to "Modular theme built for symbolic clarity, category alignment, and scalable product presentation."
.hero_cm
)This section covers the Hero CM
block, which is one of two main hero options available in the Aprelux theme. The Hero CM
and Hero CMA
blocks serve as alternative hero sections - you can choose to use either one or test both to determine which better fits your project needs. Hero CM
is a more traditional, configuration-driven hero block that offers straightforward customization through config.yaml
settings. It integrates directly with the layouts/partials/hero-cm.html
file to control the appearance, content, and behavior of this prominent site element.
Both hero blocks can be enabled simultaneously for testing purposes by setting their respective enabled parameters to true in config.yaml
, but in practical implementation, it's recommended to use only one hero block to avoid visual conflicts and maintain a clean, focused homepage design. Choose Hero CM
if you prefer a simpler, configuration-based approach with direct control over layout positioning and styling options.
Here's a detailed, line-by-line explanation of the Hero CM
parameters:
Hero CM
This is the main block for configuring your Hero Content Management (CM) section.false
.false
, the hero section will not be visible. To enable it, you would change this value to true
."left"
."black"
.style.css
."right"
."left"
, "center"
, or "right"
."768px"
."55%"
."Explore Variants"
."Geometry-Aligned.<br> Reviewer-Ready"
."Modular layout. No drift.<br> Symbolic categories."
.image_position
is set to "left"
."/images/hero-cm-image-left.webp"
.static/images/
directory.image_position
is set to "right"
."/images/hero-cm-image-right.webp"
.image_position
to "right"
. The path refers to the static/images/
directory.image_left
image. This is crucial for SEO and accessibility, as it describes the image content for screen readers and when the image cannot be displayed."Symbolic category image - left"
.image_right
image."Symbolic category image - right"
.true
."gold"
.Here's how these settings are structured in your config.yaml
:
hero_cm:
enabled: false # Set to false to disable hero section
image_position: "left" # "left" or "right"
background_color: "black" # Direct CSS color (hex, rgb, named colors, etc.)
text_alignment: "right" # "left", "center", or "right"
mobile_breakpoint: "768px" # Custom breakpoint for mobile layout
text_wrapper_max_width: "55%" # Max width for text wrapper (%, px, rem, etc.)
# Text Content
button_text: "Explore Variants"
headline: "Geometry-Aligned <br> Reviewer-Ready."
slogan: "Modular layout. No drift.<br> Symbolic categories."
# Images
image_left: "/images/hero-cm-image-left.webp"
image_right: "/images/hero-cm-image-right.webp"
image_alt_left: "Symbolic category image - left"
image_alt_right: "Symbolic category image - right"
# Spark Effect Settings
spark_effect:
enabled: true # Set to false to disable spark effect
color: "gold" # Hex color for spark effect
# Button Settings
button:
link: "/products" # Button destination URL
target: "_self" # "_self" or "_blank"
use_button_element: true # Use <button> instead of <a> for theme styling
This comprehensive breakdown covers all parameters within the Hero CM
section.
hero_cma
)This section covers the Hero CMA
block, which is one of two main hero options available in the Aprelux theme. The Hero CMA
and Hero CM
blocks serve as alternative hero sections - you can choose to use either one or test both to determine which better fits your project needs. Hero CMA
is a more dynamic, content-driven hero solution that offers greater flexibility by combining configuration settings from config.yaml
with rich content management through the content/_index.md
file, rendered via Hugo's layouts/index.html partials.
Both hero blocks can be enabled simultaneously for testing purposes, but in practical implementation, it's recommended to use only one hero block to maintain optimal site performance and user experience. Choose Hero CMA
if you prefer a more content-driven approach with advanced features like rotating text animations, feature blocks, configurable quotes, and multi-part content sections that can be individually toggled on or off.
Here's a detailed breakdown of the Hero CMA
parameters from your config.yaml
and how they connect with your content/_index.md
and layouts/index.html
files:
hero_cma
) Parameters in config.yaml
The Hero CMA
block in your config.yaml
acts as the control panel for enabling and managing the various content parts of this dynamic hero section.
Hero CMA section
.true
.true
, the Hero CMA
section will be displayed on your homepage. If set to false
, the entire section will be hidden.Hero CMA
. This includes the main heading, subheading, rotating words, and the primary hero image.true
.Hero CMA
will be active and displayed.Hero CMA
, which—when use_quote
is disabled—displays an <h2> headline intended to introduce part3, sourced from _index.md
.true
.Hero CMA
displays an <h2> headline or a custom quote block.true
.true
, the quote_text
and quote_author
defined in config.yaml
will be used in part2 (positioned above part3), instead of the headline
from _index.md
.both!
- part2 and use_quote must be enabled.use_quote
is true
."Launch Your Online Store on a Static Website — Lightning Fast, Hosting-Free"
.true
.content/_index.md
ParametersWhile the Hero CMA
section in config.yaml
enables and controls which parts of the Hero CMA
are shown, the actual content for these parts is primarily sourced from the hero_cma
parameters within your content/_index.md
file. The layouts/index.html
template then pulls these values to construct the final homepage.
For Hero CMA
, the primary content comes from the hero_cma
block in content/_index.md
.
Here's how hero_cma
from content/_index.md
contributes:
_index.md
: "Turn Visitors Into Buyers"
.part1_enabled
is true
._index.md
: "Built for agencies, developers, and driven sellers"
.mainHeading
._index.md
: "❖╬❖"
._index.md
: ["Speed First", "Stripe Native", "Zero Hosting", "Design Clarity", "Safe Checkout"]
._index.md
: heroImage: "images/hero-cma-image.webp"
.Hero CMA
section. The path refers to the static/images/
directory.use_quote
in config.yaml
is set to false
._index.md
: "Modular variants across all categories"
._index.md
: "❖╬❖"
.emojiAlt, emojiSrc, count, title, description, link text, url, modal, modalText
)
_index.md
:
Note:
In this example, the "text" and "url" fields are empty. Because "modal" is set to true
and "modalText" is defined as "Stripe Checkout Demo ⇲", a button that triggers a modal window will be displayed beneath this block. The content of this modal window is stored in the partials folder: layouts/partials/stripe-testing-info.html
.
If both the "link" and "modal" fields are empty, no button will be displayed below this feature block. If the "modal" fields are empty while "text" and "url" are defined, a link button will appear instead. You can control whether it opens externally using the external
field, as shown in Example 2 below.
_index.md
:
layouts/index.html
Orchestrates Hero CMAThe layouts/index.html
file is the central template for your homepage. It dynamically checks the enabled
and partX_enabled
flags within .Site.Params.hero_cma
(from config.yaml
) to decide which content blocks to render. It then accesses the relevant content from .Params.hero_cma
(from content/_index.md
) to populate those blocks.
For example, the presence of {{ if .Site.Params.hero_cma.enabled }}
and nested {{ if .Site.Params.hero_cma.part1_enabled }}
directives in layouts/index.html
dictates whether the content for each part of the Hero CMA is displayed. When enabled, it directly injects the mainHeading
, subHeading
, textSeparator
, containerRamzi
, dedication
, and featureBlocks
values from the hero_cma
section of your _index.md
file.
This setup allows for powerful customization: you can quickly toggle entire sections on or off from config.yaml
, while modifying the actual text content and images directly in content/_index.md
without touching the theme's core HTML files.
Here's how these settings are structured in your config.yaml
(snippet):
hero_cma:
enabled: true
part1_enabled: true
part2_enabled: true
part3_enabled: true
use_quote: true
quote_text: "Launch Your Online Store on a Static Website — Lightning Fast, Hosting-Free"
quote_author: "Aprelux – The Ultimate Hugo E-Commerce Theme with Built-In 💰 STRIPE Integration"
And a snippet from content/_index.md
for context:
title: "hero_cma:
mainHeading: |
Turn Visitors Into Buyers
subHeading: "Built for agencies, developers, and driven sellers"
textSeparator: "❖╬❖"
containerRamzi:
- "Speed First"
- "Stripe Native"
- "Zero Hosting"
- "Design Clarity"
- "Safe Checkout"
heroImage: "images/hero-cma-image.webp"
dedication: "Modular variants across all categories"
secondTextSeparator: "❖╬❖"
featureBlocks:
- id: "feature-variants"
emojiAlt: "💎"
emojiSrc: "https://s.w.org/images/core/emoji/15.1.0/svg/1f48e.svg"
count: ""
title: "Stripe Integration"
description: "Sell directly from your static website․ Skip hosting fees. Aprelux processes secure payments without servers"
link:
text: ""
url: ""
external: false
modal: true
modalText: "Stripe Checkout Demo ⇲"
- id: "feature-logic"
emojiAlt: "🔥"
emojiSrc: "https://s.w.org/images/core/emoji/15.1.0/svg/1f525.svg"
count: ""
title: "Advanced Order Triggers"
description: "Collect and organize order data via Google Sheets, Formspree, Airtable and send instant email alerts"
link:
text: "Google Sheets Viewer ↗"
url: "https://docs.google.com/spreadsheets/d/1mss-QIR4fn9LTKLFmBtdYFT9tJC4KdHry-BAZ1FLjHQ/edit?usp=sharing"
external: true
modal: false
modalText: ""
closing_hero
)This section covers the Closing Hero
block, which is a promotional content area positioned below the featured products section on your Aprelux homepage. While named "Closing Hero"
for consistency with the theme's hero block architecture, this section functions more as a call-to-action or promotional area rather than a traditional hero block. Like Hero CMA
, it leverages the same content management approach - combining settings from config.yaml
for visibility control with rich content sourced from the closing_hero
parameters in your content/_index.md
file, rendered through the layouts/index.html
template.
Here's a detailed breakdown of the closing_hero
parameters and how they integrate with your site's content architecture:
closing_hero
) Parameters in config.yaml
The closing_hero
block in your config.yaml
primarily controls the overall enablement of this section.
Closing Hero
section.true
.true
, the Closing Hero
section will be displayed on your homepage. If set to false
, the entire section will be hidden.The Closing Hero
section appears in the following sequence on your homepage:
Hero CM
or Hero CMA
- Primary hero section (top of page)Closing Hero
- Promotional/CTA section (this section)This positioning makes Closing Hero
ideal for reinforcing your brand message after visitors have viewed your product offerings, creating a natural flow toward conversion.
content/_index.md
ParametersWhile the Closing Hero
section in config.yaml
enables the section, the actual content for this area is sourced directly from the closing_hero
block within your content/_index.md
file. The layouts/index.html
template then pulls these values to construct the final homepage.
Here's how closing_hero
from content/_index.md
contributes:
_index.md
: "The Aprelux theme is much more than meets the eye — it offers dozens of unique features"
._index.md
: "❖╬❖"
._index.md
: Begins with "To better understand what can be easily tweaked, customized, or replaced with alternative versions, visit our About Us page..."
._index.md
: ""
(empty string, meaning no visible separator)._index.md
: "Explore Aprelux"
._index.md
: "/about-us/"
._index.md
: "images/closing-hero-image.webp"
.static/images/
directory.layouts/index.html
Renders Closing HeroThe Closing Hero
section is rendered within the main layouts/index.html
template using a conditional check for {{ if .Site.Params.closing_hero.enabled }}
. When enabled, it creates a full-width promotional section with centered content that includes:
closing_hero.quote
closing_hero.heroText
closing_hero.ctaText
and closing_hero.ctaLink
closing_hero.closingHeroImage
closing_hero.textSeparator
and closing_hero.secondTextSeparator
Here's how these settings are structured in your config.yaml
:
closing_hero:
enabled: true # Set to false to disable Closing Hero section
And the corresponding content structure in content/_index.md
:
closing_hero:
quote: "The Aprelux theme is much more than meets the eye — it offers dozens of unique features"
textSeparator: "❖╬❖"
heroText: |
To better understand what can be easily tweaked, customized, or replaced with alternative versions, visit our About Us page. There, we highlight the key aspects that make Aprelux distinct from other Hugo themes — and from static website themes in general. Just click the link to explore
secondTextSeparator: ""
ctaText: "Explore Apreluxs"
ctaLink: "/about-us/"
closingHeroImage: "images/closing-hero-image.webp"
This dual-source approach allows you to quickly enable or disable the entire section from config.yaml
while maintaining full editorial control over the content through content/_index.md
.
This section within your config.yaml
's params
block is crucial for customizing how products are displayed across your Aprelux site. It includes settings that affect product listings, individual product pages, and even the homepage featured product section, offering granular control over the user experience.
Here's a detailed breakdown of the product configuration parameters:
config.yaml
These settings are located under the params
section in your config.yaml
file.
false
.false
, thumbnails appear vertically alongside the main product image. If set to true
, they display horizontally. This behavior is handled by product-gallery.html
."center"
."flex-start" (left)
or "center"
.!important
to gallery CSS rules where needed.true
.galleryAlignment
, when set to "flex-start"
, retains its left-aligned positioning across all screen sizes, overriding any conflicting styles.true
.true
, product cards will display a different image on hover, adding a dynamic visual element. This setting is used by product-card.html
.true
.true
, a brief description from the product's front matter will appear directly on the product card, enhancing quick browsing.true
.true
, badges indicating "Available" or "Coming Soon" will appear on product cards, depending on the product's stripe_price_id
."Available"
.stripe_price_id
)."Coming Soon"
."glowing"
."glowing"
(which applies a luminous text shadow for a dynamic effect) or "gradient"
(which applies a background gradient). This styling is defined in style.css and applied by sale-badge.html
."Sale"
.sale-badge.html
..md
file, insert the line sale_badge: true
.
sale_badge_text: "50% Off"
or any other value.
archetypes/default.md
, which inserts them into each newly created product file. By default, sale_badge
is set to false
, so the badge will not be displayed unless explicitly enabled per product. Users can modify this value to true
and customize the badge text as needed.
# sale_badge: false
# sale_badge_text: "50% Off"
9
.layouts/products/list.html
and layouts/_default/taxonomy.html
.description_title: "Description"
additional_info_title: "Additional Information"
reviews_title: "Reviews"
product-tabs.html
.ignis-thunderbolt-gelifier.md
:
---
title: "Ignis Thunderbolt Gelifier"
description: "Electric-triggered symbolic stream..."
date: 2025-07-01T02:51:53+08:00
...
# Additional product info
additional_info:
origin: "Ignis Discharge Tier"
tone: "Kinetic"
signature: "Electric-triggered burst ignition"
resonance: "Modular rhythmic acceleration"
configuration: "Feed-based discharge with recharge loop"
variants: ["Blue", "Red", "Purple", "Black", "Green"]
# Reviews
reviews:
- author: "Carlos Denton"
rating: 5
date: "2025-06-22"
content: "Burst ignition felt perfect for high-motion intro logic. Symbolic acceleration came through clean."
image: "/images/reviews/ignis-thunderbolt-gelifier/ignis-thunderbolt-gelifier (2).webp"
- author: "Lindsay Graves"
rating: 5
date: "2025-06-16"
content: "Grid setup was fast. Content stream structure was responsive."
image: "/images/reviews/ignis-thunderbolt-gelifier/ignis-thunderbolt-gelifier (3).webp"
---
The Ignis Thunderbolt Gelifier is a fast-discharge symbolic layout module built for continuous burst rhythm and modular ignition logic. Its recharge-driven pulse mechanism supports semi and full stream pacing, adapting to theme velocity and feed structure with crisp motion and reactive tension...
Content placement logic:
additional_info
block populates the "Additional Information" tab.reviews
block populate the "Reviews" tab.---
and beginning with The Ignis Thunderbolt Gelifier...
) populates the "Description" tab.description: "Electric-triggered symbolic stream..."
is used as the SEO description and also appears in list views. It is not included in the "Description" tab.true
.true
, reviews from other products are aggregated and displayed on product pages with fewer than 3 own reviews. This behavior is managed by global-reviews.html
."Be the first to review this product!"
.5
.global-reviews.html
.true
."Reviews for our shop overall"
."Reviews for our other products"
.content/reviews/_index.md
).9
./reviews/
page.12
.layouts/index.html
.These settings collectively allow you to fine-tune the presentation and interaction of your products, from how they appear in listings to the detailed layout of individual product pages and review sections.
Here's how these settings are structured in your config.yaml
(snippet):
# PRODUCT CONFIGURATION
gallery:
horizontal_thumbnails: false # Set to false for vertical thumbnails
buttonAlignment: "center" # "left" or "center"
galleryAlignment: "center" # "flex-start" (left) or "center"
useImportantGallery: true # to add !important when needed
enableHoverImage: true
showProductDescription: true # Toggle product description display
productBadge:
enabled: true # Toggle the availability badge globally
availableText: "Available" # Text when product is available
comingSoonText: "Coming Soon" # Text when product is not available
sale_badge: "glowing" # Options: "glowing" or "gradient"
sale_badge_text: "Sale" # Default text for sale badge
product:
products_per_page: 9 # Number of products shown per category/listing
tabs:
description_title: "Description"
additional_info_title: "Additional Information"
reviews_title: "Reviews"
reviews:
global_reviews: true
no_reviews_message: "Be the first to review this product!"
max_global_reviews: 5
sort_by_date: true
global_reviews_title: "Reviews for our shop overall"
other_products_title: "Reviews for our other products"
reviews_per_page: 9 # Reviews per page on the reviews page
homepage:
featuredLimit: 12 # Featured products count (homepage)
stripe
)This section is dedicated to configuring your Stripe settings within the params
block of your config.yaml
file, which is essential for handling secure payment processing on your Aprelux site.
config.yaml
These settings are located under the params
section in your config.yaml
file.
pk_test_
for testing or pk_live_
for live transactions."pk_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
.stripe.js
file handles this integration, preparing items for Stripe checkout and redirecting the user to Stripe's secure payment page."usd"
.These two parameters are crucial for enabling your e-commerce functionality, allowing customers to make purchases through Stripe's payment gateway.
Here's how these settings are structured in your config.yaml
(snippet):
# PAYMENT INTEGRATION
stripe:
publishable_key: "pk_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
currency: "usd"
For a detailed tutorial on integrating Stripe into your site, refer to Stripe Integration.
This section in your config.yaml
's params
block is vital for integrating various analytics and tracking services into your Aprelux site. These settings allow you to monitor website traffic, user behavior, and marketing campaign performance.
config.yaml
These settings are located under the params
section in your config.yaml
file.
true
.true
, the theme will attempt to load scripts for any enabled analytics services. If false
, no analytics scripts will be loaded, regardless of individual service settings. This is controlled by the layouts/partials/analytics.html
partial."G-xxxxxxxxxx"
).ecommerce-events.html
.google-analytics.html
) to send data to your GA4 property."GTM-XXXXXXX"
).gtm-head.html
) and body script (gtm-body.html
), allowing you to manage various tags and tracking pixels through GTM."XXXXXXXXXXXXXXX"
).facebook-pixel.html
) is included to track website events for Facebook advertising."yourdomain.com"
).plausible.html
) is added, providing lightweight, privacy-friendly analytics."https://cloud.umami.is/script.js"
)."xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
).umami.html
) is included for web analytics.privacy.enabled
and cookie_consent
are true
, a cookie consent banner (cookie-consent.html
) will appear, typically requiring user acceptance for certain cookies. The Privacy Policy page in the content also details the site's data collection practices.These parameters provide comprehensive control over your site's data collection and privacy settings, allowing you to choose which services to use and configure them according to your needs and local regulations.
Here's how these settings are structured in your config.yaml
(snippet):
# ANALYTICS & TRACKING
analytics:
enabled: true
# Google Analytics 4
google:
enabled: true
id: "G-xxxxxxxxxx"
enhanced_ecommerce: true
anonymize_ip: true
# Google Tag Manager
gtm:
enabled: false
id: "GTM-XXXXXXX"
# Facebook Pixel
facebook:
enabled: false
pixel_id: "XXXXXXXXXXXXXXX"
advanced_matching: true
# Plausible Analytics
plausible:
enabled: false
domain: "yourdomain.com"
# Umami Analytics
umami:
enabled: true
script_url: "https://cloud.umami.is/script.js"
website_id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# Privacy & Compliance
privacy:
enabled: false
gdpr_compliance: true
cookie_consent: true
This section in your config.yaml
's params
block is dedicated to configuring the social sharing buttons on your Aprelux site. These settings allow visitors to easily share your product pages or other content across various social media platforms.
config.yaml
These settings are located under the params
section in your config.yaml
file.
These parameters give you granular control over how and where social sharing features are presented on your e-commerce site, crucial for extending your reach and marketing efforts.
Here's how these settings are structured in your config.yaml
(snippet):
socialShare:
enabled: true
style: "icons" # Options: "icons", "buttons", "minimal"
buttons:
facebook:
enabled: true
url: "https://www.facebook.com/xxxxxxxxxx/"
twitter:
enabled: true
username: "xxxxxxxxxx"
pinterest:
enabled: true
username: "xxxxxxxxxx"
whatsapp:
enabled: true
email:
enabled: true
copyLink:
enabled: true
This section in your config.yaml
's params
block is dedicated to configuring the appearance and behavior of pagination controls on your Aprelux site. These settings allow you to customize how users navigate through product listings, review pages, or any other content split across multiple pages.
config.yaml
These settings are located under the params
section in your config.yaml
file.
true
.true
, users will see numbered links (e.g., 1, 2, 3...) allowing them to jump directly to a specific page. If false
, only "Previous" and "Next" buttons (if enabled) would appear. This setting is handled by the layouts/partials/pagination.html
partial.true
.true
, users can navigate sequentially through pages using these directional buttons. If false
, only page numbers (if enabled) would be shown.7
.max_page_links
is 7, the pagination might show "1 ... 4 5 7 8 ... 20" instead of all 20 numbers, making navigation cleaner. This is implemented in the layouts/partials/pagination.html
partial.These parameters ensure that your site's pagination is both functional and visually appealing, adapting to the amount of content and your design preferences.
Here's how these settings are structured in your config.yaml
(snippet):
paginationStyle:
show_page_numbers: true
show_prev_next: true
max_page_links: 7
This section in your config.yaml
's params
block is dedicated to configuring the content and structure of your website's footer on Aprelux. This includes company information, a newsletter signup, and two distinct footer menus.
config.yaml
These settings are located under the params
section in your config.yaml
file.
These parameters collectively define the content and navigation structure of your site's footer, making it a critical area for user information and conversion.
Here's how these settings are structured in your config.yaml
(snippet):
footer:
# Company Information
about: "About us"
email: "[email protected]"
extra_line: "Active since 2022"
address: "Address: Placeholder for buyer customization"
# Newsletter Signup
sign_up: "Signup for Newsletter"
slogan: "Latest News and Discounts"
formspreeID: "f/xxxxxxxx"
# Footer Menu 1: Policies
footer_menu_1: "Our Policies"
policiesMenu:
- name: "Privacy Policy"
url: "/privacy-policy/"
- name: "Terms & Conditions"
url: "/terms-conditions/"
- name: "Shipping & Handling"
url: "/shipping-handling/"
- name: "Return Policy"
url: "/return-policy/"
- name: "Trademark & Copyright"
url: "/trademark-copyright/"
# Footer Menu 2: Support Center
footer_menu_2: "Support Center"
helpMenu:
- name: "About Us"
url: "/about-us/"
- name: "Tracking"
url: "/tracking/"
- name: "Contact us"
url: "/contact-us/"
This section in your config.yaml
's params
block is dedicated to configuring the Formspree ID for your site's contact form on Aprelux. This ensures that messages submitted through the contact form are correctly routed to your Formspree endpoint for processing.
config.yaml
These settings are located under the params
section in your config.yaml
file.
content/contact-us.md
—to a Formspree endpoint. Formspree acts as a backend for your forms, collecting submissions and forwarding them to your designated email address without requiring server-side code. Atention! This contact form is different from the one on the home page, which is limited to email collection only!
"f/yyyyyyyy"
.{{< contactusform >}}
), this Formspree ID ensures that their message is sent to you. The contact page itself is located at content/contact-us.md
.These parameters are crucial for enabling a functional contact form on your Aprelux site, allowing users to easily get in touch with you.
Here's how these settings are structured in your config.yaml
(snippet):
contact_page:
formspreeID_contact: "f/yyyyyyyy"
This section in your config.yaml
's params
block is dedicated to configuring how order data is handled and notifications are sent after a successful payment on your Aprelux site. This includes options for email notifications via Formspree, integration with Google Sheets, Airtable, and settings for placeholder images on the success page.
config.yaml
These settings are located under the params
section in your config.yaml
file. They are used to configure order notification behavior on the success page, which interacts with the shortcode {{< success-handler >}}
to process and dispatch order data. Additionally, these settings define image assets and placeholders used for visual feedback on the success page.
enabled: false
: Currently disabled, meaning Formspree email notifications are not active.id: "f/zzzzzzzz"
: Your specific Formspree form ID.enabled
were true
, Formspree would receive order data and forward it as an email. enabled: false
: Currently disabled.scripturl: "https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/exec"
Replace this placeholder with the deployment URL of your Google Apps Script Web App. To obtain it, deploy the order-to-sheets.js
script (located in static/js
) via the Google Apps Script editor linked to your target Google Sheet.enabled
were true
, order details would be automatically sent to the configured Google Sheet, providing a centralized database of your sales. The google-sheets-order-sync.js
script handles the doPost
function to receive data, including product details, variations, and prices — and dispatches email notifications without quota limits.For a detailed tutorial on integrating Google Sheets into your site, refer to Google Sheets Integration.
enabled: false
: Currently disabled.apikey: ""
(pat_ prefix expected): Your Airtable API key.baseid: ""
(app prefix expected): Your Airtable base ID.tablename: "Orders"
: The name of the table in your Airtable base where orders should be stored.enabled
were true
, order information would be sent to your specified Airtable base and table, offering another robust way to manage your sales records.false
.false
, the theme will attempt to use actual product images. If true
, it would display a generic placeholder image defined by the next two parameters."placeholder"
.placeholder.webp
) for the image. The image is expected to be in static/images/
."webp"
.placeholderImageName
to form the full path of the placeholder image (e.g., /images/placeholder.webp
).These settings provide comprehensive options for post-order data management and notification, crucial for e-commerce operations.
Here's how these settings are structured in your config.yaml
(snippet):
success_page:
notifications:
# METHOD 1: Email via Formspree
formspree:
enabled: false # Set to "false" or "true"
id: "f/zzzzzzzz" # Your Formspree form ID (after f/)
# METHOD 2: Google Sheets integration
googlesheets: # Note: lowercase 's' in 'sheets'
enabled: false # Set to true to enable
scripturl: "https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/exec" # Your Google Apps Script Web App URL
# METHOD 3: Airtable integration
airtable:
enabled: false # Set to true to enable
apikey: "" # Your Airtable API key (starts with pat_)
baseid: "" # Your Airtable base ID (starts with app)
tablename: "Orders" # Name of your Airtable table
# Image settings (optional)
usePlaceholderImagesOnSuccess: false # Set to true to use placeholder images
placeholderImageName: "placeholder" # Name of placeholder image file
imageExt: "webp" # Default image extension
This section in your config.yaml
's params
block is dedicated to configuring search suggestions — including their display names, target URLs, and the total number shown in the modal search box. This box is triggered by clicking the Search option in the header menu.
The search functionality relies on JavaScript (search.js
) to load and filter content from a JSON index (index.json
). However, the ability to define search suggestions has been moved to config.yaml
for convenience and ease of customization.
Here’s how these settings are structured under your theme parameters:
searchSuggestions:
enabled: true
maxSuggestions: 5
tags:
- label: "Aurea Forms"
query: "aurea"
- label: "Nova Emitters"
query: "nova"
- label: "Umbra Shields"
query: "umbra"
- label: "Lux Frames"
query: "lux"
- label: "Ignis Cores"
query: "ignis"
This chapter will explain how content is organized within the Aprelux theme and how to create new pages and products using archetypes. Understanding this structure is key to managing your site's content effectively, from basic informational pages to detailed product listings and customer reviews.
This section explores the primary directories responsible for content within your Aprelux Hugo E-commerce Theme. Understanding these directories and their purpose is fundamental to adding, modifying, and organizing your website's content.
archetypes/
→ Default content blueprint
This directory contains blueprint files that Hugo uses to pre-populate new content files with standard front matter and structure. This saves you time and ensures consistency across your site.
default.md
: This is the default archetype used when you create new content, such as a new product or a regular page.
default.md
:
title
: The main title of your content (auto-generated from the filename).description
: A short summary and meta description. Appears in listing views; useful for SEO.date
: The publication date, automatically set to the current date when created.price
: The product’s price.stripe_price_id
: The Stripe Price ID, used for e-commerce checkout integration.sale_badge
: Boolean (true/false) to toggle the sale badge display.sale_badge_text
: Custom text for the sale badge (e.g., "50% Off").featured
: Boolean to mark a product as featured. Enables homepage placement.variations
: Defines product options such as "Color", with values like ["White", "Exotic"]. Variation sets are fully customizable and modular — add, rename, or restructure as needed.categories
: Assigns the content to specific categories (e.g., ["aurea", "nova", "umbra", "lux", "ignis"]).tags
(commented out): Optional field for more granular content classification.image
(commented out): A single thumbnail for product galleries — ideal for minimal setups or single-image products.images
: A list of image paths for product galleries.additional_info
(commented out): An optional section for extra product details (e.g., origin, weight). When uncommented and populated, it adds an "Additional Information" tab on the product page, positioned to the right of the "Description" tab.reviews
(commented out): An optional list for embedding reviews directly in the content file, including author, rating, date, content, and image. When uncommented and populated, it adds a "Reviews" tab on the product page, positioned to the right of the "Description" and "Additional Information" tabs.your-website/archetypes/default.md
(or archetypes/default.md
relative to your Hugo project root).content/
→ Site pages, products, categories, reviews
This is the heart of your website's actual content. Each Markdown file (.md
) within this directory represents a page or a piece of content, organized into logical subdirectories.
about-us.md
: Explains your company, mission, and team. Its front matter defines the title, URL (/about-us/
), layout (single
), and description. The content uses markup: "html"
to allow rich text.cancel.md
: The page displayed if a payment is cancelled, reassuring the user no charges were made and offering options to return to cart or continue shopping.contact-us.md
: Provides contact information and often includes a form. It integrates a shortcode ({{< contactusform >}}
) for the contact form.privacy-policy.md
: Outlines your privacy practices, data collection, and compliance with acts like California Online Privacy Protection Act and COPPA.return-policy.md
: Describes the 30-day return policy and how to prepare returns, with specific notes for clothing items.shipping-handling.md
: Details shipping options, international delivery, delays, and tracking information.success.md
: The post-payment page confirming the order and outlining next steps. It invokes the {{< success-handler >}}
shortcode to process orders, generate email notifications, and dispatch data to external archives such as Google Sheets, Forspree, and Airtable.terms-conditions.md
: Contains legal terms and conditions, disclaimers, and limitations of liability.tracking.md
: A dedicated page for parcel tracking via 17Track
.trademark-copyright.md
: States trademark and copyright protections for the brand and content._index.md
: The main content file for your homepage, holding dynamic hero section content like hero_cma
and closing_hero
parameters.markup: "html"
) for complex structures. Their front matter includes title
, url
, draft
, and layout
.your-website/content/
.categories/aurea/_index.md
.categories/nova/_index.md
.categories/umbra/_index.md
.categories/lux/_index.md
.categories/ignis/_index.md
._index.md
files contain specific front matter for search engine optimization (SEO) and display, such as:
title
: The category name.description
: Defines a short category summary, displayed on the category page beneath the title and above the product listing.seo_description
: A detailed description for search engines.category_description
: Provides an extended, user-facing summary for the category page, displayed beneath the product listing.keywords
: Relevant keywords for the category.image
: Specifies the image placement for the category.your-website/content/categories/
.products/ignis-thunderbolt-gelifier.md
, products/umbra-ghoststrike-flow-tier.md
, etc.default.md
archetype, and includes:
title, description, date
.price, stripe_price_id
: Crucial for cart and payment integration.sale_badge, sale_badge_text, featured
: For promotions and homepage display.variations
: Product options (e.g., Color, Size, Type).categories
: Links the product to its respective categories.image, images
: Paths to product images for the gallery.additional_info
: Structured key-value pairs for technical specifications (e.g., load, power, etc.) When added or uncommented, this field populates the Additional Information tab on the product page.reviews
: Specific customer reviews for that product, including author, rating, date, content, and an optional image. When added or uncommented, this field populates the Reviews tab on the product page.your-website/content/products/
.reviews/_index.md
.title
, description
, layout
(reviews
), and url
.your-website/content/reviews/
.This foundational understanding of your content directories and their associated front matter is crucial for effectively managing and expanding your Aprelux theme website.
layouts/
directory)This chapter is crucial for understanding how the Aprelux Hugo E-commerce Theme's structure and appearance are defined using HTML templates and reusable components. It will explain how Hugo takes your content and wraps it in these layouts to render the final web pages.
_default/
)This section is vital for understanding the foundational HTML structures that Hugo uses to render the various pages of your Aprelux website. The layouts/_default/
directory contains fundamental templates that serve as the base for most page types on your site. These templates define the overarching structure, including where content, headers, footers, and other common elements are placed.
baseof.html
baseof.html
. It defines the global structure of an HTML document, including the <html>
, <head>
, and <body>
tags, and acts as a wrapper for all other layouts.head.html
, analytics.html
, header.html
, footer.html
, and cart-modal.html
, ensuring these components are present on every page. Content from specific page layouts (like single.html
or list.html
) is injected into the main block defined within baseof.html
.layouts/_default/baseof.html
.single.html
about-us.md
), "Contact Us" (contact-us.md
), "Tracking" (tracking.md
), and policy pages such as "Privacy Policy" (privacy-policy.md
), "Return Policy" (return-policy.md
), "Shipping & Handling" (shipping-handling.md
), and "Terms & Conditions" (terms-conditions.md
). It displays the page title, date (if applicable), and the main content of the Markdown file.layouts/_default/single.html
.search.html
search.js
) to load and filter content from a JSON index (index.json
).layouts/_default/search.html
.success.html
success-handler
shortcode, which handles order notifications and dispatches data to external archives such as Google Sheets, Forspree, and Airtable.layouts/_default/success.html
.taxonomy.html
product-card.html
partial for each.layouts/_default/taxonomy.html
.terms.html
layouts/_default/terms.html
.partials/
)This section delves into smaller, reusable HTML snippets that are included across multiple layouts, promoting reusability and simplifying maintenance.
Core Site Components
header.html
head.html
:
These partials define the site's header, the footer, and the <head>
section of the HTML document, respectively. Their use ensures consistent branding, navigation, and metadata across all pages of your Aprelux site. The head.html
partial, for instance, includes the page title and favicon. The header.html
contains the site logo and main navigation menu, while the footer.html
includes company information, newsletter signup, and footer menus.
layouts/partials/head.html
, layouts/partials/header.html
, layouts/partials/footer.html
.Product Display Components: These partials are specifically designed for displaying various aspects of product information.
product-card.html
:
This partial is used to render individual product listings on pages such as category pages (taxonomy.html
) or the main product listing page (products/list.html
). It displays product images, title, description, price, variations, sale and availability badges. It also handles hover effects for product images if enableHoverImage
is true
in config.yaml.
layouts/partials/product-card.html
.product-gallery.html
:
Manages the display of product images and galleries on a single product page. It includes the main product image and thumbnails, with options for horizontal or vertical thumbnail layouts controlled by gallery.horizontal_thumbnails
in config.yaml. It also integrates the sale-badge.html
partial.
layouts/partials/product-gallery.html
.product-tabs.html
:
Organizes product details into clickable tabs for descriptions, additional information, and reviews on single product pages. The titles for these tabs can be customized via tabs
parameters in config.yaml. This partial dynamically determines whether to show tabs based on the presence of content for description, additional info, and reviews, and can also integrate site-wide (global) reviews.
layouts/partials/product-tabs.html
.sale-badge.html
:
Displays "Sale" badges on product images. Its style (e.g., "glowing" or "gradient") and default text are configurable in config.yaml.
layouts/partials/sale-badge.html
.cart-modal.html
:
This partial defines the structure for the interactive shopping cart pop-up, which displays cart items, quantities, and totals. Its functionality is driven by cart.js
.
layouts/partials/cart-modal.html
.Analytics and Tracking (analytics/
): This is a subdirectory containing various partials for integrating analytics and tracking services. The master analytics.html
partial controls which scripts load based on your config.yaml settings and whether the site is in production. Specific partials include:
ecommerce-events.html
: For enhanced e-commerce event tracking, particularly with Google Analytics.facebook-pixel.html
: For Facebook Pixel integration.google-analytics.html
: For Google Analytics 4 integration.gtm-body.html
and gtm-head.html
: For Google Tag Manager integration in the <body>
and <head>
sections, respectively.plausible.html
: For Plausible Analytics integration.umami.html
: For Umami Analytics integration.layouts/partials/analytics/cookie-consent.html
, layouts/partials/analytics/google-analytics.html
.global-reviews.html
:
This partial is responsible for fetching and displaying site-wide customer reviews, which can be aggregated from various products and shown on product pages or a dedicated reviews page (reviews/list.html
). It allows for sorting and limiting the number of displayed reviews, as configured in config.yaml.
layouts/partials/global-reviews.html
.pagination.html
:
This partial handles the logic for generating pagination controls on listing pages (e.g., product categories, the main product list). It includes functionality for previous/next buttons, page numbers, and ellipsis, with styling controlled by paginationStyle
parameters in config.yaml.
layouts/partials/pagination.html
.hero-cm.html
:
This partial is designed to render the main hero banner section of your website. This partial's appearance and content are dynamically controlled by the hero_cm
parameters in your config.yaml
file. This design choice allows for extensive customization without directly modifying the HTML template.
The visual styling for this section, including its animations, is defined in style.css
under the "Hero CM Sections & Animations" section. This partial is primarily integrated into the layouts/index.html
template, making it a key component of your website's homepage display.
layouts/partials/hero-cm.html
.stripe-testing-info.html
:
This partial contains the text displayed in a modal window, which can be triggered by a button on the homepage inside a Hero CMA block. To be precise, it can be configured for any of the existing featureBlocks
. This partial is purely optional and can be activated from within the _index.md
file located in the "Content" folder.
layouts/partials/stripe-testing-info.html
.This section focuses on the specialized HTML templates within the layouts/
directory that are tailored for specific content types on your Aprelux website. These layouts define how particular kinds of content, such as individual products, product listings, or customer reviews, are structured and presented to users.
products/list.html
content/products/_index.md
) or category-specific product listings (e.g., "Aurea," "Nova"). The template includes logic to create a paginator, controlling the number of products displayed per page based on the products_per_page
setting in your config.yaml. For each product, it calls the product-card.html
partial to render its individual card.layouts/products/list.html
.products/single.html
variations
). It incorporates the product-gallery.html
partial for displaying product images and the product-tabs.html
partial to organize product details (description, additional information, and reviews) into clickable tabs. The layout also includes social sharing buttons, whose position and style are configurable via theme parameters. After the main product details, it dynamically suggests related products based on shared categories.layouts/products/single.html
.reviews/list.html
content/reviews/_index.md
).layouts/reviews/list.html
.shortcodes/: This subdirectory contains custom shortcodes, which are small, reusable snippets of code that can be embedded directly within your Markdown content files to add dynamic functionality or complex HTML structures.
contactusform.html
:
This shortcode provides the HTML structure for the contact form on the "Contact us" page. It integrates with Formspree for form submission, using the ID defined in config.yaml.
layouts/shortcodes/contactusform.html
.success-handler.html
:
This shortcode is included on the success.html
payment confirmation page. Its primary role is to trigger backend processes for order notifications and data synchronization (e.g., sending emails via Formspree, or syncing data to Google Sheets or Airtable) after a successful payment, as configured in config.yaml.
layouts/shortcodes/success-handler.html
.This section details critical HTML templates and data files located directly within the layouts/
directory, serving foundational roles for your Aprelux website's functionality and user experience.
index.html
index.html
file resides directly within the layouts/
folder. It orchestrates the display of dynamic hero sections—specifically Hero CM, Hero CMA, and Hero Bottom—by evaluating the enabled
and partX_enabled
flags (e.g. part1.enabled, part2.enabled, part3.enabled) configured in your config.yaml under .Site.Params.hero_cma
and .Site.Params.closing_hero
. These flags determine which content blocks are rendered on the homepage. Section content such as mainHeading
, subHeading
, textSeparator
, containerRamzi
(for rotating words), dedication
, featureBlocks
, quote
, heroText
, ctaText
, and ctaLink
is pulled directly from the hero_cma
and closing_hero
parameters defined in the front matter of your content/_index.md
file. Additionally, this template displays featured products on the homepage by filtering and ranging through regular product pages, utilizing the product-card.html
partial for each item.layouts/index.html
.404.html
404.html
file is located directly inside the layouts/
folder. It provides a user-friendly message indicating that the requested page cannot be found. Crucially, it guides users back to important sections of your site by including links such as "Back to Home" and "Browse Products". It also integrates a search input field, allowing users to find what they're looking for directly from the error page. The page title in the browser tab for this error page will dynamically display "Page Not Found" along with your site's main title from config.yaml.layouts/404.html
.index.json
index.json
file is generated by Hugo directly into your site's root directory (e.g., public/index.json
after build) based on the outputs
configuration in your config.yaml, where it is explicitly set to output a JSON version for the home
section. The layouts/index.json
template defines the specific structure and content that will be included in this JSON output. For each product, it includes essential details such as the title
, url
, description
(truncated), image
path, price
, associated category
(or categories), tags
, and whether it is featured
. This structured data is then loaded and processed by the static/js/search.js
script, enabling quick and efficient filtering of products as a user types into the search bar.layouts/index.json
.static/js/
directory)This crucial chapter will explain the various JavaScript files responsible for adding interactivity and core e-commerce functionalities to your Aprelux site. These scripts manage everything from user interactions like adding items to a cart to essential backend integrations for order processing.
This section details the JavaScript files that drive the main interactive and e-commerce features directly on your website:
cart.js
:
addItem
: Handles adding products to the cart. This function includes logic for parsing prices and validating product ID values.removeItem
: Manages removing products from the cart.updateQuantity
: Allows for adjusting the quantity of items already in the cart.getTotal
: Calculates the total cost of all items in the cart.getItemCount
: Returns the total number of items currently in the cart.updateCartDisplay
: Responsible for updating the visual representation of the cart on the website, such as the cart badge count and the list of items in the cart modal.showNotification
: Displays alerts or notifications to the user (e.g., "Product added to cart!").prepareStripeLineItems
: Formats cart items into a structure compatible with Stripe's checkout system.lightbox.js
:
product-gallery.js
:
search.js
:
/index.json
file and enables immediate filtering and display of search results as the user types. It also handles prefilling search queries from URL parameters and displaying popular search suggestions.stripe.js
:
initiateStripeCheckout
to redirect users to Stripe's hosted checkout page. Crucially, it also handles the successful completion of order data, including capturing complete cart information for the success page after a purchase, as configured in config.yaml.google-sheets-order-sync.js
:
doPost
), ensuring proper sheet headers (ensureHeaders
), appending order details (addOrderToSheet
), and even sending email notifications for new orders (sendOrderNotification
).This chapter details how these JavaScript files work together to provide a dynamic and functional e-commerce experience for your Aprelux users.
static/css/style.css
)This chapter explains the Aprelux Hugo E-commerce Theme's styling, providing details on its color palette and responsive design principles. Understanding these foundational CSS settings will enable you to customize the visual appearance of your Aprelux website effectively.
:root
)This section breaks down all defined CSS variables within the :root
pseudo-class in style.css
. These variables are fundamental to the theme's visual consistency and allow for easy modification of the site's entire color scheme. The explanation also details their intended use cases and mentions RGB values for transparency.
The variables are categorized by their primary use, and their intended application is provided for clarity:
--color-background: #000000
(Black). This is the main background color for the entire site in dark mode.--color-card-background: #1a1a1a
(Dark Gray). Used for product cards, search containers, review items, and success/cancel page wraps.--color-footer-background: #2b1818
(Dark Brown). Specifically used for the footer's background.--color-primary-text: #bda47b
(Light Brown/Tan). This is the default text color for most content on the site.--color-headings: #ffd700
(Gold). Used for all headings (h1-h6
), search headers, product prices, pagination focus, product tabs hover, and success page highlights.--color-search-header: #ffd700
(Gold). Used specifically for the search overlay header.--color-links-hover: #e6bc00
(Gold - darker). This color appears when hovering over links.--color-button-primary: #c75e53
(Red-Brown). This is the primary background color for buttons and interactive elements.--color-button-hover: #b83f33
(Darker Red-Brown). Used for the hover state of primary buttons.--color-button-active: #9c2c24
(Even Darker Red-Brown). Used for the active state of all buttons.--color-borders: #333333
(Dark Gray). Used for borders around cards, search containers, cart items, product tabs, and review items.--color-subtle-borders: #444444
(Medium Gray). Used for subtler borders, such as mobile menu dividers, search input borders, pagination top borders, and success page footer borders.--color-always-gold: #ffd700
(Gold). Used for special gold elements that should always maintain gold color.--color-always-white: white
. Used for special white elements that should always maintain white color.--color-always-glowing-blue: #0073e6;
. Used for glowing sale badge text shadows that should always maintain blue color.--color-white-button: white;
. Used for special white button elements that should always maintain white color.--color-black-cart
. Used for .cart_check class that should always maintain black color.--color-white: #ffffff
. A general white color used in various places.--color-light-grey: #d3d3d3
. Used for strong text within p-highlights
.--color-grey: #808080
. Used for special-text
, text-muted
, card-description
, and breadcrumb-item
.--color-dark-grey: #a9a9a9
. Used for vinetka
text and disabled button text.--color-text-secondary: #666666
. Used for pagination disabled states, search input placeholders, search no results messages, pagination ellipses, and minimal social share button text.--color-medium-grey: #555555
. Used for footer dividers, newsletter border, dropdown hover states, and scrollbar thumbs.--color-secondary-bg: #2a2a2a
. Used for custom dropdowns, thumbnail backgrounds, scrollbar tracks, and main image loading placeholders.--color-back-to-top-btn: #007cba
. Specifically for the back-to-top button background.--color-social-facebook: #1877f2
.--color-social-twitter: #1da1f2
.--color-social-pinterest: #bd081c
.--color-social-whatsapp: #25d366
.--color-social-email: #6c757d
. This color is also used for the cart button border.--color-social-copy: #17a2b8
.--color-badge-success: #9acd32
. Used for product success badges.--color-light-background: #f8f9fa
. Used for the hover background of minimal social buttons.--color-light-border: #dddddd
. Used for the border of minimal social buttons.--color-word-ramzi-1
to --color-word-ramzi-5
: Specific background colors for the rotating words animation in the Hero CMA section.--color-order-item-bg: #222222
. Used for the background of order items on the success page.--color-spark-fallback: red
. The default color for the spark effect in the Hero CM section.--color-gold-accent: #ffc107
. Used for desktop menu hover, pagination focus, and product tabs hover.--color-light-grey-text: #cccccc
. Used for footer menu links and payment icons.--color-light-dark-grey: #888888
. Used for the custom dropdown label arrow.--color-tertiary-bg: #3a3a3a
. Used for the main image loading gradient.--color-scroll-thumb-hover: #777777
. Used for the scrollbar thumb hover state.rgba()
with these values. For example, --rgb-background
is 0, 0, 0
, allowing for rgba(var(--rgb-background), 0.9)
to create a semi-transparent black overlay. This ensures consistent transparency effects across the theme while adhering to the defined color palette.This detailed color palette provides a robust foundation for the Aprelux theme, allowing for both precise control over individual elements and efficient global style adjustments.
html.theme-light
)This section provides a detailed explanation of how the light theme is implemented by inverting or adjusting colors for optimal accessibility and visual consistency. When the html
element has the theme-light
class, the CSS variables defined within this block override the default dark theme values.
Here's a breakdown of the key color adjustments in the light theme override:
--color-background: #ffffff
(White). This becomes the main site background in light mode.--color-card-background: #f8f8f8
(Very Light Gray). Used for product cards, search containers, and review items in the light theme.--color-footer-background: #f0f0f0
(Light Gray). Specifically for the footer background in light mode.--color-primary-text: #bda47b
(Light Brown/Tan). This is the default text color for most content on the site.--color-headings: #ffd700
(Gold). Used for all headings (h1-h6
), search headers, product prices, pagination focus, product tabs hover, and success page highlights.--color-search-header: #ffd700
(Gold). Used specifically for the search overlay header.--color-links-hover: #e6bc00
(Gold - darker). This color appears when hovering over links.--color-button-primary: #c75e53
(Red-Brown). This is the primary background color for buttons and interactive elements.--color-button-hover: #b83f33
(Darker Red-Brown). Used for the hover state of primary buttons.--color-button-active: #9c2c24
(Even Darker Red-Brown). Used for the active state of all buttons.--color-borders: #333333
(Dark Gray). Used for borders around cards, search containers, cart items, product tabs, and review items.--color-subtle-borders: #444444
(Medium Gray). Used for subtler borders, such as mobile menu dividers, search input borders, pagination top borders, and success page footer borders.--color-white: #ffffff
. A general white color used in various places.--color-light-grey: #d3d3d3
. Used for strong text within p-highlights
.--color-grey: #808080
. Used for special-text
, text-muted
, card-description
, and breadcrumb-item
.--color-dark-grey: #a9a9a9
. Used for vinetka
text and disabled button text.--color-text-secondary: #666666
. Used for pagination disabled states, search input placeholders, search no results messages, pagination ellipses, and minimal social share button text.--color-medium-grey: #555555
. Used for footer dividers, newsletter border, dropdown hover states, and scrollbar thumbs.--color-secondary-bg: #2a2a2a
. Used for custom dropdowns, thumbnail backgrounds, scrollbar tracks, and main image loading placeholders.--color-back-to-top-btn: #007cba
. Specifically for the back-to-top button background.--color-social-facebook: #1877f2
.--color-social-twitter: #1da1f2
.--color-social-pinterest: #bd081c
.--color-social-whatsapp: #25d366
.--color-social-email: #6c757d
. This color is also used for the cart button border.--color-social-copy: #17a2b8
.--color-badge-success: #9acd32
. Used for product success badges.--color-light-background: #f8f9fa
. Used for the hover background of minimal social buttons.--color-light-border: #dddddd
. Used for the border of minimal social buttons.--color-word-ramzi-1
to --color-word-ramzi-5
: Specific background colors for the rotating words animation in the Hero CMA section.--color-order-item-bg: #222222
. Used for the background of order items on the success page.--color-spark-fallback: red
. The default color for the spark effect in the Hero CM section.--color-gold-accent: #ffc107
. Used for desktop menu hover, pagination focus, and product tabs hover.--color-light-grey-text: #cccccc
. Used for footer menu links and payment icons.--color-light-dark-grey: #888888
. Used for the custom dropdown label arrow.--color-tertiary-bg: #3a3a3a
. Used for the main image loading gradient.--color-scroll-thumb-hover: #777777
. Used for the scrollbar thumb hover state.--rgb-background
changes from 0, 0, 0
to 255, 255, 255
.This comprehensive override ensures that all elements correctly adapt their colors when the user switches to the light theme, providing a cohesive and accessible visual experience.
This section outlines the primary CSS styling areas that define the visual presentation of the Aprelux theme. Each of these sections governs a specific aspect of the website's appearance, ensuring a consistent and responsive design across various elements.
This chapter provides comprehensive, step-by-step guides for integrating essential third-party services into your Aprelux e-commerce site, allowing you to streamline order management and payment processing.
To effectively manage product order data, you can set up an automated system that sends order details directly to a Google Sheet. This integration utilizes a Google Apps Script provided with the theme (order-to-sheets.js
), which acts as a bridge between your website's successful order page and your Google Sheet.
Overview: The provided Google Apps Script functions as a Web App endpoint. When an order is successfully placed on your Aprelux site, the theme sends a POST request with the order data to this Web App. The script then processes this data, adds it to your designated Google Sheet, and can even send you an email notification.
order-to-sheets.js
file located in your theme's static/js/
directoryconfig.yaml
, located at the root of your projectparams.success_page.notifications.googlesheets
sectionenabled: true
to activate Google Sheets integrationscripturl
fieldconfig.yaml
fileBy default, the newest orders appear at the bottom of your Google Sheet, with the oldest orders at the top. This chronological organization helps you track order patterns over time.
To access and share your Google Sheet:
Once configured, all order notifications will be automatically organized in a "Aprelux Shop" label/folder in your Gmail account. Additionally, you can create a public display page that shows recent order emails without requiring visitors to have a Google account.
To set up the public email display page:
This is a known Google Apps Script deployment issue where ScriptApp.getService().getUrl() returns a development URL even after proper deployment. To resolve this:
Step 1: Configure Production URL Manually
After deploying your script but before updating your config.yaml, add your production Web App URL to the script:
const PRODUCTION_WEB_APP_URL = ""; // PASTE YOUR /exec URL HERE
Replace the empty string with your actual production URL:
const PRODUCTION_WEB_APP_URL = "https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.../exec";
Step 2: Test and Verify
Once this is configured correctly, your public order display page will be accessible to anyone with the link, without requiring Google account authentication. At first it will be empty, so don't forget to run test orders.
Integrating Stripe allows your Aprelux e-commerce theme to process secure payments for products. The theme leverages Stripe Checkout, a pre-built, hosted payment page solution, which is ideal for static websites like those built with Hugo. Stripe Checkout handles sensitive payment information securely on Stripe's servers, meaning your Hugo site doesn't need to directly process or store credit card data.
yourdomain.com
www.yourdomain.com
(if you use www)shop.yourdomain.com
(for subdomains)pk_live_
for live mode or pk_test_
for test mode): This key is used in your theme's config.yaml
and is safe to be publicly exposedsk_live_
or sk_test_
): This key is not needed for client-only integration on static websites. However, it is required if you implement serverless functions or backend logic.config.yaml
, located at the root of your projectparams.stripe
sectionpublishable_key
fieldconfig.yaml
fileprice_1RhTzwHTyljN5qDmUvo5iK1c
)content/products/
directorystripe_price_id
field in the front matter of each product filestripe_price_id
publishable_key
starts with pk_test_
When working with products that have variations (like "Color" or "Size"), it's important to understand how Stripe Checkout integrates with these. The Aprelux theme is designed to pass selected variations to the cart and the success page order data. However, Stripe Checkout's standard integration has specific behaviors regarding how product options are displayed and recorded directly within Stripe itself during the checkout process:
Stripe's Behavior with Variations: Stripe Checkout typically focuses on the Price ID for the transaction. While the theme's backend system captures your customers' selected variations and includes them in the order data sent to Google Sheets (if enabled) and stored in the success page's URL parameter, these specific variation choices (e.g., "Red" or "Small") might not always be explicitly displayed as line item details on Stripe's hosted checkout page itself
Option 1.
Create a Separate Product for Each Variation (it is critical for Stripe's side): For maximum clarity within your Stripe dashboard, you could create a unique Product and Price ID in Stripe for each specific combination of variations (e.g., "Ignis Thunderbolt Gelifier - Red", "Ignis Thunderbolt Gelifier - Blue"). You would then need to dynamically select the correct `stripe_price_id` in `cart.js` based on the user's selected variations, which would require custom JavaScript logic beyond the current default implementation of simply adding the base product's `stripe_price_id`. This is typically more complex for themes with many variations.Option 2.
Utilize Serverless Functions (Advanced):
For projects requiring dynamic handling of product variations without cluttering the Stripe Dashboard with dozens of Price IDs, serverless functions offer a scalable and elegant solution. This approach allows you to programmatically create a Stripe Checkout Session on demand, embedding the selected variation data directly into the session metadata or line item descriptions.
metadata
field or customizing the line_items[].description
.Option 3. Recommended Solution:
The most practical approach for a static e-commerce theme like Aprelux is to ensure customers feel confident that their selected options are accurately recorded. A clear disclaimer on the checkout page helps set expectations:
DISCLAIMER FOR VARIATIONS:This disclaimer can be added to each product’s description field within the Stripe dashboard to reinforce clarity at the point of selection.
Note: Due to current technical limitations in our payment provider’s system, selected variations (such as size and color) may not be visible during checkout. However, your exact choices are securely recorded and will be fulfilled with care and precision.
By following these steps, you will have a robust payment system and an organized order tracking system in place for your Aprelux theme.
The Aprelux theme is thoroughly documented to help you configure, customize, and deploy it with confidence. Before reaching out for support, please follow this recommended support flow:
Thank you for choosing Aprelux. We hope this documentation has helped you make the most of your theme. For updates, support, or feedback, feel free to reach out.