{"id":315303,"date":"2026-06-21T12:31:30","date_gmt":"2026-06-21T12:31:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/im-form\/"},"modified":"2026-06-21T12:31:03","modified_gmt":"2026-06-21T12:31:03","slug":"intometrics-booking-crm-light","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/intometrics-booking-crm-light\/","author":23498574,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.43","stable_tag":"1.0.43","tested":"7.0","requires":"5.9","requires_php":"8.0","requires_plugins":null,"header_name":"IntoMetrics Booking & CRM Light","header_author":"IntoMetrics","header_description":"Multi-step booking forms, patient CRM, calendar, analytics and license management for service businesses.","assets_banners_color":"101f42","last_updated":"2026-06-21 12:31:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/intometrics.com\/im-form\/","header_author_uri":"https:\/\/intometrics.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":26,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.43":{"tag":"1.0.43","author":"intometrics","date":"2026-06-21 12:31:03"}},"upgrade_notice":{"1.6.21":"<p>Recommended. Payment amounts now show in the Leads CRM table. Revenue totals are preserved when editing lead payment status.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3580532,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3580651,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3580532,"resolution":"1544x500","location":"assets","locale":"","width":1802,"height":872},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3580532,"resolution":"772x250","location":"assets","locale":"","width":1910,"height":823}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.43"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3580532,"resolution":"1","location":"assets","locale":"","width":1754,"height":668},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3580532,"resolution":"2","location":"assets","locale":"","width":1745,"height":821}},"screenshots":{"1":"Multi-step booking form \u2014 service, staff cards, add-ons","2":"Leads CRM with payment status and revenue amounts","3":"Drag-and-drop Form Builder","4":"Analytics dashboard with revenue and booking charts","5":"Shareable public booking page","6":"Invoice PDF view"}},"plugin_section":[],"plugin_tags":[276,269,416,1150,601],"plugin_category":[40,42,58],"plugin_contributors":[268214],"plugin_business_model":[],"class_list":["post-315303","plugin","type-plugin","status-publish","hentry","plugin_tags-appointment","plugin_tags-booking","plugin_tags-calendar","plugin_tags-crm","plugin_tags-forms","plugin_category-calendar-and-events","plugin_category-contact-forms","plugin_category-user-management","plugin_contributors-intometrics","plugin_committers-intometrics"],"banners":{"banner":"https:\/\/ps.w.org\/intometrics-booking-crm-light\/assets\/banner-772x250.png?rev=3580532","banner_2x":"https:\/\/ps.w.org\/intometrics-booking-crm-light\/assets\/banner-1544x500.png?rev=3580532","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/intometrics-booking-crm-light\/assets\/icon-128x128.png?rev=3580532","icon_2x":"https:\/\/ps.w.org\/intometrics-booking-crm-light\/assets\/icon-256x256.png?rev=3580651","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/intometrics-booking-crm-light\/assets\/screenshot-1.png?rev=3580532","caption":"Multi-step booking form \u2014 service, staff cards, add-ons"},{"src":"https:\/\/ps.w.org\/intometrics-booking-crm-light\/assets\/screenshot-2.png?rev=3580532","caption":"Leads CRM with payment status and revenue amounts"}],"raw_content":"<!--section=description-->\n<p><strong>IM Form<\/strong> is a complete booking and client management solution for WordPress \u2014 purpose-built for service businesses such as clinics, salons, studios, law firms, photography businesses, and consultancies.<\/p>\n\n<p>Create polished multi-step booking forms, manage your leads in a built-in CRM, view appointments on a visual calendar, track revenue and conversion rates, and automate email\/Slack notifications \u2014 all from your WordPress dashboard with no coding required.<\/p>\n\n<p><strong>Core Features<\/strong><\/p>\n\n<ul>\n<li><strong>Drag-and-drop Form Builder<\/strong> \u2014 Build multi-step booking forms with service selection, staff picker (card\/list\/dropdown styles), add-ons, date\/time, and custom fields<\/li>\n<li><strong>Leads CRM<\/strong> \u2014 Full client record with lead scoring (Hot\/Warm\/Cold), status pipeline, payment tracking, and invoice generation<\/li>\n<li><strong>Staff &amp; Availability Management<\/strong> \u2014 Per-staff working hours, day-off management, and automatic time-slot filtering based on who the client selects<\/li>\n<li><strong>Visual Calendar<\/strong> \u2014 Monthly calendar view of all appointments with click-to-view booking details<\/li>\n<li><strong>Analytics Dashboard<\/strong> \u2014 Charts for leads, bookings, and revenue; paid\/unpaid breakdown; conversion rate tracking<\/li>\n<li><strong>Shareable Booking Pages<\/strong> \u2014 Generate a public booking URL for any form \u2014 no WordPress page required<\/li>\n<li><strong>Email Confirmations<\/strong> \u2014 Automatic HTML booking confirmation email sent to each client immediately after booking<\/li>\n<li><strong>Pro: Integrations<\/strong> \u2014 Google Sheets, Google Calendar, Slack, Zapier, HubSpot, and custom webhooks<\/li>\n<li><strong>Pro: Automations<\/strong> \u2014 Visual workflow builder for timed email sequences, Slack alerts, CRM updates, and more<\/li>\n<li><strong>Pro: Payment Support<\/strong> \u2014 Accept payments via Wise\/Bank Transfer (with manual confirmation), PayMongo, and Stripe<\/li>\n<li><strong>Tracking<\/strong> \u2014 Google Analytics and Facebook Pixel event firing on form submission<\/li>\n<\/ul>\n\n<p><strong>Display Styles for Staff<\/strong>\nChoose between Dropdown, Card Grid (photo + name + title), or List (photo + name + title rows) \u2014 all configurable per form in the form builder.<\/p>\n\n<p><strong>Add-ons<\/strong>\nAttach optional add-ons to your services (e.g. \"with props +$10\", \"home service +$159\"). Add-ons can be restricted to specific services so customers only see relevant options.<\/p>\n\n<p><strong>Invoice PDF<\/strong>\nEvery lead in the CRM has a printable invoice page \u2014 open it and click \"Print \/ Save PDF\" to generate a clean PDF invoice with your business branding, client details, line items, and payment status.<\/p>\n\n<h3>Third Party Libraries<\/h3>\n\n<p>This plugin includes the following bundled third-party libraries:<\/p>\n\n<h4>jsPDF<\/h4>\n\n<p>Used for generating PDF invoices.\nVersion: 4.2.1\nLicense: MIT\nSource: https:\/\/github.com\/parallax\/jsPDF<\/p>\n\n<h4>Chart.js<\/h4>\n\n<p>Used for rendering analytics charts (leads, revenue, bookings) in the admin dashboard.\nVersion: 4.5.1\nLicense: MIT\nSource: https:\/\/www.chartjs.org \/ https:\/\/github.com\/chartjs\/Chart.js<\/p>\n\n<h4>IM PDF (custom)<\/h4>\n\n<p>A lightweight, self-contained pure-PHP PDF generator used for invoice generation.\nNo external dependencies. Built-in fonts only (Helvetica\/PDF standard).\nLicense: GPL-2.0-or-later (included with this plugin)<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the following third-party services. Data is only transmitted when the corresponding feature is explicitly enabled by the site administrator.<\/p>\n\n<h4>IntoMetrics License Server<\/h4>\n\n<p>Used for license key activation and deactivation, and automation workflow delivery (when automation features are configured by the site admin).\nWhat is sent: license key, site domain, plugin version, WordPress version, and PHP version (on activation\/deactivation only). Automation workflow definitions are fetched from the server (no personal\/client data is sent to IntoMetrics). When automations run, only the run status is logged back to the server.\nWhen: on license activation or deactivation; when automation workflows are triggered by a booking (if configured by site admin).\nService: https:\/\/intometrics.com\nPrivacy policy: https:\/\/intometrics.com\/privacy-policy\/\nTerms of use: https:\/\/intometrics.com\/terms\/<\/p>\n\n<h4>Google Analytics<\/h4>\n\n<p>Used to fire pageview and booking conversion events on your public booking pages.\nWhat is sent: standard GA4 measurement data (page URL, event name) to Google's servers.\nWhen: only if a GA4 Measurement ID is entered in IM Form \u2192 Tracking.\nService: https:\/\/marketingplatform.google.com\/about\/analytics\/\nPrivacy policy: https:\/\/policies.google.com\/privacy\nTerms of use: https:\/\/marketingplatform.google.com\/about\/analytics\/terms\/us\/<\/p>\n\n<h4>Facebook Pixel<\/h4>\n\n<p>Used to fire PageView and Lead events on your public booking pages.\nWhat is sent: standard Pixel event data to Facebook's servers.\nWhen: only if a Facebook Pixel ID is entered in IM Form \u2192 Tracking.\nService: https:\/\/www.facebook.com\/business\/tools\/meta-pixel\nPrivacy policy: https:\/\/www.facebook.com\/privacy\/policy\/\nTerms of use: https:\/\/www.facebook.com\/legal\/terms\/<\/p>\n\n<h4>Open Exchange Rates (open.er-api.com)<\/h4>\n\n<p>Used for currency conversion when PayMongo is enabled (PayMongo requires PHP \u2014 Philippine Peso).\nWhat is sent: the source currency code only (e.g. \"USD\"). No personal data is transmitted.\nWhen: only when a customer submits a booking form with PayMongo as the payment gateway and the site currency is not PHP.\nService: https:\/\/www.exchangerate-api.com\/\nPrivacy policy: https:\/\/www.exchangerate-api.com\/privacy\nTerms of use: https:\/\/www.exchangerate-api.com\/terms<\/p>\n\n<h4>PayMongo<\/h4>\n\n<p>Used to create payment checkout sessions for accepting card payments.\nWhat is sent: booking amount, currency, customer name and email (if provided), and success\/cancel redirect URLs.\nWhen: only when a customer submits a booking form with PayMongo configured as the payment gateway.\nService: https:\/\/www.paymongo.com\/\nPrivacy policy: https:\/\/www.paymongo.com\/privacy\nTerms of use: https:\/\/www.paymongo.com\/terms<\/p>\n\n<h4>Stripe<\/h4>\n\n<p>Used to create payment checkout sessions for accepting card payments.\nWhat is sent: booking amount, currency, customer email (if provided), and success\/cancel redirect URLs.\nWhen: only when a customer submits a booking form with Stripe configured as the payment gateway.\nService: https:\/\/stripe.com\/\nPrivacy policy: https:\/\/stripe.com\/privacy\nTerms of use: https:\/\/stripe.com\/legal\/end-users<\/p>\n\n<h4>Google Sheets<\/h4>\n\n<p>Used to append booking data to a connected Google Sheet.\nWhat is sent: customer name, email, phone, service, date, time, staff, add-ons, and total amount.\nWhen: only when this integration is enabled in IM Form \u2192 Integrations and a booking is submitted.\nService: https:\/\/workspace.google.com\/products\/sheets\/\nPrivacy policy: https:\/\/policies.google.com\/privacy\nTerms of use: https:\/\/workspace.google.com\/terms\/service-terms\/index.html<\/p>\n\n<h4>Google Calendar<\/h4>\n\n<p>Used to create calendar events for new appointments.\nWhat is sent: appointment details (title, date\/time, description with client name and service).\nWhen: only when this integration is enabled in IM Form \u2192 Integrations and a booking is submitted.\nService: https:\/\/calendar.google.com\/\nPrivacy policy: https:\/\/policies.google.com\/privacy\nTerms of use: https:\/\/workspace.google.com\/terms\/service-terms\/index.html<\/p>\n\n<h4>Slack<\/h4>\n\n<p>Used to send booking notification messages to a Slack channel.\nWhat is sent: customer name, email, phone, service, date, time, and form name.\nWhen: only when this integration is enabled in IM Form \u2192 Integrations and a booking is submitted.\nService: https:\/\/slack.com\/\nPrivacy policy: https:\/\/slack.com\/intl\/en-us\/trust\/privacy\/privacy-policy\nTerms of use: https:\/\/slack.com\/terms-of-service<\/p>\n\n<h4>Zapier<\/h4>\n\n<p>Used to trigger Zaps on booking submission.\nWhat is sent: full booking payload (name, email, phone, service, date, time, staff, add-ons, total).\nWhen: only when this integration is enabled in IM Form \u2192 Integrations and a booking is submitted.\nService: https:\/\/zapier.com\/\nPrivacy policy: https:\/\/zapier.com\/privacy\nTerms of use: https:\/\/zapier.com\/terms<\/p>\n\n<h4>HubSpot<\/h4>\n\n<p>Used to create or update contacts and deals in HubSpot CRM.\nWhat is sent: customer name, email, phone, and booking amount.\nWhen: only when this integration is enabled in IM Form \u2192 Integrations and a booking is submitted.\nService: https:\/\/www.hubspot.com\/\nPrivacy policy: https:\/\/legal.hubspot.com\/privacy-policy\nTerms of use: https:\/\/legal.hubspot.com\/terms-of-service<\/p>\n\n<h4>Trello<\/h4>\n\n<p>Used to create Trello cards for new bookings.\nWhat is sent: customer name, email, phone, service, date, time, and add-ons.\nWhen: only when this integration is enabled in IM Form \u2192 Integrations and a booking is submitted.\nService: https:\/\/trello.com\/\nPrivacy policy: https:\/\/www.atlassian.com\/legal\/privacy-policy\nTerms of use: https:\/\/www.atlassian.com\/legal\/cloud-terms-of-service<\/p>\n\n<h4>Mailchimp<\/h4>\n\n<p>Used to subscribe booking customers to a Mailchimp audience.\nWhat is sent: customer email address, first name, and last name.\nWhen: only when this integration is enabled in IM Form \u2192 Integrations and a booking is submitted.\nService: https:\/\/mailchimp.com\/\nPrivacy policy: https:\/\/mailchimp.com\/legal\/privacy\/\nTerms of use: https:\/\/mailchimp.com\/legal\/terms\/<\/p>\n\n<h4>Custom Webhooks<\/h4>\n\n<p>Used to POST booking data to any URL you configure.\nWhat is sent: full booking payload to the URL you specify \u2014 contents are under your control.\nWhen: only when this integration is enabled in IM Form \u2192 Integrations and a booking is submitted.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>IM Form stores booking data (client name, email, phone, service, appointment date\/time) in the local WordPress database only. This data is never automatically shared with IntoMetrics or any third party.<\/p>\n\n<p>Data is only transmitted to external services (Google Sheets, Slack, etc.) when the site administrator explicitly enables and configures those integrations.<\/p>\n\n<p>Site administrators are responsible for their own compliance with applicable privacy laws (GDPR, Philippine Data Privacy Act, etc.) when using this plugin to collect client data.<\/p>\n\n<p>The \"Powered by IntoMetrics\" attribution shown on Basic plan booking forms can be removed by upgrading to the Pro plan.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>im-form<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through <strong>Plugins<\/strong> in your WordPress dashboard<\/li>\n<li>Go to <strong>IM Form \u2192 License<\/strong> and enter your license key from <a href=\"https:\/\/intometrics.com\/im-pricing\/\">intometrics.com<\/a><\/li>\n<li>Go to <strong>IM Form \u2192 Services<\/strong> and add your services, staff, and add-ons<\/li>\n<li>Go to <strong>IM Form \u2192 Availability<\/strong> and set your working hours<\/li>\n<li>Go to <strong>IM Form \u2192 Forms<\/strong>, create a form, and copy the shortcode<\/li>\n<li>Paste the shortcode on any WordPress page, or share the public booking URL directly<\/li>\n<\/ol>\n\n<p>After activation, go to <strong>Settings \u2192 Permalinks<\/strong> and click <strong>Save Changes<\/strong> to flush rewrite rules so shareable form URLs work correctly.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20license%20key%3F\"><h3>Do I need a license key?<\/h3><\/dt>\n<dd><p>A license key is required to use IM Form. Get yours at <a href=\"https:\/\/intometrics.com\/im-pricing\/\">intometrics.com\/im-pricing\/<\/a>. Both Basic and Pro plans include a full set of core features; Pro adds integrations, automations, and payment support.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20form%20on%20multiple%20pages%3F\"><h3>Can I use the form on multiple pages?<\/h3><\/dt>\n<dd><p>Yes. Use <code>[imform_booking]<\/code> on as many pages as you need. Each form you build has its own unique shortcode and shareable URL.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20any%20wordpress%20theme%3F\"><h3>Does it work with any WordPress theme?<\/h3><\/dt>\n<dd><p>Yes. The booking form is fully self-contained with its own styles and does not depend on theme CSS. The shareable public form pages bypass the theme entirely for a clean experience.<\/p><\/dd>\n<dt id=\"how%20do%20i%20accept%20payments%3F\"><h3>How do I accept payments?<\/h3><\/dt>\n<dd><p>Configure Wise\/Bank Transfer in <strong>IM Form \u2192 License Server Settings<\/strong> for manual bank transfers, or connect PayMongo\/Stripe. When a customer pays, update the lead payment status in the CRM \u2014 the amount is preserved and reflected in the Analytics revenue chart.<\/p><\/dd>\n<dt id=\"how%20do%20staff%20time%20slots%20work%3F\"><h3>How do staff time slots work?<\/h3><\/dt>\n<dd><p>When a client selects a staff member on the form, the calendar automatically filters available time slots based on that staff member's configured working hours and existing bookings \u2014 preventing double-booking.<\/p><\/dd>\n<dt id=\"is%20my%20clients%27%20data%20safe%3F\"><h3>Is my clients' data safe?<\/h3><\/dt>\n<dd><p>All booking data is stored locally in your WordPress database. IM Form does not send client data to any external server unless you explicitly configure an integration (Google Sheets, Slack, etc.).<\/p><\/dd>\n<dt id=\"how%20do%20i%20generate%20an%20invoice%3F\"><h3>How do I generate an invoice?<\/h3><\/dt>\n<dd><p>In <strong>IM Form \u2192 Leads CRM<\/strong>, click any client name to open the preview panel, then click <strong>\ud83e\uddfe Invoice PDF<\/strong>. The invoice opens in a new tab \u2014 click \"Print \/ Save PDF\" to save it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.43<\/h4>\n\n<ul>\n<li>Moved <code>assets\/im-logo.png<\/code> to a root-level <code>img\/<\/code> folder; the <code>assets<\/code> folder has been removed since it no longer held any content<\/li>\n<\/ul>\n\n<h4>1.0.42<\/h4>\n\n<ul>\n<li>Fixed \"Don't show again\" on the SMTP setup notice leading to a blank page \u2014 the dismiss link's admin-post action name (<code>imformlight_dismiss_smtp_notice<\/code>) didn't match the registered handler (<code>im_dismiss_smtp_notice<\/code>), a leftover from the prefix rename, so the request had nothing to fire and the notice never actually dismissed<\/li>\n<li>Restructured asset folders: <code>assets\/css<\/code> and <code>assets\/js<\/code> moved to root-level <code>css\/<\/code> and <code>js\/<\/code>; <code>assets\/img\/im-logo.png<\/code> moved directly into <code>assets\/<\/code><\/li>\n<\/ul>\n\n<h4>1.0.41<\/h4>\n\n<ul>\n<li>Removed the logo\/icon from the \"IM Form\" item in the WP admin toolbar \u2014 now shows text only<\/li>\n<\/ul>\n\n<h4>1.0.40<\/h4>\n\n<ul>\n<li>Added the same \"IM Form Light \/ Upgrade to Pro\" banner from the Docs page to the Dashboard page<\/li>\n<li>Other plugins' and themes' admin notices (SMTP nags, theme companion-plugin prompts, etc.) are now suppressed while viewing any of our own plugin pages, so the dashboard stays focused \u2014 our own license-change notice still shows when relevant<\/li>\n<\/ul>\n\n<h4>1.0.39<\/h4>\n\n<ul>\n<li>Fixed \"IM Form IM Form\" duplicated text in the WP admin toolbar (logo icon's alt text was rendering as visible fallback text next to the adjacent label \u2014 alt text is now empty since the icon is decorative)<\/li>\n<li>Fixed the custom menu icon CSS selector left pointing at the pre-rename \"im-dashboard\" DOM ID after the prefix rename, which had silently broken the sidebar icon<\/li>\n<li>Removed \"Free\" from the Docs page upgrade banner (\"You are using IM Form Free (Light)\" \u2192 \"You are using IM Form Light\")<\/li>\n<\/ul>\n\n<h4>1.0.38<\/h4>\n\n<ul>\n<li>WP.org compliance: renamed every short \"im_\"\/\"im-\" prefixed function, option, AJAX action, nonce, menu slug, script\/style handle, and JS global to the \"imformlight_\"\/\"imformlight-\" prefix (previous prefix was under the required 4-character minimum)<\/li>\n<li>WP.org compliance: removed \"Free\" from the plugin name (plugins on WordPress.org are inherently free)<\/li>\n<li>WP.org compliance: public booking-availability endpoint no longer returns raw payment\/booking-status strings \u2014 only a minimal \"paid\" boolean needed by the calendar UI<\/li>\n<li>WP.org compliance: that same endpoint's nonce check is now actually enforced (was passing a soft-fail flag that let it through even when missing\/invalid)<\/li>\n<li>WP.org compliance: added capability checks to admin-only AJAX endpoints that previously relied on the nonce alone (leads list, CSV export, calendar data, form entries)<\/li>\n<li>WP.org compliance: added missing phpcs:ignore justifications for the few remaining standalone-page inline  tags<\/li>\n<li>Added a one-time migration so existing installs keep their settings when upgrading from the old \"im_\" option names to the new \"imformlight_\" names<\/li>\n<\/ul>\n\n<h4>1.0.37<\/h4>\n\n<ul>\n<li>WP.org compliance: removed remote kill switch, remote automation fetch, and unauthenticated AJAX endpoint<\/li>\n<li>WP.org compliance: all features now work without a license key (license page is optional account linking)<\/li>\n<li>WP.org compliance: fixed phpcs:ignore placement for script\/style tags (must be on same line as violation)<\/li>\n<li>WP.org compliance: added wp_unslash() to REQUEST_URI usage in license.php<\/li>\n<li>WP.org compliance: added reasons to all phpcs:ignore comments<\/li>\n<li>WP.org compliance: replaced extract() with explicit variable assignments in public-form-page.php<\/li>\n<li>WP.org compliance: added phpcs:ignore reasons to all direct database queries<\/li>\n<li>Added built-in admin notification email on new booking (replaces removed automation system)<\/li>\n<li>Added uninstall.php for clean plugin removal<\/li>\n<li>Added load_plugin_textdomain() for i18n support<\/li>\n<li>Added Domain Path, Requires at least, and Tested up to to plugin header<\/li>\n<li>Documented Chart.js and IM PDF in Third Party Libraries section of readme.txt<\/li>\n<li>Fixed jsPDF library documentation (v4.2.1)<\/li>\n<li>Removed dead fpdf.php placeholder file<\/li>\n<li>Fixed \"Tested up to\" version (was incorrectly 7.0, corrected to 6.7)<\/li>\n<li>Multiple embedded form layout fixes (sidebar stacking, container queries, calendar popup)<\/li>\n<li>Time slot staggered animation on date selection<\/li>\n<li>Collapsible sidebar button moved to bottom<\/li>\n<\/ul>\n\n<h4>1.0.37<\/h4>\n\n<ul>\n<li>Fixed admin layout broken by overflow:hidden leaking from form-builder CSS into admin.css<\/li>\n<li>Fixed plugin icon rendering as oversized image in WP sidebar (now uses CSS background-image)<\/li>\n<li>Fixed header white gap \u2014 header now correctly positioned inside .wrap container<\/li>\n<li>Replaced plugin logo with custom branded icon<\/li>\n<li>Removed remote brand sync that was overwriting the plugin logo<\/li>\n<li>Bumped version to force cache-bust of all enqueued CSS\/JS assets<\/li>\n<\/ul>\n\n<h4>1.0.30<\/h4>\n\n<ul>\n<li>Removed all remaining custom CSS\/JS\/PHP injection features completely<\/li>\n<li>Extracted standalone preview page CSS to im-preview.css (static), minimal dynamic-only inline style remains<\/li>\n<li>Removed all custom_css (im_form_custom_css) references from plugin code<\/li>\n<li>All admin view inline styles migrated to admin.css via wp_add_inline_style<\/li>\n<li>All admin view inline scripts migrated via wp_add_inline_script \/ ob_start pattern<\/li>\n<li>All client-side booking form styles migrated via wp_add_inline_style<\/li>\n<li>All client-side booking form scripts migrated via wp_add_inline_script<\/li>\n<li>Updated jsPDF from 4.2.1 to 4.2.1<\/li>\n<li>Added complete External Services section to readme.txt<\/li>\n<\/ul>\n\n<h4>1.0.29<\/h4>\n\n<ul>\n<li>Removed arbitrary custom head\/footer code injection fields (WP.org guideline compliance) \u2014 use a dedicated tag manager plugin instead<\/li>\n<li>Updated bundled jsPDF library from 4.2.1 to 4.2.1<\/li>\n<li>Added External Services documentation to readme.txt disclosing all third-party API connections<\/li>\n<li>Moved all admin page inline  blocks to the enqueued admin.css stylesheet<\/li>\n<li>Converted all admin page inline  blocks to use wp_add_inline_script()<\/li>\n<li>Cleaned up legacy im_custom_head_code and im_custom_footer_code options on upgrade<\/li>\n<\/ul>\n\n<h4>1.6.21<\/h4>\n\n<ul>\n<li>Amount confirmed on booking now shown in Leads CRM payment column<\/li>\n<li>Currency pulled from site settings (no more hardcoded symbols)<\/li>\n<li>Revenue totals preserved on lead edit \u2014 updating payment status no longer zeros the amount<\/li>\n<li>Analytics: Revenue &amp; Paid Bookings chart (last 30 days)<\/li>\n<li>Invoice PDF page for every CRM lead<\/li>\n<\/ul>\n\n<h4>1.5.4<\/h4>\n\n<ul>\n<li>Booking confirmation email sent to customer after every successful booking<\/li>\n<li>Lead edit modal now pre-populates all fields including payment status and gateway<\/li>\n<li>Fixed payment status not saving on lead edit<\/li>\n<li>Total amount field added to lead edit modal<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Google Analytics enqueue compliance fix (WordPress Plugin Check)<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Integrations and Automations promo pages added to admin menu<\/li>\n<li>Pricing page link corrected<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Fixed fatal error: missing class closing brace in booking form (caused by sync_to_gcal removal)<\/li>\n<li>Fixed Segoe UI apostrophe parse error in email template<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Fixed plugin activation fatal (orphan closing brace)<\/li>\n<\/ul>\n\n<h4>1.4.9<\/h4>\n\n<ul>\n<li>Removed duplicate JS function in license page<\/li>\n<\/ul>\n\n<h4>1.4.8<\/h4>\n\n<ul>\n<li>Fixed unescaped apostrophe in booking confirmation email causing PHP fatal<\/li>\n<\/ul>\n\n<h4>1.4.7<\/h4>\n\n<ul>\n<li>Integrations and Automations admin tabs (upgrade promo pages)<\/li>\n<\/ul>\n\n<h4>1.4.6<\/h4>\n\n<ul>\n<li>Removed dead code: intercept_public_form_request, add_form_query_var, sync_to_gcal<\/li>\n<li>Removed debug comment exposing PayMongo internals<\/li>\n<\/ul>\n\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>Booking confirmation email to customer after successful booking<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Fixed form builder field properties panel freezing on second field click<\/li>\n<li>Added booking summary email on successful booking<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>Fixed field properties panel auto-populating on field switch in form builder<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>WordPress Plugin Check compliance: escaped outputs, wp_unslash, nonce comments<\/li>\n<li>Google Analytics loaded via wp_enqueue_script\/wp_add_inline_script<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Share page bottom padding fix (moved trust badges and footer outside body div)<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Fixed bottom padding on share page<\/li>\n<\/ul>\n\n<h4>1.3.9<\/h4>\n\n<ul>\n<li>Share page trust badge and footer spacing<\/li>\n<\/ul>\n\n<h4>1.3.8<\/h4>\n\n<ul>\n<li>Add-on card redesign: icon top-left, checkbox top-right, price bottom-right<\/li>\n<\/ul>\n\n<h4>1.3.7<\/h4>\n\n<ul>\n<li>Staff photos enlarged: 96px cards, 72px list, 44px dropdown<\/li>\n<\/ul>\n\n<h4>1.3.6<\/h4>\n\n<ul>\n<li>Homepage button on booking confirmation links to installed site domain<\/li>\n<li>HOME_URL JS variable from WordPress home_url()<\/li>\n<\/ul>\n\n<h4>1.3.5<\/h4>\n\n<ul>\n<li>Share page form centering fixed<\/li>\n<li>Tabs (imfv3-tabs) increased in size<\/li>\n<\/ul>\n\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>Share page sticky header and form centering<\/li>\n<li>filterAddons null error fix<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Fixed orphan brace causing PHP fatal (cascaded from addon block restructuring)<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Replaced color-mix() CSS with safe equivalents for server compatibility<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Share page redesigned: sticky header bar, clean card layout, proper CSS\/JS loading<\/li>\n<li>Staff and addon card borders: transparent by default, visible only on hover\/selected<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Staff and add-on fields now collapsed behind a trigger (\"Select a staff member...\")<\/li>\n<li>imfv3ToggleAsnPanel_ and imfv3ToggleAddonPanel_ functions added<\/li>\n<\/ul>\n\n<h4>1.2.9<\/h4>\n\n<ul>\n<li>Share page 500 error fixed (removed ob_start\/ob_get_clean complexity)<\/li>\n<li>Add-on card grid trigger added<\/li>\n<\/ul>\n\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Share page variable name fix ($business_name vs $biz_name)<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Share page double ob_start conflict fixed<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Fixed critical error from staff\/addon PHP block restructuring (services.php $services \u2192 $svcs)<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Staff and addon filtering by selected service<\/li>\n<li>Addon services assignment in admin (Show only for Services)<\/li>\n<li>Display style not reflecting fixed (display_style added to field save whitelist)<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Fixed display_style being stripped on form save (missing from field save whitelist)<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Staff display style option in form builder (Dropdown \/ Cards \/ List)<\/li>\n<li>Larger staff photo sizes across all display modes<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Plugin URI and Author URI must be different (WordPress Plugin Check)<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>External services disclosure in readme<\/li>\n<li>\"Powered by IntoMetrics\" on landing page gated behind non-Pro check<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Sale pricing: per-plan enable toggle, % or fixed discount<\/li>\n<li>Sale price shown on checkout and license page with strikethrough<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>phpcs:ignore inline on the same line as $data = (server-to-server AJAX)<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>WordPress Plugin Check compliance fixes: absint(), esc_html(), wp_unslash()<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Staff display style option in form builder<\/li>\n<li>Add-on card grid display<\/li>\n<li>Public share page redesign<\/li>\n<\/ul>\n\n<h4>1.0.28<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Complete booking forms, CRM, calendar, analytics, and automation workflows for WordPress service businesses.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/315303","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=315303"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/intometrics"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=315303"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=315303"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=315303"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=315303"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=315303"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=315303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}