=== mee-table ===
Contributors: breedartstudios
Tags: restaurant reservation, booking, prepayment, gift card, no-show protection
Requires at least: 5.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Direct bookings with no commission per cover, card no-show protection, and an assistant that answers your guests 24/7.

== Description ==
mee-table lets you accept table reservations, manage prepayments (card/digital wallet), offer gift cards, and run no‑show protection, all from your WordPress site. The plugin works as a client for the mee‑table SaaS backend at `api.mee-table.com`, freeing you from server maintenance.

Main features:

* **Table reservations** with availability, opening hours, rules on the number of guests, a weekly closing day and a quick-block calendar for one-off closures.
* **Guests manage their booking on YOUR site.** The link in every email and message opens your own booking widget, on your own pages, in edit mode: the guest moves the date, the time or the number of guests, or cancels, inside the limits you set. A per-venue cap says how many people one booking may bring (the venue capacity is a separate number), and an optional notice window closes online changes some hours before the table, after which the guest is asked to call you.
* **Move a booking instead of losing it.** The guest can change the day, the time or the number of people from the link in their confirmation email, without calling: the free tables are re-checked live, and you decide how many times they may do it before they are asked to phone you. Your own staff can move any booking from the Waiter Dashboard, with no limit, the phone rings there.
* **Your own time zone**, so opening hours and reminders are right even when the venue and the server are in different countries.
* **Prepayment by time band.** An "Aperitivo" rate from 19:00 to 20:00 and a different one for dinner, each with its own days of the week and minimum number of guests. The guest is only ever offered the rate that covers the time they picked, and when a rate covers it the prepayment replaces the no-show card guarantee: nobody is asked to pay twice for the same evening.
* **Choose which emails reach you.** Everything that happens to a booking sends you an email by default, confirmed, declined, cancelled or moved, including what your own staff did from the dashboard. Untick the ones you do not want; your guests keep receiving theirs either way.
* **No-show guarantee**: the guest's card is authorised, not charged. Nothing is taken unless they fail to turn up, and staff release or charge it from the Waiter Dashboard.

The full feature list continues in the "All the features" section below.

== Installation ==
1. Upload the plugin folder to `/wp-content/plugins/` or install via the WordPress plugin directory.
2. Activate the plugin through the 'Plugins' menu.
3. Go to **mee-table -> Settings**, paste your licence key (from your mee-table.com dashboard), and click **Activate licence**.
4. Set up your location(s), opening hours and payment methods on the **Locations** and **Settings** pages.
5. Optional: to switch the guest assistant on, open **mee-table -> Guest assistant** and paste a Groq key. Until you do, nothing is sent anywhere and the chat does not appear.

== Frequently Asked Questions ==

= Where should my Google Business Profile booking link point? =

To your dedicated booking page, not to your homepage, even if the widget is on the homepage too. A link always opens at the top of a page: on a long homepage the guest lands on the header and has to scroll to find the widget, on the booking page they land right on it. The plugin creates that page for you (see mee-table -> Settings) and the floating booking pill brings guests there from every other page of your site.

= Does mee-table store guest data on my WordPress server? =
No: all reservation, prepayment, and gift‑card data is stored on the mee‑table SaaS backend (`api.mee-table.com`). Local WordPress tables are kept for caching only.

= Does the guest assistant cost anything, and is it on by default? =
It is off until you paste a Groq API key in **mee-table -> Guest assistant**, and while that field is empty the plugin contacts no AI service at all and the chat is not even loaded on your pages. The key is free to create at https://console.groq.com/keys and the account is yours, so the free allowance is yours alone and the plugin never resells anything.

= What does the assistant tell guests about allergens? =
If you have ticked your menu page and the answer is written there, it repeats what you wrote and says it read it from you. What it never does is promise a guest that a dish is safe for their own allergy: a question like "I am allergic to hazelnuts, can I eat this?" always goes to your phone, whatever your menu says. Cross-contamination is decided in your kitchen, not on a menu, and only you know how you work.

