=== smartEngin MeetMix ===
Contributors: businesskiai
Tags: booking, appointments, scheduling, calendar, booking calendar
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 0.32.0
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Appointment booking for your website: visitors see your real availability and book a phone call, an on-site visit or an online meeting.

== Description ==

smartEngin MeetMix lets visitors book appointments directly on your website. You define your appointment types and weekly hours; visitors pick a free slot and receive a confirmation with a calendar file and a link to cancel or reschedule — no customer account needed.

= What you get =

* **Appointment types** — phone call, online meeting, you visit the customer, the customer visits you. Each with its own duration, buffer times, lead time and booking horizon, and optionally its own weekly hours.
* **A booking page** you place with a shortcode. Visitors see your real availability in their own time zone.
* **Double bookings are prevented by the database, not by a lucky guess.** Two visitors can click the same slot at the same moment; only one gets it.
* **Emails that arrive** — confirmation with a calendar file, notification to you, reminders before the appointment. Every template can be edited, and reminders run without a paid service.
* **Your customer can cancel or reschedule** through a link that contains nothing but a random value. No account, no password.
* **Your own calendar in the admin area** — year, month, week and day. Create an appointment by clicking into it, drag it to a new time, cancel it — and you always see the email to your customer before it goes out.
* **Absences** with their own colour, an optional yearly repeat, and a switch for whether they block bookings at all — a birthday should not close your working day.
* **Public holidays for all sixteen German federal states**, each one individually selectable.
* **Privacy built in:** no IP address is ever stored, old bookings are anonymised or deleted on a schedule you set, and the customer link never carries a name or an email address.
* **Works with multilingual sites.** The language a visitor booked in is stored with the booking, and every email to that person switches to it — no forced site language, so WPML, Polylang and TranslatePress keep working.
* **The colours follow yours.** One accent colour, used everywhere.
* A **manual inside the admin area**, and a log that tells you whether an email really went out.

= The Pro extension =

smartEngin MeetMix Pro is a separate plugin. It adds Google Calendar in both directions with an own Google Meet room per appointment, Telegram messages to your phone, several booking pages, events with a waiting list, paid appointments through the free smartEngin buy plugin, and your calendar on your phone. **Nothing in this plugin is locked or waiting to be unlocked** — the free plugin is complete in itself, and the extension brings its own code.

