2. Products & catalog¶
How the catalog is structured¶
Product (e.g. "ASCE+ 5ml")
├── Variants ← the actual SKUs customers buy
│ ├── ASCE+ 5ml, single
│ └── ASCE+ 5ml, 6-pack
├── Images ← gallery shown on the product page
├── Translations ← SV + EN copy
├── Region visibility ← which markets see this product
├── Reviews ← customer-submitted, you approve
└── Add-ons ← related items shown in the cart
A product is the "thing" (ASCE+ 5ml). A variant is the specific SKU someone buys (5ml × 1 vs. 5ml × 6 pack). Each variant has its own price and stock level.
Above products sit collections (brand groupings: ASCE+, MINT, etc.), brands (CMS pages for brand storytelling), and bundles (prepackaged kits).
Adding a new product¶
- Catalog → Products → New product.
-
Fill in:
- Handle - the URL-safe slug (e.g.
asce-plus-5ml). Lowercase, dashes, no spaces. Once set, don't change it - old links break. - Title - the customer-facing name.
- Description - the long-form copy. Markdown is fine; we render it on the storefront.
- Brand - pick from the dropdown (or leave blank).
- Handle - the URL-safe slug (e.g.
-
Save. You're now on the product's edit page with tabs: Details, Variants, Images, Translations, Region visibility, Add-ons, Reviews.
Variants¶
Every product needs at least one variant. Click Variants → New variant:
- SKU - your internal stock-keeping ID (must be unique across the whole shop). Used in accounting exports.
- Variant title - short label shown in the cart (e.g. "Single vial", "6-pack"). Leave empty if there's only one variant.
- Price - the default price in SEK (öre, i.e. type 99500 for 995 SEK). Use the Region prices sub-tab to set NOK / DKK / EUR if this product is sold outside Sweden.
- Stock keep - toggle whether we track inventory for this variant. Off = always-in-stock (e.g. digital goods, services).
Region prices¶
Inside a variant, click Region prices to set per-market pricing. If you skip a region, that variant falls back to the default price, FX-converted. We usually set explicit prices per region - exchange rates wobble and customers notice.
Images¶
Drag-and-drop image upload, multi-select. First image is the "hero" shown in product cards. Drag rows to reorder.
Files go to MinIO and are served from
api.rmsnordic.se/media/.... Once uploaded, they're public; don't
upload anything you don't want indexed.
Translations¶
Per-product, per-locale text. Empty fields fall back to the default language. Don't translate the handle - URLs stay the same across locales.
Region visibility¶
By default, a product is visible in all regions. Use this tab to restrict it: e.g. "this device is only legal in SE+NO, hide in DK+FI".
Add-ons¶
Cross-sell items shown in the storefront's cart and on the product page ("Have you also considered…?"). Add-on items are other product variants; pick from a search dropdown.
Collections¶
Collections group products by theme. They show up in the storefront
header dropdown under PRODUKTER and have their own landing page at
/sv/collections/<handle>.
To create one: Catalog → Collections → New collection. Fill in handle, title, optional description, optional cover image, and show in nav (uncheck to hide from the header dropdown).
On the edit page, the Products tab lets you pick which products belong. Drag to reorder. A product can be in multiple collections.
Brands¶
Brands are CMS pages under the hood - they live at
/sv/brands/<handle> and can contain freeform text + images, not just
a product list. To create one:
Catalog → Brands → New brand (or Marketing → Pages → New page
with page_type=brand).
Set the handle (e.g. asce), the title, the body, and a cover image.
The storefront automatically links the brand page to products tagged
with that brand.
Bundles¶
Bundles are multi-item packages. They have a mandatory core set (customer must buy all of these) and an optional add-on set (suggestions).
Catalog → Bundles → New bundle:
- Handle - slug.
- Type - Mandatory (bought as a unit, e.g. "Starter kit") or Recommended (suggested when adding the main product to cart).
- For product - if Recommended, which product triggers the suggestion.
- Discount - percentage off the combined price.
Then add items on the edit page. Each item picks a variant + quantity + required-or-not flag.
Inventory¶
Catalog → Inventory - flat table of every variant × region with its current stock. Edit a number to update; press tab to save.
Inventory in the system is informational: when stock hits zero, the storefront shows "out of stock" instead of an add-to-cart button. The backend does NOT block oversells unless you explicitly turn on "prevent overselling" in Settings.
Featured products¶
The homepage's "featured" row. Marketing → Featured → New: pick a product, set its sort order. Drag to reorder.
Reviews¶
Customer-submitted product reviews come in via the storefront. They land in Customers → Reviews with status Pending.
- Approve to publish on the product page.
- Hide to keep but don't show.
- Delete to remove permanently.
We don't auto-publish - spam.
Common gotchas¶
- Handles are forever: once set, changing one breaks every external link to that product/collection/brand. Don't rename.
- Prices are in minor units: 99500 = 995 SEK. The form should hint at this; double-check before saving.
- Region visibility is opt-in to RESTRICT: leaving it empty means "visible everywhere", not "visible nowhere".
- Inventory is per region: stock in Sweden doesn't satisfy a Norwegian order. Set numbers in all regions you sell to.