=== Bookminto ===
Contributors: erwinbogaert
Tags: booking, appointments, reservations, calendar
Requires at least: 6.3
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.5
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Add appointment booking to WordPress with flexible booking widgets, live availability, optional deposits and WooCommerce checkout.

== Description ==

= Book appointments directly from your WordPress website =

Bookminto adds a modern appointment booking experience to WordPress.

Let visitors choose a service, find an available time and book directly from your website — without sending them through a complicated booking process.

Manage your services, availability and bookings in Bookminto, while the booking experience stays where it belongs: on your website.

= Booking that fits your website =

Not every website needs the same booking flow.

Bookminto gives you several ways to make appointments available:

* **Inline booking** — embed the complete booking experience directly in a page.
* **Floating booking button** — keep booking available while visitors browse your site.
* **Booking bar** — add a compact booking action without taking over the page.
* **Popup booking** — open the booking flow when visitors are ready to book.

Customize the appearance to better match your website and brand. You can optionally add a small photo to each service in Bookminto. Services without a photo keep the compact text layout.

Use the Bookminto block in the WordPress editor, or place the booking experience manually with a shortcode.

= A clear booking flow for your customers =

Customers can:

* Choose a service.
* View available dates and times.
* Enter their contact details.
* Add booking information or notes where available.
* Confirm their appointment directly from your website.

Availability comes from your Bookminto setup, so customers are offered times that are available for the selected service.

= Manage bookings in one place =

Bookminto gives you a central place to manage the booking side of your business, including:

* Services and pricing.
* Service duration.
* Weekly availability.
* Appointments.
* Customer information.
* Booking appearance and settings.

Bookminto is designed for appointment-based businesses such as salons, wellness professionals, clinics, consultants, coaches and other service providers.

= Already using WooCommerce? =

Bookminto can connect appointments to WooCommerce products.

Customers select their appointment from the product page and continue through your existing WooCommerce checkout.

This lets you keep the checkout and payment setup you already use while adding appointment selection to the purchasing flow.

= Optional booking deposits with Stripe =

Bookminto can also collect a deposit during the booking process when deposits are enabled for your account.

Payment details are handled securely by Stripe Elements. Raw card information is not sent to or stored by Bookminto.

= Start with free Pro access during beta =

The WordPress plugin itself is free and open source.

A Bookminto account is required because availability, bookings and related booking services are provided through the Bookminto service.

During the Bookminto beta period, Pro service access is available without charge and without requiring a credit card.

After the beta period, an eligible paid Bookminto service plan will be required to continue accepting new bookings.

There is no local trial timer or paid-code lock inside the WordPress plugin. Account plans apply to the external Bookminto service.

