{"id":365672,"date":"2026-09-14T10:22:50","date_gmt":"2026-09-14T10:22:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/aponto\/"},"modified":"2026-09-18T07:30:06","modified_gmt":"2026-09-18T07:30:06","slug":"aponto","status":"publish","type":"plugin","link":"https:\/\/id.wordpress.org\/plugins\/aponto\/","author":15992414,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.3","stable_tag":"1.0.3","tested":"7.1.1","requires":"6.6","requires_php":"8.1","requires_plugins":null,"header_name":"Aponto","header_author":"PressMaximum","header_description":"Appointment booking plugin by PressMaximum.","assets_banners_color":"f8f7fb","last_updated":"2026-09-18 07:30:06","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/pressmaximum.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":70,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"pressmaximum","date":"2026-09-14 10:22:13","revision":3694970},"1.0.3":{"tag":"1.0.3","author":"pressmaximum","date":"2026-09-18 07:30:06","revision":3701496}},"upgrade_notice":{"1.0.3":"<p>Translation, admin and listing fixes. No data migration is required.<\/p>","1.0.2":"<p>WordPress.org compatibility and package-verification update. No data migration is required.<\/p>","1.0.1":"<p>Compatibility and packaging update. No data migration is required.<\/p>","1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3694970,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3694970,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3694970,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3694970,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2","1.0.3"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[8133,8132,269,275,268],"plugin_category":[40],"plugin_contributors":[159080],"plugin_business_model":[],"class_list":["post-365672","plugin","type-plugin","status-publish","hentry","plugin_tags-appointment-booking","plugin_tags-appointments","plugin_tags-booking","plugin_tags-booking-calendar","plugin_tags-scheduling","plugin_category-calendar-and-events","plugin_contributors-pressmaximum","plugin_committers-pressmaximum"],"banners":{"banner":"https:\/\/ps.w.org\/aponto\/assets\/banner-772x250.png?rev=3694970","banner_2x":"https:\/\/ps.w.org\/aponto\/assets\/banner-1544x500.png?rev=3694970","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/aponto\/assets\/icon-128x128.png?rev=3694970","icon_2x":"https:\/\/ps.w.org\/aponto\/assets\/icon-256x256.png?rev=3694970","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Aponto lets customers book appointments on your WordPress site around the clock, without a single back-and-forth email. Add your services, set your working hours, drop the booking form on any page, and your customers pick a time that suits them, in their own timezone, from any phone.<\/p>\n\n<p>It is built for the solo professional and the small studio: one owner, a handful of services, a calendar that has to be right every single time. The free plugin has no booking cap, no service cap, no license key and no locked code. Card payments through Stripe are included.<\/p>\n\n<h4>Why Aponto<\/h4>\n\n<ul>\n<li><strong>Timezones that never disagree.<\/strong> Remote customers book in their own timezone while you work in yours, and the slot picker, summary, confirmation, manage page and every email all show the same appointment. No more \"I thought it was 3 pm my time\".<\/li>\n<li><strong>Stripe payments in the free plugin.<\/strong> Take card payments on the booking form itself. No upgrade, and no fee from us on top of Stripe's own. Payment can be optional or required.<\/li>\n<li><strong>Set up in one sitting.<\/strong> The setup wizard reads your site title, admin email, timezone and date formats so you only confirm them, then walks you through working hours, your first service, and creating the booking page.<\/li>\n<li><strong>Feels like WordPress.<\/strong> The booking form is a native block for the block editor and Full Site Editing, with a live preview while you edit. Its assets load only on pages that show a form.<\/li>\n<li><strong>Privacy handled where you expect it.<\/strong> Personal-data export and erase run through the WordPress tools you already know, with optional retention-based anonymization and a consent checkbox on the form.<\/li>\n<li><strong>Unlimited where it counts.<\/strong> Unlimited bookings and unlimited services in the free plugin. The only limits are one staff member and one business location.<\/li>\n<\/ul>\n\n<h4>Who is Aponto for<\/h4>\n\n<ul>\n<li><strong>Hair and beauty salons<\/strong> \u2013 let clients book a cut, colour or treatment while you are busy with the chair in front of you.<\/li>\n<li><strong>Barbershops and nail studios<\/strong> \u2013 short services, tight slots and no double bookings, so the chair keeps turning.<\/li>\n<li><strong>Clinics, therapists and wellness practitioners<\/strong> \u2013 private, dependable scheduling with confirmations, reminders and a cancellation link that keeps your calendar accurate.<\/li>\n<li><strong>Coaches and consultants<\/strong> \u2013 sell discovery calls and sessions to clients anywhere in the world, each booking in the client's own timezone.<\/li>\n<li><strong>Tutors and instructors<\/strong> \u2013 offer lessons at set lengths and let students book the next one themselves.<\/li>\n<li><strong>Personal trainers and small fitness studios<\/strong> \u2013 fill one-to-one sessions without a chat thread for every booking.<\/li>\n<li><strong>Photographers, tattoo artists and creative studios<\/strong> \u2013 consultations and sittings, paid up front with Stripe if you want them to be.<\/li>\n<li><strong>Freelancers and small agencies<\/strong> \u2013 a booking page that takes payment, so meetings turn into paid work.<\/li>\n<\/ul>\n\n<h4>Everything in the free plugin<\/h4>\n\n<p><strong>Booking form<\/strong><\/p>\n\n<ul>\n<li>Mobile-first booking form as a native block, with a live preview in the editor.<\/li>\n<li>A short path: service, date and time, customer details, payment if you ask for it, then confirmation.<\/li>\n<li>Pre-select a service per form and place as many forms as you like across the site.<\/li>\n<li>Optional consent checkbox and a clear summary before the customer confirms.<\/li>\n<li>Add to calendar on the confirmation screen: a Google Calendar link and an <code>.ics<\/code> download.<\/li>\n<\/ul>\n\n<p><strong>Availability and scheduling<\/strong><\/p>\n\n<ul>\n<li>Unlimited services, grouped into categories, each with its own duration and price.<\/li>\n<li>Weekly working hours, date overrides and days off for your staff member.<\/li>\n<li>Timezone-correct slots everywhere, with an automatic timezone selector when the customer is somewhere else.<\/li>\n<li>Booking statuses that match real life: pending, confirmed, completed, cancelled and no-show, with guarded transitions so a slot is never double-sold on the way back from a cancellation.<\/li>\n<\/ul>\n\n<p><strong>Notifications<\/strong><\/p>\n\n<ul>\n<li>Thirteen editable email templates: booking received, confirmed, rescheduled, cancelled, completed and no-show for the customer, plus new-booking and cancellation notices for you and your staff member.<\/li>\n<li>An appointment reminder emailed to the customer about 24 hours before a confirmed booking, on by default.<\/li>\n<li>A \"complete your payment\" email for an unpaid booking, and a refund notice you can switch on.<\/li>\n<li>Switch any template on or off and edit the subject and body in the admin. The completed, no-show and refund emails ship switched off, so upgrading a live site never surprises your customers.<\/li>\n<\/ul>\n\n<p><strong>Manage your day<\/strong><\/p>\n\n<ul>\n<li>A dashboard with a week and day calendar of your appointments.<\/li>\n<li>A bookings list with search, status, service and date-range filters, and per-row actions.<\/li>\n<li>Manual bookings and admin reschedule for customers who call or walk in.<\/li>\n<li>Customer records with contact details, an internal note, and totals for bookings, upcoming appointments, last visit and no-shows.<\/li>\n<li>Customer self-service cancellation through a secure link in their email.<\/li>\n<li>Mark bookings paid or unpaid, and refund a Stripe payment from the booking itself.<\/li>\n<\/ul>\n\n<p><strong>Payments<\/strong><\/p>\n\n<ul>\n<li>Card payments through your own Stripe account, on the booking form, without leaving your site.<\/li>\n<li>Test and Live mode with separate keys, so you can try everything before going live.<\/li>\n<li>Optional or required payment, your choice.<\/li>\n<li>A customer who did not finish paying can come back and pay from the \"complete your payment\" email or their manage-booking page, until the hold expires.<\/li>\n<\/ul>\n\n<p><strong>Data and privacy<\/strong><\/p>\n\n<ul>\n<li>CSV export of bookings and customers, Excel-compatible and protected against spreadsheet formula injection.<\/li>\n<li>WordPress personal-data export and erase integration.<\/li>\n<li>Optional time-based anonymization of old bookings.<\/li>\n<li>Your data stays in your database when you uninstall, unless you choose otherwise.<\/li>\n<\/ul>\n\n<p><strong>Fits your site<\/strong><\/p>\n\n<ul>\n<li>Works with any well-built theme, in the block editor and Full Site Editing.<\/li>\n<li>Translation-ready: a Vietnamese translation is bundled, WordPress language packs take precedence once they exist, and the admin ships RTL stylesheets.<\/li>\n<li>Runs on MySQL, MariaDB or the official WordPress SQLite integration.<\/li>\n<li>Lightweight: the booking form only loads its assets on pages that render it.<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Install and activate Aponto, then follow the setup wizard to confirm your business details.<\/li>\n<li>Set your working hours and add your first service with its duration and price.<\/li>\n<li>Add the Aponto Booking Form block to a page, or let the wizard create the booking page for you.<\/li>\n<li>Customers book, pay if you ask them to, and both of you get an email. You see everything on the calendar.<\/li>\n<\/ol>\n\n<h4>Aponto Premium<\/h4>\n\n<p>The free plugin is the whole product for a single-staff business. Aponto Premium is in development, runs on the same database as the free plugin, and adds:<\/p>\n\n<ul>\n<li>More staff members, each with their own working hours, days off and service assignments.<\/li>\n<li>Google Calendar and Outlook sync: a booking is written to the staff member's calendar, and what is already on that calendar blocks the times Aponto offers.<\/li>\n<li>Custom reminder schedules with several reminders and follow-ups instead of the single 24-hour one.<\/li>\n<li>Custom booking-form fields, so you collect the details your work actually needs.<\/li>\n<li>PayPal alongside Stripe.<\/li>\n<\/ul>\n\n<p>Further modules are planned, including deposits, coupons, video meeting links, group bookings, recurring appointments, multiple locations and SMS reminders. Premium is not on sale yet; the Modules screen inside the plugin lists every module and marks it as included, Premium or planned, and nothing there is required to run the free plugin.<\/p>\n\n<p>Learn more about PressMaximum and Aponto at <a href=\"https:\/\/pressmaximum.com\/\">pressmaximum.com<\/a>.<\/p>\n\n<h4>Support<\/h4>\n\n<p>Questions, bugs and feature requests are welcome on the <a href=\"https:\/\/wordpress.org\/support\/plugin\/aponto\/\">WordPress.org support forum<\/a>. You can also reach the team through <a href=\"https:\/\/pressmaximum.com\/support\/\">pressmaximum.com\/support<\/a>.<\/p>\n\n<h4>Source code<\/h4>\n\n<p>The complete human-readable JavaScript and CSS source ships with the plugin under <code>assets\/src\/<\/code>, together with the build configuration. A public mirror of every free release lives at <a href=\"https:\/\/github.com\/PressMaximum\/aponto-free\">github.com\/PressMaximum\/aponto-free<\/a>; its <code>README.md<\/code> documents the source-to-bundle map and the exact rebuild commands.<\/p>\n\n<h3>External services<\/h3>\n\n<p>Aponto does not contact an external service in the background on a fresh installation. The Google Calendar action below runs only when a customer clicks its link. Stripe communication starts only after you enable that module and enter your own Stripe API keys.<\/p>\n\n<h4>Google Calendar links<\/h4>\n\n<p>The confirmation and manage-booking screens can show an \"Add to Google Calendar\" link. Aponto builds this link locally. Only when a customer clicks it, their browser opens <code>calendar.google.com<\/code> and sends the appointment title (including the service name and, depending on the screen, the business or location name), start and end times, and the configured location address when one is set. The local <code>.ics<\/code> download beside it does not contact Google.<\/p>\n\n<p>Google terms of service: https:\/\/policies.google.com\/terms\nGoogle privacy policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>Stripe<\/h4>\n\n<p>The Stripe payments module connects your site to Stripe so customers can pay for a booking with a card. Stripe is a payment processor operated by Stripe, Inc.<\/p>\n\n<p>The module has a Test mode \/ Live mode switch and keeps a separate set of keys for each, so you can set everything up with Stripe's test keys, try a real booking, and then switch to Live without pasting anything again. Only the keys of the mode you have selected are ever used.<\/p>\n\n<p>When it connects, and what is sent:<\/p>\n\n<ul>\n<li>Saving your Stripe keys makes no network call at all. The keys are stored on your own site, and the secret key and webhook signing secret are encrypted before they are written to the database.<\/li>\n<li>Pressing \"Test connection\" asks Stripe for your account balance (<code>GET \/v1\/balance<\/code>) to check that the key works. Only the key is sent.<\/li>\n<li>Pressing \"Register webhook with Stripe\" asks Stripe to create the notification endpoint for you (<code>POST \/v1\/webhook_endpoints<\/code>). It sends this site's webhook address, the list of events below, and a description containing your site's domain name; Stripe returns the signing secret, which is stored encrypted on your own site. This is optional \u2014 you can add the endpoint by hand in the Stripe Dashboard instead.<\/li>\n<li>When a customer reaches the Payment step of the booking form, their browser loads Stripe's own payment form from <code>js.stripe.com<\/code>, and your site asks Stripe to create a payment for that booking. Your site sends the amount, the currency, the booking's order code, the booking id, your site's domain name, and a short description of the payment \u2014 plus the customer's email address only if you switch on the \"Send Stripe receipt\" setting. The description is the booked service's name followed by the order code, so the payment is recognisable in your Stripe dashboard; if your service names describe something a customer would consider private, that name is visible in Stripe. It never sends the customer's name, phone number, address, or answers to booking-form questions. Card details are typed directly into Stripe's form and never reach your server.<\/li>\n<li>Stripe's form in turn contacts Stripe domains including <code>api.stripe.com<\/code>, <code>m.stripe.com<\/code>, <code>m.stripe.network<\/code>, <code>r.stripe.com<\/code>, <code>b.stripecdn.com<\/code> and <code>merchant-ui-api.stripe.com<\/code>, and loads hCaptcha (<code>hcaptcha.com<\/code> and its subdomains) for Stripe's own fraud checks. This happens only on the Payment step, and only when the Stripe module is enabled and set up.<\/li>\n<li>Stripe sends your site notifications (webhooks) about payments and refunds it processed, including refunds you make from the Stripe dashboard. Your site verifies each notification's signature before acting on it. The plugin's setup screen lists the exact events to subscribe to: <code>payment_intent.succeeded<\/code>, <code>payment_intent.payment_failed<\/code>, <code>payment_intent.canceled<\/code>, <code>refund.created<\/code>, <code>refund.updated<\/code>, <code>charge.refunded<\/code> and <code>refund.failed<\/code>.<\/li>\n<li>When you refund a booking from the admin, your site asks Stripe to refund that payment. It sends the payment's Stripe reference, the amount, a reason, and the booking's order code.<\/li>\n<\/ul>\n\n<p>Stripe's terms of service: https:\/\/stripe.com\/legal\/ssa\nStripe's privacy policy: https:\/\/stripe.com\/privacy\nhCaptcha's privacy policy: https:\/\/www.hcaptcha.com\/privacy\nhCaptcha's terms of service: https:\/\/www.hcaptcha.com\/terms<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install Aponto from Plugins \u2192 Add New, or upload the plugin ZIP through Plugins \u2192 Add New \u2192 Upload Plugin.<\/li>\n<li>Activate Aponto through the Plugins screen.<\/li>\n<li>Open Aponto in the admin menu and follow the setup wizard: confirm your business info, set working hours, and create your first service.<\/li>\n<li>Add the \"Aponto Booking Form\" block to any page, or let the wizard create a booking page for you.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20the%20free%20plugin%20really%20free%3F%20what%20is%20the%20catch%3F\"><h3>Is the free plugin really free? What is the catch?<\/h3><\/dt>\n<dd><p>There is no catch. The free plugin has unlimited bookings, unlimited services, Stripe payments, email notifications, a 24-hour reminder and the full admin, with no license key and no locked code. The only limits are one staff member and one business location. Premium is for businesses that outgrow those limits.<\/p><\/dd>\n<dt id=\"can%20i%20buy%20aponto%20premium%20today%3F\"><h3>Can I buy Aponto Premium today?<\/h3><\/dt>\n<dd><p>Not yet. Premium is still in development, so there is nothing to purchase and nothing to activate. The free plugin is complete on its own, and the Modules screen inside the plugin shows what is included today and what is still to come.<\/p><\/dd>\n<dt id=\"do%20i%20need%20any%20coding%20skills%3F\"><h3>Do I need any coding skills?<\/h3><\/dt>\n<dd><p>No. The setup wizard walks you through your business details, working hours and first service, and can create the booking page for you. Everything else is configured from the Aponto admin screens.<\/p><\/dd>\n<dt id=\"how%20do%20customers%20book%3F\"><h3>How do customers book?<\/h3><\/dt>\n<dd><p>Add the Aponto Booking Form block to a page. Customers pick a service, choose a date and time, enter their details, pay if you require it, and confirm. Both the customer and you get an email, and the booking appears on your calendar.<\/p><\/dd>\n<dt id=\"does%20it%20handle%20timezones%20correctly%3F\"><h3>Does it handle timezones correctly?<\/h3><\/dt>\n<dd><p>Yes. When a customer's browser timezone differs from your business timezone, the form shows a timezone selector and books in the customer's timezone, while you always see the business timezone in the admin. Every surface the customer sees, from the slot picker to the confirmation email, uses the same timezone, so nothing disagrees.<\/p><\/dd>\n<dt id=\"can%20customers%20pay%20online%3F\"><h3>Can customers pay online?<\/h3><\/dt>\n<dd><p>Yes. Card payments through your own Stripe account are included in the free plugin: turn on the Stripe module, paste your Stripe keys, and customers pay on the booking form itself. You choose whether payment is optional or required, you can mark bookings paid or unpaid by hand, and you can refund a Stripe payment from the booking. PayPal belongs to Aponto Premium; deposits and coupons are planned.<\/p><\/dd>\n<dt id=\"do%20customers%20get%20a%20reminder%20before%20their%20appointment%3F\"><h3>Do customers get a reminder before their appointment?<\/h3><\/dt>\n<dd><p>Yes. Aponto emails the customer about 24 hours before a confirmed booking. The reminder is on by default and you can edit or disable it under Notifications. A booking made less than 24 hours ahead gets no reminder, so nobody receives one after the fact. Custom reminder schedules with several reminders and follow-ups belong to Aponto Premium.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20my%20theme%20and%20the%20block%20editor%3F\"><h3>Does it work with my theme and the block editor?<\/h3><\/dt>\n<dd><p>Aponto works with any well-built theme. The booking form ships as a native block for the block editor and Full Site Editing, with a live preview while you edit. A shortcode for classic content and page-builder integrations are on the roadmap.<\/p><\/dd>\n<dt id=\"can%20i%20pre-select%20a%20service%20or%20place%20several%20forms%20on%20one%20site%3F\"><h3>Can I pre-select a service or place several forms on one site?<\/h3><\/dt>\n<dd><p>Yes. The block has a service option in its settings sidebar, so each form can pre-select a service and skip the service step. Place as many forms as you like; assets are only loaded on pages that actually render one.<\/p><\/dd>\n<dt id=\"what%20about%20more%20than%20one%20staff%20member%3F\"><h3>What about more than one staff member?<\/h3><\/dt>\n<dd><p>The free plugin supports one staff member with full working hours, date overrides and days off. More staff, each with their own hours and service assignments, belongs to Aponto Premium.<\/p><\/dd>\n<dt id=\"can%20a%20customer%20reschedule%20themselves%3F\"><h3>Can a customer reschedule themselves?<\/h3><\/dt>\n<dd><p>Not yet. Customers can cancel from the secure link in their email, and you can reschedule any booking from the admin. Customer self-service rescheduling is on the roadmap.<\/p><\/dd>\n<dt id=\"can%20i%20sync%20bookings%20with%20google%20calendar%20or%20outlook%3F\"><h3>Can I sync bookings with Google Calendar or Outlook?<\/h3><\/dt>\n<dd><p>The free plugin gives every customer an \"Add to Google Calendar\" link and an <code>.ics<\/code> download on the confirmation screen. Syncing your own Google Calendar or Outlook \u2014 bookings written to your calendar, and existing events blocking the times Aponto offers \u2014 belongs to Aponto Premium.<\/p><\/dd>\n<dt id=\"how%20do%20i%20export%20my%20data%2C%20or%20remove%20a%20customer%27s%20data%3F\"><h3>How do I export my data, or remove a customer's data?<\/h3><\/dt>\n<dd><p>Export bookings and customers to CSV from the Bookings and Customers screens. Aponto also integrates with WordPress' built-in personal-data export and erase tools under Tools \u2192 Export\/Erase Personal Data, and supports time-based anonymization through an optional retention setting.<\/p><\/dd>\n<dt id=\"does%20uninstalling%20delete%20my%20data%3F\"><h3>Does uninstalling delete my data?<\/h3><\/dt>\n<dd><p>No, not by default. Your data is kept unless you switch on \"Delete all data on uninstall\" under Settings \u2192 Advanced \u2192 Data &amp; uninstall before deleting the plugin.<\/p><\/dd>\n<dt id=\"is%20it%20translation%20ready%3F\"><h3>Is it translation ready?<\/h3><\/dt>\n<dd><p>Yes. Everything a customer sees, including the booking form, confirmation, emails and the manage-booking page, is translatable through the <code>aponto<\/code> text domain. A Vietnamese translation is bundled with the plugin, and WordPress language packs from translate.wordpress.org take precedence over the bundled files as soon as a locale is available there. The admin ships RTL stylesheets. Admin-screen translation coverage is still being completed.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20help%3F\"><h3>Where do I get help?<\/h3><\/dt>\n<dd><p>Post on the <a href=\"https:\/\/wordpress.org\/support\/plugin\/aponto\/\">WordPress.org support forum<\/a> or reach the team through <a href=\"https:\/\/pressmaximum.com\/support\/\">pressmaximum.com\/support<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Restored the bundled Vietnamese translation and script translations in the free plugin. WordPress.org language packs take precedence as soon as they exist.<\/li>\n<li>Fixed strings falling back to English for the rest of a request after an email was sent on non-English sites.<\/li>\n<li>Fixed the staff editor staying on \"Saving\u2026\" after a successful save.<\/li>\n<li>The customer and service inspectors now stack below 840px and never squeeze the list; a remembered inspector width is clamped to the viewport.<\/li>\n<li>Assets fall back to the readable JavaScript and CSS files when a minified file is missing.<\/li>\n<li>The manage-booking page always emits its stylesheet link.<\/li>\n<li>Demo seeding through <code>wp aponto seed<\/code> now writes business hours.<\/li>\n<li>Rewritten WordPress.org listing; \"Multiple locations\" row added to the Free vs Premium comparison on the Modules screen.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Clarified the public source and reproducible build path for every distributed browser bundle.<\/li>\n<li>Made REST API permission callbacks statically explicit while preserving their authorization behavior.<\/li>\n<li>Updated the Free staff and business-location admin experience.<\/li>\n<li>Hardened local asset-manifest loading and release validation.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Improved WordPress.org compatibility, package separation, and REST permission handling.<\/li>\n<li>Fixed first-run onboarding navigation while keeping Settings accessible before onboarding is complete.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<li>Services and service categories, with unlimited bookings.<\/li>\n<li>Single-staff scheduling: weekly working hours, date overrides, days off, and per-service assignment.<\/li>\n<li>Timezone-correct public booking form as a block, for the block editor and Full Site Editing.<\/li>\n<li>Week and day admin calendar, a filterable bookings list, and customer records.<\/li>\n<li>Manual bookings and admin reschedule; customer self-service cancellation through a secure link.<\/li>\n<li>Editable email templates for customers, the site owner and staff, including a customer reminder about 24 hours before a confirmed booking.<\/li>\n<li>Add-to-calendar links and <code>.ics<\/code> download on the confirmation screen and the manage-booking page.<\/li>\n<li>Guided onboarding wizard, CSV export of bookings and customers.<\/li>\n<li>Privacy: personal-data export and erase integration, optional retention-based anonymization, and an optional consent checkbox.<\/li>\n<\/ul>","raw_excerpt":"Appointment booking for salons, clinics, coaches and studios. Timezone-correct slots, email reminders, Stripe payments and a mobile booking form.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/365672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=365672"}],"author":[{"embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pressmaximum"}],"wp:attachment":[{"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=365672"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=365672"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=365672"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=365672"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=365672"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/id.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=365672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}