Two new product types, Food Simple and Food Variable, that behave exactly like the WooCommerce types they are based on. Your existing products are untouched.
Nutrition declaration
A label, amount and unit table declared per 100 g or 100 ml, pre-filled with the five EU-mandatory rows and fully editable. Rows reorder by drag, rename, and indent as sub-nutrients. Variable products share one table or let a single variation override it.
Ingredients and allergens
Ingredients in declaration order with optional percentages and sub-ingredients, each able to carry one of the fourteen EU-declarable allergens. The product page renders the list as one sentence with allergens in bold, plus a separate may-contain line.
Batches that are the stock
One row per batch with expiry date, quantity, batch number, batch date and supplier. Once tracking is on, the batch table is the product's stock: WooCommerce stock management steps aside, and shoppers cannot buy more than the batches hold.
Automatic markdown
A discount ladder tied to how close a batch is to its date, for example fifteen per cent a week out and fifty on the last day. The product's own price never changes. The shopper opts into the reduced batch, and the discount applies to that cart line only.
Expiry dashboard
Every batch row from every food product in one list, closest expiry first, colour-coded by urgency, filterable by date range and exportable as CSV. Expired batches can be written off by hand or automatically each night at an hour you choose.
Markdown earnings
Per marked-down batch: units sold, revenue taken, what the discount cost you, and how much expired unsold anyway. The number that tells you whether the ladder is set right.
Alerts and categories
A scheduled digest of batches at or near expiry, sent daily, weekly or fortnightly to the shop users you pick, with every send recorded in an email log. Categories such as Clearance are added as expiry nears and removed once a fresher batch arrives.
Appearance
Thirteen colour fields covering the ingredient list, nutrition table, batch picker, the reduced-to-clear badge and the best-before line, with a live light and dark preview and a WCAG contrast check. Leave a field empty and the shipped styling stands.