Gather Grove Booking

Description

Gather Grove Booking is a complete class scheduling and booking system for yoga and fitness studios, wellness centers, music schools, and community programs. Design your booking pages visually with Elementor, take drop-in and appointment bookings, and accept card payments with Stripe.

The free version is fully functional for running a real studio:

  • Classes & sessions — recurring schedules, capacity limits, multiple locations and rooms.
  • Online booking — Elementor booking-form and schedule widgets your clients use to reserve a spot.
  • Appointments — bookable service slots with availability windows and optional deposits.
  • Waitlists — clients can join a waitlist when a class is full, and open spots are automatically offered to the next person in line.
  • Flexible schedules — a class can meet on multiple recurring schedule blocks (e.g. Mon/Wed/Fri at different times).
  • Bulk attendance marking — mark a whole roster present in one action.
  • Payments — accept cards through Stripe for drop-in bookings.
  • Client accounts — a self-service dashboard for bookings and profile.
  • Attendance — front-desk and instructor check-in.
  • Instructors & locations — profiles, assignments, and per-location schedules.

Built for Elementor

The client-facing pages (booking form, class schedule, appointment booking, client dashboard) are Elementor widgets, so you design them visually alongside the rest of your site. The free Elementor plugin is required to display these on your site. Elementor Pro is optional — it unlocks dynamic tags and one-click Theme Builder starter pages, but is not required for booking to work.

External services

This plugin connects to the following third-party services.

Stripe — used to process card payments after you connect a Stripe account and a client pays for a booking or appointment. The booking and payment details required to create the charge (amount, currency, and related metadata) are sent to Stripe at payment time. Stripe.js is loaded from Stripe’s servers on pages that display a payment form, as required for PCI compliance.
Terms of service: https://stripe.com/legal — Privacy policy: https://stripe.com/privacy

Google Maps — used by the optional Location “Map Embed” and “Directions Link” Elementor dynamic tags. If you place the Map Embed tag on a page, the visitor’s browser loads an embedded map from google.com for the location’s address (Google receives the visitor’s IP address and the studio address, as with any embedded map). The Directions Link tag only builds a link to google.com/maps containing the studio address; nothing is sent unless the visitor clicks it. No data is sent from your server, and neither tag is active unless you add it to a page.
Terms of service: https://policies.google.com/terms — Privacy policy: https://policies.google.com/privacy

Zoom — used to automatically create, update, and delete Zoom meetings for virtual class and appointment sessions, only after you connect your own Zoom Server-to-Server OAuth app under Settings Integrations. When a virtual booking is confirmed (and on reschedule or cancellation), your server sends the session’s topic, start time, duration, timezone, and the host’s email address to api.zoom.us / zoom.us using your own credentials. Nothing is sent unless you enable the integration, and visitors’ browsers never contact Zoom through this plugin.
Terms of service: https://explore.zoom.us/en/terms/ — Privacy policy: https://explore.zoom.us/en/privacy/

Installation

  1. Install and activate the free Elementor plugin (Plugins Add New search “Elementor”).
  2. Upload the gather-grove-booking folder to /wp-content/plugins/, or install the zip via Plugins Add New Upload Plugin.
  3. Activate Gather Grove Booking through the Plugins screen.
  4. Go to Gather Grove Settings to configure your studio, then connect Stripe under the Payments tab.
  5. Use Gather Grove Getting Started to create your booking and schedule pages.

FAQ

Do I need Elementor?

Yes — the free Elementor plugin is required to display the booking form, schedule, and other client-facing pages. The admin and booking engine run without it, but your visitors need the Elementor widgets to book.

Do I need Elementor Pro?

No. Elementor Pro is optional. It adds dynamic tags and automatic Theme Builder starter pages, but every booking feature works with the free Elementor plugin.

How are payments processed?

Card payments are processed by Stripe. You connect your own Stripe account; Gather Grove never stores card numbers on your site.

Does it work without a payment gateway?

Yes. You can run free classes, complimentary (comp) bookings, and offline/invoice payments without connecting Stripe.

Will my data be deleted if I uninstall?

No. Uninstalling leaves your studio data intact by default so you can reinstall safely. You can opt in to full data deletion under Settings General Danger Zone.

Can I style the widgets using my real classes in the Elementor editor?

Yes. Gather Grove widgets show a styleable sample by default in the Elementor editor. To style against your actual content, open the widget’s Content tab, find the “Editor Preview” section, and set “Preview in editor” to “Real data” (for the Class Card widget, also pick a specific class). The editor canvas then renders your real class so you can style it without switching to the live page. This is rolling out across the widgets — the Class Card and Sessions List widgets have it today, with more on the way. It only affects the editor; your published page always shows live data.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Gather Grove Booking” is open source software. The following people have contributed to this plugin.

Contributors

Translate “Gather Grove Booking” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.95.9

  • Security: the instructor profile’s intro-video embed is now filtered through wp_kses at output (an iframe allow-list on top of the plugin’s widget allow-list).
  • Changed: the JSON-LD class schema is encoded at the echo; numeric package attributes are cast at the echo.

