Build a Custom Theme
Join Markt themes are first-class storefronts — closer to Shopify Liquid themes than to a page builder blob. You own layout, styling, and how products appear. Join Markt owns catalog, cart, checkout, and delivery.Choose a runtime
Both runtimes receive the same catalog and checkout contracts. Only the presentation layer differs.
What you control vs Join Markt
Theme owns- Homepage, product list, product detail, legal pages
- Navbar, footer, hero, product cards
- CSS / design tokens
- How and where products are listed (grids, carousels, featured IDs)
- Product data, stock, pricing, variants
- Checkout (
/checkout/{orderId}) - Payments, delivery keys, customer portal, tickets
- Public APIs under
/api/stores/by-subdomain/…and/api/v1/…
Quick start (Vite)
src/App.tsx:
/— homepage/products— catalog/product/:slug— product detail/privacy,/terms,/refunds— policies
src/lib/storefront-api.ts (fetchStorefront, useStore). Render products with your own components — there is no Liquid {% product %} tag in Vite; you map data in React.
See Vite Storefront and Template Structure in the Themes tab.
Quick start (Nunjucks)
Theme ZIP layout:catalogItems when the store uses product groups:
Homepage checklist
- Show store name / hero from
store(or Visual Builder hero settings on Vite). - List catalog via
catalogItems(groups + standalone) — not rawproductsalone. - Link product cards to
/product/{slug}; group cards to/group/{id}. - Add to cart → platform checkout — never invent your own payment form.
- Respect
visibility(on-hold= listed, not purchasable) andstock(-1= unlimited). - Wire policy pages from seller Configure — Policy & Legal Pages (Vite
/privacy… vs Nunjucks/privacy-policy…).
Publish pipeline
- Seller edits in Visual Builder (Vite) or Code mode / ZIP import (Nunjucks).
- Publish builds artifacts.
- Live site serves
/markt-theme-assets/live/{revision}/…. - Preview uses a real iframe URL + dist files — never flatten React to a static HTML snapshot.