Item photos — upload straight from your phone
You can now upload item photos straight from your phone. Large images are resized automatically, so uploads no longer fail for being too big — no need to shrink them first.
Product updates
New features, improvements and fixes, as we ship them.
You can now upload item photos straight from your phone. Large images are resized automatically, so uploads no longer fail for being too big — no need to shrink them first.
Every AI feature in the panel — AI Enhance on items, Draft with AI on orders, the three AI Insight advisors (Catalog, Timing, Restock Forecast) — now renders output as the AI generates it. Tokens appear as they're written rather than landing all at once after a 5-25 second wait.
The total wait time is the same as before; what changed is what you see during the wait. Same trick the big consumer chat tools use — output looks like it's being typed for you in real time, so you can start reading and judging the result well before generation finishes.
Three small bonuses that come with the change:
What you don't need to do: nothing. The change applies automatically. Same credit cost per generation. Cache hits (re-saving without changing the source) are still free and now arrive instantly as one chunk.
One thing that hasn't changed: the AI auto-translate background pass on item save still runs silently after your save — no UI to stream into. Refresh the item page a few seconds later to see translations.
If you picked Landscape or Portrait under Settings > Apps > Item image, your storefront catalog now shows item cards in that shape — instead of cropping every photo back to a square.
The shape applies to the whole storefront — every card uses the same aspect so the grid stays tidy. Items uploaded under an earlier setting are cropped (not stretched) into the new shape, so your catalog still looks uniform without re-uploading anything.
No setup needed. If you haven't picked an image size yet, your storefront keeps its current square layout.
We rebuilt the way your storefront serves products to a customer's browser. On a typical mobile network, pages now appear roughly twice as fast as before:
The effect is most visible on storefronts with many items and on slower mobile connections. Customers spend less time staring at a blank screen and more time on your menu.
No setup needed — the speedup applies to every storefront automatically.
A small round of POS hardening based on real-world feedback:
No setup needed.
After last week's Tables-as-an-app launch, Reservations gets two changes that complete the multi-industry picture: it works without any resource at all, and the "Seated" status — a restaurant idiom that didn't fit anywhere else — gets renamed everywhere.
Simple booking mode (no Tables required):
If your business doesn't assign customers to a physical spot — consultants, coaches, lawyers, online therapists, freelancers, anyone whose "resource" is just their own time — you can now leave Settings → Apps → Tables off and Reservations adapts:
If you do have tables, chairs, rooms, vehicles or whatever you call them, enable Tables and the existing flow works exactly the same as before — picker included.
Date and time editable on confirm:
The confirm modal now shows the requested date and time as editable fields, pre-filled with what the customer asked for. You can adjust before confirming — "we're full at 7 p.m. but can fit you at 7:30" — and the customer notification reflects the new time. Works in both simple mode and tables mode.
"Seated" → "In session":
The status that means the customer is here, being served used to read as "Seated". That made sense for restaurants but read as odd for salons (a stylist's chair isn't really "seating"), clinics (a patient isn't "seated" — they're in consultation), and impossible for online consultations where there's no seat at all.
The new universal label is In session — natural for restaurants (a seated diner is in their dining session), salons (client in session), clinics (in consultation), coaches and online consultations (call in session). Translated across every supported language: pt "Em sessão", es "En sesión", fr "En session", de "In Sitzung", zh "进行中", ar "في جلسة", and the rest.
What changes:
Internally the database value stays as seated — only what you see changes — so historical reports, exports and any external integrations that read the status field continue to work unchanged.
Restaurants don't need to do anything:
The new wording reads naturally for restaurants too. Tables stays enabled, the picker still shows, the workflow is identical — only the word on the third tab and the action button changes.
A small polish pass on Reservations that finishes off the multi-industry shake-out: the customer booking form drops two fields that were always restaurant-y, the time picker snaps to 15-minute intervals, and booking duration is now something only you control.
Time picker snaps to 15-minute intervals
Customers no longer pick "7:23 PM" by mistake. The time field on the booking widget (both the embedded chat-bubble widget and the Spreader/Kaleo/Cosmika storefront modal) now offers 7:00, 7:15, 7:30, 7:45 only. Mobile shows a snap wheel; desktop steps in 15-minute increments. Restaurants book on quarter-hours, salon appointments come in 30/45/60 blocks, clinic slots are 15/30 — 15-minute snap fits everyone without a per-merchant setting.
"Number of Guests" → "Party size", and hidden in simple mode
The party-size field used to read "Number of Guests" / "Guests" — restaurant-flavoured wording that didn't fit salons, clinics or 1:1 consultations. Two changes:
In Tables mode, the field still shows on the customer form (because party size genuinely matters for table-capacity matching) and is required.
Booking duration is merchant-only now
Previously the customer picked their booking duration from a 1-to-4-hour dropdown on the storefront modal. That made sense for restaurants (long lunch vs quick coffee) but was meaningless for salons, clinics and consultations where the duration is fixed by the service type. We've removed the field from the customer form universally.
Instead:
This is more accurate scheduling for everyone: the customer doesn't have to guess, and you're never overcommitted because someone picked "1 hour" for a 4-hour family dinner.
A note on WhatsApp confirmation templates
The notification class itself (the bit WhatsMenu controls) is industry-neutral — it just passes data fields to your campaign template. If you've configured a custom WhatsApp campaign in WhatsBox that says "Your table is confirmed for X guests" and your business doesn't have tables, you'll want to update the template to match. The data fields available include customer_name, reservation_date, reservation_time, number_of_guests, special_requests, company_name, etc. — use whatever fits your wording.
No action needed for restaurants
Set Tables on, leave Default duration at whatever fits (1.5–2 hours is common for dinner), and the customer form looks the same as before with cleaner time-picker behaviour. Everything else is identical to what shipped on 2026-05-13.
The reservation chat-bubble widget you embed on your own website was rewritten end-to-end. The biggest day-to-day win: customer phone numbers now save in international format automatically, so your WhatsApp and SMS notifications actually reach them.
Phone numbers always save in a format that works:
0123 456 789 on a Malaysian merchant's site now saves as +60123456789 — directly usable for WhatsApp / SMS.+44 7700 900123 for a UK number) and it's preserved.Cleaner form panel:
Better error handling on submit:
Spam protection:
Reservation history listing:
/reservations/reservation page (linked from the panel as Reservation history) had a heavy bold-everywhere look. Toned down to match the rest of the panel — single emphasis on the customer name, lighter secondary lines, action buttons right-aligned to match Staff and Contacts.No setup needed — open Settings > Apps > Reservation Widget to see the new design in action, and your existing embed code on your website continues to work without changes.
When a customer submits a reservation through your storefront or embedded widget, the panel now reacts in real time — no refresh needed.
What changed:
What didn't change:
The existing Twilio SMS and WhatsApp via WhatsBox notifications still fire when the Notify me when a new reservation is submitted setting is on. They are now an extra channel rather than the only way to find out.
No setup needed — these alerts are on by default for every merchant. If you don't want the doorbell sound, your browser tab controls work as expected.
We tightened up Reservations so you spend less time chasing bad requests and more time confirming the good ones.
New settings in Settings > Apps > Reservations:
Smarter automatic rejections:
Three rules now reject obvious garbage before it reaches your panel — past dates, party sizes outside 1–50, and times outside your business hours (unless you allow off-hours). The customer sees a clear message explaining what to fix and can resubmit.
Mode-aware visibility:
Reservation Widget date input also honours the max-advance setting now, so an embedded widget on your external site can't accept dates beyond your panel's horizon.
Open Settings > Apps > Reservations to try the new controls.
We rebuilt three of the daily-driver pages around Reservations with the same look and feel as the rest of your panel — clearer typography, consistent badges, and a more usable preview where it matters.
Reservations panel cards:
Cleaner panel header:
Contacts list:
Web Widget creator:
No behaviour changes — every existing setting still does exactly what it did before. Open Reservations, Contacts, or Settings > Apps > Reservation Widget to see the new layout.
If you run a QR Ordering storefront, your customer-facing reservation entry no longer disappears for everyone — it now appears for visitors who reach your storefront without scanning a table QR code.
The new rule:
?tid=) is physically at a table — the Reserve button stays hidden because they're already there.This unblocks QR-mode merchants who also want to take phone-style reservations from remote customers, without forcing them to choose between QR ordering and a public reservation flow.
No setup needed. The behaviour switches automatically based on whether the customer arrived via a table QR code. If you don't want any customer-facing reservations at all, the existing Settings > Apps > Reservations > Enable customer-facing reservations on your storefront toggle still controls that — turn it off and the button is hidden everywhere, just like before.
A week after launch, Schedule picks up the next big set of sources: every order, every delivery, every pickup — all on the same calendar as your reservations.
Three new event sources you can toggle on the sidebar:
Each source has its own colour so a busy day stays readable, and you can toggle any combination on or off without leaving the page.
Pre-orders parsed properly. Schedule now understands the full set of timestamp formats your storefront produces — single-time slots like 30_60, day-only pre-orders like 2026-05-08, and the full range form 2026-05-08 07:30am - 10:00am. Pre-orders show a Pre-order tag in the day-detail panel so you can tell them apart from same-day orders at a glance.
A sidebar promotion. Schedule now lives directly under Orders in the main sidebar instead of nested in Apps — one click to your calendar from anywhere in the panel. Enable it once in Settings > Apps > Schedule and the entry appears.
Times in your format. Events render in the time format you set under Settings > Store > General — 12-hour with am/pm or 24-hour, in your store's time zone.
Open Schedule in the sidebar to see the new sources in action. Toggle Order Created off when you only care about what's leaving the store; toggle Delivery and Pickup off when you only care about inflow. The view is yours.
WhatsMenu has always called the things customers occupy "tables" — because most dine-in venues think about them that way. But a salon assigns chairs, a clinic assigns rooms, a co-working space assigns desks, an auto dealership assigns vehicles. Forcing every business to read "table" in their staff panel and on their customer receipts always felt off.
Two changes shipped together:
1. Tables is now an app you toggle on under Settings → Apps
It joins Floor Plan, Reservations, POS and the rest. Enable it whenever your business assigns customers to a physical spot — restaurants do, but so do salons (chairs), clinics (rooms), co-working hosts (desks), auto dealers (vehicles), and any service business with appointment slots. If your business is pure delivery / pickup / showcase, leave it off and the menu stays clean.
2. You pick what to call them
Inside the Tables app card, you'll find two label fields:
Save and the label propagates everywhere the system used to say "Table" or "Tables":
Sidebar layout cleaned up at the same time
The old "Restaurant" section in the sidebar held three items — Kitchen Display, Status Display, Tables — and only made sense for restaurants. We dropped the section header and moved all three under the existing Apps group, where they sit alphabetically next to Floor Plan, Reservations, and any other modules you've enabled. A salon now sees a clean Apps list with their own labels; a restaurant sees the exact same item set, just labeled "Tables" by default.
Translated across 19 languages
The label override works in every language WhatsMenu supports — Arabic, Chinese (Simplified and Traditional), Dutch, English, French, German, Indonesian, Italian, Japanese, Korean, Malay, Polish, Portuguese, Russian, Spanish, Thai, Turkish, and Vietnamese. The placeholder slots into the localized sentence so a Portuguese salon merchant typing Cadeira sees "Selecione uma Cadeira", a Spanish auto dealer typing Vehículo sees "Vehículos disponibles", and so on.
A small caveat: in languages with grammatical gender (French, Spanish, Portuguese, Italian, German, Russian, Polish), the surrounding sentence keeps the original gender of "table" — so a French salon's "Choisissez une Chaise" reads naturally, but a few phrasings will look slightly off. The label still gets through; minor grammar quirks are the trade-off for one-click flexibility.
Restaurants don't need to do anything special
Enable Tables under Settings → Apps (one click), leave the labels blank, and the system uses the original "Table" / "Tables" wording everywhere — exactly how it worked before.
Why this matters now
Floor Plan, POS, KDS and Reservations cover a lot of business types beyond restaurants — and the next wave of merchants joining WhatsMenu (salons, clinics, co-working hosts, dealerships) shouldn't have to mentally translate "table" every time they look at their dashboard or send a customer a confirmation. This is the smallest change that makes the rest of the platform feel native to whatever they actually do.
If you use Custom Item Fields to let customers attach files to an order — design artwork, prescription, contract, photo of a faulty part — those uploads now go through tighter checks before they touch your storage.
What changed:
One small change for new fields. When you add a new File upload field, the default accept list now suggests .gif, .jpg, .png, .pdf, .docx instead of including the older .doc format. Existing fields keep whatever accept list you configured. If a visitor tries to upload a .doc file, they'll be asked to send .docx or .pdf instead — both are widely supported by Word, Google Docs, and Pages.
You don't need to change any setting. The new checks apply automatically to every storefront with Custom Item Fields enabled.
Your Carousels app now has a Carousel height setting — five presets that control how much vertical space the hero slider takes up:
New: scroll-down arrow on Hero and Cover. When you pick one of those two heights, a subtle animated down-arrow appears at the bottom of the hero. Clicking it smoothly scrolls visitors past the hero to your content. Great for signalling "there's more below, keep scrolling" on full-bleed landings.
Tip: Cover and Hero look best with Full width frame (set in Template Settings → Appearance → Page frame width). Boxed frame leaves side margins that break the edge-to-edge feel.
Where to change it:
Your existing carousels stay the same — the default is Normal, which matches the previous behaviour. No image re-upload needed.
Mobile tip: Compact, Normal, and Tall use the natural size of your mobile carousel images on phones (so narrow screens don't get a weird super-tall hero). Hero and Cover take up the phone's viewport the same way they do on desktop.
Opening an order, you'll now see Order Status and Payment Status as two compact badges right under the order number at the top of the page — not as separate cards on the right. One click on the badge opens a short list; one more click changes the status. The old "pick from a dropdown, then press Update" flow is gone — the list itself is the update.
Why the change: the right-hand column of the order details page was getting long as more order-related apps installed cards there (delivery, notes, print history, WhatsApp templates…). Status and payment are the two things you change on almost every order, so they belong next to the order number, not buried six cards down.
Loyalty still works the same way. If your loyalty program awards points on a specific step — accepted, closed, or paid — that option now shows a small Assigns points pill next to it in the dropdown, so you can see exactly which click triggers points before you make it. The confirmation prompt before marking as Paid still appears when loyalty points are tied to payment.
Nothing changed about who can edit — only Owner and Staff can change status, same as before.
If you have more than one third-party courier connected — say, both Lalamove and Detrack — the order details page no longer stacks a full dispatch card for each one. You'll find a compact Delivery dropdown in the header row next to Order Status and Payment Status. Open it, pick the provider you want to use for this order, and only that provider's card appears below.
Why: operators were staring at two tall dispatch panels on every delivery, even when they'd already decided which courier to use. A quick pick-from-dropdown replaces the "scroll past the Lalamove form to find the Detrack button" flow, and keeps the right column lean for the 90% of orders where the choice is obvious.
What stays the same:
To change your pick before engaging (i.e. before you've quoted Lalamove or created a Detrack job), just open the dropdown and choose a different provider — the cards swap automatically.
Three right-column cards on the order details page — Order Note, Print history, and WhatsApp Customer — now collapse by default with a header summary. Click the header to expand any one when you need to edit or inspect.
What you see now:
2 / 3. Green if anything's filled, grey if empty. If any note is already filled, the card auto-expands so you see the content without an extra click; if nothing is filled, it stays collapsed.5 Printed — or, when something went wrong, also 1 Failed in red. If there's a failure, the card auto-expands so you don't miss it; otherwise it stays collapsed until you click.The same right column that used to stack five or six tall cards now sits mostly compact, with the detail appearing only where you're actually working. Delivery cards are handled separately — you still see the one handling each order's dispatch.
Order Note fields are still saved the same way (edit, press Update). Print history still keeps the most recent 10 attempts per order. WhatsApp Customer still opens WhatsApp Web with your template filled in. Nothing changed about what the cards do — only how much room they take up when you're not using them.
Two small additions on top of this week's print history feature.
Reprint failed auto-prints. When an auto-print to A4, main thermal, or kitchen thermal fails, the failed row in the order's Print history card now has a Reprint button. One click re-runs the same dispatch through PrintNode using your current printer config — no need to wait for the next auto event or re-accept the order. A new row is added to the history with source "Reprint" so you can see whether the retry succeeded.
Cross-order print activity. New sidebar entry Apps → Print Activity opens a list of your recent attempts across all orders, with filters for status (Printed / Failed), target, and time window (1 to 90 days). Use it to spot systemic failures — "all kitchen prints failing today" jumps out here in a way it can't on per-order cards. Failed rows have the same Reprint button.
We're open!
Come on in
Ready when you are
Upgrade when you grow. No rebuild, no commission. Need a hand? We're one message away.
Same city, stronger together ♡