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.
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.
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.