The product catalogue
Route: /org/inventory/products · Module: org_inv_products — 7 permissions
Permission to view: View Products
1. What this screen is
The catalogue — every product the project sells, in one place, with three ways to look at it and a rail for narrowing down.
It is the busiest screen in Inventory and the entry point to almost everything else: the editor, the importer, the brochure generator and the AI product generator are all reached from here.
products.view alone is close to uselessThe list is all it grants. The product detail route is gated on products.edit and the create route
on products.create — there is no read-only product page. A "read-only catalogue" role can see
cards and open nothing.
2. How the catalogue spreads through the application
3. Step by step
Step 1 · Choose a view
Three icon buttons switch the rendering. They are not three skins of the same thing — the table view exists for a different job.
| View | Shows | Use it to |
|---|---|---|
| Grid (default) | Cards with hero image, price range, tax, badges | Browse, check imagery |
| List | Denser rows | Scan many products |
| Table | Product → variation rows with SKU, price, stock, published toggle | Edit price and stock inline |
— for every productThat is not a loading state. Variation current_stock is only written by the product editor, the
importer and storefront orders — never by a goods receipt or a production run.
A tenant that records all its movements through Inventory operations will see — here forever while
the ledger fills up. See
How stock is counted.
Step 2 · Narrow with the category rail
The rail shows the category tree. Master Inventory at the top clears the filter and shows everything.
The + beside each category creates a child category from here, but renaming, re-parenting and
reordering happen on the Product Category screen.
Step 3 · Group
| Option | Groups by |
|---|---|
| No Grouping (default) | — |
| Group by Category | The product's primary category |
| Group by Visibility | Publishable / not publishable |
Grouping is orthogonal to the view mode and to the rail filter — all three compose.
Step 4 · Act on many at once
| Control | Does | Permission |
|---|---|---|
| Bulk Edit | Add/remove categories and tags, set a tax category across the selection | products.edit |
| Bulk Translate | Generate translations for the selected products | products.edit |
| ✕ | Clears the selection and hides the bar | — |
The bulk operation takes add category, remove category, add tag, remove tag and set tax category. There is no "replace all categories" — clearing one means removing it explicitly.
Step 5 · Reach the other tools
| Button | Goes to | Permission |
|---|---|---|
| New Product | The product editor, empty | products.create |
| Import | The CSV importer | products.import |
| Brochure | The brochure generator | products.view |
| Language | Switches which stored translation the list displays | — |
4. Field reference — the product card
| Element | Source | Notes |
|---|---|---|
| Hero image | hero_asset_id | 55 of 56 products on the reference tenant have one |
| Name / description | Per language | Follows the Language switch |
| Price range | Min–max across variations | A single-variation product shows one price |
| Tax line | The product's tax category | e.g. + 5% India GST. Defined in Finance |
| Category chips | Assigned categories | The ✕ removes the assignment inline |
| STORE badge | is_publishable | The product can appear on the storefront |
| PRE-ORDER badge | is_preorder | Sold for a future date; exempt from stock movement |
| Checkbox | — | Adds to the bulk selection |
| → | — | Opens the editor. Requires products.edit |
Pagination
The footer reads SHOWING 1–12 OF 56 PRODUCTS with a Per page selector defaulting to 12.
Bulk selection applies to what you have ticked, not to the whole filtered set.
5. The admin contract
| Must be true | Or else |
|---|---|
| A project is selected | The catalogue is empty |
| At least one unit exists | Variations cannot be saved |
| A tax category exists in Finance | The tax line reads as untaxed |
The role holds products.edit | Cards open nothing |
6. Downstream
| Change | Effect |
|---|---|
| Turn off STORE | The product disappears from the storefront |
| Change a price | Storefront price changes; historic orders keep their captured price |
| Remove a category chip | Product leaves that category's storefront landing page |
| Delete a product | Soft delete. Historic ledger and order rows survive |
7. Don't confuse this with…
| Raw materials | Consumed by recipes, never sold |
| Storefront packages | Bundles of these products at a combined price |
| The category rail | A filter — categories are authored elsewhere |
8. Troubleshooting
| Symptom | Cause |
|---|---|
| Catalogue is empty | No project selected, or the rail is filtered — click Master Inventory |
Stock reads — everywhere | Expected. See the danger callout in §1 |
| A card will not open | The role lacks products.edit |
| Import is missing | The role lacks products.import — it is separate from products.create |
| The bulk bar never appears | Nothing is selected; the bar only exists with a selection |
| A product is missing from the storefront | is_publishable is off, or it has no variation |