← All releases

Money you can check, and stock you can trace

Mostly about numbers being answerable: what a batch cost to make, what your margin is, what profit looks like, and who moved which stock and when. Receiving also stops being a single button and becomes a proper line-by-line check against what you ordered.

Worth testing first

If you only have twenty minutes, these are the changes most likely to affect your day — and the ones where we'd most like to hear if something feels off.

  • Receive a delivery that did not fully arriveMark a purchase order received. You now get a list of every line with the ordered amount beside an editable one, pre-filled — so if it all arrived it is still one tap. Change a number and the reason, note and damaged count appear. The total owed updates as you go.
  • Check what a production run actually costRun a batch and open it. It now shows what went in, what it cost, and what each output is worth per unit. Waste makes the surviving product more expensive, which is what really happens.
  • Look at profit on the dashboardOwners and admins now see cost of goods and gross profit beside revenue. It tells you what share of sales it could actually cost, and refuses to show a figure if too little of your stock has a recorded cost.
  • Group your orders by how they are going outOn the orders list, group by fulfilment type or delivery window and filter to today. That is your run sheet — it was not possible before.
  • Find who moved some stockThere is a new Stock movements page under Inventory. Every movement across all your locations, filterable by type, date and person.
  • Check what is already on orderProducts now show incoming stock from open purchase orders, so you stop reordering something that is already in transit.

Receiving

Previously, marking a purchase order received silently accepted every line at the amount you ordered. There was no moment where anyone checked.

  • Deliveries are confirmed line by line. One row per item, with what you ordered beside an editable amount pre-filled to match — so a delivery that arrived in full is still a single tap. Enter something different and the reason, note, photo and damaged count appear for that line only.
  • What you ordered is never overwritten. If eight of ten arrive, the line still records that ten were ordered. That is the evidence you need when a supplier disputes it.
  • Damaged units are counted but never become sellable stock. They are a claim record, not inventory.
  • The order total becomes what you owe. After a short delivery the purchase order shows ordered, received, the variance and the real total owed, rather than quietly still showing the original figure.
  • Two people receiving the same order cannot double-count it. The second save is refused rather than adding the stock twice.

Money

  • Products show what they cost and what you make. Cost comes from the most recent purchase order that was actually received, with margin beside it. Visible to owners and admins only.
  • Things you make in-house finally have a cost. A production run now spreads the cost of what it consumed across what it produced, so house-made goods stop showing an imaginary margin. Waste is carried by the product that survived, which is the honest answer.
  • Profit on the dashboard. Cost of goods and gross profit beside revenue, for the same period as everything else on the page. Where too little of the stock has a recorded cost, it says so rather than reporting a profit that is too good to be true.
  • A revenue figure that was wrong is now right. The dashboard sales total was multiplying weight products by their per-unit price, so a pound of flower counted hundreds of times over. If your sales figures ever looked impossibly high, this was why.

Stock you can trace

  • A Stock movements page. Every movement across every location in one place — received, sold, adjusted, produced — filterable by type, date and who did it. Previously you could only see movements one product at a time.
  • Every movement now records who caused it. Including deliveries completed by a driver and orders placed on the website, which previously showed as "System".
  • Incoming stock on products. What is on order but not yet arrived, shown beside what you hold, and never counted as sellable.

Lists that answer questions

The lists could show you things. They could not answer much.

  • Orders group by how they are going out. By fulfilment type or delivery window, filtered to today or this week. That is a delivery run, and it is the thing the page is most used for.
  • Products show what you can actually sell. On-hand minus what is already promised to orders — the number that matters when someone asks if you have any.
  • Sorting stock stopped comparing grams to pieces. It was ranking 400 g of flower below 500 pre-rolls, because 400 is less than 500. Weight and unit products now sort separately.
  • Purchase orders group by the week stock lands. Plus a filter for orders with costs still missing, so you know which ones cannot be checked against an invoice yet.
  • Customers group by type and by who owes you. Owes / holds credit / clear — which is a collections list you did not have.
  • Everything can be sorted by when it last changed. Which was not possible on a single list before.

Elsewhere

  • Shipping is now a fulfilment option. For orders a carrier posts rather than a driver delivers. "Self-assigned" is renamed "Driver pool", which is what it always meant — an order waiting for any driver to claim.
  • Production only offers products you actually make. Your own items come first when recording a run. You cannot manufacture another company’s branded product, and recording that you did was previously possible.
  • Stock received without a strain is flagged. Buyers can now raise a purchase order before knowing which strain is coming. When it arrives, the product is marked as needing finishing rather than quietly looking ready to sell.

Ten separate improvements shipped in this release. If something here does not behave the way you expect, tell us which screen you were on — that is usually enough for us to find it.