= And about prices? =
The same rule. If your menu with prices is on a page you ticked, it can repeat a figure you wrote. If it is not published, it tells the guest to ask you. It never invents a figure, and it never says a percentage: on time-slot discounts it tells the guest which times are discounted and that they are marked on the list, so the number is read from your own page and cannot be misquoted.

= The admin panel is in the wrong language. Where do I change it? =
By default the panel follows **Settings -> General -> Site Language**. If you want it pinned to one language regardless, set it in **mee-table -> Settings -> Panel language**.

= Where can I manage my licence or upgrade? =
Log into your dashboard at https://mee-table.com/dashboard. There you can manage your location(s), billing, and staff accounts.

= Why does the plugin need to connect to api.mee-table.com? =
The connection is required for the booking widget, payment processing, and no‑show protection to work. Without it, Mee‑Table cannot retrieve availability, process payments, or update reservations.

= What is the difference between the no-show guarantee and the prepayment tiers? =
They are two different things, each with its own refund setting. The **no-show guarantee** only authorises the card: no money is taken, so there is nothing to refund. Its setting is a deadline, up to when the guest may cancel without a penalty. The **prepayment tiers** take real money at booking time, for a fixed-price menu you have already shopped for: that setting decides whether it is refundable at all, and defaults to non-refundable. A venue can run a flexible guarantee alongside a non-refundable tasting menu, which a single shared setting made impossible.

= I set up an SMS provider. How do I know the credentials are right? =
Use the **"Send test SMS"** button under the credentials. It sends one real message, using what is typed in the form even if you have not saved yet, and it costs one credit of your plan. Missing fields are reported before anything is dispatched, and the button locks for ten seconds after each attempt so a double click cannot burn credits. Note that the test leaves from your own site while real reminders leave from the mee-table servers: if your provider filters by IP address, the test can succeed where real sending fails.

= What photo should I use for a cooking class? =
A **horizontal** one, and as large as you can. The picture sits in a wide band on the flyer and in the email, so a portrait shot only shows a central strip of itself. When you pick the file the plugin crops it to 3:2, tells you which print sizes that photo can actually carry (A3 needs about 2200 px of width, A4 about 1550) and compresses it below 600 KB before it leaves your computer, so the 15 MB a modern phone produces is never uploaded. No compression invents pixels that were never there: a small photo stays small.

= Which paper size should I print the flyer on? =
A3 for a poster read from a distance, A4 for a window or a wall, A5 for a table stand, portrait or landscape. Each size is laid out separately rather than being a scaled copy, because what makes text readable is the distance it is read from, not the size of the sheet. The flyer always shows the **next scheduled** event: if nothing is scheduled it says so instead of printing a date that has passed.

= How do I enable the WhatsApp contact button? =
Go to **mee-table → Location**, edit the location, and fill in the "WhatsApp (digits only)" field with the number in international format, digits only (e.g. an Italian number `+39 333 123 4567` becomes `393331234567`). Once saved, a WhatsApp chat button appears automatically under the booking widget on your site, linking to a direct chat with that number. This uses the free `wa.me` link: no paid service, no extra setup, available on every plan tier.

= What can mee-table do? =


