Managing Orders
Active Orders
The Orders page shows incoming orders in real-time. The dashboard polls for new orders every 10 seconds. When a new order arrives:
- A toast notification appears.
- A sound alert plays (configurable in notification preferences).
Active orders are displayed with key details: order number, items, total, order type (pickup/delivery/dine-in), and payment status.
Order Status Lifecycle
Every order follows this status flow:
new → confirmed → preparing → ready → completed
Any status (except completed) can be moved to cancelled.
Advancing Status
Click the status action button on an order to advance it to the next stage:
| Current Status | Action | Next Status |
|---|---|---|
| New | Confirm | Confirmed |
| Confirmed | Start preparing | Preparing |
| Preparing | Mark ready | Ready |
| Ready | Complete | Completed |
Cancelling Orders
You can cancel an order at any status except "completed". If the order was paid via Stripe, cancelling automatically initiates a refund and sets paymentStatus to refunded.
Order Details
Each order includes:
- Line items — Dish name, quantity, unit price, selected modifiers, and per-item comments (e.g., "no onion").
- Price breakdown — Subtotal, discount, delivery fee, tax, and total.
- Order type — Pickup, delivery, or dine-in.
- Customer info — Name, phone, address (for delivery).
- Payment status — Paid (Stripe), unpaid (cash), or refunded.
- Estimated ready time — Defaults from your restaurant's average prep time; you can override per order.
- Merchant notes — Internal notes not visible to the customer (e.g., "customer called, wants extra napkins").
- Order comment — General notes from the customer.
Editing Orders
You can edit order items while the status is new or confirmed (before the kitchen starts preparing). This includes adding/removing items. Totals are recalculated server-side.
Managing Discounts
Update the discount amount on any active order. The total is recalculated automatically.
Cash Payments
Cash orders are created with paymentStatus = unpaid. Once the customer pays, click Mark as Paid to update the payment status.
Stripe Payments
- Online Stripe payments are confirmed via webhook (
checkout.session.completed). - The order stores both the
stripeCheckoutSessionIdandstripePaymentIntentId. - Refunds are processed through Stripe's API when you cancel a paid order.
Order History
View past orders with:
- Pagination for browsing large volumes.
- Filters by date range, status, and payment method.
Pause Orders
Temporarily stop accepting new orders without changing your opening hours. Toggle Pause Orders from the dashboard — customers will see a "temporarily not accepting orders" message on your storefront.
Estimated Prep Time
Set a default average preparation time in Settings. This is shown to customers on their order confirmation. You can override it per order if needed.
Customer Order Tracking
Customers can view their order status at /order/[uid]. This page polls for updates so they see status changes in near-real-time. They can also reorder from this page — the "Order Again" button repopulates their cart with the same items and modifiers (availability is checked first).
