Zimcon Booking System
Cleaning service booking wordpress plugin
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/nueloea/zimcon-booking/archive/refs/heads/main.zipReadme
=== Zimcon Booking System === Contributors: zimconltd Tags: booking, cleaning, estimator, appointment, scheduling Requires at least: 5.8 Tested up to: 6.7 Requires PHP: 7.4 Stable tag: 1.0.1 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html
Complete cost estimation and booking system for Zimcon cleaning services.
== Description ==
Zimcon Booking System provides a full-featured cost estimator and booking form for cleaning services. Customers can get instant quotes for residential, deep clean, end-of-tenancy, and commercial cleaning, then proceed to book directly from their quote.
Key Features:
- 5-Step Cost Estimator — Guided form for residential, deep clean, end-of-tenancy, and commercial cleaning with real-time price calculation.
- 4-Step Booking Form — Collects customer details, service address, preferred date/time, and payment confirmation.
- Server-Side Price Calculation — All prices calculated on the server using stored pricing data. Client-submitted prices are never trusted.
- Secure Token Flow — Quotes generate a time-limited token (2 hours) that links to the booking form. Tokens are single-use and cryptographically secure.
- Email Notifications — Admin notification and customer confirmation emails via Web3Forms, Resend, SendGrid, or WordPress wp_mail() with automatic fallback.
- Admin Dashboard — Stats overview with month-over-month comparison, recent activity feed, and popular services breakdown.
- Quotes & Bookings Management — Sortable, filterable list tables with bulk actions, search, and status tracking.
- Pricing Manager — Update all pricing from the admin panel with change history and audit logging.
- Settings Panel — Configure email providers, page assignments, API keys (encrypted storage), and debug mode.
- Elementor Integration — Drag-and-drop widgets for both the estimator and booking form.
- Shortcode Support —
[zimcon_estimator]and[zimcon_booking]shortcodes for use in any page or post. - Rate Limiting — Prevents abuse with configurable limits per action (quotes, bookings, AJAX).
- Audit Logging — All significant actions logged with user, IP, and timestamp.
- Debug Mode — Test data flagging, verbose logging, and rate limit bypass for development.
Security:
- Nonce verification on all forms and AJAX requests
- Prepared statements for all database queries
- Input sanitization and output escaping throughout
- AES-256-CBC encryption for stored API keys
- IP-based rate limiting with audit trail
- Price tampering detection with 1p tolerance
- Direct file access prevention on all PHP files
== Installation ==
- Upload the
zimcon-booking-systemfolder to/wp-content/plugins/. - Activate the plugin through the Plugins menu in WordPress.
- Go to Zimcon Booking in the admin sidebar to view the dashboard.
- Navigate to Settings > General to configure the estimator and booking page assignments.
- Create two pages and add the shortcodes
[zimcon_estimator]and[zimcon_booking], or use the Elementor widgets. - Navigate to Settings > Email to configure your email provider and API key.
- Optionally, add your API keys to
wp-config.phpfor maximum security:
define('ZIMCON_WEB3FORMS_KEY', 'your-api-key');
define('ZIMCON_RESEND_KEY', 'your-api-key');
define('ZIMCON_SENDGRID_KEY', 'your-api-key');
== Frequently Asked Questions ==
= What email providers are supported? =
Web3Forms (default), Resend, SendGrid, and WordPress wp_mail(). You can configure a fallback that activates automatically if the primary provider fails.
= Can I customise the pricing? =
Yes. Go to Zimcon Booking > Pricing to update hourly rates, fixed prices by property size, commercial rates, add-on prices, discounts, and surcharges. All changes are versioned with a pricing history.
= Is the estimator mobile-friendly? =
Yes. Both the estimator and booking form are fully responsive and tested on mobile devices.
= How does the token system work? =
When a customer completes a quote, a secure token is generated and stored server-side for 2 hours. The customer is redirected to the booking page with this token. The token is deleted after the booking is submitted, preventing reuse.
= Can I use this without Elementor? =
Yes. The plugin provides shortcodes [zimcon_estimator] and [zimcon_booking] that work in any theme. Elementor widgets are an optional convenience.
= How do I enable debug mode? =
Add define('ZIMCON_DEBUG_MODE', true); to your wp-config.php. This disables rate limiting and marks all submissions as test data. Remove or set to false before going live.
= What happens when I uninstall the plugin? =
All database tables, options, transients, and cron jobs are removed. Deactivating the plugin preserves all data — only deletion triggers cleanup.
== Changelog ==
= 1.0.1 =
- Fixed price discrepancy between estimator and booking pages when included add-ons were selected.
- Changed time slots from ranges to single whole hours (8:00 AM - 5:00 PM) with start-time label.
- Added server-side whitelist validation for time slot values.
- Improved responsive layout at 768px, 480px, and 360px breakpoints for both estimator and booking forms.
- Replaced text header in customer confirmation email with site logo.
= 1.0.0 =
- Initial release.
- 5-step cost estimator with 4 service types.
- 4-step booking form with token-based quote linking.
- Email system with 4 providers and automatic fallback.
- Admin dashboard with stats, activity feed, and service breakdown.
- Quotes and bookings list tables with filtering and bulk actions.
- Pricing manager with change history.
- Settings page with General, Email, and Advanced tabs.
- Elementor widgets for estimator and booking form.
- Shortcode support.
- Rate limiting, audit logging, and security hardening.
== Upgrade Notice ==
= 1.0.1 = Bug fixes: pricing consistency, whole-hour time slots, responsive improvements, email logo.
= 1.0.0 = Initial release.