1.95.8

  • Changed: the public schedule and class-grid renderers close their output buffer on the same straight-line path as every other buffer in the plugin; the exception path discards it explicitly.

1.95.7

  • Security: a client or instructor account can now be removed from Gather Grove screens only when every role on that account belongs to Gather Grove. Accounts that also hold a WordPress role (editor, author, subscriber, …) are left in place; the WordPress Users screen remains the only place to delete those.
  • Security: the client-profile editor no longer renames WordPress accounts that Gather Grove does not manage; it updates the Gather Grove client record only.
  • Changed: every database query is now a single fixed statement with every value bound through $wpdb->prepare(); list filters use bound flags rather than assembled WHERE fragments.
  • Maintenance: updated the bundled Stripe PHP library from 20.3.1 to 21.3.0.
  • Added: an uninstall.php that honours the “Delete all data when this plugin is uninstalled” setting (off by default).
  • Tested up to WordPress 7.1.

1.95.6

  • Changed: every database query names its tables with WordPress’s identifier placeholder (%i) through $wpdb->prepare(); no table name is concatenated into SQL any more.
  • Changed: request handlers that read form fields verify their nonce in the same function as the reads, even where a caller already did.

1.95.5

  • Security: the pre-booking intake metabox fields verify their own nonce and edit capability before reading anything from the request.
  • Changed: the Reports page’s CSV export, date-range and tab scripts moved into the admin script bundle — no script is buffered inline any more.
  • Changed: every output buffer opens and closes on one straight-line path; the exception path discards the buffer explicitly.
  • Changed: the pending-automation cancel query and the prefix-rename scan are single fixed statements with every value on a placeholder.
  • Removed: three files nothing loaded (an empty Classes admin-page stub, an empty cancellation-policy stub, and unreleased reports location-switcher scaffolding).

1.95.4

  • Changed: the last un-prefixed hook name now carries the gather_grove prefix; a docblock that read as an external service was reworded.

1.95.3

  • Security: email attachment temp files can only ever carry a safelisted document extension (.ics, .csv, .pdf, images) — code-like extensions never reach disk.
  • Fixed: the Reports data endpoints now check the reports-viewing capability, matching the Reports admin page, instead of the broader booking-management capability.

1.95.1

  • Security: a session belonging to an unpublished class now returns exactly the same “not found” response as a session that doesn’t exist, so browsing session ids reveals nothing about unpublished classes — not even that one is there.

1.95.0

  • Security: a hardening pass across the plugin’s public surfaces. Draft (unpublished) classes, waivers, and page settings can no longer be read through public booking endpoints by guessing ids; the guest waiver-signing credential is now a fully opaque, expiring, server-verified token that reveals nothing about any account; the waiver-signing endpoint is rate-limited and never records duplicate signatures; and every database query fragment was audited so no prepared statement is ever assembled from another. No settings or data change; nothing to do after updating.

1.94.1

  • Fixed: only the first appointment on a site could ever be booked — every later appointment failed with “Could not reserve the session for this slot.” The slot’s internal session record was created without its unique identifier, so the second one ever collided with the first and was silently discarded. Latent for several versions; surfaced on the first 1.94.0 install.

1.94.0

1.93.1

1.93.0

  • Added: a Waivers screen that answers “who still owes me a signature?” Until now you could see one client’s waiver history at a time, but there was no way to see the whole roster at once — which is exactly what you need the moment you update a waiver. Find it under Gather Grove Waivers. It shows, for each active waiver, who has signed the current version, who signed an older one, whose signature has expired, and who has never signed at all — with the reason for each, and a CSV export.
  • Added: waiver reminder emails you send by hand. Tick the people you want to chase, review a list of exactly who will be emailed, then send. There is no automatic schedule and never will be — a waiver reminder that fires on its own turns a formality into nagging.
  • If someone has an account with you, their reminder link asks them to log in before signing, so a signature is always attached to the right person. People without an account (a child on a family account, for instance) can sign straight from the link.
  • The screen tells you plainly how many people have no email address on file — they can’t be reached by any reminder, so you’ll want to collect those in person. You can record a paper signature against anyone directly from the list.
  • Fixed: a class-specific waiver in the sample/demo content was never actually being applied.

1.92.0

  • Fixed: a package sold for a course or training could be spent on classes instead — and never ran out. If you sell something that grants access to a course rather than a number of class sessions, it was being treated as an ordinary class pack. Two defaults then combined badly: a pack with no specific classes listed counts as valid for every class, and a pack with no session count counts as unlimited. The result was that your most expensive product quietly doubled as a free, never-expiring pass to every class on your schedule, and there was no setting that would stop it.
  • The “Access pass” tickbox on a package now does what it says on any package, not only on memberships — tick it on a course or training package and it can never be offered as payment for a booking, never spent on one, and never auto-books its holder into sessions. Nothing changes for your ordinary class packs and memberships: without that tickbox, they behave exactly as before.
  • If you sell a course or training package, open it and tick Access pass — that is the one thing worth checking after this update.

Earlier releases are listed at https://gathergrove.io/docs/booking/changelog