* **Prepayment tiers ("Menu Tariffe")**: real money taken up front, per person, for fixed-price menus and tasting dinners. Separate from the guarantee, with **its own refund policy**: the guarantee has a free-cancellation deadline, the prepayment defaults to non-refundable, because in one case nothing was ever charged and in the other the food is already bought.
* **SMS reminders** through your own provider. Ready-made integrations for Twilio, Skebby, Aruba SMS, Brevo and Vonage: pick it from a list and fill in the credentials from its dashboard, no endpoints or JSON payloads to copy. Or use an **Android phone you already own**: the panel shows a QR code, seven steps naming every screen Android will show you, and the free open-source app it points to needs no account at all, messages leave from your own SIM and cost what your phone plan costs. A test button sends one real message, so a wrong credential surfaces immediately instead of three days later.
* **WhatsApp booking messages** on your own WhatsApp Business Account. Once the panel is configured, every reservation message goes out on WhatsApp too, not just the reminder: booking received, confirmation, both reminders, cancellation, event, gift card and review. You own the number and pay Meta directly: the plugin never resells messages. One button writes the eight booking messages (received, confirmed, reminder the day before, reminder on the day, cancellation, event, gift card, review) onto your account and sends them to Meta for approval, so you do not have to compose eight templates by hand. Templates already on your account are left untouched. Note that Meta bills WhatsApp per message and deactivates the number if no payment method is on file, so a card at Meta is part of the setup, the SMS route needs none of that, and the panel says so before you start.
* **Guest assistant**: a chat bubble on your booking page that answers your guests with your real data, opening times, which slots are still free in the next 7 days, discounts, events, and hands them to the booking form with the day and the number of guests already filled in. It runs on **your own Groq account**, free to open, and nothing is sent while the key field is empty. You can tick up to five pages of your own site (menu, how to get here, parking) for it to read when it answers. On prices and allergens it repeats only what you have published on those pages, saying it read it from you: if it is not written there, it sends the guest to your phone, and it never gives a guest a promise that a dish is safe for their allergy. It never quotes a percentage. When a guest names a day and a time, the button takes them to the booking form with all of it already chosen.
* **Printable flyers with a QR code**, generated from the next scheduled event, in A3 (poster), A4 (window) and A5 (table stand, portrait or landscape). Each size has its own typographic scale, because legibility depends on reading distance.
* **The reminder always arrives.** It goes out by email every time, and on top of that as one phone message, WhatsApp if you have set it up, otherwise SMS. Email and phone are not alternatives: the email carries the details and the cancel button, the message carries 160 characters and a short link.
* **The guest's own language, worked out from the phone number.** A Dutch restaurant receiving a booking from a +39 number is looking at an Italian on holiday, who may well have booked from the Dutch page because there was nothing else. That guest gets the reminder in Dutch *and* English, in a single message. Seven languages, and the wording of each is written to fit one SMS with the cancel link inside.
* **The settings page is split in three tabs**, the venue and its hours, payments, and the messages you send, so a page that had grown to sixty fields stops being a scroll. One Save button saves all of them.
* **The time zone fills itself in**, from your WordPress setting or, failing that, from the language of your site. For countries with more than one zone (United States, Canada, Australia, Brazil) it reads the city from the address, so a chain with a venue in Ohio and one in California gets both right.
* **Dating Aperitivo events**, with a per-ticket drink allowance you set when you create the event (from one to ten). Each guest's ticket carries a QR code; from the Waiter Dashboard staff press "Scan the ticket" to open the camera and, the moment it reads the code, one drink is taken off, no number to type while carrying a tray. If the camera cannot start, a ticket-number field on the same screen does the same job. There is no such button on the guest's own page, on purpose: nobody but staff can take a drink off their own ticket.
* **Waiter Dashboard extras for a busy service**: a printable kitchen sheet, time, name, number of guests, phone and notes for the day, laid out for the printer rather than the screen and leaving out cancelled bookings and no-shows; and a note that says "ALLERGIES" and stands out from the rest when a guest has written about an allergy or intolerance, so it is not missed among the ordinary notes.
* **Gift cards**, cooking classes and other add-on modules.
* **Seven languages** (English, Italian, Dutch, French, German, Spanish, Portuguese). The booking widget follows the page language (Polylang and WPML supported); the admin panel follows your Site Language, and a setting in mee-table -> Settings pins it to one language if you prefer.

mee‑table does not sell SMS credit and takes no commission on it: any cost is the one billed by your own phone plan or SMS provider.

Bundled third-party libraries, and nothing else in this plugin comes from anyone but us:

* **jQuery UI 1.12.1 stylesheet** (`assets/css/jquery-ui.min.css`), MIT licence, https://jqueryui.com, used to style the date picker in the admin.
* **jsQR** (`assets/js/qr/jsQR.js`), Apache Licence 2.0, https://github.com/cozmo/jsQR, licence text included as `assets/js/qr/jsQR-LICENSE.txt`. It reads the QR code on an event ticket through the phone camera, and it is loaded only when the waiter presses the scan button. It is needed because Safari on iPhone has no Barcode Detection API. Because the Apache Licence 2.0 is compatible with GPLv3 and not with GPLv2, this plugin is released under GPLv3 or later.

