Skip to content

Products & Categories

Overview

Products are the items you sell. You need products before you can ring up a sale — and several loyalty features (stamp cards, discounts, vouchers) target specific products or categories, so it's worth setting them up tidily.

Products are grouped into categories, and optionally labelled with product types.

Default setup

Bean & Brew example: a Coffee category with a Latte product.

1. Create a category

  1. In the sidebar open Products → Product Categories, then click Create.
  2. Set the Name (Coffee), an Order number, and optionally a colour and image.
  3. Save.

2. Create a product

  1. Open Products → Products, then click Create.
  2. In Basic info: add an image, the Name (Latte), the Category (Coffee), and a Code.
  3. In Pricing: set the price, and leave Loyalty Ratio on Default Ratio.
  4. Save, and repeat for your other products.

Products → Create form

The product list

Products → Products (/products) opens a datagrid of every product, sorted by most recently updated. Each row shows:

ColumnWhat it shows
ImageThe product thumbnail.
NameThe product name.
CodeThe product code. Click it to copy to the clipboard. Sorting by code is silently disabled once you have more than 300 products.
SourceWhere the product came from (rewardly / eats365-menu / shopify / vend).
TagsThe product's tags.
TypeSingle, Combo, or Variant.
CategoriesThe categories the product belongs to.
Track QuantityA Yes / No tag.
Exclude from DiscountWhether the product is excluded from discounts.
Visible OnChannel tags — kiosk, pos, customer, grab, foodpanda, deliveroo, keeta.
Dine-In / Takeout / Delivery pricePer-channel price tags, shown green when that channel is enabled and red when it's off.

Row actions

  • Clone / duplicate — the duplicate icon copies the record, appends _<timestamp> to the code, and opens a pre-filled create form so you can adjust and save a near-identical product.
  • Export — confirms, then exports all filtered products to a richly-nested CSV that includes modifiers, combos, operation times, and pricing tiers. Because it covers the entire filtered set, the file can be large.

Filters

Click Filter to narrow the list by:

  • Search name, outlets, categories, tags.
  • Product Type — product / membership / program / storeValue.
  • Type — single / combo / variant.
  • Source — rewardly / eats365-menu / shopify / vend.
  • Visible On channel.
  • Dine-in / Takeout / Delivery (boolean).
  • No Tag — products with no tags.

Bulk actions

Select one or more rows to reveal bulk actions:

  • Bulk Delete — removes every selected product.
  • Bulk Update — a bar of checkboxes (Track Quantity, Exclude from Discount, Track Ingredients, Dine-In, Takeout, Delivery) with Enable / Disable buttons. Tick the fields you want to change, then click Enable or Disable to set those boolean fields on every selected product at once.

Editing many products at once

Use Bulk Update to turn a channel on or off, or to switch on Track Quantity, across a whole category of products without opening each one.

Product Categories

Open Products → Product Categories (/productCategories). A category groups related products. Key fields:

FieldWhat it does
NameThe category name.
OrderIts position in lists. Must be ≥1 and unique. On create the form auto-suggests the next free number (the current maximum + 1); uniqueness is checked against your existing categories.
Color / ImageVisual styling.
Product TypeProduct, Membership, Program, or Store Value. Switching the type clears any membership/program/store-value links already set.
SourceWhere the category came from. Locked to rewardly when you create one. Categories synced from eats365-menu, shopify, or vend are source-locked, and show their source ID read-only.
OutletsWhich outlets show the category.
Age RestrictionMarks the category as age-restricted. On by default.
Visible onWhich channels show it — Kiosk, POS, Customer, and delivery platforms (Grab, Foodpanda, Deliveroo, Keeta). New categories default to Kiosk, POS, and Customer.
Potential Quantity LimitAn optional cap on quantity for the category.
Start / End datetimeThe window the category is active. Setting an end automatically sets its time to 23:59:59 and switches on has end time.
Time SlotsPer-channel, per-weekday availability windows entered as time pairs in HH:mm format.
TagsProduct tags applied to the category. Use the inline + Add new tag prompt to create or look up a tag without leaving the form.
Container discountAn optional category-wide discount — see below.

Order uniqueness

Order numbers are validated in your browser across up to 500 categories. If you have more categories than that, double-check the number is free before saving.

Container discount

The Container discount is used for beverage container / cup deposit visuals. It carries:

  • A discount value and a typepercentage or fixed.
  • A set of named container colours, each with its own colour picker, so the POS can show the right cup or container visual for the deposit.

Product fields

The product form is large. Its main sections are:

SectionWhat it covers
Basic infoImage, name, short name, brand, description, category, code/barcode, outlets, and which channels the product is visible on.
PricingPrices per service type (dine-in / takeout / delivery), open price, and the loyalty settings below.
InventoryStock tracking.
Cover imagesExtra product images.
ModifiersAdd-ons and options (e.g. milk choice, extra shot).
VariantsVariations such as size or flavour, each with its own price and stock.
ComboBundle several products into one combo item.
Availability / Time slotsWhen and where the product can be sold.

The loyalty connection

These product fields decide how a product behaves with your loyalty features:

FieldWhat it does
Loyalty RatioDefault Ratio = earns at the loyalty program rate. No Loyalty = earns no points. Custom Ratio = earns at a special rate just for this product.
Exclude from discountThe product is never discounted, even by an active discount.
Only Buy With VoucherThe product can only be obtained via a voucher.
Only Buy With MemberOnly members can buy the product.

Per-product earn rates

Use Custom Ratio to make a high-margin item earn points faster, or No Loyalty on items you don't want to reward (e.g. gift cards).

Product type, channels, and pricing