What it adds, in one line each: Google Calendar in both directions · an own Google Meet room per appointment · Telegram messages to your phone · several booking views · events with seat limits and a waiting list · paid appointments through the free smartEngin buy plugin · your calendar on your phone. Details: [smartengin.de/meetmix](https://smartengin.de/meetmix/)

= External services =

This plugin contacts no external server at all. Nothing is loaded from a CDN, no data leaves the visitor's browser to a third party, and no IP address is stored — the spam protection turns it into a one-way value that expires after an hour. The Pro extension is where Google and Telegram come in, and it asks for those credentials itself.

= Bundled library =

FullCalendar 6.1.19 ([fullcalendar.io](https://fullcalendar.io/), MIT licence) is shipped inside the plugin so that no visitor request ever goes to a CDN. The readable source of the shipped files is at [github.com/fullcalendar/fullcalendar](https://github.com/fullcalendar/fullcalendar); the exact files, versions and download addresses are documented in `assets/vendor/fullcalendar/LIESMICH.txt` inside the plugin.

== Installation ==

1. Install the plugin and activate it.
2. Open **smartEngin MeetMix → Appointment types** and create your first type — a phone call, a visit, an online meeting. Duration, buffer times and how far ahead it can be booked belong to the type.
3. Open **Availability** and set your bookable hours per weekday. Absences and German public holidays are on the same page.
4. Put the shortcode `[smartengin_termin]` on any page — that is your booking page. `[smartengin_booking]` does the same thing under an English name.
5. Check **Settings → General** for your company name and the address that notifications are sent to.

One thing worth checking once: under **Settings → General** of WordPress itself, your time zone should be a **city** (for example Berlin), not a fixed offset such as UTC+2. A fixed offset knows no daylight saving time, and every appointment would shift by an hour in autumn. The plugin warns you about this in red if it finds it.

== Frequently Asked Questions ==

= Does the visitor need an account? =

No. Booking asks only for the fields you chose. The link to cancel or reschedule contains a long random value and nothing else — no name, no email address, no booking number.

= What happens if two visitors click the same slot at the same second? =

One gets it, the other is told the slot has just been taken. This is decided by the database through a unique key per time unit, not by a check in PHP that could be a moment too late.

= Do the reminders work without a paid service? =

Yes. They run on WordPress' own scheduled tasks, and they catch up on whatever is due instead of demanding an exact moment — so a quiet site does not silently skip them. Every reminder is sent once, recorded in the database. WordPress' scheduler only runs when somebody visits your site; if your site is quiet for long stretches, set up a real cron job at your host. The plugin shows you under Settings → Reminders whether the scheduler is healthy, and how to set that up.

= Is any personal data sent anywhere? =

No. The plugin contacts no external server. No IP address is stored — the spam protection turns it into a one-way value that cannot be turned back and expires after an hour. Under Settings → Privacy you set how long booking data is kept and whether old bookings are anonymised or deleted.

= Does it work on a multilingual site? =

Yes, and it deliberately does not force a language. The language a visitor booked in is stored with the booking, and every email to that person switches to it — including the reminder that goes out from a scheduled task. WPML, Polylang and TranslatePress keep working, because nothing here hooks the site locale. Your own wording (email templates, the names of your appointment types) is never machine-translated.

= Can I charge for an appointment? =

Not with this plugin alone. Paid appointments need the Pro extension together with the free smartEngin buy plugin, which handles checkout, invoice, coupons and refunds. There is deliberately no second payment system in here. You can enter a price without them, but nothing is ever charged, and the plugin says so on the appointment type.

= Which third-party code ships with the plugin? =

One library: FullCalendar 6.1.19 (MIT). It is shipped inside the plugin instead of loaded from a CDN, so that no visitor request ever leaves your site. Its readable source is at github.com/fullcalendar/fullcalendar, and `assets/vendor/fullcalendar/LIESMICH.txt` in the plugin names the exact files and where they came from.

= What happens to my data if I delete the plugin? =

Nothing, unless you ask for it. Deleting the plugin keeps your appointments and settings, so an accidental click never costs you your bookings. There is a switch under Settings → Privacy if you really want everything removed.

== Screenshots ==

1. The booking page a visitor sees: your real free times, in the visitor's own time zone.
2. Your own calendar in the admin area — year, month, week and day, with drag and drop.
3. Setting up an appointment type: duration, buffer times, lead time and which fields the visitor is asked for.

== Changelog ==

= 0.32.0 =
* **A click on your picture shows it three times larger for two seconds.** The little round picture stays small - but a visitor can now see for a moment who they are about to meet. Click again and it goes back straight away.
* Your picture is loaded in a larger size for that, so it stays sharp when it grows. The file that is loaded is still a scaled one, not the original - a photo from a camera would otherwise be a megabyte for a 56-pixel circle.
* **Privacy and Imprint now open in a new tab.** Whoever clicks them in the middle of a booking keeps the booking page - and the half-filled form with it.
* Without a picture nothing changes: the circle with your initials stays exactly as it was, and it is not a button. A button that does nothing is worse than none.

= 0.31.0 =
* **The manual now names the shortcode.** It used to say "put the shortcode of your booking view on a page" without ever saying what it is called - not much help if you do not know. It is [smartengin_termin id="1"], and Booking views shows it ready to copy for each view.
* **Three places you can now find in the manual: Overview, Help & documentation and Log.** Those are exactly the three you need when something does not work, and none of them was described anywhere. An AI assistant reading the manual can now send you to the right place instead of guessing.

= 0.30.0 =
* Groundwork for the Pro extension: moving an appointment now asks first whether it may be moved at all, once for you in the backend and once for your customer on their own page. On its own this changes nothing - every appointment that could be moved before can still be moved.
* Nothing else changed. This version exists so that Pro 0.43.0 has something to hook into.

= 0.29.0 =
* **Fixed: your accent colour now reaches your emails too.** The button, the meeting link, the cancellation link and the frame of the mail stayed green when you picked a different colour - only the backend followed it.
* Emails work differently from the backend: mail programs throw stylesheets away, so every colour has to be written out on the element itself. Those places now ask for the same colour as everything else.
* The text ON the button is calculated instead of always being white. With a light accent colour - a yellow, a light pink - you would otherwise have had a button nobody can read.
* Dark blue and grey stay as they are on purpose: they are text and background, not an accent. Colouring them too would turn an email into a patchwork.
* With the built-in green, every mail looks exactly as before - an update must never change how things look.

= 0.28.0 =
* Groundwork for Zoom in events: the data class can now list what a connected service still has to catch up for an event. Nothing changes for you on its own - the Pro extension uses it.
* Needs the Pro extension in version 0.39.0 or newer, if you use it.

= 0.27.0 =
* **Fixed: your accent colour now reaches the appointment window too.** With a colour other than the built-in green, the buttons, the on/off switch and the meeting link inside a window stayed green - only everything outside had followed your colour.
* The cause was one selector too few: the stylesheet sets its colour values on three places, and the accent colour was only applied to the first of them. A window therefore set the green on itself, and a value an element sets on itself always beats an inherited one - however far up the inherited value comes from.
* All three places are now served from one single list, and a check reads that list out of the stylesheet: whoever adds a fourth place later and forgets it gets a red line instead of a green button months on.

= 0.26.0 =
* **The meeting link in an appointment is now clickable.** Open an appointment in the calendar - in the backend or on your phone - and the Zoom or Google Meet link opens with one click instead of having to be copied. The full link stays readable, so you can still see whether a passcode is attached to it.
* Only real web addresses become links. Anything else in that field stays plain text, which is deliberate: it is a field you fill in yourself, and not everything that can be typed there should be clickable.

Older entries: see changelog.txt in the plugin folder.

== Upgrade Notice ==

= 0.20.0 =
New overview under Settings: it shows at a glance what is still missing for your booking calendar to work end to end.

= 0.19.0 =
No change to how the plugin works. Internal clean-up so that the code review tools report nothing, and one obsolete call removed.

= 0.18.0 =
No change to how the plugin works. The documentation was completed for the WordPress.org directory, and the notes about the Pro extension now link to it.
