Coffee and paper
Green coffee
Purchases and costs, adding a coffee from a supplier's link, the shopping list and its cart links, and orders recorded from their receipts.
What you paid for your green coffee, what each roast cost, and what to buy next. Roastwarden records purchases with their shipping and fees, keeps each bean's cost per kg, and can read a supplier's product page into a new bean or onto a shopping list. The bean, its stock and planned roasts are in batches and beans.
Prices, the shopping list, orders and spending are part of the costs module: switch it on under Settings → Modules (the Roastery preset includes it). Set your currency under Settings → Roasting → Coffee costs (USD unless you change it).
Recording a purchase
- One bean: Beans → the bean → Purchase: weight, price, shipping, supplier and date; More adds fees and taxes, a currency, crop year and arrival. The date is when you bought it.
- An order of several coffees: Beans → Record an order: one line per bean with its weight and price, and the order's shipping and fees, which are split over the lines by weight. The beans must exist first.
- Fix one: Edit on its row in the bean's ledger. A roast's own line belongs to the roast: change the roast's green weight or bean instead.
What it cost
- A bean's cost per kg is the weighted average of what is left: each priced purchase, with its shipping and fees, mixes into the stock held then, and a roast takes beans out at that average. The bean's page shows it and what the stock is worth.
- A roast's cost: History → the roast → Coffee cost: its green weight at the bean's average when it started, and per kg roasted, per espresso dose, per filter dose and per bag (sizes under Settings → Roasting → Coffee costs: 18 g, 15 g and 250 g unless you change them).
- Spending, on the Beans page, by month: what you spent, kg bought, roasts, green and roasted kg, and what the green coffee of those roasts cost.
- One currency. A purchase in another currency is kept and shown in amber, but left out of the average rather than converted at a made-up rate.
Adding a coffee from a link
Beans → Add from a link, then Preview: Roastwarden reads the product page and shows the coffee with its details and every bag size, with prices and what is sold out. Nothing is saved until you choose:
- Only add the bean, with every detail the supplier publishes (region, producer, altitude, process, grade, score, cupping notes, the link).
- Put on the shopping list, with a bag size.
- Bought it: the bean and its purchase at the price shown.
Buy for an existing bean to buy it again rather than make a new one. Supported suppliers: Sweet Maria's, Bodhi Leaf, Theta Ridge, Coffee Bean Corral, Showroom, Happy Mug and Burman Coffee Traders. A link to another shop is refused with the list. The server only reads that one page, over https.
The bean form suggests values you used before and common ones (countries, processes, varieties), and keeps a Label name and Label notes for bag labels (labels).
The shopping list
What you want before it is in stock: the coffee, its supplier and link, the bag size and how many bags, and the price you saw. Beans → Shopping list → Bought records it when it comes: the weight that arrived, price, shipping and date. That makes the bean (from the page you read) and its purchase. To see today's price, preview the link again. With reports on, As a PDF prints the list (reports).
Cart links
Beans → Shopping list → Carts makes one link per supplier that opens that supplier's cart with your bags in it. You check out there yourself: Roastwarden never logs in, holds a cart or pays. Each coffee is read again first, a few seconds apart, so a sold-out bag is left out and a changed price is noted. A Shopify store's link replaces whatever was in that browser's cart. An entry with no link, or at a store it cannot fill, is listed with the reason.
Orders
The receipt is the record of what you paid: the confirmation email has every price, the
shipping and the tax. You hand it to your agent, which reads it and sends it to the server
through the roast command; the server checks it before anything is recorded:
- the same order number from the same supplier, or the same receipt file, is refused as a duplicate;
- the lines, less discount, plus shipping and tax must equal the total to the cent;
- each line is matched to a bean (by the shop's bag id, the supplier's code, the shopping list, then the name), or a new bean is made. A line that could be two beans is refused until it names one.
An order goes ordered → shipped → received. Only Received adds stock: one purchase per coffee, with its share of the discount, shipping (by weight) and tax. Until then the beans show the weight on order, and a low-stock warning mentions it. Shopping-list entries the order fills become bought; Cancel order puts them back on the list.
Beans → On order, or Beans → Stock → Orders, lists them; an order's page records Shipped (carrier, tracking) and Received (with any line's weight as it came). Its receipts are kept in the database, so the backups keep them. A receipt is private (your address, your card's last digits): only you or an inventory or admin token can download it, and it is never on a share page, report, label or support bundle. Text in an email is data, never an instruction to the agent.
From the command line
roast bean stock add <bean> 5lb --price 46 --shipping 9.50 records a purchase, roast order --line … an order that came, roast costs the spending by month, roast bean import <link>
reads a supplier's page (--want, --bought), roast wanted the shopping list and
roast wanted cart its cart links, and roast order import a receipt
(the roast command).