{"id":298626,"date":"2026-05-01T18:15:10","date_gmt":"2026-05-01T18:15:10","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/vibereserve-booking-light\/"},"modified":"2026-05-01T18:14:42","modified_gmt":"2026-05-01T18:14:42","slug":"vibereserve-booking-light","status":"publish","type":"plugin","link":"https:\/\/mri.wordpress.org\/plugins\/vibereserve-booking-light\/","author":13912880,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.5.5","stable_tag":"1.5.5","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"VibeReserve Booking Light","header_author":"VibeReserve","header_description":"Free appointment & service booking plugin \u2014 manage bookings, staff, services, and schedules. Upgrade to Pro at luminaith.com for payments, WhatsApp, Google Calendar sync & more.","assets_banners_color":"214eba","last_updated":"2026-05-01 18:14:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/luminaith.com\/vibereserve-booking","header_author_uri":"https:\/\/luminaith.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":81,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.5":{"tag":"1.5.5","author":"yeasin62","date":"2026-05-01 18:14:42"}},"upgrade_notice":{"1.5.5":"<p>Additional input-handling hardening and cleanup of stale phpcs annotations.<\/p>","1.5.4":"<p>Code-quality and static-analysis improvements addressing review feedback.<\/p>","1.5.3":"<p>Improved nonce checks and static-analysis friendliness.<\/p>","1.5.2":"<p>Security and code-quality improvements addressing WordPress.org review feedback.<\/p>","1.5.1":"<p>Initial WordPress.org release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3520555,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3520555,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3520555,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3520555,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"vibereserve\/booking-form":{"name":"vibereserve\/booking-form","title":"VibeReserve: Booking Form"},"vibereserve\/services-grid":{"name":"vibereserve\/services-grid","title":"VibeReserve: Services Grid"},"vibereserve\/staff-grid":{"name":"vibereserve\/staff-grid","title":"VibeReserve: Team \/ Staff Grid"},"vibereserve\/customer-portal":{"name":"vibereserve\/customer-portal","title":"VibeReserve: My Bookings"},"vibereserve\/reviews":{"name":"vibereserve\/reviews","title":"VibeReserve: Reviews"}},"tagged_versions":["1.5.5"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Admin dashboard with live stats and recent bookings","2":"Bookings management list","3":"Services management","4":"Staff &amp; weekly schedule management","5":"Interactive calendar view","6":"Frontend multi-step booking form","7":"Settings page"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[276,269,416,11523,268],"plugin_category":[40],"plugin_contributors":[259355],"plugin_business_model":[],"class_list":["post-298626","plugin","type-plugin","status-publish","hentry","plugin_tags-appointment","plugin_tags-booking","plugin_tags-calendar","plugin_tags-salon","plugin_tags-scheduling","plugin_category-calendar-and-events","plugin_contributors-yeasin62","plugin_committers-yeasin62"],"banners":{"banner":"https:\/\/ps.w.org\/vibereserve-booking-light\/assets\/banner-772x250.png?rev=3520555","banner_2x":"https:\/\/ps.w.org\/vibereserve-booking-light\/assets\/banner-1544x500.png?rev=3520555","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/vibereserve-booking-light\/assets\/icon-128x128.png?rev=3520555","icon_2x":"https:\/\/ps.w.org\/vibereserve-booking-light\/assets\/icon-256x256.png?rev=3520555","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>VibeReserve Booking Light<\/strong> is a free, fully-functional appointment booking plugin built for beauty salons, spas, barbershops, wellness centres, clinics, and any service-based business. It ships with a clean admin dashboard and a multi-step booking form for your customers.<\/p>\n\n<p>Let customers book 24\/7 from your website and manage everything from one modern dashboard.<\/p>\n\n<h4>Everything included (free, unlimited)<\/h4>\n\n<ul>\n<li><strong>Multi-step booking form<\/strong> \u2014 embedded via shortcode or Gutenberg block<\/li>\n<li><strong>Admin dashboard<\/strong> \u2014 real-time stats, booking charts and upcoming appointments<\/li>\n<li><strong>Unlimited services<\/strong> \u2014 add as many services as you need with images, descriptions, pricing, duration and sale prices<\/li>\n<li><strong>Unlimited staff<\/strong> \u2014 add team members with profiles and weekly schedules<\/li>\n<li><strong>Unlimited categories<\/strong> \u2014 organise services with custom colours<\/li>\n<li><strong>Unlimited locations<\/strong> \u2014 manage multiple business locations\/branches<\/li>\n<li><strong>Booking calendar<\/strong> \u2014 interactive calendar view of all appointments<\/li>\n<li><strong>Email notifications<\/strong> \u2014 automated confirmation emails to customer and admin on every booking<\/li>\n<li><strong>Booking management<\/strong> \u2014 view, confirm, complete, or cancel bookings<\/li>\n<li><strong>Staff roles &amp; access control<\/strong> \u2014 assign Admin, Manager, or Staff roles<\/li>\n<li><strong>Gutenberg blocks<\/strong> \u2014 booking form, services grid, and staff grid blocks<\/li>\n<li><strong>Fully responsive<\/strong> \u2014 looks great on desktop, tablet and mobile<\/li>\n<li><strong>Translation ready<\/strong> \u2014 compatible with WPML and Loco Translate<\/li>\n<\/ul>\n\n<h4>Optional premium add-on<\/h4>\n\n<p>An optional, separately-distributed premium add-on is available from the author's website at <a href=\"https:\/\/luminaith.com\/vibereserve-booking\">luminaith.com\/vibereserve-booking<\/a>. The premium add-on adds features that this free plugin does not include (such as online payment gateways, WhatsApp notifications, Google Calendar sync, automated email reminders, blocked dates, customer self-service portal, reviews, revenue reports, iCal export and REST API access).<\/p>\n\n<p>The premium add-on is <strong>not required<\/strong>. The free plugin is complete and has no time limits, usage limits, or feature locks.<\/p>\n\n<h3>Shortcodes<\/h3>\n\n<ul>\n<li><code>[vibereserve_booking]<\/code> \u2014 full multi-step booking form<\/li>\n<li><code>[vibereserve_services]<\/code> \u2014 services showcase grid (supports <code>category<\/code>, <code>limit<\/code>, <code>featured<\/code> attributes)<\/li>\n<li><code>[vibereserve_staff]<\/code> \u2014 team grid<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not connect to any external service by default. All bookings, services, staff and schedules are stored locally in your WordPress database. Emails are sent through your own WordPress site using <code>wp_mail()<\/code>.<\/p>\n\n<p>The plugin also does not load any JavaScript or CSS from remote CDNs \u2014 Chart.js, FullCalendar and Cropper.js are bundled with the plugin and served from your own site.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>vibereserve-booking-light<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin from <strong>Plugins \u2192 Installed Plugins<\/strong><\/li>\n<li>Go to <strong>VibeReserve \u2192 Settings<\/strong> to configure your business information<\/li>\n<li>Add service categories via <strong>VibeReserve \u2192 Categories<\/strong><\/li>\n<li>Add your services via <strong>VibeReserve \u2192 Services<\/strong><\/li>\n<li>Add staff and set their weekly schedules via <strong>VibeReserve \u2192 Staff<\/strong><\/li>\n<li>Place <code>[vibereserve_booking]<\/code> on any page to display the booking form<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20any%20theme%3F\"><h3>Does this work with any theme?<\/h3><\/dt>\n<dd><p>Yes. The booking form uses self-contained CSS and works with any WordPress theme including Elementor, Divi, Astra, GeneratePress, and more.<\/p><\/dd>\n<dt id=\"how%20many%20services%2C%20staff%2C%20categories%20and%20locations%20can%20i%20add%3F\"><h3>How many services, staff, categories and locations can I add?<\/h3><\/dt>\n<dd><p>Unlimited. The free plugin has no numeric caps. Add as many services, staff members, categories and locations as you need.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20connect%20to%20any%20external%20service%3F\"><h3>Does this plugin connect to any external service?<\/h3><\/dt>\n<dd><p>No. All data is stored and processed locally on your own site. The plugin does not phone home and does not load any resources from third-party CDNs.<\/p><\/dd>\n<dt id=\"is%20it%20mobile%20friendly%3F\"><h3>Is it mobile friendly?<\/h3><\/dt>\n<dd><p>Yes. Both the admin interface and the frontend booking form are fully responsive and tested on all major devices and browsers.<\/p><\/dd>\n<dt id=\"is%20my%20data%20safe%20if%20i%20install%20the%20premium%20add-on%20later%3F\"><h3>Is my data safe if I install the premium add-on later?<\/h3><\/dt>\n<dd><p>Yes. The optional premium add-on uses the same database tables, so all your bookings, services, staff and settings are preserved.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.5<\/h4>\n\n<ul>\n<li>Tightened input handling in <code>handle_save_booking<\/code> and <code>handle_save_service<\/code>: status fields constrained to whitelisted values, <code>wp_unslash()<\/code> applied to all reads, defensive <code>isset()<\/code> checks before every <code>$_POST<\/code> access.<\/li>\n<li>Cleaned up dozens of stale <code>phpcs:ignore<\/code> directives that were emitted before per-handler <code>check_ajax_referer()<\/code> calls were added; the remaining ones are limited to legitimate direct-DB-query and <code>unlink()<\/code> annotations.<\/li>\n<li>Service assignment arrays (<code>staff_ids<\/code>, <code>location_ids<\/code>) now go through <code>wp_unslash()<\/code> and <code>absint()<\/code> before being persisted.<\/li>\n<\/ul>\n\n<h4>1.5.4<\/h4>\n\n<ul>\n<li>Restructured the image upload handler so <code>wp_generate_attachment_metadata()<\/code> is the first function called immediately after <code>require_once wp-admin\/includes\/image.php<\/code>.<\/li>\n<li>Strict validation of the <code>image_data<\/code> data: URL with a tight regex (only image\/jpeg, image\/png, image\/webp + base64 charset) before any decoding.<\/li>\n<li>Refactored the admin bookings list view: filter conditions, pagination and counts now build a single SQL string and arguments array passed through one <code>$wpdb-&gt;prepare()<\/code> call.<\/li>\n<li>Simplified the bookings filter nonce flow into a single straight-line check; filter parameters are only read when the nonce verifies.<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Replaced indirect nonce helper calls with direct <code>check_ajax_referer()<\/code> calls at the top of every AJAX handler so static analysers can detect the nonce check without tracing through helper methods.<\/li>\n<li>Added an explicit <code>wp_nonce_field()<\/code> \/ <code>wp_verify_nonce()<\/code> pair around the admin bookings list filter form; filter parameters are ignored when the nonce is missing or invalid.<\/li>\n<li>Hardened <code>admin\/views\/email-templates.php<\/code> with a capability check and a whitelist for the \"tab\" query argument.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Print receipt now loads via admin-post.php with standard WordPress enqueue pipeline.<\/li>\n<li>Tightened nonce and capability checks on admin AJAX endpoints.<\/li>\n<li>Refactored location-filtered queries to use <code>$wpdb-&gt;prepare()<\/code> with placeholders.<\/li>\n<li>Escape-late applied on upgrade page and frontend service card output.<\/li>\n<li>Renamed internal helper classes to use a plugin-specific 4+ character prefix.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>First release prepared for the WordPress.org plugin directory.<\/li>\n<li>Removed all numeric caps (services, staff, categories, locations) \u2014 the free plugin is now fully-featured with no limits.<\/li>\n<li>Bundled Chart.js, FullCalendar and Cropper.js locally; no remote CDN calls.<\/li>\n<li>Converted inline JavaScript and CSS to properly enqueued assets.<\/li>\n<li>Replaced <code>json_encode<\/code> usages with <code>wp_localize_script<\/code> for chart data.<\/li>\n<li>Multi-step booking form with Gutenberg block.<\/li>\n<li>Admin dashboard with stats and interactive calendar.<\/li>\n<li>Services, staff, categories, and locations management.<\/li>\n<li>Automated booking confirmation emails to customer and admin.<\/li>\n<li>Staff roles &amp; access control (Admin, Manager, Staff).<\/li>\n<\/ul>","raw_excerpt":"Free appointment &amp; booking plugin for salons, spas, clinics &amp; service businesses. Manage bookings, staff, services &amp; schedules in one place.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/298626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=298626"}],"author":[{"embeddable":true,"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/yeasin62"}],"wp:attachment":[{"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=298626"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=298626"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=298626"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=298626"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=298626"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mri.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=298626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}