Skip to main content

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)
Platform owns
  • Product data, stock, pricing, variants
  • Checkout (/checkout/{orderId})
  • Payments, delivery keys, customer portal, tickets
  • Public APIs under /api/stores/by-subdomain/… and /api/v1/…
Never call seller-dashboard session APIs from a public theme.

Quick start (Vite)

Required routes in src/App.tsx:
  • / — homepage
  • /products — catalog
  • /product/:slug — product detail
  • /privacy, /terms, /refunds — policies
Load catalog via 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:
Homepage / catalog grid — prefer catalogItems when the store uses product groups:
Featured products by ID:
Reusable blocks:
Full reference: Nunjucks Theme API, Products & Catalog, Shortcodes & Tags, Policy & Legal Pages, Nunjucks Theme Pitfalls.

Homepage checklist

  1. Show store name / hero from store (or Visual Builder hero settings on Vite).
  2. List catalog via catalogItems (groups + standalone) — not raw products alone.
  3. Link product cards to /product/{slug}; group cards to /group/{id}.
  4. Add to cart → platform checkout — never invent your own payment form.
  5. Respect visibility (on-hold = listed, not purchasable) and stock (-1 = unlimited).
  6. Wire policy pages from seller Configure — Policy & Legal Pages (Vite /privacy… vs Nunjucks /privacy-policy…).
Deep dive: Homepage & Sections.

Publish pipeline

  1. Seller edits in Visual Builder (Vite) or Code mode / ZIP import (Nunjucks).
  2. Publish builds artifacts.
  3. Live site serves /markt-theme-assets/live/{revision}/….
  4. Preview uses a real iframe URL + dist files — never flatten React to a static HTML snapshot.

Next steps