== Screenshots ==

1. Step 3 of the booking widget: off-peak discount badges fill your quiet hours automatically.
2. The last step: the card guarantee explained in plain words, with privacy consent and newsletter opt-in built in.
3. Cooking class public page: full-width photo, what is included, live seat availability and per-date booking.
4. Gift cards: guests buy a voucher for your restaurant and redeem it on site.
5. Printable flyer with a QR code, generated automatically from the next scheduled event (A3, A4 and A5).
6. The Waiter Dashboard: today's service at a glance, with filters, search and CSV export.
7. Hourly capacity: how many guests you accept in each time slot, with per-date overrides.
8. Quick blocks: close a day, a range of days or single time slots for holidays and private events.
9. Discounts by time slot, per weekday: the quiet hours fill themselves.
10. Anonymized statistics: bookings, guests, no-shows and discount effectiveness, month by month.
11. The staff dashboard on a phone: today, the week or the month at a glance, and one tap to confirm, mark a no-show or cancel. Waiters work from their own phone, no WordPress account needed.

== External services ==

This plugin relies on external services. Below is what each one is, when it is
contacted, and what is sent to it.

**1. mee-table backend (`https://api.mee-table.com`): always required**

The plugin is a client for the mee-table SaaS. Every page of the admin and every
booking talks to it. Data sent: reservation details (guest name, email, phone,
number of guests, date, notes), location configuration, prepayment and gift-card
records, staff accounts, and any photo you upload for a cooking class. Without
this service the plugin cannot show availability, take payments or store
bookings. Provided by mee-table.
Terms: https://mee-table.com/terms | Privacy: https://mee-table.com/privacy

Two calls to the same provider happen outside the admin pages, and are listed
here separately so it is clear when they occur:

* Activating the plugin sends nothing anywhere. The first contact happens
  when you enter your licence key and press Activate: at that moment, once,
  the plugin asks `https://mee-table.com/api/provisioning` whether this domain
  already has a mee-table account, so the site connects to its own restaurant
  without anyone typing a token. Data sent: the site URL (`get_site_url()`)
  and nothing else. If it fails, the plugin simply carries on unconfigured.
  Until a licence key is entered, the plugin contacts no server at all.
* Once a day, a scheduled task asks `https://api.mee-table.com/api/license/validate`
  whether the subscription is still active. Data sent: the site URL, the
  licence key the site owner entered, and the name of the product asking
  (`mee-table`), so a key bought for mee-class does not unlock bookings.
  How that data is handled:
  https://mee-table.com/privacy This call does not happen at all until a
  licence key has been entered: with no key the task returns immediately.

No guest data is involved in either of these two calls.


**2. Payment providers: only when you enable and connect them**

Mollie, Stripe or PayPal are contacted to create payments, authorise no-show
guarantees and issue refunds. Data sent: amount, currency, reservation
reference, and the guest's payment details entered on the provider's own hosted
page. Card numbers never pass through WordPress.
Mollie: https://www.mollie.com/en/user-agreement | https://www.mollie.com/en/privacy
Stripe: https://stripe.com/legal | https://stripe.com/privacy
PayPal: https://www.paypal.com/legalhub/home

**3. SMS providers: only if you choose one, and only for the messages you send**

If you configure an SMS provider, your site sends the reminder text and the
guest's phone number to it. Two paths exist: reminders are dispatched by the
mee-table backend, while the **"Send test SMS" button sends one message
directly from your own WordPress server** to the provider, using the
credentials you typed in. Nothing is sent to any of these companies unless you
select them and save credentials. The panel also accepts a custom HTTP
gateway: in that case the same two pieces of data go to the endpoint
address you type in yourself, and to nobody else.

