Skip to content

Menu Builder

Menu Location: Products > Menu Builder

Last Updated: 2026-07-27


Overview

The Menu Builder is where you plan and set the weekly menu for all subscription boxes -- what products go into each box, and in what quantity, for a given week. It's tied directly into the Weekly Cycle: while you're on Step 1 of the cycle you can freely edit the menu, and clicking "Create Orders" generates or updates customer orders from what you've set here.

Primary Functions:

  • Add products to this week's menu and set the quantity that goes in each box
  • See live per-box cost, a comparison against each box's target cost, and fruit/veggie/other item counts as you build it out
  • See order counts and product demand pulled from orders already placed this week
  • Copy the current week's menu forward to next week, or bring a past week's menu into the current week
  • Control which products are eligible to be substituted, with an alert if a substitute's value looks unusually high
  • Remove or bulk-replace a product across orders that have already been generated (Remove & Replace tool)
  • Export the current week's menu to CSV
  • Organize your boxes into tabs so you're not scrolling through every box at once

Page Layout

Header Section

  • Week Selector: dropdown to choose which week you're viewing/planning
  • Action Buttons: "Add Product", the CSV export icon, the gear/cogs settings dropdown, and -- depending on the week and where you are in the weekly cycle -- "Copy To Future Menu" / "Copy To Current Menu" and "Create Orders"
  • Tab Navigation: switch between the tabs you've set up to group your boxes

Weekly Cycle Lock

Menu Builder is only editable while you're on Step 1 of the Weekly Cycle. If you've moved past Step 1 (orders have started being finalized), the page shows an overlay telling you to go back to Step 1 before you can change the menu or create orders again.

Box Tabs

Tabs (set up under Menu Builder Tabs) group your boxes so you can work through them a few at a time instead of seeing every box size at once -- for example a tenant might set up tabs like "Produce Boxes" and "Add-Ons," but tab names are entirely up to you.

Product Grid (per tab)

Each tab shows a table of products with:

  • Sub?: checkbox marking whether this product is eligible to be used as a substitute for another item
  • Split? (optional, can be hidden): a number you can set per product -- if a customer's order quantity for that item reaches this number, the system breaks it into that many separate order line items instead of one line with a quantity (useful for packing/labeling one unit at a time)
  • Product name / cost line: name, per-unit cost, and case price/quantity
  • Cost: per-unit cost ($ per case price ÷ case quantity)
  • Demand (optional column): total quantity of that product already ordered this week, across all non-cancelled orders
  • One column per box: click the box name to choose which tabs that box appears on. The column header shows the number of orders placed for that box this week (click through to the Orders page), the box's running cost vs. its target cost, and fruit/veggie/other item counts -- each clickable to filter the grid down to just that classification
  • Below the header row, each box column shows a running Box Cost total as you enter quantities

Setting the Weekly Menu

