Codebase map
Where things live, and which directories belong to Conversion Kings, to Shopify, or to code nothing uses.
Top level
| Path | Owner | Notes |
|---|---|---|
src/ | Conversion Kings | All TypeScript, React and Tailwind input. Excluded from the theme upload |
sections/ | Mixed | 134 files. Prestige originals, redesign sections, and app leftovers |
snippets/ | Mixed | 233 files. Includes the generated vite-tag.liquid |
templates/ | Mixed | 133 files. Many belong to removed apps |
layout/ | Mixed | Three theme layouts plus password and gift_card |
assets/ | Build output plus theme files | Hashed bundles sit alongside images and vendor scripts |
config/ | Shopify | settings_schema.json defines settings, settings_data.json holds their values |
locales/ | Shopify | Seven locale files, several very large |
scripts/ | Conversion Kings | Deployment, onboarding and tunnel helpers. Excluded from the upload |
doc-site/ | Conversion Kings | This documentation site |
Inside src/
| Path | Contains |
|---|---|
src/entrypoints/ | Build targets. Each file here becomes its own bundle |
src/components/ | Imported modules. Liquid never renders them directly |
src/lib/ | Small shared utilities: logger.ts, utils.ts, cart-source.ts |
src/@types/ | Ambient types for window, Shopify objects, the booking config, Klaviyo |
src/assets/theme_in.css | The Tailwind entry, which contains only the three directives |
The @/ and ~/ path aliases both resolve to src/. tsconfig.json defines them, and Vite resolves them too.
The split between entrypoints and components has exceptions. mini-cart/internals/ sits under entrypoints even
though other files import it and no Liquid renders it, so Vite emits each internal module as its own chunk. utils.ts
is in entrypoints for the same historical reason. Before moving either, check every vite-tag render and every
import.
The three layouts
| Layout | Used by |
|---|---|
layout/theme.liquid | Most of the store |
layout/theme.medispa-redesign.liquid | Medispa redesign page templates |
layout/theme.discovery-bar.liquid | Discovery bar landing pages |
All three started as the same file, and about a third of their lines now differ. A change to the head, to a global, or to a bundle every page loads usually has to go into more than one layout. When something only breaks on some pages, check which layout those templates use.
The major subsystems
| Subsystem | Liquid | TypeScript |
|---|---|---|
| Mini-cart | sections/mini-cart.liquid, snippets/mini-cart.*.liquid | src/entrypoints/mini-cart/ |
| Medispa booking | snippets/medispa-calendar-*.liquid, sections/product-calendar-config.liquid | src/components/medispa-calendar/ |
| Popups | snippets/popup-logic.liquid | src/components/popup-logic/ |
| Homepage redesign | sections/hero-banner.liquid and related sections | src/entrypoints/homepage-redesign/components/ |
| Purchase gifts | layout/theme.liquid | src/components/purchase-gift-manager/ |
| Cart reward banner | sections/cart-reward-banner.liquid | src/components/cart-reward-banner/ |
What file names tell you
A section or snippet whose name contains one of these markers belongs to an app the store no longer uses. Do not extend it, and read Legacy and unused code before deleting it.
boost-pfs, maestrooo, sca, swym, haloroar, discountninja, tolstoy, yotpo, reputon, hulkapps
The name layouthub appears only inside the locale files, never in a filename. It causes a large share of the
translation errors Theme Check reports.
A file with redesign in its name comes from the more recent rebuild and is usually the one in use. When a -redesign
file and an original both exist, check templates/ to see which one the store renders. For example, both
product-template.liquid and product-template-redesign.liquid exist.
An fn. prefix marks a Liquid snippet used for its return value rather than its markup. There is one today,
snippets/fn.mini-cart.line-item.should-show-quantity.liquid. Use the same prefix if you add another.
Finding the code behind something on the page
- View source and find a distinctive class name or custom element name.
- Search
sections/andsnippets/for it to find the Liquid. - Look for a
render 'vite-tag'in that file, or look up the file in Entrypoints. - The path in the render call is relative to
src/entrypoints.
For a custom element, search src/ for customElements.define with that tag name. The theme currently defines
mini-cart, mini-cart-clear-cart, mini-cart-discount-code, mini-cart-footer, mini-cart-gifts-accordion,
mini-cart-header, mini-cart-line-items, mini-cart-progress-bar, mini-cart-recommendations, mini-cart-summary,
product-card-form, products-carousel, select-options and tabbed-carousels.
What the repository does not have
The repository has no test suite. The only CI is the theme pull workflow in .github/workflows/theme-pull.yml. The only
staging environments are unpublished themes on the same store. Developers check every change by hand against a preview
theme.