Skip to main content

Recipe Drafts Inbox

The Recipe Drafts Inbox is where you review recipe changes proposed by an AI assistant connected through the Brikly Connector. Drafts never touch your live recipes. They sit in the inbox until you approve, reject, or discard them.

This page is for the operator side of the flow. For the assistant side (proposing drafts from chat), see the Connector example questions.

When you would see a draft

You will see a pending draft any time an AI assistant proposes a recipe change on your behalf. Common examples:

  • "Swap dairy milk for oat milk on every drink that uses it." The assistant proposes one draft per affected recipe.
  • "Add a salted caramel variant of our Latte." The assistant proposes a new recipe.
  • "Bump the brownie tray yield from 16 to 14 and update the per-slice yield." The assistant proposes an edit to the brownie recipe.
  • "I want to add a pistachio cardamom bun." The assistant proposes a new recipe and flags the ingredients you do not yet stock (pistachio paste, ground cardamom) as pending sourcing, for you to add at approval time.

The assistant always proposes. You always approve. There is no path where the assistant changes a live recipe without you.

Finding the inbox

There are two entry points, both inside CostingBrik:

  • CostingBrik dashboard - when at least one draft is pending, a card titled Pending drafts (N) appears with a chevron through to the inbox.
  • Recipes list page - the header shows a Pending drafts (N) button next to New recipe.

Both badges are hidden when no drafts are pending, so the inbox does not clutter the UI for operators who do not use the Connector.

The inbox lives at /costing/drafts.

Drafts that reference at least one ingredient you do not yet stock show a Needs sourcing chip on their row. A matching filter chip at the top of the inbox narrows the list to those drafts so you can work through your sourcing backlog in one sitting.

Reviewing a draft

Click any row in the inbox to open the draft detail panel. The panel shows three things:

The diff

For an edit draft, you see the current live recipe on the left and the proposed change on the right. Changed fields are highlighted. Ingredient additions, removals, and quantity changes show line by line.

For a new recipe draft, you see the proposed recipe on its own. There is nothing live to compare it against.

For a duplicate draft, the source recipe is shown alongside the proposed copy plus edits.

Cost preview

Live cost and margin numbers, computed against today's ingredient prices (not the snapshot from when the draft was proposed). You see:

  • Current cost per portion vs proposed cost per portion.
  • Current gross margin vs proposed gross margin (in percentage points, VAT-correct).
  • The £ delta and margin pp delta.

The cost preview always matches what the assistant quoted in chat, because the inbox and the Connector use the same cost engine.

Rationale

The AI assistant's free-text explanation of why it proposed the change. This is whatever the assistant wrote when it submitted the draft. Read it before approving.

Resolve ingredients

If the draft references ingredients you do not yet stock, the detail panel shows a Resolve ingredients section above the cost preview. Each pending ingredient must be sourced before the draft can be approved.

For each pending ingredient you see:

  • The agent's suggested name and purchase unit (for example, "Pistachio paste" in kg).
  • Any free-text agent notes, clearly labelled Agent notes (not committed to data). These are the assistant's commentary, never written to your data layer. They might include a sourcing hint or rough price expectation, but no number from these notes feeds the cost engine.

You have two options per ingredient:

  • Link to existing ingredient. Opens a picker so you can match the pending name to an ingredient already in your pantry. Useful when the assistant has invented a name that you already track under a slightly different label.
  • Create new ingredient. Opens the usual ingredient creation form, pre-filled with the agent's suggested name and purchase unit. You add the supplier, pack size, and cost yourself. Once created, the ingredient is automatically linked to this draft.

The picker never auto-links. Every match is your explicit choice.

Until every pending ingredient has been linked or created, Approve and apply stays disabled and the cost preview shows a partial cost with a "Margin pending until sourcing complete" note. The partial cost reflects the lines you have already sourced, so you can watch the cost build as you work through the list.

If you link an ingredient and later delete that ingredient from CostingBrik before approving, the draft notices and flips the pending entry back to unresolved. No approval will ever commit a recipe that points at a deleted ingredient.

The four actions

Approve & apply

Applies the proposed change to the live recipe. For an edit, this updates the existing recipe in place. For a new recipe or duplicate, this creates a fresh recipe in your catalogue.

If the draft had pending ingredients that you resolved (either by linking to existing ingredients or creating new ones), the approved recipe references those resolved ingredients directly. No "pending" placeholders survive into the live recipe.

The draft is marked approved with your user ID and the time of approval, kept for audit history. The audit captures, for each previously pending ingredient, which resolution method you used (link vs create) and the resulting ingredient ID.

Edit, then approve