Basic Workflow

  1. Select the week from the Week Selector
  2. Select the tab for the box group you're setting
  3. Click "Add Product" to add a product to this week's menu (see below)
  4. Enter the quantity for that product in each box column -- the cell shows the running dollar cost for that box as you type
  5. Click "Save" (at the bottom of that tab's grid) to save the quantities you entered
  6. Repeat for the other tabs
  7. When you're happy with the whole menu, click "Create Orders" to generate/update customer orders from it

Adding a Product to the Menu

Click Add Product at the top of the page. In the modal:

  • Classification: pick an existing product classification, or choose "New Classification" to create one on the fly (with a Parent Class field)
  • Name / Pricesheet Name: optional -- auto-filled from the classification name if left blank
  • Lifespan: "Current week only" or "Permanent Product"
  • Distributer and Farm (vendor)
  • Case Quantity and Case Price
  • Units

Picking a classification that's been used before auto-fills its distributor, farm, units, and case quantity/price from the most recent entry for it -- there's an "Enable/Disable Autofill" toggle in the modal if you don't want that. Click Create to add it to the grid with 0 quantities across all boxes, then fill in quantities per box.

Adding a Product Directly to Existing Orders

Separately, the gear/cogs dropdown has an Add Product to Box option. This adds a chosen quantity of an existing menu product directly into customer orders that have already been generated for a box type (or "ALL boxes") -- as a bonus item, an admin-added item, or a normal item, and with the option to include or exclude gift boxes. This changes orders directly; it does not change the menu template itself.

Setting Product Quantities

  • Click into a box's quantity field for a product row and type a number
  • Decimals are allowed (the field stores a float), so weight-based items like "0.5 lb" work
  • Leave a field blank if the product isn't in that box

Copying the Menu Forward or Back

Copy To Future Menu: while viewing the current week, copies the current week's whole menu (products, quantities, and inventory info) into next week.

Copy To Current Menu: while viewing a past week, copies that week's whole menu into the current week. If the current week already has items on it, a confirmation popup lists what's already there before you proceed. The copy itself only adds products that aren't already on the current week's menu, so re-running it (or copying into a partially-built week) never creates duplicate rows.

Products that were deleted from the source week are not copied forward (a deleted item's week_id is cleared, so it's no longer part of that week's menu to copy).

Creating Orders

Purpose: Generate or update all customer orders using the menu you've set.

Click Create Orders. This is only available while the Weekly Cycle is on Step 1. The system processes all orders in the background; for large tenants this can take a while, and the page will tell you if a run is already in progress rather than letting you start a second one.

Export Menu

Click the CSV export icon next to Add Product. This downloads the current week's menu as a CSV with one row per product and one column per box, showing the quantity of that product in each box. It does not include demand, cost, or vendor data.


Product Demand & Ordering

Understanding the Demand Column

The Demand column (toggle it on/off via the checkbox near the grid) shows the total quantity of that product already summed from real orders placed this week (excluding cancelled orders), plus how many cases that works out to based on the product's case quantity. It reflects orders that already exist -- it is not a projection based on subscriber counts, so it fills in as orders come in / after you click Create Orders.

Ordering from Vendors

Workflow:

  1. Complete the menu for the week and click Create Orders
  2. Check the Demand column (or the separate Inventory Demand page) for how many units/cases you need
  3. Export the menu CSV if you want a copy for reference
  4. Place orders with each vendor, sized to demand plus whatever buffer you want for substitutions and waste

Advanced Features

Which Products Can Be Substituted

The Sub? checkbox on a product row marks it as eligible to be subbed in for another item. On tenants running the substitution-picker (currently farmbox and mpcheap), clicking the heart icon on a product's row opens Set Allowed Subs -- a checklist of every "Sub?"-eligible product, letting you pick exactly which ones are allowed to sub in for that specific item. There is no priority order among selected subs.

Remove & Replace Tool

Access: Click the "Remove & Replace" button at the top of Menu Builder (opens a dedicated page). Useful when a vendor runs out of a product after the week's menu and orders already exist.

Modes:

  • Replace All: removes every instance of the selected product from matching orders and replaces each one, scaled by a multiplier (e.g., replace each apple with 2 bananas).
  • Partial Replace: removes a specific quantity from each order and adds a specific quantity of the replacement, leaving the rest of the original item in place (e.g., reduce 4 bananas to 1, add 1 apple).

Item to remove: Limited to products already present in orders for the selected week.

Replace with: Any active product, or any product tied to the current week. This is not limited to products already in existing orders, so a brand-new product that hasn't been ordered yet can still be picked as the replacement.

Filters: Week, delivery day, box type, and order status (Open, Closed, Being Delivered Today, Waiting For Payment, Completed) narrow which orders are affected. Replace All mode also lets you include/exclude new customers, gift boxes, and sub-makers, and choose how add-on and subbed-in items are handled (replace and update cost / remove completely / ignore).

Undo: Every run is logged. Click "History" to view past runs and undo one if needed.

High Sub Value Alerts

Purpose: Warn when a substitute-eligible product's value is unusually high, so you don't accidentally let customers sub in something expensive because of a data-entry mistake (e.g. a case price typo).

  • Set a dollar threshold from the gear dropdown ("Set High Sub Value Alert Threshhold")
  • When a product priced above that threshold is available as a sub, an alert banner appears on the page with buttons to dismiss it for this session or for the current week
  • "Un-hide high sub value alerts (if any)" in the gear dropdown clears a dismissal

Hiding a Product or a Box

  • Hide a box from Menu Builder: click the box's name in its column header to open its settings, then "Do not display on menu builder." Reverse it from the Boxes page (admin-edit.php?table=boxes).
  • Hide a product from Menu Builder: on the product's own edit page, set "Show on Menu Builder?" to "Do not show on Menu Builder." Switch it back the same way to unhide it.
  • Deleting a product from the current week's menu (the X/delete icon on its row) removes it from this week only; a "Un-delete product" option in the gear dropdown restores it if that was a mistake.

Settings & Configuration

Access via the gear/cogs icon at the top of the page:

  • Un-delete product -- restore a product you just removed from this week's menu
  • Set Classifications in three boxes
  • Show/Hide Case size/qty
  • Show/Hide Split Column
  • Show/Hide Retail -- shows or hides the retail-cost comparison on each box's column header
  • Table Full Width / Table Limit Width to Narrow
  • Box Settings -- link to admin-edit.php?table=boxes
  • Copy Badges (only shown if that option is enabled for your tenant)
  • Add Product to Box -- see "Adding a Product Directly to Existing Orders" above
  • Edit Tabs -- link to Menu Builder Tabs (admin-edit.php?table=boxes_types)
  • Set High Sub Value Alert Threshhold
  • Un-hide high sub value alerts (if any)

A tab has a Name and a "Should this be displayed on the menu planner?" on/off toggle. Create new tabs from the "Add Tab" button on Menu Builder itself (name only); rename, hide, or delete a tab from the Menu Builder Tabs page. Which boxes show up under a given tab is set separately, by clicking that box's name in the Menu Builder header.


Common Use Cases

Use Case 1: Setting Up Next Week's Menu

Goal: Plan next week's subscription boxes using this week's menu as a starting point

Steps:

  1. While viewing the current week, click "Copy To Future Menu"
  2. Select next week from the Week Selector to review what copied over
  3. Remove any out-of-season items, add new seasonal items, adjust quantities for box columns as needed
  4. Save each tab's changes
  5. When next week becomes the current week and you're ready, click "Create Orders"

Use Case 2: Substituting an Out-of-Stock Product

Goal: A vendor is out of an item that's already in this week's orders

Steps:

  1. Go to Remove & Replace
  2. Select the week, pick the out-of-stock item under "Item to remove"
  3. Pick a replacement product and a multiplier (Replace All), or a partial swap quantity (Partial Replace)
  4. Set the day/box/status filters for which orders should be affected
  5. Click "Preview Changes," review, then approve and submit
  6. Use "History" later if you need to undo the run

Use Case 3: Adding a One-Time Seasonal Item

Goal: Include a special item for one week only

Steps:

  1. On the current week, click "Add Product"
  2. Pick the classification (or create a new one), set it to "Current week only"
  3. Fill in case quantity/price, distributor/farm, units, and click Create
  4. Set the quantity for each box, save
  5. Click "Create Orders" once you're satisfied with the whole menu
  6. Don't click "Copy To Future Menu" afterward if you don't want it carried into next week

Troubleshooting

Demand Numbers Look Off

Check:

  1. Demand only counts non-cancelled orders that already exist for the week -- if you haven't clicked "Create Orders" yet, or few customers have ordered so far, demand will look low
  2. Verify you're looking at the right week
  3. Check for cancelled orders skewing what you expected

Can't Edit the Menu / Create Orders Is Disabled

Cause: The Weekly Cycle has moved past Step 1.

Solution: Go to Weekly Cycle and click "back to step 1," make your changes on Menu Builder, then click "Create Orders" again.

Create Orders Is Taking a Long Time

Symptoms: A message that processing is already running in the background.

Solutions:

  1. Wait a few minutes and check again -- it may still be running if you opened it in another tab
  2. Only force-reset if it's been a long time and the progress indicator truly isn't moving

Products Not Appearing in the Grid

Solutions:

  1. Check the product's "Show on Menu Builder?" setting on its edit page
  2. Confirm the box it should appear in isn't hidden from Menu Builder ("Do not display on menu builder")
  3. Confirm the product hasn't been deleted from this week's menu

  • Products Page (product_classifications_active.php) - manage product inventory
  • Inventory Demand (product_classifications_print_inv.php) - live demand for all products
  • Menu Inventory (inventory.php) - inventory, in-stock, and order planning
  • Packing Order (menu-pack-order.php) - set the order products print on labels
  • Menu Builder Tabs (admin-edit.php?table=boxes_types) - add/edit/delete tabs
  • Box Settings (admin-edit.php?table=boxes) - per-box settings including target cost
  • Weekly Cycle (weekly_cycle.php) - the step-by-step weekly process Menu Builder is gated by

FAQs

When should I click Create Orders?

Once you're happy with the whole week's menu, on Step 1 of the Weekly Cycle. You can click it more than once as you keep adjusting the menu, as long as you're still on Step 1.

Can I edit the menu after I've moved past Step 1 of the Weekly Cycle?

No, not directly -- Menu Builder shows a lock screen once you're past Step 1. You have to go back to Step 1 from Weekly Cycle first, make your changes, then re-run Create Orders.

What's the difference between hiding and deleting a product?

Hiding (via the product's "Show on Menu Builder?" setting) keeps it fully active in the system but off this page. Deleting it (the X icon on its row) removes it from the current week's menu only -- it's still available for other weeks, and "Un-delete product" in the gear dropdown can restore it.

What does the "Split?" column do?

If you set a number for a product there, an order for that product gets split into that many separate line items once its quantity reaches that number (for example, entering "1" means an order of 3 units becomes three separate 1-unit line items) -- useful for packing/labeling one unit at a time.


Change Log

2026-08-05

  • "Copy To Current Menu" no longer hard-blocks when the current week already has items; it now skips products already present (idempotent, no duplicates) and shows a confirmation popup listing what's already on the current week's menu before copying

2026-07-27

  • Rewrote this page against the actual kiv/build_menu.php, kiv/build_menu_replace.php, and kiv/admin-edit.php (boxes / boxes_types) code. Removed a fake "Permissions & Access" role-tier section, an invented Summary Footer (Total Items/Total Cost/Total Retail Value/Box Statistics), an inaccurate description of the Demand column, an inaccurate description of the Split column, and a 3-method "Adding Products" workflow that didn't match the real Add Product modal. Corrected "Regenerate Orders" to the real "Create Orders" button and added the Weekly Cycle Step-1 lock that gates menu edits.
  • Documented the Remove & Replace tool
  • Noted that its "Replace with" dropdown now includes any active or current-week product, not only products already in existing orders

2026-03-14

  • Added documentation for product name alignment setting (right-align/left-align)

2026-03-01

  • Initial documentation created

End of Documentation

For additional help, contact your system administrator or Kiva Logic support.