Twilio: https://www.twilio.com/en-us/legal
Skebby (Commify Italia S.r.l.): terms https://www.skebby.it/wp-content/uploads/Contratto-SKEBBY.pdf | privacy https://www.skebby.it/wp-content/uploads/Informativa-Privacy-Estesa-SKEBBY.pdf
Aruba SMS: https://hosting.aruba.it/documents/term_conditions/condizioni_fornitura_servizisms_aruba-it_v-1-2.aspx | https://www.aruba.it/documents/tc-files/it/11_it_privacy_policy_aruba_spa.aspx
Brevo: https://www.brevo.com/legal/
Vonage: https://www.vonage.com/legal/ (its SMS endpoint is still the old brand name, `https://rest.nexmo.com`)

SMSGate (`https://api.sms-gate.app`): only if you choose the Android phone gateway

If you pick "Android phone" as the SMS route, your site does not talk to the
phone directly: it sends the reminder text and the guest's phone number to the
SMSGate cloud at `https://api.sms-gate.app/3rdparty/v1`, which passes the
message to the free SMSGate app on your own phone, and the message then leaves
from your own SIM. This happens only for the messages you send, and only after
you have installed the app and saved its username and password in the panel.
SMSGate is an open-source project (the app is at
https://github.com/capcom6/android-sms-gateway) and the cloud service is run by
its authors.

SMSGate: https://sms-gate.app/terms-of-service/ | https://sms-gate.app/privacy/

A "generic HTTP" option exists for providers not in the list: there the
endpoint is the one you type in, and you are responsible for it.

**4. Meta / WhatsApp Business Cloud API (`https://graph.facebook.com`): only if you set up WhatsApp messages**

If you fill in the WhatsApp fields of a location (phone number ID, WhatsApp
Business Account ID and access token, all obtained from your own Meta Business
account), your WordPress site talks to Meta directly in three cases, and never
otherwise:

* **"Create the message templates on Meta"**: reads the message templates that
  already exist on your WhatsApp Business Account and submits the missing ones
  for Meta's approval. Data sent: the wording of the booking messages and your
  access token. No guest data.
* **"Send test WhatsApp"**: sends one real confirmation message, filled with
  sample values, to the number you type into that field, to check the setup
  works. Data sent: that phone number, the sample values and your access
  token. No guest data.
* The reminder texts themselves are fetched from
  `https://mee-table.com/api/whatsapp/modelli`, a public page of the mee-table
  site that only returns the wording of those messages. Nothing is sent to it.

The WhatsApp Business Account is yours: you own the number and you pay Meta
directly. mee-table neither resells messages nor owns any number.
Terms: https://www.whatsapp.com/legal/business-terms | Privacy: https://www.whatsapp.com/legal/business-data-processing-terms
Meta Platform Terms: https://developers.facebook.com/terms | Privacy: https://www.facebook.com/privacy/policy

**5. Mailchimp: only if you enter an API key**

Used to add newsletter subscribers to your audience. Data sent: the email
address and the consent flag of guests who opted in.
https://mailchimp.com/legal/terms/ | https://mailchimp.com/legal/privacy/

**6. Groq: only if you enter a Groq API key for the guest assistant**

Used by the guest assistant on your booking page. When a visitor types a
question, that question is sent, together with your restaurant's public
information (name, address, phone, opening times, which time slots are still
free in the next 7 days, discounts and events), to Groq, which produces the
answer. The request is made server-to-server through the mee-table backend
using your own Groq account, so the key never appears in a public page.

Never sent: names, phone numbers or e-mail addresses of your guests, and no
booking of theirs. Free seats are counted; who booked them is not sent.

Nothing at all is sent to Groq unless you have entered a key in
mee-table -> Guest assistant. Leaving that field empty keeps the assistant off
and the script is not even loaded. Groq does not retain these questions for
inference requests and is not permitted to use them to train its models.

Getting a key is free and takes about two minutes at
https://console.groq.com/keys, the plugin explains the steps on that settings
page. The Groq account is yours: the agreement for it is between you and Groq.
Terms: https://console.groq.com/docs/legal/services-agreement
Privacy: https://groq.com/privacy-policy
Acceptable use: https://console.groq.com/docs/legal/ai-policy

Answers are generated by an automated system and can be wrong, and the
assistant tells the visitor that it is automatic. Any answer containing a percentage is
discarded before the visitor sees it. An answer containing an amount is
discarded too, unless you have published prices on the pages you ticked and
that exact figure appears there: the assistant repeats what you wrote, it
never composes a price. On allergens it answers only by repeating what your
own pages say, and any request for a guarantee about a guest's own health is
sent to your phone instead.

== Privacy ==
This plugin sends reservation data, prepayment details, gift‑card information, and location configuration to the mee‑table backend at `https://api.mee-table.com`. If you enable the WhatsApp reminders, the guest's phone number is also sent to Meta's WhatsApp Business Cloud API so the message can be delivered, using the WhatsApp Business Account that belongs to you. The data is used solely to provide the booking service, payment processing, and no‑show protection. No data is sold, shared with third parties for marketing, or used for advertising. If you enable the guest assistant, visitors' questions and your restaurant's public information are sent to Groq through your own Groq account, as described under External services above; no guest personal data is included. For full details, please read the [mee‑table Privacy Policy](https://mee-table.com/privacy).

Retention: identifying data on a reservation (guest name, email, phone and notes) is irreversibly erased 180 days after the reservation date, by a daily job on the backend. The reservation row itself is kept - date, number of guests, amount, payment gateway - because accounting needs it and none of those fields identifies anyone on their own. That same 180-day window is the furthest back the repeat no-show policy can look.

== Changelog ==

= 1.0 =
* First public release.
* Table reservations with availability, opening hours, rules on the number of guests, a weekly closing day and a quick-block calendar for one-off closures.
* Moving a booking: the guest changes day, time or number of guests from the link in their confirmation email (free tables re-checked live, with a per-venue limit), and staff can move any booking from the Waiter Dashboard with no limit.
* Per-venue time zone, filled in automatically from the WordPress setting or the site language, and from the city in the address for countries with more than one zone.
* No-show guarantee: the guest's card is authorised, never charged, and only captured if they fail to turn up. Staff release or charge it from the Waiter Dashboard.
* Prepayment tiers ("Menu Tariffe") for fixed-price menus, with their own refund policy, separate from the guarantee deadline: in one case nothing was ever charged, in the other the food is already bought.
* Prepayment tiers can carry a time band, days of the week and a minimum number of guests, and a tier covering the chosen time takes precedence over the no-show guarantee.
* A per-venue list of which booking emails reach the restaurant, all on by default.
* Settings page organised in three tabs: the venue and its hours, payments, and the messages you send. One Save button saves all of them.
* The reminder always goes out by email, and on top of that as one phone message: WhatsApp when configured, otherwise SMS.
* The reminder is written in the guest's own language, worked out from their phone number's country code as well as the language they booked in, so a tourist gets it in a language they read. Seven languages, each written to fit one SMS with the cancel link inside.
* Android SMS gateway setup reduced to scanning a QR code and copying two values, with each Android warning screen named in the instructions.
* The phone number becomes a required field only on venues that have SMS or WhatsApp switched on, with a line under it saying why it is asked.
* SMS reminders through your own provider, with ready-made integrations for Twilio, Skebby, Aruba SMS, Brevo and Vonage, plus an Android phone gateway. A test button sends one real message so a wrong key surfaces immediately.
* WhatsApp booking messages through your own WhatsApp Business Account: every reservation message goes out on WhatsApp too, not just the reminder, with a button that writes the eight templates onto the account and submits them to Meta for approval.
* Printable flyers with a QR code in A3, A4 and A5, each size laid out for its own reading distance.
* Gift cards, cooking classes and dating events.
* Seven languages, with the booking widget following the page language (Polylang and WPML supported).
* Guest assistant. A chat on your booking page that answers your guests
  with your real data, opening times, which slots are still free in the next
  7 days, discounts and events. It uses your own Groq account: nothing is sent
  while the key field is empty. It does not book: it hands the guest to the
  booking form.
* The assistant can read up to five pages of your own site (menu, how to
  get there, parking) and answers with what is written there, saying where it
  read it. On prices and allergens it repeats only what you published; if it
  is not written, or if a guest asks whether a dish is safe for their own
  allergy, it sends them to your phone.
* When a guest names the day, the time and the number of guests, the button takes
  them to the booking form with all three already chosen, so they only fill in
  their name. If you are running time-slot discounts that day the list of
  times is shown instead, so the discounted slots stay visible.
* Optional lunch and dinner hours, on the Locations page next to Opening
  and Closing. Fill in both and the hours in between disappear from the times
  your guests can pick, so a restaurant that closes in the afternoon stops
  taking bookings at 16:00.
* Panel language, in mee-table -> Settings. On "Automatic" the panel
  follows your Site Language (Settings -> General); pick a language and it
  stays on that one, whatever WordPress and any translation plugin say.
* A question mark next to each section title opens the online guide at
  the exact paragraph that explains it.
* The link in emails and messages opens the booking widget on the restaurant's own site in edit mode: move or cancel with the venue's real rules. A hosted fallback page answers when the site is unreachable.
* Per-venue cap on people per single booking, separate from the venue capacity, enforced by the server on new bookings and on changes.
* Optional notice window: online changes close a chosen number of hours before the table, cancelling stays open.
* The Waiter Dashboard gives the space to what you actually read. Notes are
  twice as wide and no longer cut off in the middle, because from this version
  the booking form invites guests to write their allergies there. Phone and
  email are narrow: one tap calls, one tap opens the mail, and nobody reads an
  address out loud. Payment and Refund appear only when a booking in view was
  actually paid, so a venue that never turns prepayment on stops carrying two
  empty columns on every line, and the day the first payment lands they come
  back on their own.
* The booking form asks for allergies and intolerances in the notes, without
  making it compulsory: a required field would make everyone type "no" to get
  past it, and a declaration written to be rid of it is not information.
* Table rules, per venue: how long the table is held for a late guest, and how
  long it stays with the same guests. Both go into the confirmation email in
  the guest's own language, and optionally into the booking form as well.
  Leave a field at 0 and its line is never written: a venue that decided
  nothing promises nothing. The panel names the usual figures country by
  country, because they are not the same everywhere.
* The country code for the phone is picked from a list showing the flag and
  the country's own name, preselected from the guest's browser. United States
  and Canada share a dial code and are now two separate rows, so a Canadian no
  longer sees the United States selected.
* The "Message us on WhatsApp" button opens a chat with the restaurant's name
  already in the message: whoever reads it knows which venue it came from,
  which matters when two venues share one number.
* Switching WhatsApp or SMS off no longer deletes the credentials. Off means
  off, not erased: switch it back on and everything is still there.
* On the Locations page one venue card stays open at a time, so the page does
  not grow past reading.
* The test WhatsApp message goes out in the language of the number you type,
  the same table the real messages use. If that language is not approved on
  Meta yet, it arrives in Italian and the panel says so.
* The panel language also decides the language of the emails mee-table sends
  to you: one language, the one you picked, not two. Your guests keep reading
  in their own.
* The WhatsApp panel walks you from zero to a working setup: the numbered
  steps go from creating the Meta business account to the three values to
  copy. The message texts are already written: the button copies them onto
  your account and sends them to Meta, who reviews them. Approval usually
  takes a few hours.
* 23 August 2026: Dating Aperitivo tickets carry a QR code, and the number of
  drinks the ticket includes is set per event, from one to ten. From the
  Waiter Dashboard staff press "Scan the ticket" to open the camera and take
  one drink off the moment it reads the code, with a ticket-number field as a
  fallback if the camera cannot start. There is no such control on the
  guest's own page.
* 23 August 2026: The Waiter Dashboard gained a printable kitchen sheet, time,
  name, number of guests, phone and notes for the day, laid out for the printer and
  leaving out cancelled bookings and no-shows. A note that mentions an allergy
  or intolerance is now marked "ALLERGIES" and stands out from ordinary notes,
  so it is not missed at a glance.


== Upgrade Notice ==

= 1.0 =
First public release.
