Access Denied

You do not have permission to access the admin dashboard.

Return to Home

Users

Manage customer accounts and permissions

ID Name Contact Address Orders Status Role Joined Actions
{{ user.id }} {{ user.name }} Guest {{ user.email }}

{{ user.phone }}

{{ user.address }}

{{ [user.city, user.state, user.zip_code].filter(Boolean).join(' ') }}

0

${{ Number(user.total_spent).toFixed(2) }}

{{ user.status }} {{ user.is_admin ? 'Admin' : 'Customer' }} {{ user.joined }}

Products

Manage menu items and inventory

ID Image Name Description Price Category Status Actions
{{ product.id }} {{ product.name }} {{ product.description }} ${{ product.price.toFixed(2) }} {{ product.category === 'daily' ? 'Daily Menu' : 'Set Menu' }} {{ product.available ? 'Available' : 'Unavailable' }}

Orders

View and manage customer orders

Download orders placed from to Opens in Excel, Numbers or Google Sheets.
{{ selectedOrders.length }} order(s) selected
Order ID Customer Fulfilment Payment Total Status Date Actions
#{{ order.id }} {{ order.customerName }} Guest {{ order.delivery_method === 'pickup' ? 'Pickup' : 'Delivery' }} · {{ order.itemCount }} {{ order.itemCount === 1 ? 'item' : 'items' }}

{{ order.delivery_date ? requestedTimeLabel(order) : 'ASAP' }}

📝 {{ order.instructions }}

{{ paymentLabel(order) }}

Refunded

Paid

Unpaid

${{ order.total.toFixed(2) }} {{ order.date }}

Dashboard

Overview of key metrics and statistics

Revenue

Total Revenue

${{ stats.total_revenue.toFixed(2) }}

Avg: ${{ stats.average_order_value.toFixed(2) }}
Orders

Total Orders

{{ stats.total_orders }}

{{ stats.new_orders_7days }} in last 7 days
Users

Active Customers

{{ stats.total_users }}

{{ stats.new_users_7days }} new this week
Catalog

Meals on the Menu

{{ stats.total_products }}

Available to order

Today's Summary

New Orders {{ stats.orders_today }}
Revenue ${{ Number(stats.revenue_today).toFixed(2) }}
To collect (cash/Venmo)
Unread messages

Quick Actions

Order Status Overview

No order data available

Revenue Trend (Last 7 Days)

{{ formatDate(day.date) }} ${{ parseFloat(day.daily_revenue).toFixed(2) }}

No revenue data available

Top Selling Products

#{{ index + 1 }}

{{ product.name }}

{{ product.total_quantity_sold || 0 }} units sold

{{ product.order_count || 0 }}

orders

No product data available

Prep List

What to cook and deliver on {{ prepDate ? formatDateTime(prepDate).split(',').slice(0, 2).join(',') : '' }}: orders requested for that day, as-soon-as-possible orders placed that day, and subscription drops.

Loading…

To cook ({{ prepMealTotal }} {{ prepMealTotal === 1 ? 'item' : 'items' }})

{{ prepList.meals_booked }} of {{ prepList.daily_meal_limit }} meals booked
{{ meal.name }} {{ meal.quantity }}

No meal orders for this day.

Plus {{ prepList.subscriptions.length }} subscription {{ prepList.subscriptions.length === 1 ? 'delivery' : 'deliveries' }} (below).

Orders ({{ prepList.orders.length }})

{{ formatTime(order.delivery_date) }}

{{ order.delivery_method === 'pickup' ? 'Pickup' : 'Delivery' }}

{{ order.customerName }}

{{ order.customerPhone }}

{{ order.addressLine || 'No address' }}

{{ item.quantity }}× {{ item.name }}

📝 {{ order.instructions }}

{{ order.status }}

Paid ({{ paymentLabel(order) }})

Collect ${{ order.total.toFixed(2) }} ({{ paymentLabel(order) }})

No orders for this day.

