White-label client project / custom WordPress engineering
Cabin Reservation & Member Management System
A custom reservation platform engineered around shared property ownership—not a generic booking form. It brings together cabin availability, allocation policies, member accounts, operational controls, and audit-ready reporting.
Architecture & Ownership Model
The system needed to treat a property lot—not an individual login—as the unit of booking entitlement. I modeled members, cabins, and reservations separately, then linked accounts through lot metadata.
- Lot-linked accounts: WordPress user metadata groups members sharing a lot; quota calculations retrieve all associated user IDs.
- Dedicated content records: Cabin, reservation, and issue Custom Post Types keep property content, booking metadata, and member discussions distinct.
- Custom member role & pages: Purpose-built owner role, property detail views, and account/reservation shortcodes integrate with the site.
- Flexible rendering: Plugin templates can be overridden from a theme; booking forms render on individual cabin pages.
Live Availability & Booking Workflow
A JavaScript datepicker handles immediate feedback while an independent PHP validator checks the booking again before it is saved.
- Cabin-specific date queries: AJAX retrieves active bookings and returns blocked dates and separate check-in/check-out restrictions.
- Arrival/departure edge cases: Date calculations account for checkout boundaries, same-day arrivals, and one-night or consecutive stays.
- Dependent date selection: Choosing check-in automatically sets the earliest valid checkout; unavailable dates are disabled.
- Conflict validation: Server-side date-range overlap checks block reservations already held for the selected cabin.
- Reservation creation: Asynchronous submission stores guest/contact fields, cabin, dates, classification, status, source, and usage snapshot, then triggers reporting and email events.
Figure 01 / Cabin booking form + availability calendar
Custom Booking Rules Engine
The most demanding part was translating property policies into reusable code rather than scattered form checks.
A dedicated PHP validation class runs a sequence of checks during booking and date changes. Calculations reference existing reservations, booking type, user group, property, and configured limits.
- Advance-booking window: Rejects arrival dates beyond an administrator-configured number of days.
- Annual night allowance: Sums existing regular-booking nights for the associated lot and compares them with the yearly cap.
- Weekday/weekend allocations: Iterates each night of a stay, categorizes Friday/Saturday as weekend, and checks the two allowances separately.
- Shared-lot enforcement: Prevents related member accounts from bypassing usage limits simply by booking under another login.
- Holiday rotation: Checks previous-year stays for the same lot and cabin when validating Thanksgiving or Christmas requests.
- Last-minute exception: Classifies near-arrival requests, applies a 24-hour / two-night policy, and exempts that type from ordinary annual and weekday/weekend quotas.
- Rebooking validation: Date changes rerun policy checks while excluding the reservation being edited from its own usage calculation.
- Blocked-request audit: Failed policy checks write the denial reason to the reporting audit table.
Figure 02 / Booking policy settings + remaining allowance display
Member Portal & Self-Service
The public WordPress interface was extended into a member application, so routine account and booking tasks could happen without access to wp-admin.
- Custom account flows: AJAX login, property-lot registration, duplicate-email checks, automatic sign-in, password recovery, and configurable landing redirects.
- Frontend account editing: Members can update profile details, lot number, email, and password using WordPress profile APIs.
- Interactive calendar: FullCalendar provides month/week/day views with dynamically fetched bookings, a reservation count, and a custom first-Monday display rule.
- Booking management: Reservation tables show cabin, dates, contact details, and booking type; eligible bookings expose edit/cancel controls until 24 hours before arrival.
- AJAX date-change modal: Loads cabin-specific unavailable dates, validates updated dates, and updates the booking record, reporting ledger, and email notification.
- Usage & history: Cabin pages show remaining weekday/weekend allowances while a dedicated report displays each member's historical reservations.
- Builder-aware routing: Login/dashboard redirects are skipped during WordPress admin, AJAX, REST, and Elementor editing/preview sessions.
Figure 03 / Member dashboard + reservation calendar or edit modal
Administrative Operations
WordPress was retained as the management layer, then extended with purpose-built reservation fields, searchable relationships, and operational workflows.
- Detailed booking editor: Custom metaboxes expose owner, cabin, date range, contacts, messages, type, status, creation source, and usage snapshot.
- Operational statuses: Confirmed, on-hold, completed, and cancelled states are available within reservation administration.
- Searchable reservation records: Custom list columns show cabin, status, and lot information; extended queries search lot numbers through user metadata.
- Field-level change history: Admin edits append the old/new value, timestamp, and acting username to a read-only record log.
- Administrator cancellation: A confirmation modal performs permission/nonce checks and triggers status changes, report updates, and cancellation email.
- Central rule configuration: Separate admin tabs manage booking caps, weekday/weekend limits, timezone, and login/signup/dashboard page assignments.
Reporting, Data & Audit Trail
I separated editable WordPress reservation records from structured reporting data, creating dedicated indexed MySQL ledger and audit tables on plugin activation.
- Two-layer storage: Reservation posts/metafields support WordPress administration; a ledger table supports structured historical queries.
- Lifecycle synchronization: New, edited, and cancelled reservations update ledger data; a separate audit table records status transitions and rule failures.
- Operational reports: Administrative reports paginate at 25 records and support direct ledger corrections, deletion, and stay-length recalculation.
- Scalable CSV output: Exports stream reservation records in 1,000-row database batches instead of assembling the entire export in memory.
- Member reporting queries: A frontend reservation-history shortcode and monthly aggregation query support usage visibility and future analysis.
Figure 04 / Reservation administration or reporting table
Notifications & Property Issues
- Four transactional emails: Booking confirmation, administrator notification, modification, and cancellation are connected to reservation events.
- Editable email templates: WordPress admin controls HTML email content, subject lines, and dynamic placeholders for member, cabin, contact, and stay details.
- Threaded cabin discussions: Logged-in members submit questions/issues asynchronously; parent-child posts support replies by the issue author or administrator.
- Consistent frontend feedback: Form overlays, loading states, AJAX toast alerts, and session-backed success/error notices communicate workflow results.
Implementation Foundations
Built as a modular WordPress plugin, with dedicated PHP classes for authentication, rule validation, reservation handling, reports, notifications, admin configuration, content types, and issue threads. WordPress hooks and shortcodes connect the services to the site; jQuery/AJAX and FullCalendar handle interactive frontend workflows.
The resulting build connects booking policy, shared ownership, member experience, administration, and reporting in one custom white-label plugin—without relying on a generic reservation product.
