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 previously saved data — no file upload needed. After uploading files above, use 💾 Save to History to store them.
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 one or more Shopify orders CSVs and/or Square TSVs to build a historical record. Data is stored by day — duplicates are detected before saving.
Upload historical Shopify CSV or Square TSV exports to seed the price database. Accepts multiple files — file type is auto-detected. Most recent price per item wins.
| Coffee | Size | £ Price | Date | Source | Status |
|---|
Download all Firestore data as a single JSON file — brew log, coffee stock, roast planner, dispatch history, packaging, price DB, subvol months, and settings.
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.