Themes

One codebase, many storefronts.

A theme owns copy, imagery and section composition. The commerce layer underneath is identical, so a redesign never risks checkout.

How theming works

Selected at runtime

The active theme resolves from the store record first, then PUBLIC_STOREFRONT_THEME, then the default — so one build serves different looks.

# .env
PUBLIC_STOREFRONT_THEME=default

Content lives in the theme

Hero copy, section headings, decorative imagery, testimonials and CTA labels come from theme config. Routes render themeContent plus live API data.

Isolated by design

A section belonging to one theme never renders for another. Adding a theme cannot regress the one you are running.

Products stay live

Only the product list is API-driven on the homepage. Everything else is theme-owned static content, so an empty catalogue never breaks the design.

Ship your own look.

Clone it, point it at your API, and describe the store you want.