Beyond the basics, the product form exposes several configurable fields:

FieldWhat it does
Product TypeProduct, Membership, Program, or Store Value. Choosing any non-product type reveals a linkage selector for the matching membership, program, or store-value record.
TypeSingle, Combo, or Variant. Variant products drive a separate variant/SKU model (see Variant Attributes).
Is Dine-in / Is TakeOut / Is DeliveryPer-channel availability toggles, each with its own price.
Open PriceLets the cashier enter the price at the POS instead of using a fixed price.

Tax & charges

FieldWhat it does
Has TaxThe product is taxed.
Has Secondary TaxApplies the outlet's secondary tax. Depends on the outlet's secondaryTaxes config (Outlet → Order tab).
Has Service ChargeApplies the outlet's service charge. Depends on the outlet's serviceChargeType config (Outlet → Order tab).

Singapore compliance

For Singapore outlets, the form adds compliance fields:

FieldWhat it does
BCRS Deposit MarkMarks the product as carrying a Beverage Container Return Scheme deposit.
Nutri-GradeShow Nutri-Grade Symbol, the Nutri-Grade Symbol itself, Show Healthier Choice Symbol, and the sugar level % for the printed/displayed grade.
Age RestrictionMarks the product as age-restricted.

Best Before, barcode, and cart behaviour

FieldWhat it does
Best BeforeIs Best Before Date Enabled, then Best Before By in Hours / Days / Months, plus free-text Best Before Info.
Barcode TypeThe barcode format for the product.
Auto add to cartAutomatically adds the product to the cart per channel (dine-in / pick-up / delivery), with a Min order amount threshold.
UpsellFlags the product to be suggested as an upsell.
Special RequestEnables a special-request note, with a level.

Operation Times / Time Slots

Set per-weekday start and end times to control when the product can be sold.

Pricing Tiers

Each product can carry per-product Pricing Tiers — alternative prices that apply under a pricing rule, for example a happy-hour or member tier.

Inventory & ingredients

In the Inventory section, alongside stock tracking you can set:

FieldWhat it does
Track ingredientsDeducts recipe ingredients when the product is sold.
Ingredient BundlesReusable ingredient recipes attached to the product.
IngredientsIndividual ingredients consumed by the product.

Variant products and inventory

A Variant product (Type = Variant) generates a separate variant/SKU model. Each variant carries its own price and stock and is managed under Inventory (Product Inventories), drawing on the reusable options defined in Variant Attributes.

Modifiers

Modifiers are the add-ons and options a customer picks for a product — milk choice, egg style, extra toppings. A product can have several modifier groups (e.g. "Add on"), and each group holds a list of options (e.g. Sunny Side Up, Over Well).

Each group has a few settings in its header:

FieldWhat it does
NameThe group's display name.
MandatoryForces the customer to choose an option before adding the product to cart.
Selection Min / MaxFor multi-select groups, the fewest and most options a customer may pick.

The options themselves are edited in a grid (scroll horizontally for the later columns):

ColumnWhat it does
ImageOptional picture for the option.
Option Name / Short NameThe name shown to customers, with a shorter name (printed on tickets) stacked beneath it.
Add-on PriceExtra charge for the option, set per dining mode — Dine-in / Takeout / Delivery.
ActiveMaster on/off switch for the option. Turning it off hides the option everywhere without losing its settings.
ChannelsWhich channels offer this option — POS, Kiosk, Customer.
Dining modeWhich order modes offer this option — Dine-in, Take-out, Delivery.
QuantityFor multi-select groups: the Min, Max, and Default quantity of this single option. For single-select groups this column collapses to a single Default switch that marks the pre-selected option.
NutritionCalories, protein, carb, and fat for the option.
Master ModifierLinks the option to a shared master modifier for inventory tracking.
Track IngredientsToggle to deduct recipe ingredients when the option is sold.
Ingredient BundlesReusable ingredient recipes attached to the option.

Channel & dining-mode availability

The Channels and Dining mode checkboxes control where each individual option appears:

  • All boxes checked (the default) — the option shows everywhere the product does.
  • Uncheck a box — the option is hidden on that channel or dining mode. For a kiosk-only upsell, for example, leave only Kiosk checked.
  • Uncheck them all — the option is hidden entirely (the same end result as turning Active off, but Active is the cleaner switch when you want a quick, non-destructive on/off).

Availability narrows, never widens

A modifier option can only appear where the product itself is visible. Ticking Customer on an option will not surface it in the customer app if the product's own Visible On excludes Customer — option boxes restrict availability further, they never extend a product's reach. The same applies to dining mode versus the product's own dine-in / takeout / delivery settings.

Product Types

A product type is a simple label for classifying products. Open Products → Product Types (/productTypes) to create them — the form has just a Name field.

Product Variant Attributes

Open Products → Variant Attributes (/product-variant-attributes) to manage the reusable attributes — such as Size or Colour — that variant-type products draw on. This is the catalogue you edit to add a new size or colour option that several variant products can share.

Each attribute has these fields:

FieldWhat it does
NameThe attribute name (e.g. Size).
DescriptionAn optional description.
Is RequiredWhether a value must be chosen for this attribute.
Is ActiveWhether the attribute is in use. Defaults to active on create.
Possible ValuesA list of options. Each value has a value, a display name, and a sort order.

These attributes feed Variant (Type = Variant) products. Each variant of such a product is its own SKU carrying its own price and stock, managed under Inventory (Product Inventories).

Add an option everywhere at once

To offer a new size or colour across all variant products, add it as a Possible Value on the relevant Variant Attribute here — the products that use that attribute pick it up.