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.