{"id":398069,"date":"2026-11-04T16:46:02","date_gmt":"2026-11-04T16:46:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/salonivo-salon-spa-booking-front-desk-day-close-for-woocommerce\/"},"modified":"2026-11-11T13:23:54","modified_gmt":"2026-11-11T13:23:54","slug":"logicweft-salon","status":"publish","type":"plugin","link":"https:\/\/ory.wordpress.org\/plugins\/logicweft-salon\/","author":23588703,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.6.0","stable_tag":"1.6.0","tested":"7.1.4","requires":"6.6","requires_php":"8.1","requires_plugins":null,"header_name":"LogicWeft Salon \u2013 Booking, Front Desk & Day Close for WooCommerce","header_author":"LogicWeft","header_description":"Online booking, front desk Operator App, stylist screens, client cards and day close for salons, spas and beauty parlours on WooCommerce.","last_updated":"2026-11-11 13:23:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/salon.logicweft.com","header_author_uri":"https:\/\/logicweft.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":735,"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":"logicweft","date":"2026-11-04 16:45:49","revision":3784405},"1.0.1":{"tag":"1.0.1","author":"logicweft","date":"2026-11-04 18:41:15","revision":3784593},"1.0.2":{"tag":"1.0.2","author":"logicweft","date":"2026-11-07 01:52:16","revision":3788926},"1.1.0":{"tag":"1.1.0","author":"logicweft","date":"2026-11-07 13:24:10","revision":3789664},"1.2.0":{"tag":"1.2.0","author":"logicweft","date":"2026-11-08 04:47:50","revision":3790443},"1.3.0":{"tag":"1.3.0","author":"logicweft","date":"2026-11-09 00:50:57","revision":3791679},"1.4.0":{"tag":"1.4.0","author":"logicweft","date":"2026-11-09 02:59:17","revision":3791764},"1.4.1":{"tag":"1.4.1","author":"logicweft","date":"2026-11-09 09:15:27","revision":3792131},"1.5.0":{"tag":"1.5.0","author":"logicweft","date":"2026-11-09 18:21:36","revision":3793027},"1.5.1":{"tag":"1.5.1","author":"logicweft","date":"2026-11-10 01:43:41","revision":3793496},"1.6.0":{"tag":"1.6.0","author":"logicweft","date":"2026-11-11 13:23:54","revision":3796394}},"upgrade_notice":{"1.6.0":"<p>Birthdays, visit and spend figures on client cards, and personal data export and erase for clients. Includes a database update; existing clients&#039; figures fill in the background.<\/p>","1.5.1":"<p>Lets add-ons price a booking for a party or several places. Nothing changes for salons that use none.<\/p>","1.5.0":"<p>A reason when you decline a booking, a Rooms view in the calendar, and the groundwork for team, room, group and class bookings. Includes a database update.<\/p>","1.4.1":"<p>Retail sold at the counter now leaves stock, and goes back on a refund. Recommended if you sell products at the counter.<\/p>","1.4.0":"<p>Edit tickets at the counter (services, retail by barcode, coupons), tips in the day close, and reopening a closed day.<\/p>","1.3.0":"<p>Fixes which account a client card is linked to when someone signed in books for another person, and unlinks cards linked to staff accounts. Recommended for every salon.<\/p>","1.2.0":"<p>Adds extension points for add-ons. Nothing changes for salons that use none.<\/p>","1.1.0":"<p>Adds extension points for add-ons. Nothing changes for salons that use none.<\/p>","1.0.2":"<p>Adds a <code>logicweft_salon\/loaded<\/code> action for add-ons. Nothing changes for salons.<\/p>","1.0.1":"<p>Shows salon names with an ampersand correctly.<\/p>","1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3784405,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3784405,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3784405,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3784405,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"logicweft-salon\/booking":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"logicweft-salon\/booking","title":"Salon booking","category":"widgets","icon":"calendar-alt","description":"The LogicWeft Salon booking widget: services, stylist and time, confirm.","keywords":["salon","booking","appointment"],"textdomain":"logicweft-salon","attributes":{"service":{"type":"integer","default":0},"category":{"type":"string","default":""}},"supports":{"align":["wide","full"],"html":false,"reusable":false},"editorScript":"file:.\/editor.js"}},"tagged_versions":["1.0.0","1.0.1","1.0.2","1.1.0","1.2.0","1.3.0","1.4.0","1.4.1","1.5.0","1.5.1","1.6.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3784405,"resolution":"1","location":"assets","locale":"","width":1140,"height":965},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3784405,"resolution":"2","location":"assets","locale":"","width":1140,"height":1006},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3784405,"resolution":"3","location":"assets","locale":"","width":1194,"height":834},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3784405,"resolution":"4","location":"assets","locale":"","width":1194,"height":834},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3784405,"resolution":"5","location":"assets","locale":"","width":1194,"height":834},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3784405,"resolution":"6","location":"assets","locale":"","width":1280,"height":860}},"screenshots":{"1":"Online booking: choose services from the menu, filtered by category.","2":"Pick a stylist (or \"anyone\"), a day and a time.","3":"Today board: every appointment by status, with arrive, in chair and finish actions.","4":"Calendar: the day across every stylist.","5":"Client card with preferences and visit history.","6":"Setup wizard: add your staff in a few steps."}},"plugin_section":[],"plugin_tags":[8132,269,11523,11522,286],"plugin_category":[40,45],"plugin_contributors":[289731],"plugin_business_model":[],"class_list":["post-398069","plugin","type-plugin","status-publish","hentry","plugin_tags-appointments","plugin_tags-booking","plugin_tags-salon","plugin_tags-spa","plugin_tags-woocommerce","plugin_category-calendar-and-events","plugin_category-ecommerce","plugin_contributors-logicweft","plugin_committers-logicweft"],"banners":{"banner":"https:\/\/ps.w.org\/logicweft-salon\/assets\/banner-772x250.png?rev=3784405","banner_2x":"https:\/\/ps.w.org\/logicweft-salon\/assets\/banner-1544x500.png?rev=3784405","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/logicweft-salon\/assets\/icon-128x128.png?rev=3784405","icon_2x":"https:\/\/ps.w.org\/logicweft-salon\/assets\/icon-256x256.png?rev=3784405","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/logicweft-salon\/assets\/screenshot-1.png?rev=3784405","caption":"Online booking: choose services from the menu, filtered by category."},{"src":"https:\/\/ps.w.org\/logicweft-salon\/assets\/screenshot-2.png?rev=3784405","caption":"Pick a stylist (or \"anyone\"), a day and a time."},{"src":"https:\/\/ps.w.org\/logicweft-salon\/assets\/screenshot-3.png?rev=3784405","caption":"Today board: every appointment by status, with arrive, in chair and finish actions."},{"src":"https:\/\/ps.w.org\/logicweft-salon\/assets\/screenshot-4.png?rev=3784405","caption":"Calendar: the day across every stylist."},{"src":"https:\/\/ps.w.org\/logicweft-salon\/assets\/screenshot-5.png?rev=3784405","caption":"Client card with preferences and visit history."},{"src":"https:\/\/ps.w.org\/logicweft-salon\/assets\/screenshot-6.png?rev=3784405","caption":"Setup wizard: add your staff in a few steps."}],"raw_content":"<!--section=description-->\n<p>LogicWeft Salon turns a WooCommerce site into a salon system: clients book services and stylists online, the front desk runs the day from a tablet, stylists see their day on a phone, and the owner closes the day with numbers that match WooCommerce.<\/p>\n\n<p>Services are WooCommerce products and appointments are WooCommerce orders, so your gateways, taxes, coupons and reports keep working, and retail products go in the same cart as a haircut.<\/p>\n\n<h4>Free includes<\/h4>\n\n<ul>\n<li>Online booking: services, add-ons, stylist choice or \"anyone\", back-to-back slots, guest booking<\/li>\n<li>Full prepayment or pay at the salon, cancellation policy and windows<\/li>\n<li>Operator App: Today board, calendar by staff, walk-in queue, stylist My day, run-late and pause<\/li>\n<li>Client cards with history, notes and allergy banner<\/li>\n<li>Day close and today dashboard<\/li>\n<li>Waitlist, QR walk-in join page and My Account bookings with reschedule and cancel<\/li>\n<li>Setup wizard with optional demo data; WP-CLI demo commands<\/li>\n<li>Booking emails through WooCommerce, with .ics and Google Calendar links<\/li>\n<li>Palette presets and appearance settings; Elementor widgets, blocks and shortcodes<\/li>\n<li>Translation-ready with RTL support<\/li>\n<\/ul>\n\n<p>Everything listed above is included, with nothing locked.<\/p>\n\n<h3>External services<\/h3>\n\n<p>LogicWeft Salon does not send data from your site to any outside service, and it loads no remote scripts, styles or fonts.<\/p>\n\n<h4>Google Calendar (link only)<\/h4>\n\n<p>The booking confirmation page and the confirmation email show an \"Add to Google Calendar\" link. Nothing is sent when the page loads. Only when a client clicks the link, their browser opens calendar.google.com with the appointment's service name, time, salon name and address in the link, so Google can pre-fill a calendar event. The same page also offers a downloadable .ics file, which stays on your site.\n* Google Terms of Service: https:\/\/policies.google.com\/terms\n* Google Privacy Policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<h3>Source code<\/h3>\n\n<p>The JavaScript and CSS in <code>assets\/<\/code> are compiled. Their human-readable source ships with the plugin in <code>apps\/<\/code>: the booking widget (<code>apps\/booking<\/code>), the Operator App and its service worker (<code>apps\/operator<\/code>), the Appearance screen (<code>apps\/admin<\/code>), the shared stylesheets (<code>apps\/ui<\/code>) and the shared Operator App shell, components and design tokens (<code>apps\/wc-ops-core-ui<\/code>), written in TypeScript and React.<\/p>\n\n<p>To rebuild <code>assets\/<\/code> from that source, use Node.js 20 or newer and pnpm 9 or newer in the plugin folder:<\/p>\n\n<pre><code>pnpm install &amp;&amp; pnpm build\n<\/code><\/pre>\n\n<p>The build uses Vite, TypeScript, React and vite-plugin-pwa, as listed in the <code>package.json<\/code> files. The PHP code is not compiled.<\/p>\n\n<h3>Third-party libraries<\/h3>\n\n<p>JavaScript, compiled into <code>assets\/<\/code> (source in <code>apps\/<\/code>):<\/p>\n\n<ul>\n<li>React, React DOM and scheduler (MIT).<\/li>\n<li>Workbox 7 (MIT), with idb (ISC), in the Operator App's service worker.<\/li>\n<\/ul>\n\n<p>Fonts:<\/p>\n\n<ul>\n<li>Inter and Manrope variable fonts (SIL Open Font License 1.1), packaged by Fontsource and bundled, so no font is loaded from another site. Their licences are in <code>licenses\/<\/code>.<\/li>\n<\/ul>\n\n<p>PHP: the plugin's shared WooCommerce operations library (GPLv2 or later, by the same author) ships in <code>vendor-prefixed\/<\/code> under the <code>LogicWeft\\Salon\\Vendor<\/code> namespace, so it cannot clash with another plugin's copy.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Upload and activate LogicWeft Salon.<\/li>\n<li>Follow the setup wizard: salon details, hours, staff, services, booking page, look.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20my%20theme%3F\"><h3>Does it work with my theme?<\/h3><\/dt>\n<dd><p>Yes. The booking widget inherits your theme's fonts by default and sizes itself to its container; the Operator App has its own screen.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20free%20and%20pro%3F\"><h3>What is the difference between Free and Pro?<\/h3><\/dt>\n<dd><p>This plugin is complete on its own: booking, front desk, stylist screens, client cards and day close, with nothing locked. A separate paid add-on for deposits, packages, memberships, gift cards, commissions and SMS\/WhatsApp reminders is planned; it is not needed for anything this plugin does.<\/p><\/dd>\n<dt id=\"do%20i%20need%20woocommerce%3F\"><h3>Do I need WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Services are WooCommerce products and appointments are WooCommerce orders, so WooCommerce 9.5 or later must be active.<\/p><\/dd>\n<dt id=\"can%20clients%20book%20without%20an%20account%3F\"><h3>Can clients book without an account?<\/h3><\/dt>\n<dd><p>Yes. Clients can book as guests; clients with an account also see their appointments under My Account.<\/p><\/dd>\n<dt id=\"does%20it%20send%20sms%20or%20whatsapp%20messages%3F\"><h3>Does it send SMS or WhatsApp messages?<\/h3><\/dt>\n<dd><p>Not in Free. Free sends WooCommerce emails for booked, rescheduled, cancelled and reminder messages.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>New: a birthday on the client card (day and month; the year if the client gives it).<\/li>\n<li>New: client cards keep each client's visits, last visit and spend as appointments are paid and refunded, so client lists can filter by them; existing clients' figures fill in once after the update.<\/li>\n<li>New: client search also finds a client by any of their other phone numbers.<\/li>\n<li>New: Tools \u2192 Export Personal Data and Erase Personal Data include salon client cards. An erased card keeps its appointments for your records, without the client's details.<\/li>\n<li>Developers: <code>ClientQuery<\/code> for filtered client lists, <code>ClientRepository::merge()<\/code> with the <code>client\/merged<\/code> action, the <code>client\/tabs<\/code> filter, the Operator App slots <code>client.panels<\/code>, <code>client.tabs<\/code>, <code>client.formulas<\/code> and <code>myDay.client<\/code>, <code>Import\\HeaderMap<\/code> for importers, and a booking widget <code>time.picker<\/code> fill gets the widget's own times (<code>grid<\/code>) for the services it doesn't handle. See docs\/hooks.md.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>The booking widget's confirm step shows the price an add-on works out for the booking, such as a party of three, and its payment choices are for that price.<\/li>\n<li>Developers: add-on options reach the payment quote, and the new <code>payment\/quote<\/code> hook lets an add-on set a booking's price before it is booked. See docs\/hooks.md.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>New: declining a booking request on the Today board asks for an optional reason, which goes in the cancellation email (the new <code>{reason}<\/code> merge field) and the order notes.<\/li>\n<li>New: the calendar has a Rooms view, one column per room or device, when your salon has rooms.<\/li>\n<li>New: services that need two stylists, or a room or device, hold every stylist and the room when booked online or at the front desk, and are booked on their own. Assisting stylists see these appointments in My day and the calendar. These services are set up by an add-on.<\/li>\n<li>New: a colour service's processing time leaves the stylist free for another client while the colour processes, but keeps its room.<\/li>\n<li>Database update: appointments and their services gain columns for teams, rooms, processing time, groups and the waitlist. It runs once on updating.<\/li>\n<li>Developers: add-ons can answer the booking widget's slot search, write several orders and appointments in one booking, ask the front desk to accept a booking first, hold time for staff and rooms, add calendar blocks and fill slots in the booking widget with their own script module. New hooks: <code>booking\/options<\/code>, <code>booking\/search<\/code>, <code>booking\/initial_status<\/code>, <code>booking\/plan<\/code>, <code>schedule\/busy<\/code>, <code>calendar\/blocks<\/code> and <code>booking\/modules<\/code>. See docs\/hooks.md.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Fix: retail added to a ticket at the counter or on My day now leaves stock at once when the booking's stock was already taken (an on-hold or paid order). Before, it never left stock, and a refund or cancellation could not put it back. Changing its quantity or removing it gives the difference back.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>New: edit a ticket at the counter. Add services, add-ons and retail by name, SKU or barcode (a barcode scanner, or the camera on Android tablets), change quantities and apply a coupon. A setting turns it off.<\/li>\n<li>New: the day close shows tips, in total and for each stylist.<\/li>\n<li>New: an owner or manager can reopen a closed day, with a reason, to correct a ticket. It closes again with fresh totals.<\/li>\n<li>New: closing the day is its own permission. Owners and managers have it.<\/li>\n<li>Fix: retail added on My day no longer recalculates the whole order, so a deposit or credit an add-on put on it stays right.<\/li>\n<li>Developers: add-ons can fill slots in the Operator App's checkout and day close with their own script module (<code>logicweft_salon\/operator\/modules<\/code>), record their own payments (<code>Checkout::settle()<\/code>), reopen a counter-paid ticket (<code>Checkout::reopen()<\/code>), and use the new hooks <code>checkout\/methods<\/code>, <code>checkout\/lines_changed<\/code>, <code>day_close\/order_payments<\/code>, <code>day_close\/checks<\/code>, <code>day_close\/closing<\/code>, <code>day_close\/reopened<\/code> and <code>appointment\/reopened<\/code>. See docs\/hooks.md.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Fix: a booking made by someone signed in now links the client's card to their account only when it is their own booking, made with their account's email, and never to a staff account. Before, staff who booked for a client while signed in were linked to that client's card and could see the client's appointments in My Account.<\/li>\n<li>Fix: a new client is no longer linked to a staff account that has the same email.<\/li>\n<li>On updating, client cards linked to a staff account are unlinked once. The cards and their history stay.<\/li>\n<li>The booking widget asks for its prices as the signed-in client, so add-ons can offer them their own options. Cached pages keep working.<\/li>\n<li>Developers: a counter ticket action's code field can ask for letters (<code>mode: 'text'<\/code>), for gift card codes.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Developers: data-only hooks for add-ons: actions on the counter checkout ticket that can ask for a code or an amount, balances on the client card, their own notification events (sent through the salon's templates and channels, with fields kept only while sending), and a course's next session in the booking confirmation and on the manage page. The front desk app and booking widget show what an add-on adds through them.<\/li>\n<li>Nothing changes for salons that use no add-on.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Developers: data-only hooks for add-ons: payment options (with a public quote of a basket's options), a payment summary, extra actions on Today cards, client flags, late cancellation online, day-close sections and notification merge fields. The booking widget, manage page, My Account and front desk app show what an add-on adds through them.<\/li>\n<li>Nothing changes for salons that use no add-on.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Developers: a <code>logicweft_salon\/loaded<\/code> action, and a documented list of hooks.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fix: in a salon name such as \"Hair &amp; Spa\", the ampersand showed as an HTML code in the booking widget's logo text and in test emails.<\/li>\n<li>A new salon now takes its name from the site title as plain text.<\/li>\n<li>The plugin's home page is now https:\/\/salon.logicweft.com.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<li>Online booking: services, add-ons, stylist choice or \"anyone\", back-to-back slots and guest booking, through WooCommerce checkout.<\/li>\n<li>Operator App for the front desk and stylists: Today board, calendar, walk-in queue, running late, My day, client cards, checkout and day close.<\/li>\n<li>Setup wizard, settings, appearance, a booking block, shortcodes and Elementor widgets.<\/li>\n<li>Staff can be added without a WordPress login and linked to a user later.<\/li>\n<\/ul>","raw_excerpt":"Online booking, a front desk app, stylist screens, client cards and day close for salons and spas on WooCommerce.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/398069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=398069"}],"author":[{"embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/logicweft"}],"wp:attachment":[{"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=398069"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=398069"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=398069"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=398069"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=398069"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=398069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}