See the current [Bookminto plans and beta conditions](https://bookminto.com/#pricing) for details.

= External services =

Bookminto is a Software as a Service (SaaS) product. This WordPress plugin connects your website to the Bookminto service in order to provide booking functionality.

The plugin communicates with:

`https://api.bookminto.com/v1`

Optional service photos load from Bookminto-managed Supabase Storage:

`https://zmzskjwuiryxrwlitkqn.supabase.co/storage/v1/object/public/service-images/`

Image requests share the visitor’s IP and browser information with storage, without booking details. See Bookminto’s Privacy Policy below.

The Bookminto service is used to:

* Load the booking configuration associated with your installation.
* Retrieve services and availability.
* Create and manage booking holds.
* Create and confirm appointments.
* Synchronize supported WooCommerce product and service information.
* Process signed booking, payment and cancellation updates where applicable.

Depending on the feature being used, information sent to Bookminto can include:

* The Bookminto installation key.
* The website or page URL.
* Selected service.
* Selected date and time.
* Customer name.
* Customer email address.
* Booking information supplied by the customer.
* WooCommerce order identifiers when WooCommerce booking is used.

Bookminto service:

[https://bookminto.com/](https://bookminto.com/)

Terms of Service:

[https://app.bookminto.com/terms](https://app.bookminto.com/terms)

Privacy Policy:

[https://app.bookminto.com/privacy](https://app.bookminto.com/privacy)

= Stripe =

When optional booking deposits are enabled, the booking interface loads Stripe.js from:

`https://js.stripe.com/v3/`

Stripe processes payment details and associated device/network information required to process the payment.

Bookminto receives payment identifiers and payment status information, but does not receive raw card details.

Stripe documentation:

[https://docs.stripe.com/js](https://docs.stripe.com/js)

Stripe Terms:

[https://stripe.com/legal](https://stripe.com/legal)

Stripe Privacy Policy:

[https://stripe.com/privacy](https://stripe.com/privacy)

WooCommerce bookings use the payment method configured by the WordPress website owner in WooCommerce rather than a Bookminto-controlled checkout.

== Installation ==

1. Upload the `bookminto` folder to `/wp-content/plugins/`, or install the ZIP through Plugins > Add New > Upload Plugin.
2. Activate the plugin.
3. Go to Bookminto > Settings.
4. Paste the installation key from your Bookminto workspace.
5. Save.
6. Add the Bookminto block (or `[bookminto]`) to a page, or leave site-wide display on.
7. In the Bookminto app, create a one-time WordPress connection code under Install. Paste it under Bookminto → Settings in WordPress. This enables secure appointment and catalog access, as well as signed payment and cancellation updates.
8. Optional (WooCommerce): open Bookminto → Products and click Sync catalog so services and products match.

== Frequently Asked Questions ==

= Where can developers find the source and build instructions? =

The plugin bundles its runtime in `assets/widget.js` and readable source in `assets/src`. To reproduce it, use Node.js 22 and the repository lockfile: run `npm ci`, `npm run sync:wordpress-plugin`, then `npm run package:integrations`. Updates arrive through plugin releases.

= Can I place the widget manually? =

Use the Bookminto block or `[bookminto]` / `[booking_widget]`. Automatic rendering is skipped on singular pages containing a block or shortcode.

= Does the plugin charge visitors? =

If booking deposits are enabled in Bookminto, the widget can collect a deposit through Stripe. With WooCommerce product booking, visitors pay through WooCommerce checkout. Bookminto account billing is separate from these visitor payments.

= Does the plugin load remote JavaScript? =

Bookminto's booking runtime is bundled with the plugin. Optional deposit payments load Stripe.js directly from Stripe; no remote Bookminto runtime is loaded. The plugin calls the documented Bookminto API to load configuration, availability, and create or update bookings.

= Does the WordPress plugin use a trial or local license lock? =

No. All code included in this WordPress plugin remains available; there is no local trial timer or license lock. The external Bookminto service controls account access and service features. Its beta offer and paid plans are separate from the free WordPress plugin. See https://bookminto.com/#pricing for current conditions.

= Does WooCommerce work without a paid Bookminto plan? =

During beta, Bookminto provides free Pro access, including WooCommerce checkout booking. Outside beta, the external service requires an eligible paid plan for product-page checkout booking. Check the current service plans at https://bookminto.com/#pricing.

== Screenshots ==

1. The floating booking widget lets visitors choose a service on a WordPress site.
2. The compact booking bar offers a clear booking action without leaving the page.
3. The expanded booking bar shows services, prices, and available times.
4. The inline widget embeds service selection directly in a WordPress page.
5. Visitors choose an available date and time in the inline widget.
6. The modal booking form shows the selected service alongside date and time selection.
7. The booking bar customer form collects contact details and optional notes.
8. The modal widget offers service selection with example descriptions, duration, and prices.
9. Configure a service with its name, duration, description, and price in the Bookminto setup.
10. Configure weekly availability and the time display in the Bookminto setup.
11. Customize the widget title, appearance, and brand color in the Bookminto setup.
12. WordPress settings connect the installation key and secure WooCommerce connection.
13. Add the Bookminto block to a page in the WordPress editor.

The services and service prices shown in these screenshots are illustrative examples, not Bookminto subscription prices.

== Changelog ==

= 1.0.5 =
* Fix deposit payments in the embedded widget: the Stripe Payment Element now mounts correctly and the pay button waits for Stripe to be ready.
* Improve widget lifecycle cleanup, trigger selector validation, and compatibility on sites served over plain HTTP.
* Pass SMS and WhatsApp opt-in availability through to the embedded widget.
* Safer WooCommerce checkout URL handling and a multisite-safe uninstall.

= 1.0.4 =
* Preserve the active proposal identity through the shared deposit booking flow.

= 1.0.3 =
* Read published service prices in integer cents, with compatibility for older EUR prices.
* Reject unavailable prices instead of displaying a free appointment.

= 1.0.2 =
* Preserve booking retry identity, published revision and calendar verification.
* Keep isolated widget languages and support explicit booking-day hours.

= 1.0.1 =
* Optional service photos in the booking widget. Compact thumbnails appear only when a service has a photo.
* Failed images fall back to the existing text-only service selection.

= 1.0.0 =

* Initial WordPress.org release.
