{"id":298274,"date":"2026-05-06T08:10:39","date_gmt":"2026-05-06T08:10:39","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bookflow\/"},"modified":"2026-06-10T07:08:00","modified_gmt":"2026-06-10T07:08:00","slug":"serenity-booking","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/serenity-booking\/","author":23477544,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.0","requires":"5.3","requires_php":"7.4","requires_plugins":null,"header_name":"Serenity Booking \u2014 Appointment, Class & Consultation Scheduling","header_author":"Serenity Studio","header_description":"Complete salon & spa management system \u2014 5-step booking wizard, Stripe payments, React dashboard, appointment management, customer database, staff scheduling, and automated email notifications.","assets_banners_color":"333233","last_updated":"2026-06-10 07:08:00","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/serenitystudios.in\/serenity-booking","header_author_uri":"https:\/\/serenitystudios.in","rating":0,"author_block_rating":0,"active_installs":10,"downloads":319,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"serenitystudio","date":"2026-05-06 08:13:37"},"1.0.1":{"tag":"1.0.1","author":"serenitystudio","date":"2026-06-10 07:08:00"}},"upgrade_notice":{"1.0.1":"<p>Setup wizard fixes and new documentation step. Update recommended.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3524065,"resolution":"128x128","location":"assets","locale":"","width":256,"height":256},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3524065,"resolution":"256x256","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3524065,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3524065,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Booking wizard \u2014 service selection with categories, prices, and durations","2":"Booking wizard \u2014 date and time picker with real-time availability","3":"Booking wizard \u2014 customer details with returning-customer autofill","4":"Booking wizard \u2014 Stripe payment step (optional, removed when disabled)","5":"Booking wizard \u2014 confirmation screen with booking reference","6":"Business dashboard \u2014 today's overview with stats and upcoming appointments","7":"Business dashboard \u2014 appointments list with filters and status management","8":"Business dashboard \u2014 customer profiles with full booking history","9":"Business dashboard \u2014 transactions log with gateway sync","10":"Setup wizard \u2014 business mode selection (Appointment \/ Class \/ Consultation \/ Both)"}},"plugin_section":[],"plugin_tags":[8125,270,168847,268],"plugin_category":[40],"plugin_contributors":[261998],"plugin_business_model":[],"class_list":["post-298274","plugin","type-plugin","status-publish","hentry","plugin_tags-booking-form","plugin_tags-online-booking","plugin_tags-salon-booking","plugin_tags-scheduling","plugin_category-calendar-and-events","plugin_contributors-serenitystudio","plugin_committers-serenitystudio"],"banners":{"banner":"https:\/\/ps.w.org\/serenity-booking\/assets\/banner-772x250.png?rev=3524065","banner_2x":"https:\/\/ps.w.org\/serenity-booking\/assets\/banner-1544x500.png?rev=3524065","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/serenity-booking\/assets\/icon-128x128.png?rev=3524065","icon_2x":"https:\/\/ps.w.org\/serenity-booking\/assets\/icon-256x256.png?rev=3524065","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Serenity Booking handles every kind of booking your business takes.<\/strong> Whether you run 1:1 appointments, group classes with seat limits, or paid consultations with video links \u2014 configure the mode that fits and go live in minutes using the built-in setup wizard.<\/p>\n\n<p>No monthly fees. No locked-behind-SaaS dashboard. All data stays in your WordPress database.<\/p>\n\n<h4>Three Booking Types in One Plugin<\/h4>\n\n<p><strong>Appointments<\/strong>\nOne-to-one bookings with staff assignment and real-time slot availability. Add buffer time between sessions, set per-staff hours, and manage holidays per location. Customers select location, service, staff, date, and time in a clean multi-step wizard.<\/p>\n\n<p><strong>Group Classes<\/strong>\nSchedule group sessions with a seat limit. Customers enroll, receive enrollment confirmations, and get reminder emails before each class. Manage enrollment lists and cancellations from the dashboard. Run classes standalone or alongside appointments in Both mode.<\/p>\n\n<p><strong>Consultations<\/strong>\nA separate booking flow built specifically for consultations. Generates a Google Meet or Zoom link automatically at time of booking and includes it in the confirmation email. Supports recurring consultation packages \u2014 book once, create a series of sessions with consolidated billing and grouped emails.<\/p>\n\n<h4>Booking Wizard<\/h4>\n\n<ul>\n<li>Multi-step wizard: Location \u2192 Service \u2192 Staff \u2192 Date &amp; Time \u2192 Customer Details \u2192 Payment \u2192 Confirm<\/li>\n<li>Dedicated URL at <code>yourdomain.com\/appointment<\/code> \u2014 works out of the box<\/li>\n<li>Returning customer autofill \u2014 type a recognised email, name pre-fills instantly<\/li>\n<li>Custom intake forms per service \u2014 collect any information before the booking is confirmed<\/li>\n<li>Coupon and promo code support at checkout<\/li>\n<li>Mobile-optimised \u2014 works on every screen size<\/li>\n<\/ul>\n\n<h4>Payments<\/h4>\n\n<ul>\n<li><strong>Stripe<\/strong> \u2014 card payments with test and live mode; optional per booking; automatic refund on cancellation<\/li>\n<li><strong>Razorpay<\/strong> \u2014 full integration for INR and international payments<\/li>\n<li>Both gateways work across all booking types: appointments, classes, and consultations<\/li>\n<li>Payment status emails reflect the actual gateway state \u2014 no misleading \"payment received\" when the charge hasn't cleared<\/li>\n<li>Payments are entirely optional \u2014 disable both gateways and the payment step disappears<\/li>\n<\/ul>\n\n<h4>Automated Emails<\/h4>\n\n<ul>\n<li>Booking confirmation, cancellation, and rescheduled notifications \u2014 sent to customer and staff<\/li>\n<li>Appointment reminder emails at configurable windows: 48h, 24h, 12h, 6h, 2h, 1h, and 30 min before<\/li>\n<li>Class enrollment confirmation and pre-class reminders<\/li>\n<li>Consultation confirmation including video link, recurring session summaries, and consolidated payment emails<\/li>\n<li>Payment received and payment failed notifications with accurate status copy<\/li>\n<\/ul>\n\n<h4>Business Dashboard<\/h4>\n\n<p>Access everything at <code>yourdomain.com\/serenity-booking-dashboard<\/code>.<\/p>\n\n<ul>\n<li>Live overview: today's appointments, revenue, and seat occupancy<\/li>\n<li>Appointments, class enrollments, and consultation sessions in unified views<\/li>\n<li>Customer records \u2014 full booking history across all booking types in one profile<\/li>\n<li>Transactions log \u2014 Stripe and Razorpay payments with on-demand sync<\/li>\n<li>Staff management \u2014 per-staff availability, working hours, and time-off<\/li>\n<li>Holiday and blackout date management per location<\/li>\n<li>Activity log \u2014 full audit trail for every booking event<\/li>\n<\/ul>\n\n<h4>Setup and Configuration<\/h4>\n\n<ul>\n<li>Guided onboarding wizard \u2014 choose your booking mode, set hours, connect payments and Google Calendar, done<\/li>\n<li>Multi-location support \u2014 unlimited locations each with their own address, hours, and holidays<\/li>\n<li>Live colour customiser for the booking wizard<\/li>\n<li>Google Calendar OAuth \u2014 syncs appointments to staff calendars and generates Meet links for consultations<\/li>\n<li>Zoom PMI link support \u2014 paste your personal Zoom link once, it is included in every consultation confirmation<\/li>\n<li><code>serb_staff<\/code> role \u2014 staff get scoped access to their own schedule with no access to financials or settings<\/li>\n<li>Data retention controls \u2014 choose exactly what is deleted when the plugin is uninstalled<\/li>\n<\/ul>\n\n<h4>Who Uses Serenity Booking<\/h4>\n\n<p>Serenity Booking fits any business where clients book time:<\/p>\n\n<ul>\n<li><strong>Salons, spas, and barbershops<\/strong> \u2014 appointment mode with staff selection, service menus, and buffer time<\/li>\n<li><strong>Yoga studios, gyms, and fitness centres<\/strong> \u2014 class mode with seat limits and enrollment management<\/li>\n<li><strong>Personal trainers and coaches<\/strong> \u2014 appointments or recurring consultation packages<\/li>\n<li><strong>Therapists, advisors, and consultants<\/strong> \u2014 consultation mode with video links and recurring sessions<\/li>\n<li><strong>Photographers, tutors, and instructors<\/strong> \u2014 flexible appointment or class configuration<\/li>\n<li><strong>Multi-service businesses<\/strong> \u2014 run appointments and classes at the same time with Both mode<\/li>\n<\/ul>\n\n<h4>What Makes It Different<\/h4>\n\n<p>Most booking plugins charge a monthly fee or lock core features behind a \"Pro\" plan. Serenity Booking ships all booking types, both payment gateways, automated emails, video link generation, recurring consultations, intake forms, coupon codes, multi-location support, and the full business dashboard as part of the free plugin \u2014 no upsell required to take a booking.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the following external services:<\/p>\n\n<h4>Stripe (api.stripe.com and js.stripe.com)<\/h4>\n\n<p>When the site owner enables Stripe, this plugin uses Stripe's API and JavaScript library to process card payments. Card details are transmitted directly to Stripe and never stored on the WordPress site. Customer name, email, and booking amount are also sent to Stripe. This only occurs when a customer completes a booking with Stripe enabled.\n- Service: https:\/\/stripe.com\n- Privacy Policy: https:\/\/stripe.com\/privacy\n- Terms of Service: https:\/\/stripe.com\/legal<\/p>\n\n<h4>Razorpay (api.razorpay.com and checkout.razorpay.com)<\/h4>\n\n<p>When the site owner enables Razorpay, this plugin uses Razorpay's API and checkout library to process payments. Payment details are transmitted directly to Razorpay and never stored on the WordPress site. Customer name, email, and booking amount are also sent to Razorpay. This only occurs when a customer completes a booking with Razorpay enabled.\n- Service: https:\/\/razorpay.com\n- Privacy Policy: https:\/\/razorpay.com\/privacy\/\n- Terms of Service: https:\/\/razorpay.com\/terms\/<\/p>\n\n<h4>Google Calendar and Google Meet (oauth2.googleapis.com and www.googleapis.com)<\/h4>\n\n<p>When the site owner enables Google Calendar, this plugin connects to Google's OAuth2 and Calendar APIs to sync appointments and generate Google Meet links for consultations. Staff member Google account email and calendar event data (title, date, time) are transmitted to Google. This only occurs when a site owner or staff member has connected their Google account in the plugin settings.\n- Service: https:\/\/google.com\n- Privacy Policy: https:\/\/policies.google.com\/privacy\n- Terms of Service: https:\/\/policies.google.com\/terms<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Serenity Booking does not collect or transmit any data to external servers owned by the plugin author.<\/p>\n\n<p>When Stripe is enabled, customer name, email, and payment details are sent to Stripe, Inc. and governed by the Stripe Privacy Policy (https:\/\/stripe.com\/privacy).<\/p>\n\n<p>When Razorpay is enabled, customer name, email, and payment details are sent to Razorpay and governed by the Razorpay Privacy Policy (https:\/\/razorpay.com\/privacy\/).<\/p>\n\n<p>When Google Calendar is enabled, appointment and calendar data is sent to Google and governed by the Google Privacy Policy (https:\/\/policies.google.com\/privacy).<\/p>\n\n<p>All booking data \u2014 appointments, enrollments, consultations, customers, and staff records \u2014 is stored exclusively in the site's own WordPress database. Site owners are responsible for disclosing third-party data transmission to their customers in their own privacy policy.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>serenity-booking<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate through the <strong>Plugins<\/strong> menu in WordPress<\/li>\n<li>Go to <strong>Settings \u2192 Permalinks<\/strong> and click Save Changes (required to activate the booking URL)<\/li>\n<li>The setup wizard launches automatically \u2014 follow the steps to configure your booking mode, hours, and payments<\/li>\n<li>Booking wizard: <code>yourdomain.com\/appointment<\/code><\/li>\n<li>Dashboard: <code>yourdomain.com\/serenity-booking-dashboard<\/code><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20booking%20types%20does%20this%20support%3F\"><h3>Which booking types does this support?<\/h3><\/dt>\n<dd><p>Appointment (1:1 with staff), Group Class (multiple customers per session with seat limits), and Consultation (1:1 with Google Meet or Zoom link). You can also run Appointments and Classes together using Both mode, or add Consultations as a separate flow alongside either mode.<\/p><\/dd>\n<dt id=\"does%20this%20work%20for%201%3A1%20bookings%3F\"><h3>Does this work for 1:1 bookings?<\/h3><\/dt>\n<dd><p>Yes. Both the Appointment mode and the Consultation mode are built for one-to-one sessions. Appointment mode is time-slot based. Consultation mode adds video link generation and supports recurring session packages.<\/p><\/dd>\n<dt id=\"does%20this%20support%20group%20or%20class%20bookings%3F\"><h3>Does this support group or class bookings?<\/h3><\/dt>\n<dd><p>Yes. Class mode lets you create scheduled group sessions with a maximum seat count. Customers enroll, receive confirmation and reminder emails, and you manage the enrollment list from the dashboard.<\/p><\/dd>\n<dt id=\"is%20stripe%20or%20razorpay%20required%3F\"><h3>Is Stripe or Razorpay required?<\/h3><\/dt>\n<dd><p>No. Both are optional. Toggle them under Serenity Booking \u2192 Settings. When both are off the payment step is removed from the wizard entirely. You can accept bookings with no payment collection at all.<\/p><\/dd>\n<dt id=\"does%20it%20generate%20zoom%20or%20google%20meet%20links%3F\"><h3>Does it generate Zoom or Google Meet links?<\/h3><\/dt>\n<dd><p>Yes. For consultations, the plugin generates a Google Meet link automatically when Google Calendar is connected. Alternatively, paste your Zoom PMI link in settings and it is attached to every consultation confirmation.<\/p><\/dd>\n<dt id=\"can%20i%20collect%20custom%20questions%20from%20customers%3F\"><h3>Can I collect custom questions from customers?<\/h3><\/dt>\n<dd><p>Yes. Intake forms let you add custom fields (text, dropdowns, checkboxes) per service. Answers are saved to the booking record and the customer profile, and pre-filled on repeat bookings.<\/p><\/dd>\n<dt id=\"how%20do%20reminder%20emails%20work%3F\"><h3>How do reminder emails work?<\/h3><\/dt>\n<dd><p>Serenity Booking uses WP-Cron to check upcoming appointments hourly and send reminders at the windows you configure: 48h, 24h, 12h, 6h, 2h, 1h, and 30 min before. Each reminder sends once \u2014 duplicate sends are blocked automatically.<\/p><\/dd>\n<dt id=\"can%20i%20run%20multiple%20locations%3F\"><h3>Can I run multiple locations?<\/h3><\/dt>\n<dd><p>Yes. Add unlimited locations under Serenity Booking \u2192 Locations. Each location has its own address, business hours, and holiday schedule.<\/p><\/dd>\n<dt id=\"can%20staff%20log%20in%20without%20admin%20access%3F\"><h3>Can staff log in without admin access?<\/h3><\/dt>\n<dd><p>Yes. The <code>serb_staff<\/code> role gives staff access to their own schedule and appointments only. They cannot view financials, customer records for other staff, or plugin settings.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20wordpress%20site%3F\"><h3>Will this slow down my WordPress site?<\/h3><\/dt>\n<dd><p>No. Plugin assets load only on the booking wizard page and dashboard route. Stats are cached via WordPress transients. Nothing loads site-wide.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fix: Setup wizard AJAX handlers now correctly route to their respective handler methods (resolves slow step loading)<\/li>\n<li>Fix: Placeholder step-generic.php no longer shown after Finish in any mode \u2014 unknown\/out-of-range steps redirect safely to the done screen<\/li>\n<li>Fix: serb_onboarding_complete now processed via AJAX path for instant redirect on finish<\/li>\n<li>New: Step 0 documentation welcome screen added before wizard start, linking to docs.serenitystudios.in<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Security: Rate limiting added to coupon validation, manage, and enrollment-manage endpoints<\/li>\n<li>Security: validate_coupon REST handler implemented with full validation logic<\/li>\n<li>Security: \/search-customers endpoint now requires a valid WP REST nonce<\/li>\n<li>Fix: PreparedSQL.NotPrepared error in coupon query resolved<\/li>\n<li>Fix: Free plan limit enforcement corrected<\/li>\n<li>Fix: Unescaped output in service price column<\/li>\n<li>WP.org: Tested up to 7.0; Google Calendar added to external services; changelog deduplicated<\/li>\n<li>Code: Removed dead code and debug artifacts<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Appointment booking, group classes, and 1:1 consultations \u2014 one plugin, all booking types, with payments, reminders, and a full business dashboard.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/298274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=298274"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/serenitystudio"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=298274"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=298274"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=298274"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=298274"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=298274"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=298274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}