Opens the recipe edit form so you can make further changes before applying. Useful when the assistant's proposal is close but not quite right - for example, the quantities look about right but you want to adjust the yield first.

v0 limitation

Today, clicking Edit, then approve discards the draft and navigates you to the recipe edit page, but the form does not pre-fill with the agent's proposed values. You will need to apply the agent's proposal manually from what you read in the diff view. We are wiring the prefill in a follow-up. Until then, keep the draft detail open in a second tab if you want to copy values across.

Reject

Marks the draft as rejected with an optional reason. Use this when you have considered the proposal and decided not to apply it. Rejected drafts stay in the audit history so you can refer back later.

Discard

Marks the draft as discarded with an optional reason. Use this when the draft is not worth keeping in history (the assistant misunderstood, or you accidentally asked twice).

The semantic difference is small: rejected means "considered, no"; discarded means "not worth keeping in history". Both leave the live recipe untouched.

Who can do what

Permissions follow the standard CostingBrik role mapping:

RoleView inboxApprove & apply (edit)Approve & apply (new recipe)RejectDiscard
OwnerYesYesYesYesYes
AdminYesYesYesYesYes
MemberYesYesYesNoNo
ViewerYes (read-only)NoNoNoNo

Members can approve drafts because applying a draft is equivalent to editing or creating a recipe, which members are already allowed to do. Rejecting and discarding require admin or owner because they move a draft into a closed state.

Viewers see the inbox but no action buttons are rendered for them.

Stale drafts

A draft becomes stale when the live recipe has changed since the assistant proposed the draft, and the change overlaps with a field the draft also touches.

For example: the assistant proposes raising the latte's milk quantity to 240 ml. Before you review the draft, you update the latte's selling price in the recipe page. That is not stale, because the draft does not touch selling price.

A different example: the assistant proposes raising the latte's milk quantity to 240 ml. Before you review the draft, another team member updates the latte's milk to 220 ml. That is stale, because both changes touch the same field.

When a draft is stale, the detail panel shows a banner listing the diverged fields and the Approve & apply button is disabled. You have three options:

  • Re-review the diff. The cost preview updates against today's live recipe, so you may decide the proposal is no longer interesting.
  • Edit, then approve. Use the agent's proposal as a starting point and merge in the operator changes by hand.
  • Discard. If the live update has already done what the agent suggested, the draft is no longer useful.

Brikly never silently overwrites operator changes with a stale draft. Approval is blocked until you resolve the staleness one way or another.

Drafts that evolve mid-conversation

A draft can be refined in place by the AI assistant without changing its inbox row. If you and the assistant work through a new product idea over several messages, the assistant updates the same draft each time rather than filing a new one. You see one item in the inbox throughout the conversation, with its cost preview, summary, and pending ingredients all reflecting the latest version.

Structural identity is locked: an assistant can change the spec, summary, or rationale of a pending draft, but it cannot change which recipe the draft targets or whether it is an edit, create, or duplicate. Those changes always file a new draft.

If you have already resolved a pending ingredient and the assistant later tweaks the spec in a way that keeps that ingredient unchanged (same name, same purchase unit, same position in the recipe), your resolution survives. If the assistant promotes that line to a different ingredient, swaps it for a different pending ingredient, or removes it, the resolution is dropped and you can re-source.

Pending-draft cap

Each tenant can have up to 50 pending drafts at any one time. If an AI assistant tries to propose a 51st draft while 50 are already pending, the propose tool returns an error and the assistant tells you to clear some drafts from the inbox before proposing more.

The cap is per tenant, not per location or per user. It exists to stop a runaway assistant loop from filling the inbox faster than you can review.

What happens after a draft is approved

The draft is marked approved, the underlying recipe is updated (or created), and:

  • The cost engine re-rolls anywhere that recipe is used (sub-recipes, menu pricing, allergen matrix).
  • POS margin matching picks up the new cost on the next sales batch.
  • The drafts table keeps the approved record for audit, so you can answer "who applied this change, when, and what did the AI assistant propose?" later.

What an approved draft does not do

  • It does not push a live recipe to a saved what-if scenario. Those are separate.
  • It does not notify your team. Approvals are silent today. Push notifications and a draft activity feed are on the roadmap.
  • It does not roll back if you change your mind. To undo, edit the recipe directly.

Drafts proposed by mistake

If you see a draft in the inbox that you did not ask the assistant to propose, the safe action is Discard. It does not touch your live data.

If a draft looks like a hallucination (proposes an ingredient you do not stock, or a recipe you never asked about), discard it and let us know. The assistant should never propose something with no operator request behind it.