02 · Intake · intake lens

Standing orders: recurring baskets on a schedule

Repeat customers get the same basket generated automatically on a daily or weekly schedule, dropped into the intake tray as a pre-filled draft.

5 min read · updated 28/05/2026
Who can do this
RoleViewCreate draftPaste & parseConfirm / advancePack
OwnerAllowedAllowedAllowedAllowedAllowed
ManagerAllowedAllowedAllowedAllowedAllowed
SalesAllowedAllowedAllowedNot allowedNot allowed

Overview

Some buyers order the same thing every morning — the dairy that takes 20 kg paneer at 5 AM, the kirana that wants the same 8 lines every Monday. Re-keying that order day after day is wasted work. A standing order saves the basket once and Neev drops a ready-made draft into your intake tray on schedule. You review it like any other order and confirm. No retyping, no missed deliveries.

Where to find it

Two web screens (standing orders are web-only — there is no mobile view yet):

  • The board/standing-orders. Three columns at a glance: Missed today, Due today, and Generated · sent, with a 7-day run-history strip and the default basket for whichever order is selected. Owner, Manager and Sales all see the board.
  • Per-customer setup — open a customer, then Standing orders (/customers/[id]/standing-orders). This is where you add, pause, resume, or archive a basket. Only Owner and Manager can open this page.

Key concepts

  • — a saved basket for one buyer plus a schedule. Status is active, paused, or archived.
  • ScheduleDaily, Weekly, or Specific days. You set a Generate at time in HH:MM (IST) — e.g. 05:00. For weekly/specific-days you also pick the days (0 = Sun … 6 = Sat).
  • Run — each time the schedule fires, Neev records a run and generates a draft. The 7-day strip shows each day as generated (✓), missed (✗), upcoming (•), or not-scheduled (—).
  • Pricing mode — by default confirm_time: prices are locked when you confirm the draft in the tray, so the order always carries today's price, not the price from when you set the basket up.
  • Deviation — if the buyer messages a one-off change within 6 hours of a standing draft being generated, Neev merges the change onto that same draft instead of opening a second one.

Common workflows

1
Set up a standing basket
Open the customer → Standing ordersAdd standing order. Pick the schedule, set Generate at (HH:MM IST), add the items, then Create. An empty basket is rejected — at least one item is required.
2
Watch the morning board
Open /standing-orders. Due today is what's still coming, Missed today is what should have fired but has no run yet, Generated · sent is done. The 7-day strip shows the recent run history per buyer.
3
Confirm the generated order
A fired run lands as a normal card in the intake tray. Review the lines, fix anything, and confirm — that's when prices lock and it becomes a real order.
4
Pause over a holiday
On the per-customer page hit Pause on the row. It stops generating. Hit Resume when the buyer is back.
5
Retire a basket
Hit Archive to stop a basket you no longer need. It drops off the active board but the run history stays.

Role notes

For standing orders, Owner and Manager have identical powers: both can view the board, create, edit, pause, resume, and archive baskets.

Sales is view-only here. SALES can open the /standing-orders board to see what's due and what fired, but cannot create, edit, pause, resume, or archive a standing order. SALES also cannot open the per-customer setup page (/customers/[id]/standing-orders) — so the Open link on a board card leads to a page a SALES user can't reach. Ask an owner or manager to set up or change a basket.

Tips & time-savers

Tip
Set the basket once and the schedule does the typing forever. For a 5 AM dairy run, create a Daily standing order with Generate at 05:00 — the draft is waiting in the tray before you open the shop, every single day.

Already-known buyer sent a tweak? If they WhatsApp a change within 6 hours of the standing draft being generated, Neev folds it onto the same draft — you won't get a duplicate to clean up.

Gotchas

Warning
A generated standing order is a draft, not a shipped order. It lands in the intake tray and waits for someone to review and confirm it. If nobody opens the tray, nothing leaves the warehouse — the schedule fills the tray, it does not auto-dispatch.

A second thing to watch: pricing is confirm_time by default, so the price is taken when you confirm the draft, not when the basket was first set up. If your rates changed overnight, the generated order picks up the new rate — confirm with that in mind.

Related