Skip to main content

GM Copilot dashboard

Weekly GM review: last-week KPIs, baseline comparisons, WoW driver decomposition, outlier days and items, new-item ramp, monthly projection.

Written by HB

What this dashboard is for

The GM Copilot dashboard is the weekly review for a General Manager. It opens with the three big numbers from last week vs the week before, then walks down a chain of "if it moved, here's why" charts that try to attribute the change to specific drivers (orders vs ticket size, menu mix, a big day, a hot item, a new launch).

Open it once a week — usually Monday morning — to understand what happened last week and what to do this week.

What "last week" means

Almost every card on the dashboard is anchored to last week (the most recent complete week, Monday-to-Sunday) compared against either the week before that or the previous 12 weeks' average. The relevant baseline is called out on each chart.

Week boundaries follow Postgres's default (date_trunc('week', "orderDate")), which starts on Monday. All time-of-day logic uses Bangkok time.


1. Revenue vs Last Week

Revenue vs Last Week

The big revenue number for last week, with the % change vs the week before. Up arrow / down arrow tells you direction at a glance.

2. Orders vs Last Week

Orders vs Last Week

Same idea, for order count.

3. Avg Order Value vs Last Week

AOV vs Last Week

And for average order value. Together these three KPIs are the "headline" — if last week was good or bad, which of the three drove it.

4. Last Week vs Last 12 Weeks

Last Week vs Last 12 Weeks

A combo chart showing each of the last 13 weeks' revenue as bars, with a flat reference line drawn at the average of the previous 12 weeks (excluding last week itself).

Reading it: the bar at the far right is last week. If it's well above the flat line, you over-performed your recent norm; if well below, you under-performed.

How it's calculated: revenue per week from closed orders. The reference line is the simple average of weekly revenues from the 14-weeks-ago boundary up to 2 weeks ago (so it represents your typical week without last week in the calculation).

5. Weekly vs Last 12 Weeks Average (%)

Weekly vs Last 12 Weeks Average %

The same comparison, but expressed as a percentage difference per week (so +10% = a week that was 10% above the 12-week average). Bars are coloured by whether the week beat the average ("Better") or fell short ("Worse").

Reading it: the trend of the % bars is more informative than any single bar. A long run of negative bars getting steadily worse is a trend; a single negative bar after a string of positives is noise.

6. How much of the WoW was driven by # Orders vs Order Value?

WoW driver waterfall

A small waterfall that decomposes the week-over-week revenue change (last week vs the week before) into two contributions: the part driven by changes in # orders and the part driven by changes in AOV. Together they sum to the total WoW % change.

How it's calculated: the split is proportional to each effect's contribution to the overall change. Concretely:

  • Orders WoW = (LW orders − LLW orders) ÷ LLW orders

  • Basket (AOV) WoW = (LW basket − LLW basket) ÷ LLW basket

  • # Orders share of revenue WoW = Orders WoW ÷ (Orders WoW + Basket WoW) × Rev WoW

  • AOV share of revenue WoW = Basket WoW ÷ (Orders WoW + Basket WoW) × Rev WoW

("LLW" = last-last-week, two weeks ago.)

7. Was it driven by any particular part of the Menu?

Menu mix driver

Bars showing each menu's contribution to the WoW revenue change. If Food was up sharply but Drinks was flat, the bar for Food will be much taller. Used to localise the cause — was the move broad-based or driven by one section of the menu?

8. Was it unusually large orders?

Unusually large orders

A table of every cheque from last week whose total was more than 1.5 standard deviations above the outlet's average cheque. Use it to spot a private dinner, a large delivery order, or a corporate event that pushed last week's number up.

How it's calculated: the standard deviation and average are computed across the outlet's entire order history. Any order above (average + 1.5 × SD) qualifies as "unusually large" and is listed.

9. Was it a special day this week?

Was it a special day this week

One bar per day in last week, compared against the same weekday averaged over the previous 8 weeks. A spike on one day (Tuesday up 80%, the rest flat) tells you the week's move was concentrated.

10. Was it any Menu Items with unusually high sales?

Items with unusually high sales

Items whose last-week quantity was more than 2 standard deviations above the same item's weekly average. Columns: item, average weekly quantity, last week's quantity, last week's revenue, and how many SDs above the average it landed.

How it's calculated: for every item, we compute its average weekly quantity and the standard deviation across all weeks it has sold. Items whose last-week quantity exceeds (average + 2 × SD) appear in the table, sorted by how extreme the deviation was. Items that have only sold for one or two weeks are excluded (the SD wouldn't be meaningful).

11. Was it any of the new Menu Items added in the last month?

New menu items

Items that had their first sale within the last 4 weeks, with the quantity and revenue they contributed last week. Useful if you're trying to figure out whether a recent menu addition is the reason the numbers moved.

12. Monthly Projection based on performance so far

Monthly projection

For the current calendar month: where the month is expected to land if the daily pace so far continues for the remaining days. The bar shows actual revenue to date and a "Projected" segment showing the remainder.

How it's calculated: (revenue so far) × (days in month ÷ days elapsed) − revenue so far = projected remainder. It's a simple linear extrapolation that assumes the rest of the month behaves like the days already trade.


How the numbers are defined

  • Status filters — closed orders only (status = 'complete') for revenue and order counts; confirmed items (order_items.status = 'confirmed') for item-level tables. Items with no menuItemId are excluded from item tables.

  • Week boundaries — Postgres date_trunc('week', ...) (Monday-to-Sunday).

  • Date fieldorderDate on most cards (different from the rest of the Insights 2.0 dashboards which usually use reportingDate). For outlets with late-night service that means timezone-sensitive cheques after midnight land on the actual calendar date, not the business day.

  • Timezone — Asia/Bangkok.

  • Baselines — the "Last 12 Weeks" reference excludes last week itself (so the comparison isn't blunted by including the week you're judging).

Filters

  • Outlet ID — pinned to your outlet when the dashboard is embedded in the Papaya merchant portal.

There is no user-controlled date filter — the dashboard is always anchored to "last week" relative to today.

What this dashboard does NOT show

  • Live / today's data — use the Today dashboard.

  • Long historical trend — use Trends.

  • Channel-level deep dive — see Channels.

  • Industry benchmark — see Industry Comparison.

  • Margin / inventory impact — see the Inventory module.

  • Multi-outlet comparison — see Outlets or Group KPIs.

Did this answer your question?