# What's new

Every user-visible change to the dashboard (app.borkol.com) is listed here by the date it shipped, with a link to the guide page that describes the new behaviour.

## 2026-10-11

### Added
- **Units and decimal quantities.** The product page's **Pricing** section has a **Unit**: **Piece**, **Kilogram**, **Gram**, **Liter**, **Meter**, **Square meter (m²)**, **Cubic meter (m³)** or **Hour**. Anything but a piece can be sold, ordered, quoted and stocked in decimals (up to 3 places), and quantity and money fields accept a decimal comma (`0,75`). See [Units and decimal quantities](/docs/products/index#units-and-decimal-quantities).
- **New product fields.** **Compare-at price** (Pricing); **Barcode (EAN/GTIN)**, **Track stock**, **Requires shipping**, **Weight (grams)** and **Returnable** (Stock & shipping); **Tags** and **Lead time** in the sidebar. See [Product fields](/docs/products/index#product-fields).
- **Search & social on the product page.** **Meta title**, **Meta description**, a live **Google preview** and a **Social image** in a section of their own. See [Search and social](/docs/products/index#search-and-social).
- **Changing an address redirects.** Changing a product's **URL handle** (it used to be **Slug (storefront URL)** in the product form, now under **Search & social**) or a category's slug shows the hint "Changing the address sends visitors from the old one to the new one.": storefronts can send visitors from the old address to the new one. See [Search and social](/docs/products/index#search-and-social).
- **Configure made-to-measure lines on manual orders.** **Webshop → Orders → New order** shows **Configure** next to a Made to measure product: enter whole-number dimensions, pick options and see the unit price live before you confirm. See [Configure a made-to-measure line](/docs/selling/orders#configure-a-made-to-measure-line).
- **Quote and invoice lines pick catalog products.** Typing in a line's title now also suggests your products under **From the catalog**; picking one fills in the title, unit, price and VAT class. See [Quotes → Lines](/docs/sales/quotes#lines).
- **A timeline entry for a quote line converted without stock.** When an accepted quote becomes an order and a line cannot take stock for a reason other than a shortfall, the order still gets the line and its timeline says "Stock not reserved for {name} ({code})". See [Orders → Timeline](/docs/selling/orders#timeline).

### Changed
- **New product starts with "What are you selling?".** The six product-type cards (Simple, With variants, Configurable, Digital, License, Subscription) on **Catalog → Products → New product** are replaced by two: **Product** and **Made to measure** (only with the Configurator module). The choice is permanent. You then only give the product a name; the slug is derived from it. Existing products became Product, except configurable ones, which became Made to measure. Digital, license and subscription products now have **Track stock** and **Requires shipping** off, and products that became Made to measure are not **Returnable**. See [Create a product](/docs/products/index#create-a-product).
- **One editor with one Save for the product page.** The **Edit product** card and its **Save changes** button are gone: the page is a set of sections (**Details**, **Images**, **Pricing**, **Stock & shipping**, **Options & variants**, **Bulk pricing**, **Quote**, **Search & social**) plus a sidebar (**Status**, **Tags**, **Categories**, **VAT class**, **Lead time**), and the **Save** button in the header saves every changed section. Leaving with unsaved changes asks first. See [The product page](/docs/products/index#the-product-page).
- **Group prices are now Bulk pricing.** The **Group prices** card is the collapsible **Bulk pricing** section, saved with the header **Save** instead of its own **Save prices** button. See [Bulk pricing](/docs/products/index#bulk-pricing).
- **Categories moved to the sidebar.** The product's **Categories** card with its checkbox tree became a sidebar card: search with **Search categories** and click a match to add it; it saves with the header **Save**. See [Product fields](/docs/products/index#product-fields).
- **Tax class is now VAT class in the sidebar.** The **Tax class** select moved from the product form to the sidebar card **VAT class**. See [Product fields](/docs/products/index#product-fields).
- **Delete moved into the ⋯ menu.** The **Delete** button in the product page header is now in the **More actions** menu. See [The header and Save](/docs/products/index#the-header-and-save).
- **Purchasability moved to the Quote section.** **Purchasability** left the product form for the product page's **Quote** section, which only appears when the Sales module is enabled; without Sales every product checks out directly. See [Quote](/docs/products/index#quote).
- **Quote requests moved to Sales settings.** The **Quote requests** card left **Webshop → Settings → Cart** for **Sales → Settings → Quotes**, where it shows while the Webshop module is enabled. See [Quote requests](/docs/sales/settings#quote-requests).
- **Always require a quote needs Sales.** In **Contacts → Groups**, the group dialog only shows **Always require a quote** when the Sales module is enabled. See [Contact groups](/docs/customers/index#contact-groups).
- **The configurator is its own module.** The **Dimensions**, **Price rules** and **Option groups** cards on a Made to measure product come from the **Configurator** module. While it is off they are hidden, the product shows "Made to measure is turned off; this product cannot be bought." and storefronts cannot buy it. A configurator component **Qty** now takes decimals (`2,16`). See [The configurator](/docs/products/variants-and-configurator#the-configurator).
- **Stock takes decimals.** On **Stock → Levels**, quantities, thresholds and transfers accept up to 3 decimals, and so do product and variant stock fields. A product with **Track stock** off sells without limits even if it has a stock record. See [Tracking stock](/docs/stock/index).
- **Cancelling restocks only what was taken.** Cancelling or refunding an order returns exactly what it took from stock; a line sold untracked puts nothing back. See [Change an order's status](/docs/selling/orders#change-an-orders-status).
- **Orders from quotes keep the quoted price.** Converting a quote to an order charges the quoted prices and keeps decimal quantities. See [After acceptance](/docs/sales/quotes#after-acceptance).

## 2026-09-17

### Added
- **What's new inside the dashboard.** This page now also renders in the dashboard at **Account menu → What's new** and under **Workspace → What's new** in the sidebar, in the language you have selected. Links open the guide on the docs site. See [The workspace tour](/docs/getting-started/index#header).
- **The product form and the option-groups card say when Quote only is inert.** A **Purchasability** of **Quote only** or **Direct checkout and quote**, and a configurator choice with **Quote only** switched on, do nothing until quote requests are enabled under **Webshop → Settings → Cart**. While that switch is off, both places now show a hint saying so, and the product still checks out directly. See [Product fields](/docs/products/index#product-fields), [Option groups](/docs/products/variants-and-configurator#option-groups) and [Quote requests](/docs/selling/store-settings#quote-requests).

### Changed
- **Buy X get Y now rewards every qualification.** A **Buy X get Y** discount used to grant its **Get quantity** once per cart however many times the buy threshold was met. It now grants it once per qualification: buy 2 get 1 with 6 qualifying items and 3 get items discounts all 3, with 5 qualifying items it discounts 2. No setting moved or was renamed. See [Discounts](/docs/selling/discounts#get-buy-x-get-y-only).
- **The Cart policy card has a header.** The first card on **Webshop → Settings → Cart** now carries the title **Cart policy** and the description "Who can add to cart, order limits, and when abandoned carts are pruned.", like the **Pricing display** and **Quote requests** cards below it. No field moved. See [Cart policy](/docs/selling/store-settings#cart-policy).
- **The product form saves on Enter and drops a corrected field's error.** Pressing Enter in a text field of the product form saves it, and a validation error under a field disappears as soon as you change that field instead of staying until the next save. If a new product is created but its options could not be saved, you now see "Product created, but saving its options failed. Add them on the product page." before landing on the detail page. See [Create a product](/docs/products/index#create-a-product).
- **Group prices keep a deactivated variant visible.** A group-price row pointing at a variant you have since deactivated used to show an empty **Variant** select; it now shows the variant with "(inactive)" after its name and stays selectable. Inactive variants that no row references are still hidden. See [Bulk pricing](/docs/products/index#bulk-pricing).
- **Numbering: Applies to always offers the series' own scope.** A number series created with a scope other than quotes, invoices, credit notes or orders rendered a blank **Applies to** field; the picker now lists that scope too. See [Number series](/docs/workspace/settings#number-series).
- **The sidebar's load-failure banner now says navigation.** When the sidebar cannot load, the red banner reads **Couldn't load navigation.** instead of **Couldn't load modules.**; the **Retry** button and what shows meanwhile are unchanged. See [The workspace tour](/docs/getting-started/index#the-workspace-tour).

## 2026-09-04

### Added
- **The configurator card now flags a hidden choice.** A choice that is still switched **Active** but withdrawn by its own **Requires** rule gets a warning pill under its row naming the requirement that hides it, and a **Required** group with nothing available left is flagged on its header. The **Rules** dialog marks an inactive target with "(inactive)". See [Variants and configurator](/docs/products/variants-and-configurator).

### Changed
- **Renaming a dimension no longer loses its per-choice ranges.** Changing a dimension's key while keeping the axis kept the price table but silently discarded every per-choice minimum and maximum on it. Those now travel with the renamed axis. See [Variants and configurator](/docs/products/variants-and-configurator).
- **You cannot drop an axis out from under area pricing.** Saving one dimension on a product that still has an active choice priced **per m²** is refused, naming the choices, instead of leaving them to fail at checkout. Reactivating such a choice on a one-axis product is refused for the same reason; editing it while it stays inactive is still fine. See [Variants and configurator](/docs/products/variants-and-configurator).
- **An inactive choice can no longer be a price matrix condition.** Picking one is refused when you save the matrix, because the matrix could never be selected and its prices would never apply. Activate the choice or pick another. See [Variants and configurator](/docs/products/variants-and-configurator).
- **Deactivating an option choice now hides what depended on it.** Switching a configurator choice's **Active** off also withdraws every choice whose **Requires** rule pointed only at it, so your storefront cannot offer an option it would then refuse. See [Variants and configurator](/docs/products/variants-and-configurator).

## 2026-08-27

### Changed
- **Numbering: locked series.** The **Delete** button on a series that already issued numbers is now disabled up front instead of failing after the click. See [Numbering](/docs/workspace/settings#numbering).

## 2026-08-26

### Added
- **Sales is a module of its own.** Quotes, invoices, credit notes and payments live under **Sales**, with their own settings page. See [Sales](/docs/sales/index).
- **You can write a quote yourself.** **Sales → Quotes → New quote** gives you a contact picker, a lines table with decimal quantities and units, scope groups, up to 8 photos, and live totals per VAT rate. See [Quotes](/docs/sales/quotes).
- **Customers can sign a quote.** Under **Sales settings → Quotes → Acceptance**, switch from **One click** to **Drawn signature**; a signed quote shows **Signed** and gets a second PDF with the signature. See [Sales settings](/docs/sales/settings).
- **Invoices, credit notes and payments.** Write and send invoices, record payments (or press **Mark as paid**), and correct a sent invoice with a credit note. See [Invoices](/docs/sales/invoices) and [Payments](/docs/sales/payments).
- **Invoice an order.** A paid order shows **Create invoice**, which opens a draft invoice with the order's lines. See [Invoices](/docs/sales/invoices).
- **Two new dashboard cards**, Open quotes and Unpaid invoices, for tenants with Sales enabled.
- **Sales in the mobile app.** Quotes, invoices and payments are readable on the phone, with resend, cancel, add payment, mark as paid and open PDF. Writing a document stays in the dashboard. See [Sales on mobile](/docs/sales/mobile).
- **Document templates in Sales → Settings.** A new settings page with two tabs: **Documents** picks which template each kind of document (quote, invoice, credit note) is rendered with, and **Templates** lists the two built-in templates plus your own copies. Duplicate a built-in template, open the full-screen visual editor, drag blocks onto an A4 page filled with sample data in EN, NL or TR, and press **Preview PDF** to see the real thing. Only the workspace owner can edit, rename, duplicate or delete a template. Deleting a template that is still selected or already used is refused with an explanation. See [Document templates](/docs/sales/templates).
- **Business profile in Settings → Business.** Legal name, address, tax ids, IBAN, signature and document defaults live in one place; quotes and invoices will read from it. Three completeness pills (Legal identity, Signing, Sender) show what is still missing. Only the account owner can save changes. See [Business profile](/docs/workspace/settings#business-profile).
- **Numbering in Settings → Numbering.** Define document types (a name plus a short prefix) and number series that turn a running counter into the number a quote, invoice, credit note or order carries, with yearly/monthly reset and an optional volume-hiding display mode. A series that already issued a number locks its format. See [Numbering](/docs/workspace/settings#numbering).

### Changed
- **Quote requests moved.** **Webshop → Quote requests** is now **Sales → Quotes**; the old address forwards there. Storefront requests appear in the same list with the origin **Storefront request**. See [Quotes](/docs/sales/quotes).
- **Quote statuses read differently.** Submitted is now **Requested** and Offered is now **Sent**, and a new **Draft** status covers a quote you have not sent yet.
- **Taxes moved to Settings → Taxes.** VAT rates are no longer a Catalog page or a Webshop store setting: every business has tax classes, whether or not the Webshop module is on, and a new business starts with **Standaard 21%**, **Verlaagd 9%** and **Nultarief 0%**. The old address `/m/commerce/settings/taxes` redirects to the new tab. See [Taxes](/docs/workspace/settings#taxes).
- **Contacts is always available; it no longer depends on a module.** Every business has Contacts, so the group is always in the sidebar. See [Getting started](/docs/getting-started/index).
- **Customers is now called Contacts.** Same list, same detail page, new name throughout the dashboard: sidebar entry, page titles, and buttons (**New contact**, **Import contacts**, **Anonymize contact**...). See [Managing contacts](/docs/customers/index).
- **Contacts can now be companies, not just people.** A Person/Company switch on create and edit adds company name, registration number, and VAT id for company contacts; email becomes optional for any contact you create in the dashboard (it is still required for a contact registering through the storefront). See [Person and company contacts](/docs/customers/index#person-and-company-contacts).
- **Addresses gained a `work` type**, alongside shipping and billing, for a business site distinct from where invoices go or goods ship to. See [Addresses](/docs/customers/index#addresses).

## 2026-08-25

### Changed
- **Sidebar is organised by group.** Instead of one entry per module, the sidebar shows **Catalog**, **Webshop**, **Operations**, **Content** and **Contacts**, each containing the pages of the modules enabled for your business. A group only appears when at least one of its modules is enabled. See [Getting started](/docs/getting-started).
- **Products, categories, media and taxes moved to Catalog.** They were under Commerce → Catalog and Commerce → Settings → Taxes. Orders, carts, discounts, quote requests and store settings are under **Webshop**.
- **Quotes is now called Quote requests** under Webshop.
- **Custom objects appear under Content.**

### Notes
- Module enablement is still done by the platform admin. Admins can now apply a preset (Brochure, Service business, Webshop) and see which modules depend on which.
