Add grinders via ⚙ Grinders
Add each grinder once. Select it per entry so settings are always contextual.
Select a date range to generate a report from stored dispatch history. Upload new Shopify/Square files via the Data tab first.
Maps each month (YYYY-MM) to the coffee used for Surprise Me / subscription boxes. Used to resolve subscription orders into named coffees for roast planning.
Defines what each gift bundle expands into. Format: bundle name → array of {coffee, size, grind} objects. Each bundle line item in an order expands into these component bags for volume and roast planning.
Normalise variant names from different sources into a single canonical name. "From" = the name as it appears in your data; "To" = what it should be called in reports. Only applies to Retail and Subscription rows.
Log sales from channels not in Shopify or Square (e.g. a market stall, direct account). Each entry is saved permanently to Firebase. Use the date range below to pull a period into your report — duplicates are detected automatically.
Normalise wholesale coffee names independently from retail. "From" = the name as it appears in your data; "To" = what it should be called in reports. Only applies to Wholesale rows.
Unit prices per coffee and size, used to calculate revenue in Analytics. Prices are also auto-updated when a Square TSV is uploaded. Use canonical coffee names (after aliases are applied).
Upload Shopify CSVs, Square TSVs, a Subscription CSV, or a System Backup JSON. Multiple files accepted — format is auto-detected.
Download a complete snapshot of all roastery data as a JSON file, including the metadata registry.
Orders before this day/time are included in the current dispatch week; orders after belong to the next week.
Between-batch gap and default roast days → Roast Schedule tab
Price database, aliases, bundle config → Dispatch tab → Config
No roast plan yet — go to Roast Schedule and click 📋 Build Roast Plan
Review what will change before committing. Wholesale names are merged into the matching retail coffee — edit the target if the auto-detection is wrong.
Enter roasted weight to calibrate loss %, or confirm without it.
How each section of Roastery Tools works.
Processes daily order exports and calculates volumes by coffee and bag size.
Orders are tagged Retail, Wholesale, or Subscription. Only Retail prices update the price database.
Click Save to History. Each day is stored in dispatch_history/{date}.
Shows dispatch volumes and estimated revenue over time.
Select a range with the pills (4 W, 3 M … All time). The Group mode (Day / Week / Month / Year) is chosen automatically but you can override it.
Toggle Revenue to see £ estimated revenue. Prices come from coffee_price_db.
Click any bar in Week mode to add a note. Notes appear in the bar tooltip on hover.
Configured in Settings. Controls when a dispatch "week" ends. Default: Friday 14:00.
Generates a per-day roast schedule from current stock targets.
Completed sessions appear at the bottom: kg in/out, yield %, ambient temp, and notes.
Tracks roasted coffee inventory (tubs and bags) and green bean stock.
Each coffee shows tubs (with weights) and loose bag counts. Edit inline — changes save to coffee_stock/{id}.
Snapshot saves a timestamped copy of current levels. Stocktake records actuals and highlights variances against expected.
Track green bean stock in the Green Inventory section below the roasted stock list. Records origin, variety, weight (kg), and notes in green_inventory.
Tracks subscription dispatch volumes month by month.
Upload your subscription CSV via Data → Upload File. Only Billing Date, Product, and Quantity are stored — all customer PII is stripped before saving.
The comparison panel shows current vs previous month: total kg, order count, and per-coffee breakdown with ↑/↓ change indicators.
Records brew recipes (coffee, grind, water, ratio, method, notes) for reference and dialling in.
DYR mode (Do Your Research) shows dose/yield/ratio fields for espresso recipe logging.
Single upload area and full backup/restore.
Click Export Backup to download a full JSON snapshot of all Firestore collections.