Subscription deliveries ({{ prepList.subscriptions.length }})

{{ sub.first_name }} {{ sub.last_name }}

{{ sub.phone }}

{{ [sub.address, sub.city, sub.zip_code].filter(Boolean).join(', ') || 'No address' }}

{{ sub.product_name }}
Collect ${{ sub.amount.toFixed(2) }}

No subscription deliveries this day.

Messages

Sent from the Contact form on the website. Reply by email or phone.

Loading messages…
No messages yet.

{{ message.subject }} New

{{ message.name }} · {{ message.email }} · {{ formatDateTime(message.created_at) }}

Reply

{{ message.message }}

Settings

Limits on when and how much customers can order. Checkout shows them before anyone pays.

After this time, customers can't order for today (as soon as possible or later today) and must pick another day. Leave empty to take same-day orders all day.

The total number of meals (all orders added up) you can make in one day. When a day is full, checkout asks customers to choose another day. 0 = no limit. Subscription deliveries don't count toward it.

Subscription Products

Manage subscription products and tiers

Active

Active Subscriptions

{{ subscriptionStats.active_subscriptions || 0 }}

Products

Subscription Products

{{ subscriptionProducts.length }}

MRR

Monthly Revenue

${{ (subscriptionStats.monthly_revenue || 0).toFixed(2) }}

Subscription Products

ID Image Name Delivery Fee Tiers (1x/2x/3x/4x) Status Actions
{{ product.id }} {{ product.name }} ${{ parseFloat(product.delivery_fee).toFixed(2) }} ${{ parseFloat(tier.price_per_delivery).toFixed(0) }} / {{ product.available ? 'Available' : 'Unavailable' }}
No subscription products found. Click "Add Subscription Product" to create one.

Upcoming Deliveries (Next 7 Days)

{{ totalUpcomingDeliveries }} deliveries scheduled
{{ dateGroup.day_name }} {{ formatDeliveryDate(dateGroup.date) }}
{{ dateGroup.deliveries.length }} {{ dateGroup.deliveries.length === 1 ? 'delivery' : 'deliveries' }}

Customer

{{ delivery.first_name }} {{ delivery.last_name }}

{{ delivery.email }}

{{ delivery.phone }}

Product

{{ delivery.product_name }}

Tier {{ delivery.tier_number }} ({{ delivery.deliveries_per_month }}x/month)

Collect (cash/Venmo)

${{ (delivery.price_per_delivery + delivery.delivery_fee).toFixed(2) }}

incl. ${{ delivery.delivery_fee.toFixed(2) }} delivery

Address

{{ delivery.address || 'No address' }}

{{ [delivery.city, delivery.zip_code].filter(Boolean).join(' ') }}

No upcoming deliveries in the next 7 days.

All Customer Subscriptions

Customer Product Plan Delivery Day Next Delivery Status Actions

{{ sub.first_name }} {{ sub.last_name }}

{{ sub.email }}

{{ sub.product_name }}
{{ sub.deliveries_per_month }}x/month (${{ sub.price_per_delivery.toFixed(2) }}/ea) {{ sub.delivery_day }} Paused — {{ formatDeliveryDate(sub.next_delivery_date) }} skipped {{ formatDeliveryDate(sub.skipped_date) }} {{ sub.status }}
No customer subscriptions found.

{{ editingSubscription ? 'Edit Subscription Product' : 'Add Subscription Product' }}

Preview

Image Preview

Pricing Tiers (4 required)

Tier {{ index + 1 }}

{{ editingUser ? 'Edit User' : 'Add New User' }}

Share it with them privately.

Give it to the customer privately. They can log in with it right away.

{{ editingProduct ? 'Edit Product' : 'Add New Product' }}

Max 255 characters. If left blank, will use first part of full description.

Preview

Image Preview

This image will be resized to 480px width while maintaining aspect ratio

No image selected

{{ selectedProduct ? selectedProduct.name : 'Product Image' }}

No image uploaded